4

私の Eclipse RCP 3.3 アプリケーションでは、現在のエディターのダーティ フラグに従って、「保存」ツールバー ボタンを有効または無効にしたいと考えています。

< enabledWhen > タグを使用しようとしていますが、機能しません。

plugin.xml のコードの一部は次のとおりです。

<command
 commandId="org.acme.command.save"
 icon="icons/save.png"
 id="org.acme.command.save"
 style="push">
 <enabledWhen>
    <instanceof value="activeEditor"/>
     <test property="dirty" value="true"/>
 </enabledWhen>
</command>

それがどのように機能するのか考えていますか?

4

5 に答える 5

4

私の優秀な同僚が、Eclipseの答えを見つけました> = 3.3:

plugin.xmlでコマンドを定義する方法は次のとおりです。

  <command
        commandId="com.acme.bo.command.done"
        id="com.acme.bo.menu.done"
        label="Command to do">
     <visibleWhen>
        <with variable="activeMenuSelection">
           <iterate>
              <adapt type="com.acme.bo.model.Pojo"></adapt>
              <test
                    args="valueThatYouWantToPassTest"
                    property="com.acme.namespace.testedProperty"
                    value="something">
              </test>
           </iterate>
        </with>
     </visibleWhen>
  </command>

次に、再びplugin.xmlでpropertyTesterを定義する必要があります。

 <extension
       point="org.eclipse.core.expressions.propertyTesters">
    <propertyTester
          class="com.acme.namespace.tester.YourPropertyTester"
          id="com.acme.namespace.tester.testedPropertyTester"
          namespace="com.acme.namespace"
          properties="testedProperty"
          type="com.acme.bo.model.Pojo">
    </propertyTester>
 </extension>

そして、これがテストを行うYourPropertyTesterクラスです:

package com.acme.namespace.tester;

import org.eclipse.core.expressions.PropertyTester;

import com.acme.bo.model.Pojo;

public class YourPropertyTester extends PropertyTester {

   @Override
   public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
      if (receiver == null || !(receiver instanceof Pojo))
         return false;

      Pojo pojo = (Pojo) receiver;
      if (args != null) {
         for (Object object : args) {
            if (pojo.getYourProperty().contains((String)object))
               return true;
         }
      }
      return false;
   }
}
于 2009-05-12T11:15:27.667 に答える
0

プロパティ テスターのアクティブ化で問題が発生した場合は、プロパティ テスターの実装が、org.eclipse.core.expressions.propertyTesters拡張ポイントに寄与するプラグインと同じプラグインに配置されている必要があることに注意してください。

于 2010-05-30T08:39:07.107 に答える
0

これを試して:

org.eclipse.core.variables.dynamicVariables
-(variable) [here you should implement resolver class to return active editor]

org.eclipse.core.expressions.definitions
-(definition)
--(with) [reference here your variable]
---(test) [test if dirty]

org.eclipse.ui.commands !mistake: not commands, but handlers
-(handler)
--(enabledWhen)
---(reference) [reference your definition here]

**(updated)**
org.eclipse.core.properties.propertyTesters
-(propertyTester)

うまくいくかどうかはわかりませんが、可能性はあります...

于 2009-03-23T20:05:21.740 に答える
0

完全に宣言型にできるかどうかはわかりません。

saveAction = ActionFactory.SAVE.create(PlatformUI.getWorkbench().getActiveWorkbenchWindow());
configurer.registerGlobalAction(saveAction);

次のスレッドが役立つかどうかを確認できますか?
保存アクションの場合は、リターゲット可能アクションの場合があります。

于 2009-03-16T15:49:34.893 に答える