关闭Eclipse RCP 4中的部件时的自定义消息

时间:2014-03-03 20:39:09

标签: java eclipse-rcp e4

我们有以下问题:

在我们的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

所以我可以写一些关于这个问题的更多内容,但我认为现在已经足够了。如果您需要更多输入,请给我一个提示。 谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

保存提示是由ISaveHandler在包含MWindow的上下文中注册的MPart生成的。您可以编写自己的ISaveHandler并在窗口上下文中设置它以替换默认值。

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

答案 1 :(得分:1)

感谢greg,这有所帮助,当用户关闭部件时,我能够实现更改弹出窗口。这是我所做的简短描述:

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

     @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,但这不是我们的要求:)。