eclipse-plugin - 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的命令一样调用它吗?
解决方案
只有当动作有参数时,动作才会连接到命令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
参数,则该操作不与命令关联,并且您不能通过处理程序服务调用它。
推荐阅读
- sql - 显示每周总计
- django - 如何使用 field_classes 将 datepicker 和 timepicker 添加到 Django forms.SplitDateTimeField?
- java - 我可以使用递归来简化它吗?
- laravel - 如何在 laravel 的 maatwebsite/excel 3.1 中导出时动态标题
- java - 无法从数据库获取日期到数组
- macports - 无法构建 gnutls (MacPorts on 10.15)
- php - 使用 Apache 和 PHP (REMOTE_USER) 查找用户名
- javascript - 在 Angular 中生成 AWS 签名请求
- javascript - 有没有办法防止/禁用 event.target 上发生的点击事件?
- excel - 根据 1 个单元格值 (VBA) 更新多个工作簿