Следующим
этапом, в соответствии с первоначальной версией документа дизайна
интерфейса пользователя, будет добавление кнопок файловых операций
(«Copy to (Копировать в ...)», «Move to (Переместить в
...)», «Delete (Удалить)» и «Properties
(Свойства объекта)» ) на панель файлового менеджера. Открываем
файл манифеста и в закладке «Extensions» создаем расширение
для точки расширения «org.eclipse.ui.viewActions» при помощи
мастера выбора точки расширения см. рисунок:
Рисунок 4.36. Мастер выбора точки расширения

Для созданного элемента укажем идентификатор «id» и идентификатор «targetID» панели (View) к которой будем привязывать действия. Выбрав созданный элемент, создадим действие (Action), и с помощью мастера создадим класс с реализацией интерфейса «org.eclipse.ui.IViewActionDelegate».
На данном этапе не будем реализовывать непосредственно операции копирования и т.д.. Для тестирования воспользуемся просто отображением диалогового окна с описанием вызванной команды. Код реализации для операции копирования примет вид:
package com.berdaflex.filearranger.actions;
. . .
public class CopyAction implements IViewActionDelegate {
public IViewPart view;
/**
* Конструктор нового класса CopyAction.
*/
public CopyAction() {
super();
}
public void init(IViewPart view) {
this.view = view;
}
public void run(IAction action) {
MessageDialog.openInformation(view.getSite().getShell(),
"File manager", "Copy action executed");
}
public void selectionChanged(IAction action, ISelection selection) {
// TODO Auto-generated method stub
}
}
Пример сформированного кода регистрации операции копирования в панель кнопок быстрого доступа проводника и меню данной панели.
<extension point="org.eclipse.ui.viewActions">
<viewContribution
id="com.berdaflex.filearranger.explorerViewContribution"
targetID="com.berdaflex.filearranger.views.ExplorerView">
. . .
helpContextId="com.berdaflex.filearranger.copy_action_context"
icon="$nl$/icons/obj16/file_copy.gif"
id="com.berdaflex.filearranger.copyAction"
label="%actions.copyAction"
menubarPath="additions"
toolbarPath="additions"
tooltip="%actions.copyActionTooltip">
</action>
</viewContribution>
</extension>
Аналогично пропишем команды «Move to (Переместить в ...)», «Delete (Удалить)» и «Properties (Свойства объекта)».
После запуска программы созданные команды будут доступны на панели проводника и в (pull-down menu) меню панели проводника, см. рисунок:
Рисунок 4.37. Кнопки команд (toolbar buttons) панели проводника

Рисунок 4.38. Меню (pull-down menu) панели проводника

Для включения команд в контекстное меню требуется создать аналогичное расширение точки расширения "org.eclipse.ui.popupMenus" и зарегистрировать (привязать) меню к конкретному элементу управления.
Рисунок 4.39. Контекстное (popup menu) меню панели проводника

public void createPartControl(Composite parent) {
. . .
//добавляем регистрацию контекстных меню
hookContextMenu();
}
. . .
private void hookContextMenu() {
// tree viewer context menu
MenuManager treeViewerMenuMgr = new MenuManager("#PopupMenu");
treeViewerMenuMgr.setRemoveAllWhenShown(true);
treeViewerMenuMgr.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
ExplorerView.this.fillTreeViewerContextMenu(manager);
}
});
Menu ttreeViewerPopupMenu = treeViewerMenuMgr
.createContextMenu(vfsExplorerComposite.getTreeViewer()
.getControl());
vfsExplorerComposite.getTreeViewer().getControl().setMenu(
ttreeViewerPopupMenu);
getSite().registerContextMenu(treeViewerMenuMgr,
vfsExplorerComposite.getTreeViewer());
// table viewer context menu
. . .
}
. . .
/*
* Добавляем специфичные для панели каталогов команды.
*/
private void fillTreeViewerContextMenu(IMenuManager manager) {
. . .
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
}
Обращаем внимание на установку свойства RemoveAllWhenShow в значение true, что позволяет динамически регенерировать контекстное меню при вызове. Еще одна интересная деталь в возможности создавать команды (Actions) динамически, и в зависимости от текущего контекста управлять их статусом и поведением. Описанные ранее команды будут группироваться начиная с секции IworkbenchActionConstants.MB_ADDITIONS, так как мы указали menubarPath="additions" в файле манифеста, а динамически создаваемые команды будем добавлять до данной секции, чтобы привлечь внимание.
FAQ How to create a context menu & add actions to the same? http://wiki.eclipse.org/index.php/FAQ_How_to_create_a_context_menu_%26_add_actions_to_the_same%3F