Search code examples
eclipse-plugineclipse-rcpeclipse-pde

How to add a pulldown button in a view's toolbar?


I need to add a pulldown button to a view's toolbar in an Eclipse plugin.

Actually buttons in the toolbar are added like that :

<extension point="org.eclipse.ui.viewActions">
  <viewContribution id="..." targetId="$MyViewId$">
    <action id="..."
            toolbarPath="action1"
            class="Class extending Action and implementing IViewActionDelegate">
    </action>
  </viewContribution>
</extension>

Solution

  • I've figured it out. Two ways: one using org.eclipse.ui.viewActions extension, the other with org.eclipse.ui.menus

    Using org.eclipse.ui.viewActions extension (eclipse >= 3.5)

    • action's style must set to pulldown
        <extension point="org.eclipse.ui.viewActions">
          <viewContribution id="..." targetId="$MyViewId$">
            <action id="..."
                    toolbarPath="action1"
                    class="xxx.MyAction"
                    style="pulldown">
            </action>
          </viewContribution>
        </extension>
    
    • action class must implement IViewActionDelegate (required for an action contributing to a view toolbar) and IMenuCreator (defines the menu behavior).
        public class RetrieveViolationsViewActionDelegate implements IViewActionDelegate, IMenuCreator
        {
          private IAction action;
          private Menu menu;
    
          // IViewActionDelegate methods
          ...
    
          // IMenuCreator methods
          public void selectionChanged(IAction action, ISelection selection)
          {
            if (action != this.action)
            {
              action.setMenuCreator(this);
              this.action = action;
            }
          }
    
          public void dispose()
          {
            if (menu != null)
            {
              menu.dispose();
            }
          }
    
          public Menu getMenu(Control parent)
          {
            Menu menu = new Menu(parent);
            addActionToMenu(menu, new ClassImplemententingIAction());
            return menu;
          }
    
          public Menu getMenu(Menu parent)
          {
            // Not use
            return null;
          }
    
    
    
          private void addActionToMenu(Menu menu, IAction action)
          {
            ActionContributionItem item= new ActionContributionItem(action);
            item.fill(menu, -1);
          }
        }
    

    Using org.eclipse.ui.menus (eclipse >= 3.3)

    • Add a new menucontribution to the org.eclipse.ui.menus extension point.
    • Set the location URI to toolbar:IdOfYourView
    • Add a toolbar to this extension and a new command to this new toolbar.
    • Change the command style to pulldown
    • Create a new menucontribution and set the locationURI to menu:IdOfThePullDownCommand
    • Add commands to this menu.

    More info