RCP файловый менеджер. Действия (Actions) системного меню
Действия (Actions) представляют собой различные реализации интерфейса IAction. Это команды, которые обычно инициализируются визуальными элементами пользовательского интерфейса — такими, как кнопки, элементы меню, кнопки панелей инструментов и др. При активизации конечным пользователем элементов пользовательского интерфейса вызывается метод IAction.run(), в котором выполняется некоторая связанная с действием единица работы.
Действия включают некоторый набор атрибутов, который может использоваться связанными с ним элементами графического интерфейса (наименование, комментарий, изображение иконки и др.). Действия могут одновременно связываться с несколькими элементами управления, что существенно упрощает конфигурирование команд. Например, это могут быть действия системного меню, продублированные в панели быстрого запуска. Изменение атрибутов действия автоматически отражается на всех связанных с ним элементах графического интерфейса. Для реализации множества типовых операций, которые присутствуют в большинстве приложений, можно подключить уже реализованные в базовой реализации платформы eclipse действия (Actions) интерфейса IWorkbenchAction. Отправной точкой для исследования, как это делается в реализации eclipse IDE, может послужить класс org.eclipse.ui.internal.ide.WorkbenchActionBuilder. Добавим действия по завершению работы программы и информационного диалога About в системное меню. Переписанный класс ApplicationActionBarAdvisor будет иметь следующий вид:
public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
private IWorkbenchAction quitAction;
private IWorkbenchAction aboutAction;
public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
super(configurer);
}
protected void makeActions(IWorkbenchWindow window) {
quitAction = ActionFactory.QUIT.create(window);
register(quitAction);
aboutAction = ActionFactory.ABOUT.create(window);
register(aboutAction);
}
protected void fillMenuBar(IMenuManager menuBar) {
// File menu
menuBar.add(createFileMenu());
// Add a group marker indicating where action set menus will appear.
menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
// Help menu
menuBar.add(createHelpMenu());
}
/**
* Creates and returns the File menu.
*/
private IContributionItem createFileMenu() {
MenuManager menu = new MenuManager("&File",
IWorkbenchActionConstants.M_FILE); //$NON-NLS-1$
menu.add(quitAction);
return menu;
}
/**
* Creates and returns the Help menu.
*/
private IContributionItem createHelpMenu() {
MenuManager menu = new MenuManager("&Help",
IWorkbenchActionConstants.M_HELP);
menu.add(aboutAction);
return menu;
}
/**
* Dispose actions.
*
* @see org.eclipse.ui.application.ActionBarAdvisor#dispose()
*/
public void dispose() {
quitAction = null;
aboutAction = null;
super.dispose();
}
}
Сравнительно небольшой фрагмент кода, а в результате мы получили системное меню с возможностью завершать работу программы, а также вызов информационного диалога About.

Рис. 1. Меню выхода из программы

Рис. 2. Пустой информационный диалог About
Полное описание процесса разработки проекта доступно по адресу: сайт
Сергей Бердачук, berdachuk@berdaflex.com
Действия включают некоторый набор атрибутов, который может использоваться связанными с ним элементами графического интерфейса (наименование, комментарий, изображение иконки и др.). Действия могут одновременно связываться с несколькими элементами управления, что существенно упрощает конфигурирование команд. Например, это могут быть действия системного меню, продублированные в панели быстрого запуска. Изменение атрибутов действия автоматически отражается на всех связанных с ним элементах графического интерфейса. Для реализации множества типовых операций, которые присутствуют в большинстве приложений, можно подключить уже реализованные в базовой реализации платформы eclipse действия (Actions) интерфейса IWorkbenchAction. Отправной точкой для исследования, как это делается в реализации eclipse IDE, может послужить класс org.eclipse.ui.internal.ide.WorkbenchActionBuilder. Добавим действия по завершению работы программы и информационного диалога About в системное меню. Переписанный класс ApplicationActionBarAdvisor будет иметь следующий вид:
public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
private IWorkbenchAction quitAction;

private IWorkbenchAction aboutAction;
public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
super(configurer);
}
protected void makeActions(IWorkbenchWindow window) {
quitAction = ActionFactory.QUIT.create(window);

register(quitAction);
aboutAction = ActionFactory.ABOUT.create(window);
register(aboutAction);
}
protected void fillMenuBar(IMenuManager menuBar) {

// File menu
menuBar.add(createFileMenu());
// Add a group marker indicating where action set menus will appear.
menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
// Help menu
menuBar.add(createHelpMenu());
}
/**
* Creates and returns the File menu.
*/
private IContributionItem createFileMenu() {

MenuManager menu = new MenuManager("&File",
IWorkbenchActionConstants.M_FILE); //$NON-NLS-1$
menu.add(quitAction);
return menu;
}
/**
* Creates and returns the Help menu.
*/
private IContributionItem createHelpMenu() {

MenuManager menu = new MenuManager("&Help",
IWorkbenchActionConstants.M_HELP);
menu.add(aboutAction);
return menu;
}
/**
* Dispose actions.
*
* @see org.eclipse.ui.application.ActionBarAdvisor#dispose()
*/
public void dispose() {

quitAction = null;
aboutAction = null;
super.dispose();
}
}
![]() | Объявление переменных действий |
![]() | Инициализация переменных действий из списка доступных системных команд при помощи фабрики ActionFactory |
![]() | Создание главного меню |
![]() | Создание меню File |
![]() | Создание меню Help |
![]() | Освобождение ресурсов |
Сравнительно небольшой фрагмент кода, а в результате мы получили системное меню с возможностью завершать работу программы, а также вызов информационного диалога About.

Рис. 1. Меню выхода из программы

Рис. 2. Пустой информационный диалог About
Полное описание процесса разработки проекта доступно по адресу: сайт
Сергей Бердачук, berdachuk@berdaflex.com
Компьютерная газета. Статья была опубликована в номере 19 за 2006 год в рубрике программирование