【问题标题】:Eclipse RCP: how to create a popup menu for the selection in a text editor?Eclipse RCP:如何在文本编辑器中为选择创建弹出菜单?
【发布时间】:2015-04-23 16:44:57
【问题描述】:

我使用 Eclipse 模板生成了这个示例,当我在项目资源管理器中选择一个文件时,它可以正常工作。但是,当我右键单击文本编辑器或什至选择了一些文本时,我也希望它可用。

objectContribution 中使用正确的 objectClass 是什么?

<extension point="org.eclipse.ui.popupMenus">
  <objectContribution
                      id="com.example.popup-cli.contribution1"
                      objectClass="org.eclipse.core.resources.IFile">
    <menu
          id="com.example.popup.menu1"
          label="New Submenu"
          path="additions">
      <separator
                 name="group1">
      </separator>
    </menu>
    <action
            class="com.example.popup.actions.NewAction"
            enablesFor="1"
            id="com.example.popup.newAction"
            label="New Action"
            menubarPath="com.example.popup.menu1/group1">
    </action>
  </objectContribution>
</extension>

【问题讨论】:

  • 'org.eclipse.ui.popupMenus' 已弃用,'org.eclipse.ui.menus' 应该用于新代码。
  • @greg-449 好的,我将改用“org.eclipse.ui.menus”。我只是不明白,如果它已被弃用,为什么它在 Eclipse Luna SDK 的模板列表中可用?无论如何,我想我必须使用适应标签来定义上下文菜单应该在哪个选择中可用,但是要用于文本编辑器选择的对象类型是什么?
  • 'org.eclipse.ui.menus' 以不同的方式工作并且不使用对象类型。取而代之的是菜单 ID - 请参阅帮助。
  • @greg-449 根据文档,它也使用了与标签 类似的方法。但我不知道应该使用哪种类型来启用文本编辑器中选择的上下文菜单。

标签: eclipse eclipse-plugin eclipse-rcp


【解决方案1】:

使用org.eclipse.ui.menus 扩展点,您可以使用activeEditorInput 变量来测试当前编辑器输入(正在编辑的文件)。

例如:

<extension point="org.eclipse.ui.menus">
  <menuContribution
     locationURI="popup:#AbstractTextEditorRulerContext?after=QuickDiff.Toggle">
     <command
        commandId="org.eclipse.team.cvs.ui.showAnnotation"
        label="%ShowAnnotationAction.label"
        style="push">
        <visibleWhen
           checkEnabled="false">
           <with variable="activeEditorInput">
              <test
                 property="org.eclipse.team.internal.ccvs.ui.isManaged"
                 value="true">
              </test>
           </with>
        </visibleWhen>
     </command>
  </menuContribution>
</extension>

以上来自CVS插件

【讨论】:

    【解决方案2】:

    我不确定这是否是理想的解决方案,但它确实有效,当我在 Project Explorer 中按右键单击资源时,它会显示弹出菜单编辑器(如果它与 Project Explorer 中的资源相关联)。

    这并不完美,因为它仍在非文本编辑器编辑器/视图中显示,但我可以忽略这些情况下的操作。如果有人有一些改进建议,请发表评论。

    <extension point="org.eclipse.core.expressions.definitions">
        <definition id="com.example.definitions.resourceDefinition">
           <adapt type="org.eclipse.core.resources.IResource"/>
        </definition>
    </extension>
    <extension point="org.eclipse.ui.menus">
        <menuContribution locationURI="popup:org.eclipse.ui.popup.any?after=additions">
            <command commandId="com.example.commands.myCommand">
                <visibleWhen checkEnabled="false">
                    <or>
                        <with variable="activeEditorInput">
                            <reference definitionId="com.example.definitions.resourceDefinition"/>
                        </with>
                        <iterate>
                            <reference definitionId="com.example.definitions.resourceDefinition"/>
                        </iterate>
                    </or>
                </visibleWhen>
            </command>
        <menuContribution>
    </extension>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-12
      • 2012-12-31
      • 2017-07-30
      • 2019-01-09
      相关资源
      最近更新 更多