在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);
}
他們沒有產生預期的效果,所以現在我卡住了。
如何爲自定義導航器提供自定義實現的刪除命令,該命令也對鍵綁定起反應?
更新
我已經能夠使用登記刪除命令如下:
<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
聲明一場比賽是很重要的。
但是,它不設在那裏我會想到「刪除」操作是,但與運行方式的貢獻等「常規」區域,這可能是由於popup:org.eclipse.ui.popup.any?after=additions
的menuLocation
價值,但我米不知道什麼是正確的價值。
你看過使用'org.eclipse.ltk.core.refactoring.deleteParticipants'擴展點來參與所有的刪除。 –
@ greg-449 - 你有一個關於如何使用它的例子嗎?目前我對ltk沒有依賴性,我的主要問題是「刪除」操作菜單甚至不存在 –
定義'org.eclipse.ui.edit.delete'的處理程序應該可以工作。您是否明確地在您的導航器擴展中貢獻了該命令,還是從其他位置(內置)貢獻出來的?你是否嘗試在'activeWhen'中添加'enabledWhen'的條件相同? –