2012-04-10 48 views
0

我需要爲所有視圖提供動態的彈出式菜單。我可以創建一個動態的彈出式菜單貢獻,但是我必須設置URI併爲特定視圖進行註冊。現在我試圖動態註冊菜單,當用戶選擇另一個視圖時:所有視圖的動態彈出式菜單

public class GlobalSelectionListener implements ISelectionListener { 
    HashSet<IWorkbenchPart> extended = new HashSet<IWorkbenchPart>(); 

    @Override 
    public void selectionChanged(IWorkbenchPart part, ISelection selection) { 
     if (!extended.contains(part)) { 
      IWorkbenchPartSite wps = part.getSite(); 
      if (wps == null) 
       return; 
      //creates popup menu for this part 
      MenuManager mgr = new MenuManager(); 
      mgr.add(new DynamicMenu()); //DynamicMenu extends ContributionItem 
      wps.registerContextMenu("identifier." + mgr.hashCode(), mgr, wps.getSelectionProvider()); 
      extended.add(part); 
      System.out.println(part + " menu extended"); 
     } 
    } 
} 

但是這不起作用。沒有一個菜單項出現在彈出菜單中。我不知道,是否有可能這樣做。有沒有任何方法來動態添加任意視圖的彈出菜單?看起來,registerContextMenu()方法做了別的。

回答

0

問題沒有解決,但有一個解決方法。可以在plugin.xml文件中註冊所需的所有視圖和編輯器的彈出式菜單。 Usualy插件使用的數量是有限的。如果你正在寫一個插件,你知道你需要插件。使用Spy plug-in(ALT + SHIFT + F1)查看活動菜單的貢獻標識符,並將您的貢獻註冊到所需的所有視圖和編輯器的彈出式菜單中。