2011-12-30 15 views
0

私はそれに貢献したコマンドとハンドラを持っています。ハンドラの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()への参照を取得する方法を見つけることができないということです)。

誰かがこれについての手掛かりを得ているのですか、または問題の他の可能なアプローチはありますか?

答えて

1

PropertySheetPage@noextendですが)あなたがビューアで選択の変更について通知されるようにオーバーライドすることができますPropertySheetPagehandleEntrySelection(ISelection selection)方法があります。

2番目の部分(ハンドラの更新)は、通常よりもやや難解です。コマンド/ハンドラは、ワークベンチの選択が変更されたときに自動的に更新されます(setEnabled(Object evaluationContext)AbstractHandlerを実装するだけです)。しかし、PropertySheetPageはグローバル選択の変更に対する入力を変更するように設計されているので、ハンドラに通知/更新するカスタム方法を見つけなければなりません。

私が理解しているように、プラットフォームコマンドイベント処理メカニズムをカスタム変数で拡張することは現在できません。したがって、ワークベンチのIHandlerServiceを使用してハンドラを直接検索する必要があります。

+0

私はコマンドハンドラとgetter/setterに専用の「選択」プロパティを追加しました。これは目的に応じてカスタムハンドラに通知/更新する方法です。私はIHandlerServiceでハンドラを調べる方法についての情報で答えを更新するのは興味深いと思いますが、この情報を追加する答えを編集できますか? – roirodriguez

+0

@roirodriguez先へ進む:) –

関連する問題