Eclipse rcp 部件的捕获关闭事件(Eclipse e4 RCP)
我目前正在开发一个Eclipse4RCP应用程序,我有一个部件充当作业管理器,用户可以在其中查看所有活动作业及其进度,就像eclipse中的作业一样。现在的问题是,用户可以通过双击工具栏打开进度部分,他也可以随时关闭进度部分,但我不想处理该部分,而是想让它不可见。Eclipse rcp 部件的捕获关闭事件(Eclipse e4 RCP),eclipse-rcp,rcp,e4,Eclipse Rcp,Rcp,E4,我目前正在开发一个Eclipse4RCP应用程序,我有一个部件充当作业管理器,用户可以在其中查看所有活动作业及其进度,就像eclipse中的作业一样。现在的问题是,用户可以通过双击工具栏打开进度部分,他也可以随时关闭进度部分,但我不想处理该部分,而是想让它不可见。 起初我认为这不应该是一个问题,因为我可以将部件设置为不可见,但问题是如何捕获结束事件并按我的方式处理它。是否可以实现任何事件、接口或侦听器来捕获关闭事件并防止部件被处置?您可以实现CustomSaveHandler并用处理器替换默认的
起初我认为这不应该是一个问题,因为我可以将部件设置为不可见,但问题是如何捕获结束事件并按我的方式处理它。是否可以实现任何事件、接口或侦听器来捕获关闭事件并防止部件被处置?您可以实现CustomSaveHandler并用处理器替换默认的Eclipse保存处理程序。在这个SaveHandler中,您可以控制部件是否应该关闭。所以你不能关闭它,让它看不见 示例代码:
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
}
});
}
}
}
});
}
}
您必须为extensionpointorg.eclipse.e4.workbench.model定义一个扩展
使用您的替换saveHandlerProcessor。(您必须在此扩展中将窗口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;
}
public类CustomSaveHandler实现ISaveHandler{
@凌驾
公共布尔保存(MPart dirtyPart,布尔确认){
//TODO自动生成的方法存根
返回false;
}
@凌驾
公共布尔存储部件(集合dirtyParts、布尔确认){
//TODO自动生成的方法存根
返回false;
}
@凌驾
公共保存Promptosave(MPart dirtyPart){
//TODO自动生成的方法存根
返回null;
}
@凌驾
公共存储[]PrompToSave(集合目录部分){
//TODO自动生成的方法存根
返回null;
}
}您是在询问e4应用程序(使用application.e4xmi)还是3.x兼容模式RCP?是的,我是在询问使用application.e4xmi的e4应用程序…
EPartService.addPartListener
将告诉您关闭的情况,但我不知道如何停止关闭。