Forrásmegjelenítők és feljegyzések

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 és vonalzók

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.

Függőleges vonalzó

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.

Függőleges vonalzó

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.

Áttekintősáv

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.

Függőleges áttekintősáv a Java szerkesztőben

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.

Szöveges feljegyzések

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.  

Hullámos jel a Java szerkesztőben

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.

SourceViewerDecorationSupport beállítása

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.