2017-08-23 6 views
0

私のe4アプリケーションには、複数の部品があります。これらの部品にはすべて、MDirtyableが含まれています。今私は保存のためにユーザーにプロンプ​​トを表示するときにカスタムダイアログを表示したい特定のものがあります。 MWindowコンテキストでカスタムハンドラを設定しようとしていましたが、興味のある部分だけでなく、すべてのアクティブな部分の動作が変わります。これを実現する方法はありますか?私は、部分のためのコンテキストを取得することについて何か考えて、その中のハンドラを変更しますが、それが可能かどうかわかりません。前もって感謝します。e4カスタムセーブハンドラダイアログボックス

更新:お返事ありがとうございます。これまでは、カスタムパーツを保存した後、デフォルトのハンドラに戻してみました。ここではいくつかのコードがあります:

//custom part 
@PostConstruct 
public void createComposite(Composite parent, MWindow window) { 

    this.windowContext = window.getContext(); //get current context 
    this.old = windowContext.get(ISaveHandler.class); //save current handler 
    windowContext.set(ISaveHandler.class, new CustomSaveHandler()); //set a custom handler 
} 

と保存がバックデフォルトのハンドラへの変更を行われ

@Persist 
public void save() { 
    dirty.setDirty(false); 
    windowContext.set(ISaveHandler.class, old); //switch to old handler 
} 

だから、これは私がカスタムパーツを開いたとき、それにはいくつかの変更を加えた後、近くに正常に動作します。しかし、複数のパーツが開いている場合は、カスタムパーツを閉じるまで、それらはすべてカスタムハンドラを継承します。 他のアイデアはありますか?

答えて

0

いいえ、セーブハンドラはMWindowコンテキストで参照されるため、1つの部分だけにセーブハンドラを設定することはできません。

他の部分の保存ハンドラで標準動作を再現する必要があります。

+0

私は正しく理解している場合は、すべての部品に対して、一度に1つのセーブハンドラしか使用できません。保存が完了した後、カスタムパーツ内のデフォルトのハンドラに戻す方法はありますか? –

+0

MWindow IEclipseContextのISaveHandler.classエントリをnullに設定してみることもできます。 –

+0

あなたの答え、gregに感謝します。私は私のポストを更新しました –

関連する問題