Arbetsmiljön under höljet

Arbetsmiljön tillhandahåller en omfattande uppsättning klasser och gränssnitt som används vid byggandet av komplexa användargränssnitt. Lyckligtvis behöver du inte förstå dem alla för att göra något enkelt. Vi börjar med att titta på några av de begrepp som exponeras i arbetsmiljöns användargränssnitt och deras motsvarande struktur under höljet.

Arbetsmiljö

Vi har använt termen arbetsmiljö löst för att beteckna "det fönster som öppnas när du startar plattformen." Låt oss gå lite djupare och titta på några av de visuella komponenter som utgör arbetsmiljön.

Arbetsmiljö med tre vyer och en redigerare på en sida

Under resten av denna diskussion kommer vi när vi använder termen arbetsmiljö att mena arbetsmiljöfönstret (IWorkbenchWindow). Arbetsmiljöfönstret är det översta fönstret i en arbetsmiljö. Det är den ram som innehåller menyraden, verktygsfältet, statusraden, genvägsfältet och sidor. I allmänhet behöver du inte programmera arbetsmiljöfönstret. Du vill bara veta att den finns där.

Obs!  Du kan öppna flera arbetsmiljöfönster, men varje arbetsmiljöfönster är en egen värld av redigerare och vyer, så vi kommer bara att fokusera på ett enda arbetsmiljöfönster.

Ur användarens synvinkel innehåller en arbetsmiljö vyer och redigerare. Det finns några andra klasser som används till att implementera arbetsmiljöfönstret. 

Sida

I arbetsmiljöfönstret finns sidan (IWorkbenchPage) som i sin tur innehåller delar. Sidor är en implementationsmekanism för gruppering av delar. Du behöver vanligen inte programmera sidan, men du kommer att se den i kontexten av programmering och felsökning.

Perspektiv

Perspektiv tillhandahåller ytterligare ett lager av organisation på arbetsmiljösidan.  Ett perspektiv definierar en lämplig samling vyer, deras layout och tillämpliga åtgärder för en given användaraktivitet.  Användare kan växla mellan perspektiv när de flyttar mellan aktiviteter.   Ur en implementationssynvinkel styr användarens aktiva perspektiv vilka vyer som visas på arbetsmiljösidan och deras plats och storlekar.  Redigerare påverkas inte av en ändring i perspektivet.

Vyer och redigerare

Vyer och redigerare är där vi går bortom implementationsdetaljer och in i vanlig insticksprogrammering. När du lägger till en visuell komponent i arbetsmiljön måste du avgöra om du vill implementera en vy eller en redigerare. Hur avgör du detta?

I vilket fall kommer du att bygga din vy eller redigerare enligt en vanlig livscykel.

Genom hela denna livscykel avfyras händelser från den innehållande arbetsmiljön och anger intresserade parter om öppning, aktivering, inaktivering och stängning av vyerna och redigerarna.

Verkar det enkelt?  Det kan det vara. Det är det eleganta med arbetsmiljöns vyer och redigerare. De är helt enkelt kontrollhållare och kan vara så enkla eller komplexa som du behöver att de är. Vi såg den enklaste av vyer tidigare när vi byggde en 'hello world'-vy. Låt oss ta en titt på den igen nu när vi förklarat med om vad som pågår.

   package org.eclipse.examples.helloworld;

   import org.eclipse.swt.widgets.Composite;
   import org.eclipse.swt.widgets.Label;
   import org.eclipse.swt.SWT;
   import org.eclipse.ui.part.ViewPart;

   public class HelloWorldView extends ViewPart {
      Label label;
      public HelloWorldView() {
      }
      public void createPartControl(Composite parent) {
         label = new Label(parent, SWT.WRAP);
         label.setText("Hello World");
      }
      public void setFocus() {
         // tilldela fokus till min gränssnittskontroll. För en etikett betyder det
         // inte mycket, men för mer komplexa uppsättningar av gränssnittskontroller
         // anger du här vilken som ska tilldelas fokus.
      }
   }

Lägg märke till att vi inte behövde implementera en dispose()-metod eftersom vi inte gjorde något annat än att skapa en etikett i metoden createPartControl(parent). Om vi hade allokerat några UI-resurser, t.ex. bilder eller teckensnitt, kunde vi ha tagit bort dem här. Eftersom vi utökade klassen ViewPart, ärvde vi "do nothing"-implementationen från dispose().