在Eclipse插件中,我有一个自定义org.eclipse.ui.navigator.navigatorContent
扩展名。我正在尝试提供自定义删除处理程序。以前我使用org.eclipse.ui.popupMenus
扩展点和objectContribution/action
,但由于Eclipse bug #329979: [Key Bindings] Support keybinding of objectContributions而不支持键绑定。
我尝试了几种方法:
定义删除命令的处理程序
<extension
point="org.eclipse.ui.handlers">
<handler
commandId="org.eclipse.ui.edit.delete"
class="org.apache.sling.ide.eclipse.ui.actions.JcrNodeDeleteHandler">
<activeWhen>
<adapt type="org.apache.sling.ide.eclipse.ui.nav.model.JcrNode"/>
</activeWhen>
</handler>
</extension>
在我的actionProvider中注册自定义删除操作
我已经为自定义navigatorContent注册了一个actionProvider。
<actionProvider
class="org.apache.sling.ide.eclipse.ui.nav.PackageExplorerOpenActionProvider"
id="org.apache.sling.ide.eclipse.ui.nav.actions.OpenActions"
overrides="org.eclipse.jdt.ui.navigator.actions.OpenActions">
<enablement>
<instanceof value="org.apache.sling.ide.eclipse.ui.nav.model.JcrNode"/>
</enablement>
</actionProvider>
然后在那个ActionProvider中我注册了行动
@Override
public void fillActionBars(IActionBars actionBars) {
actionBars.setGlobalActionHandler(ActionFactory.DELETE.getId() ,deleteAction);
}
他们都没有产生预期的效果,所以现在我被卡住了。
如何为自定义导航器提供delete命令的自定义实现,该命令也会对键绑定做出反应?
更新
我已经能够使用以下命令注册删除命令:
<extension
point="org.eclipse.ui.menus">
<menuContribution
locationURI="popup:org.eclipse.ui.popup.any?after=additions">
<command
commandId="org.eclipse.ui.edit.delete"
icon="icons/ovr16/delete_obj.gif"
mnemonic="D"
label="Delete">
<visibleWhen
checkEnabled="false">
<iterate ifEmpty="false">
<adapt
type="org.apache.sling.ide.eclipse.ui.nav.model.JcrNode">
</adapt>
</iterate>
</visibleWhen>
</command>
</menuContribution>
</extension>
请务必注意visibleWhen
条件必须与handler
声明中的条件相匹配。
但是,它并不在我希望“删除”的位置。行动,但在一般&#39;具有运行方式贡献的区域等。这可能是由menuLocation
的{{1}}值引起的,但我不确定正确的值是什么。
答案 0 :(得分:0)
以编程方式注册命令的正确方法是覆盖fillContextMenu
方法:
@Override
public void fillContextMenu(IMenuManager menu) {
super.fillContextMenu(menu);
if ( deleteAction != null ) {
menu.appendToGroup(ICommonMenuConstants.GROUP_EDIT, renameAction);
}
}
答案 1 :(得分:0)
要以声明方式注册命令,除了删除命令的handler
之外,还必须注册menuContribution/command
。
<extension
point="org.eclipse.ui.menus">
<menuContribution
locationURI="popup:org.eclipse.ui.popup.any?after=group.edit">
<command
commandId="org.eclipse.ui.edit.delete"
icon="icons/ovr16/delete_obj.gif"
mnemonic="D"
label="Delete">
<visibleWhen
checkEnabled="false">
<iterate ifEmpty="false">
<adapt
type="org.apache.sling.ide.eclipse.ui.nav.model.JcrNode">
</adapt>
</iterate>
</visibleWhen>
</command>
</menuContribution>
</extension>
需要注意的一些要点:
locationURI
指定?after=group.edit
。该部分很重要,因为group.edit
是菜单的ID,通常包含删除/复制/粘贴操作visibleWhen
必须与命令中声明的内容完全匹配。我错误地仅使用adapt
标记,但必须将其包含在iterate
标记内。我似乎记得这是因为IStructuredSelection
正在根据标准进行验证感谢Rüdiger Herrmann指导我找到正确的答案。另请参阅How to add items in popup menu?,其中包含有价值的信息。