Redigerare har ofta motsvarande funktion för innehållsdispositonsvyer som ger en strukturerad visning av redigerarens innehåll och hjälper användaren att navigera genom innehållet.
I arbetsmiljön finns en standarddispositionsvy för detta ändamål. Denna vy, när den visas i arbetsmiljön, kan styras av användaren via menyn Fönster > Visa vy.
Eftersom den allmänna textredigeraren inte känner till sin egen textstruktur kan inte någon intressant dispositionsvy visas. Standarddispositionsvyn nedan gör därför inte mycket.
Redigerare i textramverket kan tillföra en egen innehållsdispositionsvysida till dispositionsvyn. Dispositionsvynför en redigerare specificeras när arbetsmiljön begär en adapter av typen IContentOutlinePage.
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); }
En sida med innehållsdisposition måste implementera IContentOutlinePage. I detta gränssnitt kombineras möjligheten att avisera väljarlyssnare (ISelectionProvider) med beteendet att vara en sida i en vy IPage). Innehållsdisposition implementeras normalt via JFace-visningsprogram. I standardimplementeringen för innehållsdisposition (ContentOutlinePage) används en JFace-trädvisning så att dispositionen visas hierarkiskt. Denna visning är lämplig för många strukturerade dispositioner bl.a. JavaContentOutlinePage.
Låt oss titta på implementeringen av sidan. När dispositionssidan skapas av redigeraren i kodstycket ovan, ställs dess inmatningselement in på redigerarens inmatningselement. Denna inmatning kan ofta skickas direkt till dipositionssidans visningsprogram, så som det görs nedan.
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); }
Skapande av trädvisningen ärvs från ContentOutlinePage. Standardetikettsprovidern används. Innehållsprovidern i JavaContentOutlinePage tolkar redigerarinmatningen och delar upp den i enskilda segment när förändring sker.
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); } } }
Texten tolkas och delas upp i segment i dokumentet. Dessa segment visas efter namn i dispositionsvyn.
När urvalet ändras, hämtas det valda segmentet. Dess offset används för att ställa in det markerade området i redigeraren.
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(); } } }