Как мы можем создать подконтекстное меню для просмотра дерева

Я создал контекстное меню, щелкнув правой кнопкой мыши для просмотра дерева, и теперь мне нужно создать для него подконтекстное меню, чтобы мне нужно было установить для него значения. Код для создания контекстного меню выглядит следующим образом.

protected void createContextMenu(Viewer viewer) {
        MenuManager contextMenu = new MenuManager("#ViewerMenu"); //$NON-NLS-1$
        contextMenu.setRemoveAllWhenShown(true);
        contextMenu.addMenuListener(new IMenuListener() {
            @Override
            public void menuAboutToShow(IMenuManager mgr) {
                fillContextMenu(mgr);
            }
        });

        Menu menu = contextMenu.createContextMenu(viewer.getControl());
        viewer.getControl().setMenu(menu);
    }

    /**
     * Fill dynamic context menu
     *
     * @param contextMenu
     */

    protected void fillContextMenu(IMenuManager contextMenu) {
        //String nnn = null;
        //contextMenu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
        //contextMenu.add(new GroupMarker(nnn));

        contextMenu.add(new Action("set Iterations") {
            @Override
            public void run() {
                // implement this
            }


        });

        contextMenu.add(new Action("Set timeout") {
            @Override
            public void run() {
                // implement this
            }


        });
    }

так что теперь для тайм-аута, установленного в контекстном меню, мне нужно создать подконтекстное меню, и пользователь может установить в нем значение тайм-аута. Итак, как это можно сделать.


person vinod raj    schedule 08.12.2014    source источник


Ответы (1)


Создайте меню MenuManager для подменю:

protected void fillContextMenu(IMenuManager contextMenu) {
    //String nnn = null;
    //contextMenu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
    //contextMenu.add(new GroupMarker(nnn));

    contextMenu.add(new Action("set Iterations") {
        @Override
        public void run() {
            // implement this
        }
    });

    contextMenu.add(new Action("Set timeout") {
        @Override
        public void run() {
            // implement this
        }
    });

   IMenuManager submenu = new MenuManager("Sub menu title");

   submenu.add(new Action("Sub menu item 1") {
        @Override
        public void run() {
            // implement this
        }
    });

  contextMenu.add(submenu);
}
person greg-449    schedule 08.12.2014
comment
Можете ли вы сказать, в какой функции мне нужно создать менеджер меню для подменю @greg-449 - person vinod raj; 08.12.2014
comment
Если я добавлю эту часть кода в функцию fillContextMenu, она выдаст ошибку @greg-449. - person vinod raj; 08.12.2014
comment
код, который я добавил, это contextMenu.add(new Action(Set timeout) { IMenuManager submenu = new MenuManager(sub menu title); contextMenu.add(submenu); @Override public void run() {})}; - person vinod raj; 08.12.2014
comment
в подменю он отображает статическую строку, но мне нужно, чтобы пользователь ввел значение вместо статического. Итак, как это можно сделать - person vinod raj; 08.12.2014
comment
Меню не поддерживают ввод значений - person greg-449; 08.12.2014
comment
Хорошо, спасибо за информацию . Можем ли мы сгенерировать подконтекстное меню таким образом, чтобы в нем отображалось все содержимое списка. Например, список содержит [a,b,c,d,e], поэтому теперь в главном меню есть меню A, а подменю должно содержать все элементы в списке можно это сделать - person vinod raj; 08.12.2014
comment
Просто просмотрите список, добавив действие для каждой записи. - person greg-449; 08.12.2014
comment
когда я нажимаю любую кнопку в подменю, как я могу получить имя подменю, например, имя / название, данное для элемента подменю, который нажат. - person vinod raj; 16.12.2014