next up previous contents
Next: Interne Repräsentation Up: Konfigurationsoptionen Previous: Konfigurationsoptionen

Der Typ GUIVALUE und die Klasse GUIValue

Eine ähnliche Verallgemeinerung wie beim Umgangs mit Objekten gibt es auch für Werte, die die verschiedenen Konfigurationsoptionen der Tk-Objekte annehmen können. Hierzu gibt es zunächst wieder einen Typen, durch den alle Werte dieser Art intern dargestellt werden. Dies ist der Typ GUIVALUE:

data Generator = HaskellTk | Tk
data GUIVALUE = GUIVALUE Generator String
Entsprechend gibt es auch wieder eine Klasse GUIValue, die im wesentlichen zum Wandeln in die interne Repräsentation und Angabe von default-Werten dient. Der Typ eines Konfigurationswertes muß also immer eine Instanz der Klasse GUIValue sein:
class (Show a, Read a) => GUIValue a where
        cdefault      :: a             -- default-Wert
        toGUIValue    :: a -> GUIVALUE -- wandeln in GUIVALUE
                                       -- für gängige Falle vordefiniert
        maybeGUIValue :: GUIVALUE -> (Maybe a) -- intern, vordefiniert
        fromGUIValue  :: GUIVALUE -> a         -- intern, vordefiniert
Der Typ Generator ist hier eigentlich uninteressant. Er wird nur intern bei der Rückgabe von Tk-Werten, die ja immer als Strings von der Wish gelesen werden, benutzt. Bei der Implementierung der Methode toGUIValue in der GUIVALUE-Instanz wird man also immer HaskellTk als Generator angeben. Das zweite Feld des GUIVALUE-Konstruktors muß die Tk-Repräsentation des entsprechenden Wertes als String, genau so wie dieser auf die Wish ausgegeben werden soll, enthalten. Diese Repräsentation sollte die Show-Instanz, die von der GUIValue-Instanz vorausgesetzt wird liefern (falls dies aus irgendwelchen Gründen einmal anders ist, reicht es allerdings, die toGUIObject-Methode entsprechend zu implementieren). Umgekehrt muß die ebenfalls vorausgesetzte Read-Instanz die Tcl-Repräsentation in den zugehörigen HTk-Wert wandeln.

Die toGUIValue Methode muß man allerdings in der Regel nicht überschreiben. Sie benutzt sonst einfach die vorausgesetzte Show- Instanz und liefert einen entsprechenden GUIVALUE mit HaskellTk als Generator. Zu beachten ist dabei allerdings, daß gewisse Zeichen durch entsprechende Escape-Sequenzen ersetzt werden und die Zeichenkette in Anführungszeichen gesetzt wird, damit keine Probleme mit enthaltenen Leerzeichen auftreten. Normalerweise ist dies so gewollt, kann aber in bestimmten Situation auch unerwünscht sein, so daß dann die toGUIValue-Methode überschrieben werden muß.

Die cdefault-Methode liefert schließlich einen default-Wert für diesen Typen. Normalerweise stehen hier die Tcl-Defaults. Soll ein default-Wert abweichend davon gelten, muß dieser bei der Erzeugung mit gesetzt werden (dazu siehe Objekt-Methoden tex2html_wrap_inline100 createCmd).


next up previous contents
Next: Interne Repräsentation Up: Konfigurationsoptionen Previous: Konfigurationsoptionen

Christoph Lueth
Wed May 29 14:12:28 MEST 2002