A szerkesztők gyakran rendelkeznek megfelelő tartalomkiemelőkkel, amelyek a szerkesztőtartalom strukturált nézetét biztosítják, és segítséget nyújtanak a felhasználó számára a szerkesztő tartalmában navigáláshoz.
A munkaterület egy általános Kiemelő nézetet biztosít ezen célra. A munkaterület-felhasználó az Ablak > Nézet megjelenítése menü segítségével szabályozhatja a nézet láthatóságát.
Mivel az általános TextEditor nem tud semmit a szöveg struktúrájáról, nem biztosíthat jellemzőket az érintett kiemelőnézethez. Az alább látható alapértelmezett Kiemelő nézet nem tesz sokmindent.
A szövegkeretrendszer szerkesztői saját tartalomkiemelőt biztosíthatnak a kiemelő nézethez. A szerkesztő kiemelője akkor van megadva, ha a munkaterület egy IContentOutlinePage típusú adaptert kér.
public Object getAdapter(Class required) { if (IContentOutlinePage.class.equals(required)) { if (fOutlinePage == null) { fOutlinePage= new JavaContentOutlinePage(getDocumentProvider(), this); if (getEditorInput() != null) fOutlinePage.setInput(getEditorInput()); } return fOutlinePage; } return super.getAdapter(required); }
A tartalomkiemelő oldalnak meg kell valósítani az IContentOutlinePage elemet. Ez a felület egyesíti a kiválasztásmódosítási figyelők értesítésének képességét (ISelectionProvider) azzal a jellemzővel, hogy az oldal egy nézetben legyen (IPage). Tartalomkiemelők jellemzően JFace megjelenítők segítségével kerülnek megvalósításra. A tartalomkiemelő alapértelmezett megvalósítása (ContentOutlinePage) a JFace famegjelenítőt használja a kiemelő hierarchikus ábrázolásának megjelenítéséhez. Ez az ábrázolás számos strukturált kiemelőhöz megfelelő, a JavaContentOutlinePage elemet is beleértve.
Tekintsük meg az oldal megvalósítását. Ha a kiemelőoldalt a szerkesztő a fenti kódrészletben létrehozta, akkor a bemeneti elem a szerkesztő bemeneti elemére van beállítva. Ez a bemenet gyakran közvetlenül átadható a kiemelőoldal megjelenítőjének az alábbi módon.
public void createControl(Composite parent) { super.createControl(parent); TreeViewer viewer= getTreeViewer(); viewer.setContentProvider(new ContentProvider()); viewer.setLabelProvider(new LabelProvider()); viewer.addSelectionChangedListener(this); if (fInput != null) viewer.setInput(fInput); }
A famegjelenítő létrehozása a ContentOutlinePage elemből öröklődik. A rendszer a szabványos címkeszolgáltatót használja. A tartalomszolgáltató a JavaContentOutlinePage elemen belül kerül biztosításra, és a szerkesztőbemenet egyedi szegmensekre bontásáért felelős, amennyiben módosul.
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { ... if (newInput != null) { IDocument document= fDocumentProvider.getDocument(newInput); if (document != null) { document.addPositionCategory(SEGMENTS); document.addPositionUpdater(fPositionUpdater); parse(document); } } }
A szöveg tartományokra van osztva a dokumentumon belül, amelyeket szegmenseknek hívnak. Ezeket a szegmenseket a név jeleníti meg a vázlat nézetben.
Ha a kiválasztás változásakor, akkor a kiválasztott szegmens lekérésre kerül. Az eltolások beállítják a kiemelési tartományt a szerkesztőben.
public void selectionChanged(SelectionChangedEvent event) { super.selectionChanged(event); ISelection selection= event.getSelection(); if (selection.isEmpty()) fTextEditor.resetHighlightRange(); else { Segment segment= (Segment) ((IStructuredSelection) selection).getFirstElement(); int start= segment.position.getOffset(); int length= segment.position.getLength(); try { fTextEditor.setHighlightRange(start, length, true); } catch (IllegalArgumentException x) { fTextEditor.resetHighlightRange(); } } }