Der findes pegefunktioner til platformens tekststruktur, hvilket gør det muligt at implementere pegefunktioner med oplysninger ('pop op-hjælp') over den tekst og de linealer, som vises i editoren.
Pegefunktioner er valgfri. Som standard installererSourceViewerConfiguration ikke pegefunktioner, fordi der ikke er nogen nyttige generelle oplysninger at vise. Hvis du vil aktivere en pegefunktion til tekst eller linealer, skal konfigurationen af editorens kildefremviser være konfigureret til at definere et plugin-baseret pegefunktionsobjekt.
Lad os igen se på JavaSourceViewerConfiguration for at se, hvilke metoder, der definerer pegefunktionens funktionsmåde:
public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) { return new JavaTextHover(); } public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) { return new JavaAnnotationHover(); }
Hjælperklasser til pegefunktioner kan også installeres dynamisk vha. SourceViewer-protokollen (setTextHover og setAnnotationHover). Der er ingen speciel runtime-fordel ved at gøre nogen af delene, men hvis alle tilsidesættelser af plugin-baseret funktionsmåde placeres i en underklasse til SourceViewerConfiguration, medfører det den fordel, at alle definitioner konsolideres ét sted.
Lad os se på de nærmere detaljer forbundet med de to slags pegefunktioner.
En tekstpegefunktion gør det muligt at angive orienterende tekst om den tekst, der vises i editoren. Det gøres vha. grænsefladenITextHover. En tekstpegefunktion er ansvarlig for at beregne det område, der skal bruges som kilde til pegefunktionens oplysninger, på basis af en forskydning i dokumentet. Den er også ansvarlig for at stille den orienterende tekst om en bestemt region til rådighed. JavaTextHover er ret enkel. Funktionen kontrollerer, om den angivne forskydning for pegefunktionen er indeholdt i den valgte tekst. Hvis det er tilfældet, angiver den det valgte område som pegefunktionens region.
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); } }
På basis af sin egen beregnede pegefunktionsregion henter funktionen den valgte tekst fra sit dokument og returnerer det som pegefunktions-oplysninger.
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 kan ganske rigtigt se, at hvis vi peger på et valg i editoren, vises pegefunktionsteksten i forbindelse med det valgte.
Mere komplicerede kontekstoplysninger kan bruges til at beregne nyttige pegefunktionsoplysninger. Eksempler på det findes i JavaTextHover, som er implementeret sammen med JDT-editoren.
En pegefunktion til den lodrette lineal er praktisk til fremvisning af linjeorienterede oplysninger. Pegefunktionens klasse konfigureres som beskrevet ovenfor. IAnnotationHover er grænsefladen for pegefunktionsobjekter til linealer. Selvom navnet antyder, at pegefunktionen er beregnet til annotationer i linealen, er det rent faktisk op til den enkelte editor at afgøre, hvad der er relevant. En pegefunktion til linealer er ansvarlig for at returnere den oplysningsstreng, der er knyttet til et bestemt linjenummer, uanset markeringer på linjen.
JavaAnnotationHover i editoren til Java-eksemplet implementerer en pegefunktion til alle linjer. Den bruger linjenummeret til at hente hele teksten på pegefunktionslinjen og returnerer den som en oplysningsstreng.
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; }
Da pegefunktionen har adgang til dokumentet og kildefremviseren, har den hele den nødvendige kontekst til at træffe mere komplicerede kontekstbaserede beslutninger om, hvilke oplysninger der skal vises. Annotationsmodellen kan f.eks. hentes fra kildefremvisningsfunktionen, så der kan anvendes en pegefunktion alle annotationer, som vises i den lodrette lineal. JavaAnnotationHover, som stilles til rådighed af JDT-editoren, giver mulighed for denne funktion.