Я хочу показать всплывающее меню в 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);
}
}
}
});