在 Eclipse 中将对象贡献转换为菜单贡献
Converting object contribution to menu contribution in eclipse
我有一个使用 org.eclipse.ui.popupMenus 编写的上下文菜单。由于现在已弃用,因此我想使用 org.eclipse.ui.menus 来实现同样的效果。
早期的实现看起来像这样
<extension
point="org.eclipse.ui.popupMenus">
<objectContribution
adaptable="true"
id="com.xyz.plm.analysis.func.gui.popupOnComponentForCA"
objectClass="com.xyz.plm.componentmodel.IComponent">
<action
class="com.xyz.plm.analysis.my.gui.MyAction"
enablesFor="1"
id="com.xyz.plm.analysis.my.gui.MyActionion2"
label="Run My Action"
menubarPath="com.xyz.plm.ide.ui.myToolsPopupMenu/myToolsGroup"
tooltip="Run My Action">
</action>
目前我试过的如下
<extension
point="org.eclipse.ui.commands">
<command
id="com.xyz.plm.analysis.my.commandmygui"
name="Run My Action">
</command>
</extension>
<extension
point="org.eclipse.ui.handlers">
<handler
class="com.xyz.plm.analysis.my.gui.MyAnalysisGui"
commandId="com.xyz.plm.analysis.my.commandmygui">
<enabledWhen>
<with
variable="selection">
<iterate
ifEmpty="false"
operator="or">
<instanceof
value="com.xyz.plm.componentmodel.IComponent">
</instanceof>
</iterate>
</with>
</enabledWhen>
</handler>
</extension>
<extension
point="org.eclipse.ui.menus">
<menuContribution
locationURI="popup:com.xyz.plm.ide.ui.myToolsPopupMenu">
<command
commandId="com.xyz.plm.analysis.my.commandmygui"
label="RunMyACtion"
style="push">
</command>
</menuContribution>
</extension>
但是我在 MyTools 上下文菜单下看到了 MyAction 子菜单。但是 MyAction 被禁用。此外,当我右键单击 select MyTools.
时,我还看到 MyACtion 出现在 projectExplorer window 以及编辑器中
我想要的是 MyAction 子菜单应该只出现在 MyTools 弹出菜单下,并且只有当我右键单击 IComponent 类型的对象时才会出现此菜单。
您应该在菜单贡献上使用 visibleWhen
,而不要在处理程序上使用 enabledWhen
。您可能应该使用 adapt
而不是 instanceof
.
所以像这样:
<extension
point="org.eclipse.ui.handlers">
<handler
class="com.xyz.plm.analysis.my.gui.MyAnalysisGui"
commandId="com.xyz.plm.analysis.my.commandmygui">
</handler>
</extension>
<extension
point="org.eclipse.ui.menus">
<menuContribution
locationURI="popup:com.xyz.plm.ide.ui.myToolsPopupMenu">
<command
commandId="com.xyz.plm.analysis.my.commandmygui"
label="RunMyACtion"
style="push">
<visibleWhen>
<with
variable="selection">
<iterate
ifEmpty="false"
operator="or">
<adapt
value="com.xyz.plm.componentmodel.IComponent">
</adapt>
</iterate>
</with>
</visibleWhen>
</command>
</menuContribution>
</extension>
等价是测试activeMenuSelection
和activeMenuEditorInput
,右键时设置,检查等价条件。这些值是可迭代的,因此您需要迭代它们才能执行测试。参见 the example on the Eclipse Wiki。
我有一个使用 org.eclipse.ui.popupMenus 编写的上下文菜单。由于现在已弃用,因此我想使用 org.eclipse.ui.menus 来实现同样的效果。
早期的实现看起来像这样
<extension
point="org.eclipse.ui.popupMenus">
<objectContribution
adaptable="true"
id="com.xyz.plm.analysis.func.gui.popupOnComponentForCA"
objectClass="com.xyz.plm.componentmodel.IComponent">
<action
class="com.xyz.plm.analysis.my.gui.MyAction"
enablesFor="1"
id="com.xyz.plm.analysis.my.gui.MyActionion2"
label="Run My Action"
menubarPath="com.xyz.plm.ide.ui.myToolsPopupMenu/myToolsGroup"
tooltip="Run My Action">
</action>
目前我试过的如下
<extension
point="org.eclipse.ui.commands">
<command
id="com.xyz.plm.analysis.my.commandmygui"
name="Run My Action">
</command>
</extension>
<extension
point="org.eclipse.ui.handlers">
<handler
class="com.xyz.plm.analysis.my.gui.MyAnalysisGui"
commandId="com.xyz.plm.analysis.my.commandmygui">
<enabledWhen>
<with
variable="selection">
<iterate
ifEmpty="false"
operator="or">
<instanceof
value="com.xyz.plm.componentmodel.IComponent">
</instanceof>
</iterate>
</with>
</enabledWhen>
</handler>
</extension>
<extension
point="org.eclipse.ui.menus">
<menuContribution
locationURI="popup:com.xyz.plm.ide.ui.myToolsPopupMenu">
<command
commandId="com.xyz.plm.analysis.my.commandmygui"
label="RunMyACtion"
style="push">
</command>
</menuContribution>
</extension>
但是我在 MyTools 上下文菜单下看到了 MyAction 子菜单。但是 MyAction 被禁用。此外,当我右键单击 select MyTools.
时,我还看到 MyACtion 出现在 projectExplorer window 以及编辑器中我想要的是 MyAction 子菜单应该只出现在 MyTools 弹出菜单下,并且只有当我右键单击 IComponent 类型的对象时才会出现此菜单。
您应该在菜单贡献上使用 visibleWhen
,而不要在处理程序上使用 enabledWhen
。您可能应该使用 adapt
而不是 instanceof
.
所以像这样:
<extension
point="org.eclipse.ui.handlers">
<handler
class="com.xyz.plm.analysis.my.gui.MyAnalysisGui"
commandId="com.xyz.plm.analysis.my.commandmygui">
</handler>
</extension>
<extension
point="org.eclipse.ui.menus">
<menuContribution
locationURI="popup:com.xyz.plm.ide.ui.myToolsPopupMenu">
<command
commandId="com.xyz.plm.analysis.my.commandmygui"
label="RunMyACtion"
style="push">
<visibleWhen>
<with
variable="selection">
<iterate
ifEmpty="false"
operator="or">
<adapt
value="com.xyz.plm.componentmodel.IComponent">
</adapt>
</iterate>
</with>
</visibleWhen>
</command>
</menuContribution>
</extension>
等价是测试activeMenuSelection
和activeMenuEditorInput
,右键时设置,检查等价条件。这些值是可迭代的,因此您需要迭代它们才能执行测试。参见 the example on the Eclipse Wiki。