Tooltips
Dieses Kapitel beschreibt die Umsetzung und den Einsatz von Tooltips. Einerseits weisen Tooltips globales Verhalten auf, da es zu jedem Zeitpunkt nur einen aktiven Tooltip geben sollte und ein aktiver Tootip die Verzögerung aller anderen Tooltips beeinflusst. Andererseits haben sie eine Anwendung in fast allen Teilen der GUI und greifen auf Informationen zu, die Tief in den Datenstrukturen liegen. Diese Aspekte sollten sich in der Architektur dieses Features widerspiegeln.
Es wird hier zwischen zwei Arten von Tooltips unterschieden:
- werden ohne Verzögerung angezeigt
- geringe Komplexität und Interaktionsmöglichkeiten: stellen meist nur den Wert eines Parameters dar, enthalten selber keine klickbaren Elemente
- werden erst nach einer Verzögerung angezeigt
- höhere Komplexität und Interaktionsmöglichkeiten: enthalten möglicherweise längere Erklärungen, Icons, Bilder, Buttons, Hyperlinks
Verwendung
Die GUI von MPV ist zu Teilen in QML und zu Teilen in C++ implementiert. Als übergreifendes Konzept lassen sich Tooltips von beiden Sprachen aus ansteuern.
QML
Um einem QML-Item ein Tooltip zu geben, reicht es ein ToolTipHandler-Item als Kindelement anzulegen.
{ Button { text : ”Clear” ToolTipHandler{ text: ”Remove all items from the list ” } } }
Listing: Ein QML-Button mit einem einfachen Info-Tooltip
{ Button { text : ”Dimensions” ToolTipHandler { text: ”1024x1024” isInfoTooltip: false } } }
Listing: Ein QML-Button mit einem einfachen Content-Tooltip
{ Button { text : ”Sort rows” ToolTipHandlerf text : ”Set default row order” linkRef : ”video_sort_rows” linkImageSource: ” qrc:/Images/video_link.png” } } }
Listing: Ein QML-Button mit einem Info-Tooltip. Dieser enthält ein Bild mit einem Link. linkRef enthält eine Referenz auf einen Hyperlink. linkImageSource enthält den Pfad für das angezeigte Bild.
{ Button { text: ”KDE plot” ToolTipHandler { text: ’Example text <br><img src =” qrc:/Images/plot_kde_all.png”> <br> Some more text ... ’ } } }
Listing: Ein QML-Button mit einem Info-Tooltip mit Bild, das im Text eingebunden ist.
Ein ToolTip pro Fenster
Soll ein Tooltip in einem anderen Fenster außer dem Hauptfenster (z.B. in einem Dialog) angezeigt werden, benötigt dieses Fenster eine eigene Instanz von ToolTip. ToolTipHandler müssen auf diese Instanz verweisen indem tooltipRef auf die id dieser Instanz gesetzt wird.
{ Window { ToolTip { id : exampleTooltip z : 1 } Button { ToolTipHandler { tooltipRef : exampleTooltip text : ” Example Text ” } } } }
Listing: Ein Tooltip in einem eigenen Fenster.
{ Button { text : ”KDE plot” ToolTipHandler { text: ’ Example text <br ><img src =” qrc:/Images/plot_kde_all.png”> <br >Some more text ... ’ } } }
Listing: Ein QML-Button mit einem Info-Tooltip mit Bild, das im Text eingebunden ist.
{ Button { text : ”KDE plot” ToolTipHandler { text : ’Example text <br ><img src =” qrc:/Images/plot_kde_all.png”> <br >Some more text ... ’ } } }
Listing: Ein QML-Button mit einem Info-Tooltip mit Bild, das im Text eingebunden ist
C++
Um Tooltips aus C++ Code heraus zu setzen, ist zuerst ein Pointer auf das globale ToolTip-Objekt notwendig (Das globale ToolTip-Objekt bezieht sich immer auf das Hauptfenster). Das GlobalIController Singleton enthält einen Pointer auf ein GuiState-Objekt, welcher nur gesetzt ist, wenn auch tatsächlich eine grafische Oberfläche geladen wurde. Die Methode getTooltipPtr des GuiState-Objekts gibt eine Pointer auf das einzige Tooltip-Objekt. Die Methoden setContentTooltip und setInfoTooltip werden zum anzeigen der jeweiligen Arten von Tooltips verwendet. hideTooltip sollte aufgerufen werden, wenn die Maus den entsprechenden aktiven Bereich verlässt.