Quando una finestra di dialogo standard è troppo semplice per il plug-in in uso, è possibile crearne una personalizzata utilizzando la classe Dialog. In precedenza è stato descritto il modo in cui lo strumento readme aggiunge un'azione "apertura browser del readme" in un insieme di azioni. Tale insieme di azioni viene visualizzato 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 l'insieme di azioni utilizza la selezione corrente della vista del pannello di selezione 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 trasferiti a SectionsDialog.
Quando l'utente seleziona l'azione, viene aperta SectionsDialog.
SectionsDialog viene implementata nel plug-in dello strumento readme 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. Si osservi 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(MessageUtil.getString("Readme Sections"));
...
}
Le finestre 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 costituiscono la finestra stessa per determinare l'azione da intraprendere.