Die Kurzinfounterstützung wird im Textgerüst der Plattform bereitgestellt. Somit können Sie Kurzinfos für den Text und die Skalen implementieren, die in Ihrem Editor angezeigt werden.
Die Kurzinfounterstützung ist optional. In der Standardeinstellung installiertSourceViewerConfiguration kein Kurzinfoverhalten, da es keine nützlichen allgemeinen Informationen gibt, die angezeigt werden könnten. Um Kurzinfos für Text oder Skalen bereitstellen zu können, muss die Konfiguration der Quellenanzeigefunktion für den Editor so konfiguriert sein, dass ein Plug-in-Objekt für Kurzinfos definiert wird.
Die Methoden, mit denen das Kurzinfoverhalten definiert werden kann, sollen auch hier wieder am Beispiel von JavaSourceViewerConfiguration erläutert werden:
public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) { return new JavaTextHover(); } public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) { return new JavaAnnotationHover(); }
Helperklassen für Kurzinfos können auch dynamisch unter Verwendung des ProtokollsSourceViewer installiert werden (setTextHover und setAnnotationHover). Welche der beiden Methoden verwendet wird, ist für die Laufzeit unerheblich. Wenn Sie jedoch die gesamten Überschreibungen des Plug-in-Verhaltens in eine Unterklasse von SourceViewerConfiguration stellen, haben Sie den Vorteil, dass alle Definitionen an einer gemeinsamen Position konsolidiert sind.
Im Folgenden werden die Besonderheiten für die Bereitstellung des jeweiligen Kurzinfotyps erläutert.
Die Kurzinfo für Text stellt Informationen zu dem Text zur Verfügung, der im Editor angezeigt wird. Zu diesem Zweck wird die SchnittstelleITextHover verwendet. Eine Kurzinfo für Text muss den Bereich, der als Quelle für die Kurzinfoangaben verwendet werden soll, anhand einer relativen Position im Dokument selbst berechnen. Außerdem muss sie die Informationen zu einem spezifischen Bereich bereitstellen. JavaTextHover ist einfach strukturiert. Er prüft, ob die für die Kurzinfo angegebene relative Position in der Textauswahl enthalten ist. Wenn dies der Fall es, stellt er den Auswahlbereich als Kurzinfobereich zur Verfügung.
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); } }
Anhand des selbst berechneten Kurzinfobereichs wird der ausgewählte Text aus dem Dokument abgerufen und als Kurzinfo zurückgegeben.
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"); } ... }
Sicherlich haben Sie bereits festgestellt, dass der Kurzinfotext die Auswahl enthält, wenn Sie den Mauszeiger über eine Auswahl im Editor ziehen.
Mit komplizierteren kontextbezogenen Informationen können hilfreiche Kurzinfos berechnet werden. Beispiele hierfür finden Sie im JavaTextHover, der im JDT-Editor implementiert ist.
Die Kurzinfo für die vertikale Skala ist nützlich, um zeilenorientierte Informationen anzuzeigen. Die Kurzinfoklasse wird wie oben beschrieben konfiguriert. IAnnotationHover ist die Schnittstelle für Kurzinfoobjekte für Skalen. Auch wenn der Name impliziert, dass die Kurzinfo für Anmerkungen in der Skala gedacht ist, muss jeder einzelne Editor selbst bestimmen, welches Objekt geeignet ist. Eine Kurzinfo für Skalen muss die Informationszeichenfolgen zurückgeben, die einer bestimmten Zeilennummer zugeordnet sind, und zwar unabhängig davon, ob diese Zeile Markierungen enthält.
Der JavaAnnotationHover des Jav-Beispieleditors implementiert die Kurzinfo für alle Zeilen. Er ruft den gesamten Text für die Kurzinfozeile anhand der Zeilennummer ab und gibt ihn als Informationszeichenfolge zurück.
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 die Kurzinfo auf das Dokument und die Quellenanzeigefunktion zugreifen kann, verfügt sie über den gesamten Kontext, der für kompliziertere kontextbezogene Entscheidungen über die anzuzeigenden Informationen erforderlich ist. Beispielsweise könnte das Anmerkungsmodell aus der Quellenanzeigefunktion abgerufen werden, um die Kurzinfo für Anmerkungen in der vertikalen Skala anzuzeigen. Diese Funktionalität wird vom JavaAnnotationHover des JDT-Editors bereitgestellt.