1

次の問題があります。

私たちの Eclipse RCP 4 アプリケーションには複数のパーツがあり、パーツは閉じることができます。ユーザーが部品を閉じているとき、部品を本当に閉じたいかどうかをユーザーに尋ねるカスタム ポップアップ (一部の内部部品の状態に応じて) が必要です。Eclipse RCP 4 で実装するのはそれほど簡単ではないようです。または、何かを完全に監視しただけです。私たちが試したことについて簡単に説明します。

  • 部分で @persist メソッドを使用して、dirtable を使用します。問題はありますが、この標準の 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) {
    
        }
    });
    

これに関する問題は、連続ループに陥っていることです。似たような内容が最後のコメントに投稿されています: Eclipse エディターでタブを閉じることを検出する

ですから、この問題についてもう少し書くこともできますが、今のところはそれで十分だと思います。さらに入力が必要な場合は、ヒントを教えてください。助けてくれてありがとう。

4

2 に答える 2

2

保存プロンプトは、を含む のISaveHandlerコンテキストで登録されたによって生成されます。独自に作成し、ウィンドウ コンテキストに設定して、デフォルトを置き換えることができます。MWindowMPartISaveHandler

IWindowCloseHandlerまた、ウィンドウ コンテキストで参照することもできます。

于 2014-03-03T21:41:15.000 に答える
1

グレッグに感謝します。これは役に立ち、ユーザーがパーツを閉じたときにポップアップを変更することができました。これが私がやったことの簡単な説明です:

  • 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 は、完全なウィンドウが閉じられたときにのみ必要ですが、これは私たちの要件ではありませんでした:)。

于 2014-03-06T14:55:38.400 に答える