Událost hover nad textem a pravítky

Textový rámec platformy poskytuje podporu událostí hover a umožňuje vám implementovat informační události hover (nebo rozevírací informační okna) nad textem a pravítky zobrazenými ve vašem editoru.

Podpora událostí hover je volitelná.  Standardně třída SourceViewerConfiguration neinstaluje chování událostí hover, protože neexistují užitečné obecné informace, které by se zobrazily.   Pro implementaci událostí hover nad textem nebo pravítky musí být konfigurace prohlížeče zdroje vašeho editoru nakonfigurována tak, aby definovala přídavný objekt události hover.

Podívejme se znovu na JavaSourceViewerConfiguration, abychom viděli, které metody definují chování událostí hover:

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

Nápovědné třídy pro události hover lze rovněž instalovat dynamicky s použitím protokolu třídy SourceViewer (setTextHover a setAnnotationHover).  Žádný z těchto způsobů nepřináší za běhu konkrétní výhody, ale umístění veškerého přídavného potlačení chování do podtřídy třídy SourceViewerConfiguration je výhodné v tom, že se veškeré definice sloučí do jednoho místa.

Podívejme se na specifika poskytování oběma událostmi hover.

Textová událost hover

Textová událost hover vám umožňuje poskytovat informační text o textu zobrazeném v editoru.   To se provádí pomocí rozhraní ITextHover.   Textová událost hover je zodpovědná za výpočet regionu, který se má vzít za zdroj informací pro událost hover, na základě offsetu v dokumentu.  Rovněž zodpovídá za poskytování informačního textu o konkrétním regionu.   JavaTextHover je velice jednoduchý.  Zkontroluje, zda je dodaný offset pro událost hover uvnitř výběru textu.    Pokud ano, dodá oblast výběru jako region události hover.  

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

Na základě vlastního vypočteného regionu události hover získá vybraný text ze svého dokumentu a vrátí jej jako informaci v události hover.

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

Vskutku vidíme, že když ukážeme myší na výběr v editoru, po chvíli text události hover výběr zobrazí.

Informace události hover do vybrané oblasti

K výpočtu užitečných informací v událostech hover lze použít složitější kontextové informace.   Příklady lze nalézt ve třídě JavaTextHover implementované v editoru JDT.

Událost hover nad pravítkem

Událost hover nad vertikálním pravítkem je užitečná pro zobrazení řádkově orientovaných informací.  Třída události hover se konfiguruje tak, jak je popsáno výše.  IAnnotationHover je rozhraní pro objekty událostí hover nad pravítky.  Ačkoliv název znamená, že je tato událost hover navržena pro anotace v pravítku, je ve skutečnosti na jednotlivých editorech, aby určili, co je vhodné.   Událost hover nad pravítkem odpovídá za vrácení informačního řetězce spojeného s konkrétním číslem řádku, nehledě na přítomnost značkovačů na tomto řádku.   

JavaAnnotationHover v ukázkovém editoru jazyka Java implementuje událost hover pro všechny řádky.   Používá číslo řádku k tomu, aby získal veškerý text na řádku události hover a vrátil jej jako informační řetězec.

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

Informace události hover nad pravítko

Protože událost hover má přístup k dokumentu a prohlížeči zdroje, má veškerý kontext potřebný ke složitějším kontextovým rozhodnutím o informaci, která se má zobrazit.  Například lze z prohlížeče zdroje získat model anotací a poskytovat v událostech hover informace pro libovolné anotace zobrazené ve vertikálním pravítku.   JavaAnnotationHover poskytovaný editorem JDT tuto schopnost nabízí.