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 ReadmeModelFactory, MarkElement 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.