I plattformens textramverk finns hovringstöd. Med hjälp av detta stöd kan du implementera popupinformation över texten och linjalerna i redigeraren.
Hovringstöd är tillval. Som standard installerar inte SourceViewerConfiguration hovringsbeteende eftersom det inte finns någon nyttig allmän information att visa.För att tillföra text- eller linjalhovring måste din redigerares källkodsvisningsprogram konfigureras så att ett anslutningsbart hovringsobjekt definieras.
Låt oss återigen titta på JavaSourceViewerConfiguration för att se vilka metoder som definierar hovringsbeteendet:
public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) { return new JavaTextHover(); } public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) { return new JavaAnnotationHover(); }
Hovringshjälpklasser kan även installeras dynamiskt via protokollet SourceViewer (setTextHover och setAnnotationHover). Man vinner inget i runtime genom att göra detta på något av sätten, men genom att placera alla förbigångar för anslutningsbart beteende i en subklass i SourceViewerConfiguration får man fördel genom att alla definitioner placeras på ett och samma ställe.
Låt oss titta på specifikationen för att tillföra båda typer av hovring.
Med texthovring kan du ge information om texten som visas i redigeraren. Det görs via gränssnittet ITextHover. I funktionen för texthovring beräknas det område som ska utgöra källan för hovringsinformation, varvid en offset bildas i dokumentet. Funktionen tillhandahåller även informationstexten för ett visst område. JavaTextHover är ganska enkel. Den kontrollerar om hovringsoffseten finns i texturvalet. Om den gör det, tillförs urvalsområdet som hovringsområde.
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); } }
Givet sitt eget beräknade hovringsområde, erhålls den valda texten från tillhörande dokument och den returneras som hovringsinformationen.
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 nu se att urvalet dyker upp som hovringstext när pekaren i redigeraren placeras över ett urval.
Mer komplicerad sammanhangsinformation kan användas för beräkning av användbar hovringsinformation. Exempel av detta finns i JavaTextHover som implementerades med JDT-redigeraren.
Hovring på den vertikala linjalen är användbart för visning av radbaserad information. Hovringsklassen konfigureras enligt beskrivningen ovan. IAnnotationHover är gränssnittet för linjalhovringsobjekt. Även om namnet antyder att hovringen är utformad för anteckningar i linjalen, är det i respektive redigerare som det fastställs vad som är lämpligt. En linjalhovringsfunktion returnerar den infosträngen som är associerad till ett visst radnummer, oavsett om det finns markörer på raden.
I exemplet med Java-redigeraren implementerar JavaAnnotationHover hovringsfunktionen för alla rader. Radnumret används för att hämta all text på hovringsraden och returnera den som infosträngen.
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; }
Eftersom hovringsfunktionen har åtkomst till dokumentet och källkodsvisningsprogrammet, har den allt kontext som behövs för att fatta komplicerade sammanhangsbeslut om informationen som ska visas. K ommentarsmodellen kan t.ex. hämtas från källkodsvisningsprogrammet för att ge hovringsinfo om anteckningar som visas i den vertikala linjalen. JavaAnnotationHover som finns i JDT-redigeraren har denna funktion.