如何在我的视图中添加菜单操作?

时间:2015-03-11 11:33:05

标签: java eclipse-rcp

我想在我的视图中添加一个菜单操作,就像Eclipse控制台中的那个:

enter image description here

我设法做了一些非常相似的事情。从菜单中我想要的两个动作中,其中一个动作关联了MenuCreator,但这样做会将此动作设置为最重要的动作,换句话说,用箭头打开菜单的那个,当我点击它时,不是打开菜单,而是从动作中启动run方法中的代码。

enter image description here

我想要从控制台操作中获得exctly行为,我希望菜单上的2个操作和顶部的一个小图标打开此菜单..我该怎么做?

到目前为止的代码:

private void createToolBar() {

    IToolBarManager toolBar = getViewSite().getActionBars().getToolBarManager();

    actionNovaDespesa = new OpenNewDespesa();
    actionNovaDespesa.setMenuCreator(new CustomActionMenu());
    toolBar.add(actionNovaDespesa);
}



public class CustomActionMenu implements IMenuCreator {

        private Menu menu;

        public Menu getMenu(Control parent) {

            menu = new Menu(parent);       

            MenuItem menuItemColaboradores = new MenuItem(menu, SWT.PUSH);
            menuItemColaboradores.setText(LabelVARS.DESPESA_COLABORADOR);
            menuItemColaboradores.setImage(Activator.getImageDescriptor(IconVARS.TOOLBAR_UTILIZADOR).createImage());
            menuItemColaboradores.addSelectionListener(new SelectionAdapter() {
                public void widgetSelected(SelectionEvent event) {

                    new OpenNewDespesaColaborador().run();
                }
            });  

            return menu;
        }

        public void dispose() {
            if(menu != null) {
                menu.dispose();
                menu = null;
            }
        }

        public Menu getMenu(Menu parent) {
            return null;
        }

    }

1 个答案:

答案 0 :(得分:1)

您需要制作菜单工具IAction以及IMenuCreator。类似的东西:

  class DropDownAction extends Action implements IMenuCreator
  {
    private Menu menu;

    DropDownAction()
    {
      super("Name", IAction.AS_DROP_DOWN_MENU);

      setImageDescriptor(... image descriptor for button);

      setMenuCreator(this);
    }


    @Override
    public void dispose()
    {
      if (menu != null) {
        menu.dispose();
        menu = null;
      }
    }


    @Override
    public void runWithEvent(final Event event)
    {
      if (event.widget instanceof ToolItem)
        {
          final ToolItem toolItem = (ToolItem)event.widget;
          final Control control = toolItem.getParent();
          final Menu menu = getMenu(control);

          final Rectangle bounds = toolItem.getBounds();
          final Point topLeft = new Point(bounds.x, bounds.y + bounds.height);
          menu.setLocation(control.toDisplay(topLeft));
          menu.setVisible(true);
        }
    }

    @Override
    public Menu getMenu(final Control parent)
    {
      if (menu != null) {
        menu.dispose();
      }

      menu = new Menu(parent);

      // TODO add your menu items

      return menu;
    }   

    @Override
    public Menu getMenu(final Menu parent)
    {
      return null;
    }
  }