0

複数の からなるパースペクティブを持っていますViewPart。これらの の 1 つには、 withViewPartを使用して割り当てられたコマンドがあります。menuContributionlocationURI="toolbar:..."

ViewPartToolbar-Command には、1 つの子 (a TreeView)のみが含まれthis.getSite().setSelectionProvider(child)、その-MethodcreatePartControl(Composite)で実行されます。

問題は、パースペクティブで他の s の 1 つをクリックするとViewPart、コマンドが無効になるのに、コンポーネントで選択が抵抗することTreeViewです。-Variable が別の ViewPart で抵抗するものを指しているenabledWhenため、 -Condition はもう有効ではないと思います。selection

TreeViewこれは、有効な行が選択されたときにツールバー ボタンをアクティブにする必要があるため、気が散ってしまいます。

ViewPartグローバル選択ではなく、ツールバーの抵抗の選択のみをチェックする必要があることを Core Expression に伝えるにはどうすればよいですか?

ここに画像の説明を入力

4

1 に答える 1

0

私も同様の問題を抱えていましたが、最終的には独自のプロパティ テスターを実装することになりました。selection事前定義された変数は常にグローバル選択を指すため、これがおそらく最も簡単な方法です。

大まかに、以下の手順に従う必要があります。

  1. org.eclipse.core.expressionsプラグインを依存関係に追加します。

  2. org.eclipse.core.expressions.propertyTesters拡張ポイントの拡張を定義します。これは次のようになります (ドキュメント リンク)。

    <extension
         point="org.eclipse.core.expressions.propertyTesters">
      <propertyTester
            class="your.package.TreeItemSelectionPropertyTester"
            id="your.package.treeItemSelectionPropertyTester"
            namespace="your.namespace"
            properties="itemSelected"
            type="java.lang.Object">
      </propertyTester>
    </extension>
    
  3. PropertyTester コードを実装します。上記のドキュメントにあるように、クラスはパブリックであり、クラスを拡張する必要がありますorg.eclipse.core.expressions.PropertyTester

    public class CodeSelectionPropertyTester extends PropertyTester {
        @Override
        public boolean test(Object receiver, String property,
                Object[] args, Object expectedValue) {
            if (property.equals("itemSelected")) {
                // write your own code to test
                // whether there is a valid selection...
            }
    
            // ...
        }
    }
    
  4. 実装されたプロパティ テスターを enabledWhen 句で使用します。

     <enabledWhen>
        <test
              property="your.namespace.itemSelected">
        </test>
     </enabledWhen>
    
于 2013-08-21T00:11:53.497 に答える