首页 > 解决方案 > eclipse插件:如何使用actionID调用actionSet

问题描述

现在我想调用另一个插件中定义的actionset,我已经有了actionId,但我不知道如何调用它。

这是动作集:

<action
           class="com.src.action1"
           icon="action1.png"
           id="com.src.action1"
           label="action1"
           style="push"
           toolbarPath="new.ext">
</action>

我知道我可以像这样通过 commandId 调用命令:

IHandlerService handlerService = 
 PlatformUI.getWorkbench().getService(IHandlerService.class);
            handlerService.executeCommand(COMMANDID, null);

所以我想知道工具栏按钮是否由actionSet定义,我可以像actionId的命令一样调用它吗?

标签: eclipse-plugin

解决方案


只有当动作有参数时,动作才会连接到命令definitionId。例如来自 JDT 插件的这个动作:

<action
     allowLabelUpdate="true"
     style="toggle"
     toolbarPath="org.eclipse.ui.edit.text.actionSet.presentation/Presentation"
     id="org.eclipse.jdt.ui.edit.text.java.toggleMarkOccurrences"
     definitionId="org.eclipse.jdt.ui.edit.text.java.toggleMarkOccurrences"
     disabledIcon="$nl$/icons/full/dtool16/mark_occurrences.png"
     icon="$nl$/icons/full/etool16/mark_occurrences.png"
     helpContextId="org.eclipse.jdt.ui.toggle_mark_occurrences_action_context"
     label="%toggleMarkOccurrences.label"
     retarget="true"
     tooltip="%toggleMarkOccurrences.tooltip">
</action>

在这个例子中,命令 id 是org.eclipse.jdt.ui.edit.text.java.toggleMarkOccurrences. 因此,您将使用以下命令执行它:

handlerService.executeCommand("org.eclipse.jdt.ui.edit.text.java.toggleMarkOccurrences", null);

如果没有definitionId参数,则该操作不与命令关联,并且您不能通过处理程序服务调用它。


推荐阅读