我目前正在开发eclipse e4 RCP应用程序,我有一个部分作为一个职位经理,用户可以看到所有活动的工作及其进展,就像在eclipse中一样。现在的问题是,用户可以通过双击工具栏来打开进度部分,他也应该能够随时关闭进度部分,而不是处理我想要的部分,只是让它不可见。 我一开始认为这不应该是一个问题,因为我可以将该部分设置为不可见,但问题是如何捕捉结束事件并按我的方式处理它。是否有任何事件,接口或监听器可以实现以捕获关闭事件并防止部件被丢弃?
答案 0 :(得分:2)
您可以实现CustomSaveHandler并将Default Eclipse Save Handler替换为Processor。在该SaveHandler中,您可以控制部件是否关闭。所以你不能把它关闭并让它看不见。
ExampleCode:
public class ReplaceSaveHandlerProcessor {
@Named("your.id.to.window")
@Inject
MWindow window;
@Inject
IEventBroker eventBroker;
@Execute
void installIntoContext() {
eventBroker.subscribe(UIEvents.Context.TOPIC_CONTEXT, new EventHandler() {
@Override
public void handleEvent(final Event event) {
if (UIEvents.isSET(event)) {
if (window.equals(event.getProperty("ChangedElement")) && (window.getContext() != null)) {
window.getContext().runAndTrack(new RunAndTrack() {
private final ISaveHandler saveHandler = new CustomSaveHandler();
@Override
public boolean changed(final IEclipseContext context) {
Object getSaveHandlerValue = context.get(ISaveHandler.class);
if (!saveHandler.equals(getSaveHandlerValue)) { // prevents endless loop
ContextInjectionFactory.inject(saveHandler, window.getContext());
context.set(ISaveHandler.class, saveHandler);
}
return true; // ture keeps tracking and the saveHandler as the only opportunity
}
});
}
}
}
});
}
}
您必须为ExtentionPoint org.eclipse.e4.workbench.model定义Extention 使用您的ReplaceSaveHandlerProcessor。 (您必须在此扩展中将窗口ID声明为"元素"。(添加屏幕截图:)
CustomSaveHandler必须实现ISaveHandler接口。在其方法中,ypu可以说该部分是否应该被关闭。
public class CustomSaveHandler implements ISaveHandler {
@Override
public boolean save(MPart dirtyPart, boolean confirm) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean saveParts(Collection<MPart> dirtyParts, boolean confirm) {
// TODO Auto-generated method stub
return false;
}
@Override
public Save promptToSave(MPart dirtyPart) {
// TODO Auto-generated method stub
return null;
}
@Override
public Save[] promptToSave(Collection<MPart> dirtyParts) {
// TODO Auto-generated method stub
return null;
}
}