启用/禁用Menuitem

时间:2012-07-20 15:10:19

标签: eclipse-plugin eclipse-rcp

我正在使用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>

1 个答案:

答案 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>