私の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
}
だから、これは私がカスタムパーツを開いたとき、それにはいくつかの変更を加えた後、近くに正常に動作します。しかし、複数のパーツが開いている場合は、カスタムパーツを閉じるまで、それらはすべてカスタムハンドラを継承します。 他のアイデアはありますか?
私は正しく理解している場合は、すべての部品に対して、一度に1つのセーブハンドラしか使用できません。保存が完了した後、カスタムパーツ内のデフォルトのハンドラに戻す方法はありますか? –
MWindow IEclipseContextのISaveHandler.classエントリをnullに設定してみることもできます。 –
あなたの答え、gregに感謝します。私は私のポストを更新しました –