[英]How to implement IWindowCloseHandler in Eclipse (e4) RCP?
如何在关闭应用程序之前实现IWindowCloseHandler以显示MessageDialog ?
这是我的代码:
编辑
public class LifeCycle {
@PostContextCreate
public void postContextCreate()
{
// TODO start up code here
System.out.println("open");
}
@ProcessAdditions
void processAdditions(MApplication app, EModelService modelService)
{
WindowCloseHandler closeHandler=new WindowCloseHandler();
MWindow window = (MWindow)modelService.find("uploadcenter.source.trimmedwindow.0", app);
window.getContext().set(IWindowCloseHandler.class, closeHandler);
}
private static class WindowCloseHandler implements IWindowCloseHandler{
@Override
public boolean close(MWindow window) {
// TODO Auto-generated method stub
Shell shell = new Shell();
if (MessageDialog.openConfirm(shell, "Confirmation",
"Do you want to exit?")) {
return true;
}
return false;
}
}
}
伊斯梅尔
该IWindowCloseHandler
必须在Eclipse环境(注册IEclipseContext
的) MWindow
要控制。
MWindow window = get the window
window.getContext().set(IWindowCloseHandler.class, handler);
如果要在LifeCycle
类中进行设置, LifeCycle
要做一些工作,因为生命周期方法在应用程序启动时被调用太早,因此无法直接在上下文中设置该值。 有必要等待应用启动完成事件:
public class LifeCycle
{
@ProcessAdditions
public void processAdditions(IEventBroker eventBroker, MApplication app, EModelService modelService)
{
MWindow window =(MWindow)modelService.find("uploadcenter.source.trimmedwindow.0", app);
eventBroker.subscribe(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE,
new AppStartupCompleteEventHandler(window));
}
private static class AppStartupCompleteEventHandler implements EventHandler
{
private MWindow theWindow;
AppStartupCompleteEventHandler(MWindow window)
{
theWindow = window;
}
@Override
public void handleEvent(final Event event)
{
theWindow.getContext().set(IWindowCloseHandler.class, handler);
}
}
}
@ greg-449的答案的一种变体,它使用了依赖注入和注释。 在您的Application.e4xmi中将此类注册为插件。
public class ExampleWindowCloseAddon implements IWindowCloseHandler
{
@Inject
@Optional
public void startupComplete(@UIEventTopic(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE) MApplication application,
EModelService modelService)
{
MWindow window = (MWindow) modelService.find("my.window.id", application);
window.getContext().set(IWindowCloseHandler.class, this);
}
@Override
public boolean close(MWindow window)
{
// Your code goes here
return true;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.