如何在多个条件下激活Eclipse UI处理程序

时间:2019-06-14 05:44:13

标签: java eclipse handler

我正在尝试使用扩展点中的“处理程序”来激活复制命令以应对多种情况。如果我添加该条件以使其适用于单个视图,则它可以正常工作。

 <extension
         point="org.eclipse.ui.handlers">
      <handler class="example.xyz.CopyHandler"
            commandId="org.eclipse.ui.edit.copy">
         <activeWhen
           <with
               variable="activePartId">
        </with>
           <equals
          value="example.xyz.view1">
           </equals>
        </with> 
     </activeWhen>
  </handler>
   </extension>

但是当我在多种条件下使用时..
 条件:

  • 当“ view1”或“ view2”处于活动状态时,它应该打开。
  • 并且选择的内容应正好为1,选择的实例应为example.xyz.ICharacteristicValue。

我尝试了使用此代码段,但它不起作用。 这段代码有什么问题?

 <extension
             point="org.eclipse.ui.handlers">
    <handler
            class="example.xyz.CopyHandler"
            commandId="org.eclipse.ui.edit.copy">
         <activeWhen>
                 <with
                     variable="activePartId">
                 <iterate
                       operator="or">
                    <equals
                 value="example.xyz.view1">
                    </equals>
                    <equals
                          value="example.xyz.view2">
                    </equals>
                 </iterate>
               </with>
               <with
                     variable="selection">
                  <count
                        value="1">
                  </count>
                  <iterate>
                     <instanceof
                           value="example.xyz.ICharacteristicValue">
                     </instanceof></iterate>
               </with> 
       </activeWhen>
</handler>
 </extension>

1 个答案:

答案 0 :(得分:1)

<activeWhen仅接受一个子元素-您有两个。您需要将它们与<and>组合:

<activeWhen>
   <and>
      <with
         variable="activePartId">
       .....
      </with>
      <with
         variable="selection">
       .....
      </with>
  </and>
</activeWhen>