1

我们有以下问题:

在我们的 Eclipse RCP 4 应用程序中,有多个部分并且这些部分是可关闭的。当用户关闭零件时,应该有一个自定义弹出窗口(取决于某些内部零件状态),询问用户他是否真的要关闭零件。在 Eclipse RCP 4 中实现似乎并不容易,或者我们刚刚完全监督了一些事情。我将简要介绍一下我们尝试过的事情:

  • 在部件中使用带有@persist 方法的可脏。虽然问题是,我们不想要这个标准的 eclipse 保存对话框。那么有没有办法覆盖它?
  • public int promptToSaveOnClose():这似乎很有希望,但不适用于 Eclipse 4,或者有没有办法以这种方式集成它?比较:http ://e-rcp.blogspot.de/2007/09/prevent-that-rcp-editor-is-closed.html
  • 我们最后一次尝试是集成一个自定义部件监听器,简单示例如下所示:

    partService.addPartListener(new IPartListener() {           
       public void partVisible(MPart part) {                
       }
    
        public void partHidden(MPart part) {
            partService.showPart(part, PartState.ACTIVATE);
        }
    
        public void partDeactivated(MPart part) {
    
        }
    
        public void partBroughtToTop(MPart part) {
    
        }
    
        public void partActivated(MPart part) {
    
        }
    });
    

问题是我们正在进入一个连续的循环。在最后一条评论中发布了类似的内容:Detect tab close in Eclipse editor

所以我可以写更多关于这个问题的内容,但我认为目前就足够了。如果您需要更多输入,请给我一个提示。感谢您的帮助。

4

2 回答 2

2

保存提示是由ISaveHandlerMWindow包含MPart. 您可以编写自己的ISaveHandler并将其设置在窗口上下文中以替换默认值。

您可能还想IWindowCloseHandler在窗口上下文中查看。

于 2014-03-03T21:41:15.000 回答
1

谢谢greg,这有帮助,我能够在用户关闭零件时更改弹出窗口。以下是我所做工作的简短描述:

  • 在需要时使用 MDirtyable 将部件标记为脏。
  • 创建一个实现 ISaveHandler 的自定义保存处理程序(当一个部分关闭时调用保存方法)。将附加逻辑添加到此处理程序(例如自定义消息对话框)
  • 在应用程序启动时注册这个处理程序(我只是选择了一个在启动时调用的方法):

     @Inject
     private MWindow window;
     ...
     ISaveHandler saveHandler = new CustomSaveHandler(shell);
     window.getContext().set(ISaveHandler.class, saveHandler);
    

请注意,遗憾的是,通过模型处理器进行注册并不那么容易,因为模型处理器被调用得太早了。(看看: http: //www.eclipse.org/forums/index.php/t/369989/

IWindowCloseHandler 仅在关闭整个窗口时才需要,尽管这不是我们的要求:)。

于 2014-03-06T14:55:38.400 回答