Jeśli standardowe okno dialogowe jest zbyt proste dla danego modułu dodatkowego, można zbudować własne okno dialogowe przy użyciu klasy Dialog. Wcześniej przedstawiono sposób, w jaki narzędzie pliku readme dostarcza akcję "Otwórz przeglądarkę pliku Readme" do zestawu akcji. Ten zestaw akcji jest wyświetlany na pasku narzędzi obszaru roboczego oraz w menu Okno -> Edytor pliku readme.
Zobaczmy, jak wygląda implementacja tej akcji w klasie narzędzia pliku readme WindowActionDelegate.
public void run(IAction action) { SectionsDialog dialog = new SectionsDialog(window.getShell(), ReadmeModelFactory.getInstance().getSections(selection)); dialog.open(); }
W tym zestawie akcji delegat akcji okna używa bieżącego zaznaczenia w widoku nawigatora zasobów (plik .readme), aby uzyskać listę sekcji pliku readme. Ta lista oraz powłoka okna obszaru roboczego zostają przekazane do klasy SectionsDialog.
Gdy użytkownik wybiera akcję, zostaje otwarte okno dialogowe SectionsDialog.
Okno dialogowe SectionsDialog jest implementowane w module dodatkowym narzędzia pliku readme przez utworzenie podklasy klasy Dialog znajdującej się w pakiecie org.eclipse.jface.dialogs.
Klasa Dialog udostępnia podstawową obsługę budowania okien dialogowych powłoki, tworzenia najczęściej używanych przycisków okien dialogowych i uruchamiania okien dialogowych. Podklasy są odpowiedzialne za obsługę treści okien dialogowych:
Klasa SectionsDialog tworzy listę SWT, na której wyświetlana jest lista sekcji. Do zapełnienia listy używana jest przeglądarka JFace. (Przeglądarki JFace zostaną omówione w sekcji Przeglądarki). Należy zwrócić uwagę, że okno dialogowe nie musi tworzyć żadnych przycisków, ponieważ robi to nadklasa.
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")); ... }
Okna dialogowe mogą być proste lub złożone, w zależności od potrzeb. W implementacji okna dialogowego większość kodu dotyczy tworzenia elementów sterujących SWT, które reprezentują obszar treści i obsługują wszelkie zdarzenia występujące w trakcie wyświetlania okna dialogowego. Po naciśnięciu przycisku przez użytkownika okno dialogowe może sprawdzać status różnych elementów sterujących (lub przeglądarek) okna dialogowego, aby zdecydować o dalszym działaniu.