2014-03-03 38 views
1

我們遇到以下問題:關閉Eclipse RCP中的零件時的自定義消息4

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

所以我可以寫更多關於這個問題的文章,但我認爲這已經夠了。如果你需要更多的輸入信息,請給我一個提示。 感謝您的幫助。

回答

1

保存提示由在MWindow的上下文中註冊的ISaveHandler生成,其中包含MPart。您可以編寫自己的ISaveHandler並將其設置在窗口上下文中以替換默認值。

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

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,雖然這不是我們的要求:)。

+2

您可以使用事件代理訂閱生命週期類中的應用程序啓動完成事件UIEvents.UILifeCycle.APP_STARTUP_COMPLETE(如果有的話)。 –