Tekst- og linjalpeker

Det er støtte for pekere i plattformens tekstrammeverk slik at du kan implementere informasjonspekere (eller infofelt) over teksten og linjalen som vises i redigeringsprogrammet.

Det er valgfritt med pekerstøtte. Som standard installerer ikke SourceViewerConfiguration noen pekerfunksjon siden det ikke finnes nyttig generell informasjon som skal vises.  Hvis du vil oppgi tekst- eller linjalpeker, må du konfigurere redigeringsprogrammets kildevisningsprogram slik at det kan defineres et pluggbart pekerobjekt.

La oss nok en gang se nærmere på JavaSourceViewerConfiguration for å se hvilke metoder som definerer pekerfunksjonen:

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

Du kan også definere pekerhjelpeklasser dynamisk ved hjelp av protokollen SourceViewer (setTextHover og setAnnotationHover). Det er ingen bestemte kjøretidsfordeler ved noen av metodene, men ved å plassere overstyringer for all pluggbar funksjonalitet i en subklasse for SourceViewerConfiguration, kan alle definisjonene angis på ett sted.

La oss se nærmere på hvordan du oppgir begge disse pekertypene.

Tekstpeker

Med en tekstpeker kan du oppgi informasjon om tekst som vises i redigeringsprogrammet.  Dette gjøres ved hjelp av grensesnittet ITextHover.  En tekstpeker behandler området som skal brukes som kilde for pekerinformasjon, med en gitt relativ posisjon i dokumentet. Den oppgir også tekstbasert informasjon om et bestemt område.  JavaTextHover er nokså enkel. Den sjekker om den oppgitte relative posisjonen for pekeren er i tekstvalget.   Hvis dette er tilfellet, blir dette området oppgitt som pekerområdet. 

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);
	}
}

I sitt eget behandlede pekerområde henter den den utvalgte teksten fra dokumentet og returnerer den som pekerinformasjon.

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"); 
	}
	...
}

Vi ser at når vi drar pekeren over et valg i redigeringsprogrammet, viser pekerteksten valget.

Pekerinformasjon i merket område

Du kan bruke mer kompleks kontekstinformasjon for å behandle nyttig pekerinformasjon.  Du finner eksempler på dette i JavaTextHover, som implementeres med JDT-redigeringsprogrammet.

Linjalpeker

Det er nyttig å dra pekeren over den loddrette linjalen for å vise linjeorientert informasjon.  Pekerklassen konfigureres slik det er beskrevet ovenfor.  IAnnotationHover er grensesnittet for linjalpekerobjekter. Selv om navnet antyder at pekeren er beregnet på annotasjoner i linjalen, er det det enkelte redigeringsprogrammet som angir bruksområde.  En linjalpeker returnerer informasjonsstrengen som er knyttet til et bestemt linjenummer, uavhengig av om det er merker på linjen.   

JavaAnnotationHover for Java-eksempelredigeringsprogrammet implementerer peker for alle linjer.  Her brukes linjenummeret til å hente all teksten på pekelinjen og returnere teksten som en informasjonsstreng.

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;
}

Pekerinformasjon i linjal

Siden linjalen har tilgang til dokumentet og kildevisningsprogrammet, har den all konteksten som er nødvendig for å ta mer komplekse kontekstavhengige avgjørelser om informasjonen som skal vises. Annotasjonsmodellen kan for eksempel hentes fra kildevisningsprogrammet for å oppgi pekerinformasjon for alle annotasjoner som vises i den loddrette linjalen. JavaAnnotationHover fra JDT-redigeringsprogrammet inneholder denne funksjonaliteten.