Eclipse RCP:具有对象依赖状态的弹出菜单切换命令

时间:2016-04-13 15:43:33

标签: java eclipse eclipse-plugin eclipse-rcp

我想要一个上下文菜单(右键单击),允许切换单击对象的不同状态。

在plugin.xml中,我已经有一个带有命令条目的弹出菜单,例如:

<command
   commandId="...switchDistanceCommand"
   label="30s"
   style="toggle">
      <parameter
         name="...switchDistanceMillis"
         value="30000">
      </parameter>
</command>

和命令:

<extension
        point="org.eclipse.ui.commands">
     <command
           id="....switchDistanceCommand"
           name="Switch Distance">
           <commandParameter
                 id="....switchDistanceMillis"
                 name="Seconds"
                 optional="false">
           </commandParameter>
     </command>
</extension>

处理程序:

<handler
       class="....SwitchDistanceHandler"
       commandId="....switchDistanceCommand">
</handler>

处理程序类SwitchDistanceHandler检查选择了哪些对象,调用它们上的方法来切换它们的状态(将参数化值添加或删除到List)。

到目前为止一直很好......

但是,我希望我的菜单条目可以作为复选框(如style="toggle")所示。关于此问题的每个教程(例如this one)都解释了如何通过将以下代码添加到plugin.xml来向命令添加状态:

<state 
     class="org.eclipse.ui.handlers.RegistryToggleState:true" 
     id="org.eclipse.ui.commands.toggleState"> 
</state>   

但这只会给我这个命令的一个全局状态,我想从被点击的对象中读取状态?我怎样才能做到这一点?

编辑1:复制从教程中剪切的错误代码。我还试图实现一个扩展State类的自己的类(如RegistryToggleState所做的那样)。但我无法弄清楚如何从这个班级返回一个州。

编辑2:我找到了解决方法。它没有解决提出的问题,但它适用于我。

1 个答案:

答案 0 :(得分:0)

解决方法

这不是完全问题的解决方案,因为它不使用任何状态对象。但它对我来说很好: 根据{{​​3}}的建议,我在我的处理程序中实现了IElementUpdater。 在updateElement方法中,我从element对象中获取了所选元素,并相应地调用了element.setChecked()