A szerkesztő és a megfelelő szövegmegjelenítői nagymértékben felelősek a dokumentum megjelenítőjének megvalósításáért és a szükséges súgóosztályok konfigurációjáért. (Ha nem ismeri a megjelenítő alapelveit, akkor tekintse meg a Nézeteket.)
A TextViewer kezeli a dokumentummodell és ezek partícióinak a felhasználó által látható színezett és formázott szövegre leképezésének alacsony szintű részleteit. A forráskód stílusszerkesztőikhez egy SourceViewer van megadva. A forrásmegjelenítő bevezeti a forráskód-feljegyzések fogalmát. Ezek a feljegyzések megjeleníthetők a szöveg baloldalán lévő függőleges vonalzón, a szöveg jobboldalán lévő áttekintés vonalzón, vagy színezett hullámvonalak a szöveg alatt.
SourceViewer elemet és ennek súgóosztályát a rendszer az AbstractTextEditor hierarchián keresztül használja. A org.eclipse.jface.text.source csomag megadja ezt a megjelenítőt és a feljegyzés megjelenítést támogató egyéb osztályokat.
Feljegyzések, mint például a partíciók, nagymértékben függenek a szerkesztendő dokumentum típusától. A dokumentumhoz tartozó IAnnotationModel tárolja a feljegyzéseket, felsorolja őket kérésre, és figyeli a szövegváltozásokat a feljegyzések frissen tartása érdekében. A feljegyzésmodellek be vannak jegyezve az org.eclipse.core.filebuffers.annotationModelCreation kiterjesztésben. Ezen kiterjesztési pont segítségével bejegyezhet egy osztályt, amely létrehoz egy adott fájlkiterjesztéshez megfelelő feljegyzési modellt. A Java Editor példa nem használja ezt a kiterjesztési pontot, így örökli a platform által megadott feljegyzési modellt.
<extension point="org.eclipse.core.filebuffers.annotationModelCreation"> <factory extensions="*" class="org.eclipse.ui.texteditor.ResourceMarkerAnnotationModelFactory"> </factory> </extension>
A biztosított gyárosztály létrehoz egy ResourceMarkerAnnotationModel elemet a kiterjesztéssel rendelkező fájlokhoz. Ez az osztály megjeleníti a feljegyzéseket, amelyek egy jelzőt ábrázolnak a munkaterületen lévő erőforráson. (A jelzőkkel kapcsolatos információkért tekintse meg az Erőforrásjelzők részt.) Egy képet és egy leírást rendel minden jelzőhöz, és megfigyeli az erőforrásokat a jelzőmódosítások észlelése érdekében.
Annak megtekintéséhez, hogy a feljegyzésmodell hogy jelenik meg a szövegszerkesztőben, megvizsgáljuk a platform szövegszerkesztőt és annak vonalzóhasználatát és feljegyzéseit. A különböző feljegyzések vonalzókon megjelenítésének és a felhasználó által szabályozható szöveg jellemzői az Általános > Szerkesztők > Szövegszerkesztők > Feljegyzések tulajdonságok részében találhatók.
A szerkesztési terület baloldalán lévő függőleges vonalzót a platform szövegszerkesztők használják a szövegtartományok megjelenítéséhez és a sor alapú feljegyzéseket a szövegsor mellett.
Ezek a feljegyzések a biztosított ResourceMarkerAnnotationModel elemben vannak leírva. Ez a modell be van állítva a SourceViewer elembe, amikor a szerkesztő inicializálja a forrásmegjelenítőt. Az AbstractTextEditor alábbi részlete megjeleníti, hogy a dokumentum- és feljegyzésmodell hogyan van hozzárendelve a megjelenítőhöz.
private void initializeSourceViewer(IEditorInput input) { IAnnotationModel model= getDocumentProvider().getAnnotationModel(input); IDocument document= getDocumentProvider().getDocument(input); if (document != null) { fSourceViewer.setDocument(document, model); ...
Ha a forrásmegjelenítő be van állítva a megfelelő dokumentum- és feljegyzésmodellel, akkor elegendő információkkal rendelkezik a dokumentum megjelenítéséhez és biztosítja, hogy a megfelelő feljegyzések megjelennek baloldalon a függőeleges vonalzón. A modell hozzá van rendelve a vonalzóhoz, amikor a dokumentum be van állítva. Az alábbi részlet megjeleníti, hogy mi történik, amikor a dokumentum be van állítva a forrásmegjelenítőben. Ez egyszerűsítésre került a SourceViewer elemben lévő aktuális kódból a világosság érdekében:
public void setDocument(IDocument document, IAnnotationModel annotationModel) { ... // vizuális feljegyzésmodell létrehozása a biztosított modellből és tárolja a // a fVisualAnnotationModel elemben ... if (fVerticalRuler != null) fVerticalRuler.setModel(fVisualAnnotationModel);
Ebben az esetben a vonalzó hozzá van rendelve a megfelelő feljegyzésmodellhez.
Nézzük meg magát a vonalzót. A szövegszerkesztő hozza létre, majd csatlakoztatva lesz a szerkesztő megjelenítőjével. Mivel a Java szerkesztő példa nem ad meg a vonalzókhoz speciális jellemzőket, örökli a vonalzót a TextEditor elemben megadott módon.
protected IVerticalRuler createVerticalRuler() { CompositeRuler ruler= new CompositeRuler(); ruler.addDecorator(0, new AnnotationRulerColumn(VERTICAL_RULER_WIDTH)); if (isLineNumberRulerVisible()) ruler.addDecorator(1, createLineNumberRulerColumn()); return ruler; }
A szövegszerkesztő a CompositeRuler elemet használja. Ez a vonalzó maga nem rendelkezik vizuális megjelenítéssel. A megjelenítést a díszítmények listája biztosítja, amelyek oszlopokat (IVerticalRulerColumn) jelenítenek meg a vonalzón. Ebben a példában a feljegyzéseket megjelenítő vonalzóoszlop (AnnotationRulerColumn) mindig hozzá van adva, és egy sorszám vonalzó oszlop kerül be a felhasználói tulajdonságok alapján.A feljegyzésvonalzó-oszlop kezeli a feljegyzésképek megjelenítésének részeit a megfelelő helyen.
Annak ellenére, hogy az összes osztály megjelenik a vonalzón, ne feledje el, hogy a példa szerkesztő csak az alosztály keretrendszer osztályokhoz szükséges a vonalzójellemzők eléréséhez. JavaDocumentProvider örökli a megfelelő jelzőfeljegyzési modellt a FileDocumentProvider elemtől. A JavaTextEditor a vonalzómegjelenítést a TextEditor elemtől örökli.
A szerkesztési terület jobboldalán lévő áttekintősáv megjeleníti a teljes dokumentumot érintő feljegyzéseket. Ezek a feljegyzések a dokumentumban elfoglalt helyükhöz viszonyítva jelennek meg, és nem mozdulnak el, amikor a felhasználó végiggörgeti a dokumentumot. Általában egy megfelelő feljegyzés található a függőleges vonalzón, amikor a dokumentum ezen része látható.
Az alábbi függőleges vonalzó megjeleníti, hogy két feladat és egy könyvjelző található a dokumentumban. Mivel a könyvjelzővel ellátott szöveg látható, a feljegyzései szintén megjelennek a baloldalon.
A felhasználó a feljegyzés helyére ugorhat a kódban, ha magára rákattint a feljegyzésre.
Az áttekintősávon megjelenő feljegyzések típusait a feljegyzéstípusok vonalzóhoz adása határozza meg. A SourceViewerDecorationSupport, feljegyzéstípusok alábbi részletei dinamikusan hozzáadódnak a vonalzóhoz. (A SourceViewerDecorationSupport elemmel kapcsolatos további információkért tekintse meg a következő részt.)
private void showAnnotationOverview(Object annotationType) {
if (fOverviewRuler != null) { Color c= getAnnotationTypeColor(annotationType);
fOverviewRuler.setAnnotationTypeColor(annotationType, c); int l= getAnnotationTypeLayer(annotationType);
fOverviewRuler.setAnnotationTypeLayer(annotationType, l);
fOverviewRuler.addAnnotationType(annotationType);
fOverviewRuler.update();
} }
Az IAnnotationAccess elemhez egy áttekintősávot adnak, amely az adott feljegyzéssel kapcsolatos információkat biztosít, mint például a típusa, és a megjelenítésének módja. A TextEditor egy DefaultMarkerAnnotationAccess elemet használ, amely a jelzőtípusnak megfelelően interpretálja a feljegyzéseket és megnézi a felhasználói tulajdonságokat annak meghatározásához, hogy mely jelzőtípusokat kell megjeleníteni az áttekintősávon.
protected IAnnotationAccess createAnnotationAccess() { return new DefaultMarkerAnnotationAccess(fAnnotationPreferences); }
A jelzők áttekintősávon megjelenítésével kapcsolatos további részletekért tekintse meg a DefaultMarkerAnnotationAccess és MarkerAnnotation megvalósítását.
A feljegyzések vonalzón megjelenítésén kívül a forrásmegjelenítő a feljegyzéseket színezett hullámvonalként is megjelenítheti a szövegben.
A forrásmegjelenítő TextEditorban létrehozását újból áttekintjük.
protected ISourceViewer createSourceViewer(Composite parent, IVerticalRuler ruler, int styles) { ... ISourceViewer sourceViewer= new SourceViewer(parent, ruler, fOverviewRuler, isOverviewRulerVisible(), styles); fSourceViewerDecorationSupport= new SourceViewerDecorationSupport(sourceViewer, fOverviewRuler, fAnnotationAccess, sharedColors); configureSourceViewerDecorationSupport(); return sourceViewer; }
A SourceViewerDecorationSupport osztály a forrásmegjelenítőben látható számós dekorációt is kezeli, a szövegfeljegyzéseket, a színezett margókat, színezett kurzorvonalakat és ehhez hasonlókat is beleértve. Ez a felhasználói tulajdonságokkal van beállítva, így válaszolhat a reagálni tud a tulajdonságváltozások dinamikus frissítéseire. A legtöbb szerkesztőnek nem kell a díszítmények kirajzolásának részleteivel foglalkozni. (Tekintse meg a SourceViewerDecorationSupport osztályt és a kapcsolódó osztályokat, mint például az AnnotationPainter amennyiben szükséges!). Fontos dolog, amit tudni kell, hogy milyen dekorációk állnak rendelkezésre, így a SourceViewer és a támogató SourceViewerDecorationSupport elemek megfelelően beállíthatók.
A dekorációtámogatásért tekintse meg a TextEditor által használt konfigurációt.
protected void configureSourceViewerDecorationSupport() { Iterator e= fAnnotationPreferences.getAnnotationPreferences().iterator(); while (e.hasNext()) fSourceViewerDecorationSupport.setAnnotationPreference((AnnotationPreference) e.next()); fSourceViewerDecorationSupport.setAnnotationPainterPreferenceKeys(DefaultMarkerAnnotationAccess.UNKNOWN, UNKNOWN_INDICATION_COLOR, UNKNOWN_INDICATION, UNKNOWN_INDICATION_IN_OVERVIEW_RULER, 0); fSourceViewerDecorationSupport.setCursorLinePainterPreferenceKeys(CURRENT_LINE, CURRENT_LINE_COLOR); fSourceViewerDecorationSupport.setMarginPainterPreferenceKeys(PRINT_MARGIN, PRINT_MARGIN_COLOR, PRINT_MARGIN_COLUMN); fSourceViewerDecorationSupport.setSymbolicFontName(getFontPropertyPreferenceKey()); }
Ne feledje el, hogy a feljegyzéstípusok megadásához használt feljegyzéstulajdonságok az összes feljegyzéshez megjelennek a felhasználói tulajdonságokban. Ez tartalmazza a bedolgozó által biztosított feljegyzéseket, és nincs korlátozva a munkaterület által biztosított feljegyzésekre. Ha nem kívánja megjeleníteni az összes rendelkezésre álló feljegyzést a szerkesztőben, akkor felül kell írnia ezt a metódust és a SourceViewerDecorationSupport elemet csak a megjelenítendő típusokkal kell beállítani.