org.eclipse.ui.views

A nézet egy munkaterületrész, amely navigálni tudja az információk hierarchiáját vagy megjelenítheti egy objektum tulajdonságait. Egy munkaterület-oldalon csak egy adott nézet egy példánya van csak megnyitva.  Ha a felhasználó kiválaszt egy elemet vagy más módosítást végez a nézeten, akkor ezek a változások azonnal tükröződnek a munkaterületen.A nézetek célja gyakran a megfelelő szerkesztő támogatása.  A körvonal nézet például az információk strukturált nézetét jeleníti meg a szerkesztőben.  A tulajdonságok nézet az aktuálisan szerkesztett objektum tulajdonságait jeleníti meg.

Az org.eclipse.ui.views kiterjesztési pont segítségével a bedolgozók nézeteket adhatnak a munkaterülethez. A nézetet közreadó bedolgozóknak be kell jegyezniük a nézetet a plugin.xml fájlban és   a nézettel kapcsolatos konfigurációs információkat kell megadniuk, mint például a megvalósítási osztály, a nézetek kategóriája (vagy csoportja), amelyhez tartozik, és a nézet menükben és címkéken leírásához használt név és ikon .

A nézetek felülete az IViewPart elemben van megadva, de az IViewPart nulláról megvalósítása helyett a bedolgozók kiterjeszthetik a ViewPart osztályt.

Egy minimális nézetkiterjesztést valósítottunk meg a hello world példában. Most egy olyat nézünk meg, amely ismer más munkaterület-nézeteket, és reagál a felhasználói navigációra a munkaterület kijelölés-módosításaira. Először tekintsük meg a plugin.xml fájlban lévő kiterjesztés deklarációját.

<extension 
   point="org.eclipse.ui.views">
	<category 
	   id="org.eclipse.ui.examples.readmetool"
	   name="%Views.category">
	</category>
	<view
 	   id="org.eclipse.ui.examples.readmetool.views.SectionsView"
	   name="%Views.ReadmeSections"
	   icon="icons/view16/sections.png"
	   category="org.eclipse.ui.examples.readmetool"
	   class="org.eclipse.ui.examples.readmetool.ReadmeSectionsView">
	</view>
   </extension>

Ennek ismerősnek kell lennie. Láthattuk, hogy egy új nézet - a ReadmeSectionsView - közreadásra került a munkaterületen. A nézetazonosító, név és kategória a korábban látott módon megadásra került. Az új nézethez egy ikon is meg van adva a bedolgozó telepítési könyvtárához viszonyított elérési úttal.

Tekintsük meg a ReadmeSectionsView elemet. A munkaterület tetszőleges nézetét az Ablak->Nézet megjelenítése->Egyéb... , majd a Megjelenítés nézet lista megfelelő nézetének kiválasztásával jelenítheti meg.

A ReadmeSectionsView elem megjelenítésekor előugrik a nézet egy listával. A lista üres, hacsak rá nem kattint a .readme kiterjesztésű fájlra, mert ebben az esetben a lista feltöltésre kerül a readme fájl részeivel.

Hogyan ismeri fel a bedolgozó a readme fájlt, és honnan tud a kiválasztás-módosításokról? Ha kinyomozzuk a választ ezekre a kérdésekre, akkor jó útun haladunk az integrált munkaterület bedolgozók összeépítésének megértése felé.

Az ismerős createPartControl metódussal kezdjük. Ahogy a Hello World példában láthattuk, ez az, amelyben a nézetet ábrázoló felületi elemek létrehozásra kerülnek. Az indításhoz a kód egy részét figyelmen kívül hagyjuk.

   public void createPartControl(Composite parent) {
      viewer = new ListViewer(parent);
      ...
      // felveszi magát globális kiválasztásfigyelőként
      getSite().getPage().addSelectionListener(this);

      // a kijelölés előkészítése
      selectionChanged(null, getSite().getPage().getSelection());
   }

A nézet létrehoz és eltárol egy ListViewer elemet, és az oldalon bejegyzi magát kiválasztásfigyelőként. Lekéri az oldalt az IViewSite nézetből, amely a nézet kontextusával kapcsolatos információkat tartalmaz, mint például a munkaterület-ablak, a tartalmazó oldal és a bedolgozó. Mi történik, ha értesítést kapunk a kiválasztás-módosításról?  Az alábbi kód kerül végrehajtásra:

   public void selectionChanged(IWorkbenchPart part, ISelection sel) {
      //ha a kijelölt elem egy readme fájl, akkor lekéri a részeit.
      AdaptableList input = ReadmeModelFactory.getInstance().getSections(sel);
      viewer.setInput(input);
   }

A ReadmeModelFactory osztály felelős a readme részek kijelöléséért, és ezek a részek a createPartControl metódusban létrehozott megjelenítő bemenetei.

Hogyan tölti ki a megjelenítő a lista felületi elemeit? Tételezzük fel, hogy a megjelenítő megkapta a bemeneti elemet, és tudja, hogyan kell feltölteni a lista felületi elemet információkkal - ez a ListViewer.   Ha azonnal tudnia kell, hogy mi is ez a megjelenítő, akkor menjen a Nézetek részre. 

Továbbra sem tudjuk, hogy a readme fájlok hogy észlelhetők, és hogy a fájl szakaszinformációi honnan származnak.  A ReadmeModelFactory gyors megtekintése némi rávilágítást ad.

   public AdaptableList getSections(ISelection sel) {
      // Ha a sel nem strukturált kijelölés, akkor null értékkel tér vissza.
      if (!(sel instanceof IStructuredSelection))
      return null;
      IStructuredSelection structured = (IStructuredSelection)sel;

      //ha a kijelölt elem egy readme fájl, akkor lekéri a részeit.
      Object object = structured.getFirstElement();
      if (object instanceof IFile) {
         IFile file = (IFile) object;
         String extension = file.getFileExtension();
         if (extension != null && extension.equals(IReadmeConstants.EXTENSION)) {
            return getSections(file);
         }
      }

      //a kiválasztott objektum nem readme fájl
      return null;
   }

Ellenőrizzük a kijelölést, ha látjuk, hogy ez egy strukturált (többszörös) kijelölés.  (A strukturált kijelölés alapelve a JFace megjelenítőkből származik.)  A kijelölés első objektumát ellenőrizzük, hogy fájl (IFile) erőforrás-e. Ha igen, akkor ellenőrizzük a kiterjesztést, hogy megfelel-e a ".readme" kiterjesztésnek. Ha tudjuk, hogy rendelkezésünkre áll egy readme fájl, a szakaszok elemzéséhez akkor használhatunk másik metódusokat .  A fájlelemzéssel kapcsolatos részletes információkért megtekintheti a ReadmeModelFactoryMarkElement DefaultSectionsParser további részeit.

Ezen kiterjesztés tanulmányozásával számos általános munkaterület-alapfogalmat lefedtünk. Ezután néhány másik munkaterület-kiterjesztést nézünk meg és megvizsgáljuk, hogy a bedolgozó hogyan egészítheti ki a munkaterület felhasználói felületet.