繁体   English   中英

向视图添加菜单操作

[英]Adding a Menu Action to a view

我想在我的视图中添加一个菜单操作,例如从Eclipse Console进行的操作:

在此处输入图片说明

我设法做了非常类似的事情。从我要在菜单上执行的两个操作中,有一个与MenuCreator相关联,但是通过这种方式将此操作设置为顶部操作,换句话说,将操作设置为顶部箭头来打开菜单,并且,当我单击它时,而不是打开菜单,而是从该动作开始在run方法中的代码。

在此处输入图片说明

我想要控制台操作的确切行为,我希望菜单上的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;
        }

    }

您需要使菜单实现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;
    }
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM