我想要一个上下文菜单(右键单击),允许切换单击对象的不同状态。
在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:我找到了解决方法。它没有解决提出的问题,但它适用于我。
答案 0 :(得分:0)
这不是完全问题的解决方案,因为它不使用任何状态对象。但它对我来说很好:
根据{{3}}的建议,我在我的处理程序中实现了IElementUpdater
。
在updateElement
方法中,我从element
对象中获取了所选元素,并相应地调用了element.setChecked()
。