Действия (Actions) это различные реализации интерфейса IAction. Это команды, которые обычно инициализируются визуальными элементами пользовательского интерфейса, такими как кнопки, элементы меню, кнопки панелей инструментов и др. При активизации конечным пользователем элементов пользовательского интерфейса вызывается метод IAction.run() в котором выполняется некоторая связанная с действием единица работы. Действия включают некоторый набор атрибутов, который может использоваться связанными с ним элементами графического интерфейса (Наименование, комментарий, изображение иконки и др.). Действия могут одновременно связываться с несколькими элементами управления, что существенно упрощает конфигурирование команд. Например это могут быть действия системного меню продублированные в панели быстрого запуска. Изменение атрибутов действия автоматически отражается на всех связанных с ним элементах графического интерфейса.
Для реализации множества типовых операций, которые присутствуют в большинстве приложений, можно подключить уже реализованные в базовой реализации платформы eclipse действия (Actions) интерфейса IWorkbenchAction. Отправной точкой для исследования как это делается может послужить класс 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".
Рисунок 4.3. Меню выхода из программы
Рисунок 4.4. Пустой информационный диалог "About"