Programdialogbokse

Når en standarddialogboks er for enkel til din plugin, kan du bygge din egen dialogboks vha. klassen Dialog. Vi har tidligere set, hvordan Readme-værktøjet har bidraget til funktionen "Åbn Readme-browser" i et funktionssæt.  Dette funktionssæt vises på værktøjslinjen til arbejdsbænken og på menuen Vindue->Editor til Readme-fil.  

Nu er vi parate til at se på implementeringen af denne funktion i Readme-værktøjets WindowActionDelegate.

public void run(IAction action) {
      SectionsDialog dialog = new SectionsDialog(window.getShell(),
         ReadmeModelFactory.getInstance().getSections(selection));
      dialog.open();
   }

Vinduesfunktionens delegerede til funktionssættet bruger det aktuelle valg i ressourcenavigator-oversigten ( .readme-filen) til at hente en liste over afsnit i Readme-filen. Denne liste og arbejdsbænkens vindues-shell sendes videre til SectionsDialog

Når brugeren vælger funktionen, åbnes SectionsDialog.

SectionsDialog implementeres i Readme-værktøjets plugin ved at oprette en underklasse til klassen Dialog i pakken org.eclipse.jface.dialogs.

Klassen Dialog omfatter basisfunktioner til bygning af et shell-vindue i en dialogboks, hvor de almindelige dialogboks-knapper oprettes, og dialogboksen startes. Underklasserne er ansvarlige for at håndtere indholdet af selve dialogboksen:

SectionsDialog implementerer ikke en okButtonPressed-metode. Den overtager "udfør-ingenting"- implementeringen fra Dialog. Det er ikke typisk. Normalt udfører dialogboksen en eller anden form for behandling som reaktion på, at der er trykket på en af knapperne i dialogboksen.

Dialogbokse kan være så enkle eller komplicerede, som det er nødvendigt. Når du implementerer en dialogboks, drejer størsteparten af dialogkoden sig om at oprette de SWT-kontroller, som repræsenterer indholdsområdet, og om at håndtere de nødvendige aktiviteter, når dialogboksen er oppe. Når en bruger trykker på en knap, kan dialogboksen sende en forespørgsel om tilstanden af de forskellige kontroller (eller fremvisere), der udgør dialogboksen, for at afgøre, hvad der skal gøres.

Pop op-dialogbokse

I visse tilfælde kan du have brug for at få vist oplysninger om noget i en dialogboks, blot ikke så meget som hvis du åbner en almindelig dialogboks. F.eks kan en dialogboks indeholde midlertidige oplysninger, der kan ignoreres for ikke at forstyrre brugerens arbejde. Hvis det er tilfældet, kan du anvende Pop op-dialogboks-klassen til at implementere dialogboksen. Udseendet på en Pop op-dialogboks adskiller sig fra en almindelig dialogboks på flere måder. Den har ikke nogen knapper i bunden og ikke en Windows-standardtitellinje. Rammer, afstande og fonte er mindre og mere kompakte.

Selvom en Pop op-dialogboks ser meget anderledes ud end en almindelig dialogboks, er den kode, der angiver dialogboksens indhold i underklassen for plugin'en, næsten den samme. Du kan stadig implementere metoden createDialogArea for at oprette SWT-kontroller til dialogboksen. Hovedforskellen i programkoden er, at konstruktøren, der opretter dialogboksen, har mange flere parametre end den almindelige dialogboksklasse. SectionsDialog kan f.eks. ændres til en pop op-dialogboks blot ved at ændre superklassen for dialogboksen og konfigurere dialogboksen i konstruktøren.

   public class SectionsDialog extends PopupDialog {
      protected IAdaptable input;

      /**
      * Opretter en ny SectionsDialog.
      */
      public SectionsDialog(Shell parentShell, IAdaptable input) {
        super(parentShell, SWT.DEFAULT, false, // fokusér ikke ved åbning
        	false, // bevar ikke grænserne
        	false, // vis ikke en menu for tilpasning af størrelse
        	false, // vis ikke menupunkt for bevarelse af grænser
        	null, //  ingen titel
        	null); // ingen infotekst
        this.input = input;
      }
      ...