Aanwijseffecten tekst en liniaal

Het platformtekstframework bevat ondersteuning voor aanwijseffecten, zodat u voorgrondinfo (of infovensters) kunt implementeren voor tekst en linialen die in de editor worden afgebeeld.

De ondersteuning voor aanwijseffecten is optioneel. Standaard wordt door SourceViewerConfiguration geen aanwijseffecten geïnstalleerd omdat er geen nuttige informatie is om af te beelden. Om aanwijseffecten voor tekst of liniaal te bieden, moet de bronviewerconfiguratie voor uw editor worden geconfigureerd om een insteekbaar voorgrondinfo-object te definiëren.

In dit document bekijken we JavaSourceViewerConfiguration nogmaals om te zien hoe de aanwijseffecten zijn gedefinieerd:

public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) {
	return new JavaTextHover();
}
public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) {
	return new JavaAnnotationHover();
}

Helperklassen voor aanwijseffecten kunnen ook dynamisch worden geïnstalleerd met het SourceViewer-protocol (setTextHover en setAnnotationHover). Geen van beide methoden biedt specifieke runtime-voordelen, maar het plaatsen van alle vervangende plugin-gedragspatronen in een subklasse van SourceViewerConfiguration heeft wel als voordeel dat alle definities op één centrale locatie worden geconsolideerd.

Hieronder vindt u een gedetailleerde beschrijving van beide soorten aanwijseffecten.

Aanwijseffecten voor tekst

Een tekstaanwijseffect biedt meer informatie over een bepaalde tekst die in de editor wordt afgebeeld. U configureert tekstaanwijseffecten met de interface ITextHover. Een tekstaanwijseffect is verantwoordelijk voor de berekening van de regio die moet worden gebruikt als de bron van de voorgrondinfo bij een gegeven offset in het document. Het aanwijseffect is tevens verantwoordelijk voor aanlevering van de infotekst over een specifieke regio. JavaTextHover is relatief eenvoudig. Hiermee wordt gecontroleerd of de opgegeven offset voor het aanwijseffect binnen de tekstselectie valt. Zo ja, dan wordt het selectiebereik aangeleverd als voorgrondinforegio. 

public class JavaTextHover implements ITextHover {

	...
	
	public IRegion getHoverRegion(ITextViewer textViewer, int offset) {
		Point selection= textViewer.getSelectedRange();
		if (selection.x <= offset && offset < selection.x + selection.y)
			return new Region(selection.x, selection.y);
		return new Region(offset, 0);
	}
}

Gegeven de berekende voorgrondinforegio, wordt de geselecteerde tekst uit het bijbehorende document opgehaald en geretourneerd als voorgrondinfo.

public class JavaTextHover implements ITextHover {

	public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) {
		if (hoverRegion != null) {
			try {
				if (hoverRegion.getLength() > -1)
					return textViewer.getDocument().get(hoverRegion.getOffset(), hoverRegion.getLength());
			} catch (BadLocationException x) {
			}
		}
		return JavaEditorMessages.getString("JavaTextHover.emptySelection"); 
	}
	...
}

U ziet dat wanneer u een selectie in de editor aanwijst, de selectie wordt afgebeeld als voorgrondinfotekst.

Voorgrondinfo voor geselecteerde regio

U kunt ook meer gecompliceerde contextuele informatie gebruiken om nuttige voorgrondinfo te berekenen. Voorbeelden hiervan vindt u in de JavaTextHover-implementatie van de JDT-editor.

Aanwijseffecten voor liniaal

Aanwijseffecten voor de verticale liniaal zijn nuttig voor het afbeelden van regelgegevens.  De aanwijseffectklasse wordt geconfigureerd zoals hierboven is beschreven. IAnnotationHover is de interface voor voorgrondinfo-objecten voor de liniaal. Hoewel de naam impliceert dat het aanwijseffect eerder is bedoeld voor annotaties op de liniaal, moet door de desbetreffende editor worden bepaald welke actie gewenst is. Een liniaalaanwijseffect moet de infotekenreeks voor een bepaald regelnummer retourneren, ongeacht de eventuele aanwezigheid van merktekens voor die regel.   

De JavaAnnotationHover van de Java-voorbeeldeditor implementeert voorgrondinfo voor alle regels. Hierbij wordt het regelnummer gebruikt om alle tekst voor het aanwijseffect voor de desbetreffende regel op te halen en te retourneren als de infotekenreeks.

public String getHoverInfo(ISourceViewer sourceViewer, int lineNumber) {
	IDocument document= sourceViewer.getDocument();

	try {
		IRegion info= document.getLineInformation(lineNumber);
		return document.get(info.getOffset(), info.getLength());
	} catch (BadLocationException x) {
	}
	return null;
}

Voorgrondinfo voor liniaal

Aangezien het aanwijseffect toegang heeft tot het document en de bronviewer, is alle context aanwezig die nodig is om geavanceerde contextgevoelige berekeningen te maken over de info die moet worden afgebeeld. Zo kan bijvoorbeeld het annotatiemodel uit de bronviewer worden opgehaald om voorgrondinfo aan te leveren voor eventuele annotaties die op de verticale liniaal worden weergegeven. De JavaAnnotationHover van de JDT-editor bevat voorzieningen hiervoor.