Quando una finestra di dialogo è troppo semplice per il proprio plug-in, è possibile crearne una personalizzata utilizzando la classe Dialog. In precedenza, è stato descritto il modo in cui lo strumento readme contribuisce a un'azione di "apertura browser del readme" in una serie di azioni. Tale serie di azioni viene visualizzata nella barra degli strumenti del workbench e nel menu Finestra > Editor del file Readme.
A questo punto è possibile esaminare l'implementazione di questa azione in WindowActionDelegate dello strumento readme.
public void run(IAction action) {
SectionsDialog dialog = new SectionsDialog(window.getShell(),
ReadmeModelFactory.getInstance().getSections(selection));
dialog.open();
}
Il delegato dell'azione di finestra per la serie di azioni utilizza la selezione corrente della visualizzazione del navigator delle risorse (il file .readme) per richiamare un elenco delle sezioni contenute nel file readme. Questo elenco e la shell della finestra del workbench vengono passati a SectionsDialog.
Quando l'utente seleziona l'azione, viene aperta SectionsDialog.
SectionsDialog viene implementata nel plug-in del readme tool creando sottoclassi della classe Dialog nel pacchetto org.eclipse.jface.dialogs.
La classe Dialog fornisce il supporto fondamentale per la creazione di una finestra shell della finestra di dialogo, per la creazione dei pulsanti comuni e per l'avvio della finestra di dialogo. Le sottoclassi sono responsabili della gestione del contenuto della finestra di dialogo stessa:
SectionsDialog crea un elenco SWT per visualizzare l'elenco delle sezioni. Utilizza un visualizzatore JFace per compilare l'elenco. I visualizzatori JFace verranno descritti nella sezione Visualizzatori. Notare che la finestra di dialogo dell'utente non deve creare alcun pulsante relativo poiché questa operazione viene eseguita dalla superclasse.
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("Readme Sections");
...
}
SectionsDialog non implementa un metodo okButtonPressed. Diversamente, eredita l'implementazione "do-nothing" da Dialog. Ciò non è tipico. La finestra di dialogo dell'utente effettua generalmente un'elaborazione in risposta alla pressione di uno dei pulsanti della stessa finestra di dialogo.
Le finestra di dialogo possono essere semplici o complesse, a seconda delle necessità. Quando si implementa una finestra di dialogo, la maggior parte del codice della finestra riguarda la creazione dei controlli SWT che rappresentano la relativa area del contenuto e la gestione di tutti gli eventi necessari durante la visualizzazione della finestra di dialogo. Quando l'utente preme un pulsante, la finestra di dialogo può eseguire una query dello stato dei vari controlli (o dei visualizzatori) che compongono la finestra stessa per determinare l'azione da intraprendere.