Muokkausohjelmat sisältävät usein sisällön jäsentelytoimintoja, jotka voivat muodostaa muokkausohjelman sisällöstä jäsentyneen näkymän ja jotka helpottavat käyttäjän siirtymistä muokkausohjelman sisällössä.
Työympäristössä on tätä varten vakiohahmotelmanäkymä. Työympäristön käyttäjä voi säätää tämän näkymän näkymistä Ikkuna> Näytä näkymä-valikosta.
Koska yleinen TextEditor ei ymmärrä tekstin rakennetta, sen toiminnoista ei ole hahmotelmanäkymälle hyötyä. Siksi alla kuvatulla, oletusarvon mukaisella Hahmotelmanäkymällä ei tee paljoakaan.
Tekstikehyksen muokkausohjelmat voivat luoda hahmotelmanäkymään oman sisällön jäsentelytoiminnon sivunsa. Muokkausohjelman jäsentelytoiminto määritetään, kun työympäristö vaatii IContentOutlinePage-tyyppistä sovitinta.
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); }
Sisällön jäsentelytoiminnon pitää toteuttaa IContentOutlinePage-rajapinta. Se voi ilmoittaa valinnan muutosten kuuntelutoiminnolle ISelectionProvider) ja se näkyy näkymässä (IPage) sivuna. Sisällön jäsentelytoiminnot toteutetaan yleensä JFace-katselutoimintojen avulla. Sisällön jäsentelytoiminnon (ContentOutlinePage) oletustoteutus esittää hahmotelman hierarkkisesti JFace-katselutoiminnon avulla. Tämä esitys sopii moniin rakenteisiin jäsentelytoimintoihin, kuten JavaContentOutlinePage-luokkaan.
Seuraavassa perehdytään sivun toteutukseen. Kun yllä esitetyssä koodikatkelmassa muokkausohjelma luo hahmotelmasivun, sivun syöte-elementti määritetään muokkausohjelman syöte-elementiksi. Syötteen voi usein välittää suoraan hahmotelmasivun katseluohjelmalle, kuten alla olevasta esimerkistä näkyy.
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); }
Rakenteen katseluohjelman luonti periytyy ContentOutlinePage-luokalta. Siinä on käytetty otsikon vakiotoimittajaa. JavaContentOutlinePage tuo käyttöön sisällön toimittajan, joka jäsentää muokkausohjelman syötettä yksittäisiksi segmenteiksi aina kun syöte muuttuu.
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); } } }
Asiakirjan sisällä teksti jäsennetään alueisiin eli segmentteihin. Hahmotelmanäkymässä segmentit näytetään niminä.
Kun valinta muuttuu, valittu segmentti noudetaan. Sen siirtymiä käytetään muokkausohjelmassa näkyvän korostetun alueen määrittämiseen.
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(); } } }