我正在使用target-platform 3.7编写RCP应用程序。 我喜欢仅在特定视图处于活动状态时启用menuItem,否则应禁用它。 我通过下面的plugin.xml中显示的表达式尝试它,但menuItem始终处于活动状态。
<extension
point="org.eclipse.ui.commands">
<command
defaultHandler="pgui.handler.SaveHandler"
id="pgui.rcp.command.save"
name="Save">
</command>
</extension>
<extension
point="org.eclipse.ui.views">
<view
allowMultiple="true"
class="pgui.view.LogView"
id="pgui.view.LogView"
name="logview"
restorable="true">
</view>
</extension>
<extension
point="org.eclipse.ui.menus">
<menuContribution
allPopups="false"
locationURI="menu:org.eclipse.ui.main.menu">
<menu
id="fileMenu"
label="File">
<command
commandId="pgui.rcp.command.save"
label="Save"
style="push"
tooltip="Save the active log file.">
</command>
</menu>
</menuContribution>
</extension>
<extension
point="org.eclipse.ui.handlers">
<handler
commandId="pgui.rcp.command.save">
<activeWhen>
<with
variable="activePart">
<instanceof
value="pgui.view.LogView">
</instanceof>
</with>
</activeWhen>
</handler>
</extension>
答案 0 :(得分:3)
首先,从命令中删除 defaultHandler 。
接下来,将处理程序类添加到处理程序扩展点。
基本上,该机制允许您为同一命令定义多个处理程序,使用不同的 activeWhen 表达式使命令在不同情况下由不同的处理程序类处理。
如果命令的所有已定义处理程序上的所有 activeWhen 表达式都计算为false,并且为命令本身定义了 defaultHandler < / em>,然后该默认处理程序将用于该命令。该命令基本上始终处于活动状态,因为总是有一个默认的处理程序来处理它。
例如,如果您同时拥有现有的LogView和另一个充满独角兽的视图,并且您希望使用相同的 pgui.rcp.command.save 命令来处理从中保存的项目要么查看:
<extension point="org.eclipse.ui.commands">
<command
id="pgui.rcp.command.save"
name="Save">
</command>
</extension>
:
<extension point="org.eclipse.ui.handlers">
<handler
class="pgui.handler.SaveLogHandler"
commandId="pgui.rcp.command.save">
<activeWhen>
<with variable="activePart">
<instanceof value="pgui.view.LogView">
</instanceof>
</with>
</activeWhen>
</handler>
</extension>
:
<extension point="org.eclipse.ui.handlers">
<handler
class="pgui.handler.SaveUnicornHandler"
commandId="pgui.rcp.command.save">
<activeWhen>
<with variable="activePart">
<instanceof value="pgui.view.UnicornView">
</instanceof>
</with>
</activeWhen>
</handler>
</extension>