Если возможностей стандартного окна диалога недостаточно для реализации модуля, с помощью класса Dialog можно создать собственное окно диалога. В предыдущих разделах было показано, каким образом утилита readme добавляет действие "Открыть браузер Readme" в набор действий. Этот набор действий доступен на панели инструментов рабочей среды, а также в меню Окно->Редактор файлов Readme.
Теперь можно рассмотреть реализацию этого действия в классе утилиты readme WindowActionDelegate.
public void run(IAction action) {
SectionsDialog dialog = new SectionsDialog(window.getShell(),
ReadmeModelFactory.getInstance().getSections(selection));
dialog.open();
}
Делегат действия окна, предусмотренный для набора действий, получает список разделов файла readme в соответствии с элементами, выбранными на панели навигатора ресурсов (файл .readme). Этот список и оболочка окна рабочей среды передаются классу SectionsDialog.
В результате выбора пользователем одного из действий открывается окно диалога SectionsDialog.
Класс SectionsDialog реализован в утилите readme путем наследования класса Dialog, входящего в состав пакета org.eclipse.jface.dialogs.
Класс Dialog предоставляет базовую поддержку для создания окна оболочки, общих кнопок, а также запуска окна диалога. Производные классы отвечают непосредственно за обработку содержимого окна диалога:
SectionsDialog создает список SWT для отображения списка разделов. Для заполнения списка применяется программа просмотра JFace. (Программы просмотра JFace рассматриваются в разделе Программы просмотра). Обратите внимание, что окно диалога не обязательно должно создавать кнопки, поскольку за это отвечает базовый класс.
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite)super.createDialogArea(parent);
List list = new List(composite, SWT.BORDER);
...
ListViewer viewer = new ListViewer(list);
...
return composite;
}
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText(MessageUtil.getString("Readme Sections"));
...
}
Сложность окна диалога зависит от предъявляемых к нему требований. В процессе реализации окна диалога основное внимание уделяется созданию управляющих элементов SWT, необходимых для представления областей содержимого, а также обработки поддерживаемых событий. Действия, выполняемые окном диалога в ответ на нажатие пользователем кнопки, определяются в соответствии с состоянием различных управляющих элементов (или программ просмотра), входящих в состав этого окна диалога.