Замена пункта меню во всплывающем меню Jface - PullRequest
0 голосов
/ 19 октября 2011

Я хочу показать всплывающее меню в JFace TreeViewer.

Меню должно содержать 3 постоянных пункта меню, которые никогда не меняются, и дополнительный элемент, который изменяется в зависимости от узла дерева, по которому щелкнули (выбран).

Один из вариантов - использовать setRemoveAllWhenShown(true), но при этом каждый раз удаляются все пункты меню, включая постоянные.

Я хочу этого избежать.

Итак, чтобы завершить мою задачу:

  • Если использовать правую кнопку мыши на дереве, не выбирая ни одного узла, показывать только постоянные элементы.
  • Если вы используете правый клик на определенном узле, покажите постоянные элементы (удалите предыдущий дополнительный элемент, если существует) и добавьте дополнительный элемент для этого узла (его также можно заменить, если эта опция доступна).

Пока мой код:

//Add Some Actions
menuManager.add(..);
menuManager.add(..);
menuManager.add(..);
menuManager.add(new Separator());

//This will delete all items inluding the constant, I want to avoid that        
//menuManager.setRemoveAllWhenShown(true);

menuManager.addMenuListener(new IMenuListener() {           
  public void menuAboutToShow(IMenuManager manager) {
    IStructuredSelection selection = (IStructuredSelection) mTreeViewer.getSelection();
    if (!selection.isEmpty()) {
          BaseItm selected = (BaseItm) selection.getFirstElement();

          if (selected instanceof sometype) {                                                             
             //Remove additional item IF exists
             manager.add(sepcificActionForThisNode);
          }         
    }
 }                      
});

Ответы [ 2 ]

0 голосов
/ 01 ноября 2011

Используйте IAction.setId(String id), чтобы установить уникальный идентификатор для настраиваемых действий, чтобы впоследствии эти действия можно было удалить с помощью IMenuManager.remove(String id).

0 голосов
/ 19 октября 2011

добавить все действия и использовать javax.swing.JComponent#setVisible(boolean)

...