2012-09-19 61 views
1

在我的RCP程序中,我在工作臺窗口中添加了一個菜單「Demo」,在「Demo」下面添加了一個分隔符「additional」。代碼如下,如何通過actionSet擴展點向Workbenchwindow提供菜單?

public class ApplicationActionBarAdvisor extends ActionBarAdvisor { 

private ExampleAction exampleAction; 

@Override 
protected void makeActions(IWorkbenchWindow window) { 
    // TODO Auto-generated method stub 
    super.makeActions(window); 

    exampleAction = new ExampleAction(window);  
} 

@Override 
protected void fillMenuBar(IMenuManager menuBar) { 
    // TODO Auto-generated method stub 
    super.fillMenuBar(menuBar); 

    MenuManager demoMenu = new MenuManager("&Demo", "demo"); 
    demoMenu.add(exampleAction); 
    demoMenu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));  
    menuBar.add(demoMenu); 
} 
.............. 

}

現在我想貢獻一個子菜單的位置「演示/添加」。我宣佈一個actionSet擴展點像下面,

<extension 
     point="org.eclipse.ui.actionSets"> 
     <actionSet 
      id="RCP-View-Example.actionSet" 
      label="actionSet"> 
     <menu 
       id="RCP-View-Example.menu" 
       label="ActionSetMenu" 
       path="demo/additions"> 
      <groupMarker 
        name="menuItem"> 
      </groupMarker> 
     </menu> 
     <action 
       class="Action1" 
       id="RCP-View-Example.action" 
       label="Action" 
       menubarPath="RCP-View-Example.menu/menuItem" 
       style="push" 
       toolbarPath="main/additions"> 
     </action> 
     </actionSet> 
    </extension> 
    <extension 
     point="org.eclipse.ui.actionSetPartAssociations"> 
     <actionSetPartAssociation 
      targetID="RCP-View-Example.actionSet"> 
     <part 
       id="my.view"> 
     </part> 
     </actionSetPartAssociation> 
    </extension> 

我沒有看到菜單貢獻,並在「演示」菜單中顯示。 我修改菜單路徑從「path =」demo/additions「到」path =「org.eclipse.ui.main.menu/demo/additions」,我仍然沒有看到它。

任何人都可以幫助看看我的程序中出現了什麼問題嗎?

我修改了path =「demo/additions to path =」additions「的菜單路徑,當視圖打開時我看到」Demo「後面的菜單,但是在actionSetPartAssociations擴展點指定的視圖關閉後,菜單仍然存在 我希望當與之相關聯的關閉視圖菜單消失 什麼是錯在我的計劃

回答

1

我覺得從documentation本說明可能適合在這裏:。。?

有是一個目前影響動作集的實現限制,定義該動作集非常重要整個菜單結構將在動作集中被引用。因此,例如,如果另一個操作集定義了一個名爲「example」的菜單,則不可能依賴現有的「示例」。有必要在每個希望使用它的操作集中重新定義「示例」菜單。

所以這個問題可能在你的子菜單path =「demo/additions」中,它應該包括子菜單的完整路徑。如果你已經有了這個子菜單,你可以在該菜單中的一個動作上嘗試Alt + Shift + F2來找到該菜單的ID並從那裏開始工作。

但是,如果您剛開始使用菜單,我建議您立即使用Command Framework。即使您使用的是已建立的富客戶端,您也可以輕鬆地將命令放在任何您喜歡的位置,而ActionSets ExtensionPoint在Eclipse Juno及更新版本中已棄用。一個好的命令教程可以找到here

+0

感謝您的反饋。它回答了我的第一個問題。我的第二個問題呢?我認爲擴展點org.eclipse.ui.actionSetPartAssociations將一個actionSet與一個視圖鏈接起來。視圖關閉後,我認爲相應的菜單應該消失,我的期望是否正確? – Hua

0

參考org.eclipse.ui.internal.navigator.resources.actions.NewActionProvider.java

參見fillContextMenu()方法。在那裏他們創建了一個子菜單。它會幫助你理解。

+0

感謝您的參考。 – Hua

+0

歡迎.... :) :) –