私はそれに貢献したコマンドとハンドラを持っています。ハンドラのexecuteイベントは、プロパティビューで実際に選択されたプロパティの値を取得し、それに基づいて処理する必要があります。プロパティが選択されていない場合は無効にする必要があります。プロパティシートを選択プロバイダーにするにはどうすればいいですか?
私が試してみた:
1)プロパティビューから選択を提供して何かに選択プロバイダを設定します。この場合は、PropertySheetPageのPropertySheetViewerだけですが、PropertySheetPageのビューアがプライベートでgetterがないため、選択プロバイダとして設定できません。
2)PropertySheetPageのcreateControlメソッドをオーバーライドする:このメソッドは、PropertySheetViewerのTreeコントロールを作成します。私のエディタで
:
public Object getAdapter(@SuppressWarnings("rawtypes") Class type) {
if (type == IPropertySheetPage.class) {
PropertySheetPage page = new PropertySheetPage() {
@Override
public void createControl(Composite parent) {
super.createControl(parent);
IHandler handler = someWayToGetMyCmdHandler();
((org.eclipse.swt.widgets.Tree) getControl())
.addSelectionListener(handler);
}
};
IPropertySheetEntry entry = new UndoablePropertySheetEntry(
getCommandStack());
page.setRootEntry(entry);
return page;
}
return super.getAdapter(type);
}
そして、私のコマンドハンドラ選択リスナーは、たぶん私は私のコマンドハンドラがSelectionListenerを実装することができます...解決策は同様のsomethinになるので、そのツリーコントロールのためにインストールすることができます私が言ったようにSelectionListenerを実装しています...このアプローチの問題は、私が貢献したコマンドハンドラ(上記のsomeWayToGetMyCmdHandler()への参照を取得する方法を見つけることができないということです)。
誰かがこれについての手掛かりを得ているのですか、または問題の他の可能なアプローチはありますか?
私はコマンドハンドラとgetter/setterに専用の「選択」プロパティを追加しました。これは目的に応じてカスタムハンドラに通知/更新する方法です。私はIHandlerServiceでハンドラを調べる方法についての情報で答えを更新するのは興味深いと思いますが、この情報を追加する答えを編集できますか? – roirodriguez
@roirodriguez先へ進む:) –