Tillämpningsdialogrutor

När en standarddialogruta är för enkel för ditt insticksprogram kan du bygga en egen dialogruta med hjälp av klassen Dialog. Tidigare såg vi hur Readme-verktyget la till en "Öppna Readme-webbläsare"-åtgärd i en åtgärdsuppsättning. Denna åtgärdsuppsättning visas i arbetsmiljöns verktygsfält och i menyn för Fönster->Readme-filredigerare.  

Nu kan vi titta närmare på implementeringen av denna åtgärd i Readme-verktygets WindowActionDelegate.

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

I fönsteråtgärdsdelegaten för åtgärdsuppsättningen används aktuellt urval i resursnavigatorsvyn ( .readme-filen) för att få en lista över sektioner i readme-filen. Denna lista och arbetsmiljöns fönsterskal skickas till SectionsDialog

När användaren väljer åtgärden, öppnas SectionsDialog.

SectionsDialog implementeras i insticksprogrammet för readme-verktyget genom att klassen Dialog subklassas i paketet org.eclipse.jface.dialogs.

Klassen Dialog ger grundstöd för att bygga ett dialogskalfönster, skapa gemensamma dialogknappar och öppna dialogrutan. Subklasserna ansvarar för hantering av innehållet i själva dialogrutan:

SectionsDialog implementerar inte en okButtonPressed-metod. Den ärver "do-nothing"-implementeringen från Dialog. Detta är inte vanligt. I din dialogruta genomförs normalt en del bearbetning som svar på att en av dialogknapparna trycks ner.

Dialogrutor kan vara hur enkla eller komplicerade som helst. När du implementerar en dialogruta, handlar den största delen av dialogkoden om skapandet av SWT-kontrollerna som representerar dess innehållsområde och hanteringen av händelser som erfordras när dialogrutan är öppen. När en användare trycker på en knapp, kan dialogrutan fråga efter status hos de olika kontrollerna (eller visningsprogram) som utgör dialogrutan för att bestämma vad som ska göras.

Meddelandefönster

Det kan hända att du vill visa information om något i ett fönster men på ett sätt som är mer "lättvindigt" än att en vanlig dialogruta öppnas. Ett fönster kan vara ämnat att ge tillfällig information som användaren enkelt kan ignorera utan att bli distraherad i arbetet. I det fallet kan du använda klassen PopupDialog till att implementera meddelandefönstret. Ett meddelandefönster skiljer sig utseendemässigt från en vanlig dialogruta på flera sätt. Det finns inte några knappar längst ned i fönstret eller någon standardnamnlist och fönsterram, mellanrum och teckensnitt är mindre och kompaktare.

Trots att en PopupDialog ser väldigt annorlunda ut jämfört med en vanlig dialogruta är den kod i insticksprogrammets underklass som definierar dialogruteinnehållet nästan densamma. Du implementerar också createDialogArea-metoden för att skapa SWT-kontroller för dialogrutan. Den huvudsakliga skillnaden i tillämpningskoden är att den konstruktor som skapar dialogrutan har många fler parametrar än den vanliga Dialog-klassen. Till exempel kan SectionsDialog skapas om till en PopupDialog genom att superklassen för dialogrutan ändras och dialogrutan konfigureras i konstruktorn:

   public class SectionsDialog extends PopupDialog {
      protected IAdaptable input;

      /**
      * En ny SectionsDialog skapas.
      */
      public SectionsDialog(Shell parentShell, IAdaptable input) {
        super(parentShell, SWT.DEFAULT, false, // tar inte fokus när den öppnas
        	false, // behåller inte gränserna
        	false, // visar inte en meny för storleksändring
        	false, // visar inte ett menyalternativ för att behålla gränser
        	null, //  inget namn
        	null); // ingen informationstext
        this.input = input;
      }
      ...