Der Methods-Typ hat die folgenden Felder:
data Methods =
Methods { -- Konfigurationsoption abfragen
cgetCmd :: ObjectName -> ConfigID -> TclScript,
-- eine List von Konfigurationen setzen
csetCmd :: ObjectName -> [ConfigOption] -> TclScript,
-- das Objekt erzeugen
createCmd :: ObjectName -> ObjectKind -> ObjectName ->
ObjectID -> [ConfigOption] -> TclScript,
-- das Objekt mit Tk's "pack geometry manager" packen
-- für "nicht-Widgets" leer
packCmd :: ObjectName -> [PackOption] -> TclScript,
-- das Objekt mit Tk's "grid geometry manager" packen
-- für "nicht-Widgets" leer
gridCmd :: ObjectName -> [GridPackOption] -> TclScript,
-- das Objekt zerstören
destroyCmd :: ObjectName -> TclScript,
-- Events an dieses Objekt binden
bindCmd :: ObjectName -> BindTag -> [WishEvent] ->
EventInfoSet -> TclScript,
-- Event-Bindung verwerfen
unbindCmd :: ObjectName -> BindTag -> [WishEvent] ->
TclScript,
-- zum aufräumen bei der Zerstörung, i.d.R. leer
cleanupCmd :: ObjectID -> ObjectName -> TclScript }
Auf den Typ ObjectName möchte ich hier nicht weiter eingehen. Er
wird durch die oben erwähnten GUIOBJECT-Konstruktoren automatisch
erzeugt und enthält den Tcl-Pfad des entsprechenden Objektes. Es reicht zu
wissen, daß er eine Instanz der Klasse Show ist und so auf den
Tcl-Bezeichner des Objektes zugegriffen werden kann. Weiter wäre
anzumerken, daß nicht für jedes Objekt tatsächlich alle obigen
Parameter gebraucht werden. Dies ist vor allem Abhängig von der Art
der Tk-Objekte (so braucht man z.B. das Vater-Objekte bei der Erzeugung
nur zum Zugriff auf Text-Items).
Read-Instanz voraussetzt,
kann er immer parsiert und zurückgegeben werden. tkGetWidgetConfig :: ObjectName -> -- Tcl-Pfad des Objektes
ConfigID -> -- Tcl-Bezeichner der Konfiguration
TclScript
tkGetWidgetConfig name cid = [(show name) ++ " cget -" ++ cid]
ConfigOption ist einfach ein Tupel aus ConfigID
(= String) und GUIVALUE. tkSetWidgetConfigs :: ObjectName -> -- Tcl-Pfad des Objektes
[ConfigOption] -> -- Liste der Konfigurationen
TclScript
tkSetWidgetConfigs _ [] = []
tkSetWidgetConfigs name args =
[show name ++ " configure " ++ showConfigs args]
Die Funktion showConfigs kann zur bequemen Ausgabe einer Liste
von Konfigurationen in den korrespondierenden Tcl-String verwendet
werden:
showConfigs :: [(ConfigID, GUIVALUE)] -> String
tkCreateWidget :: ObjectName -> -- Tcl-Pfad des Vaterobjektes
ObjectKind -> -- Objekttyp
ObjectName -> -- Tcl-Pfad des Objektes
ObjectID -> -- ID des Objektes auf HTk-Seite
[ConfigOption] -> TclScript
tkCreateWidget _ kind name _ opts =
[show kind ++ " " ++ show name ++ " " ++ showConfigs opts]
tkPack :: ObjectName -> -- Tcl-Pfad des Objektes
[PackOption] -> -- Liste der Optionen für den geometry manager
TclScript
tkPack name opts = ["pack " ++ show name ++ " " ++ showPackOptions opts]
tkGrid :: ObjectName -> -- Tcl-Pfad des Objektes
[GridPackOption] -> -- Liste der Optionen für den geometry manager
TclScript
tkGrid name opts =
["grid " ++ show name ++ " " ++ showGridPackOptions opts]
tkDestroyWidget :: ObjectName -> -- Tcl-Pfad des Objektes
TclScript
tkDestroyWidget name = ["destroy " ++ show name]
ObjectName den Tcl-Pfad des Objektes liefert, aber dies
ist in HTk sowieso Konvention bzw. wird durch die Methoden zur Erzeugung
der internen GUIOBJECT-Repräsentation sichergestellt. Zu bemerken
wäre höchstens noch, daß wir uns für HTk auf einen vereinfachten Umgang
mit den von Tcl zurückzugeben Event-Informationen (Position, Button, etc.)
geeinigt haben, so daß hier immer dasselbe Event-Info-Set verwendet wird
(auch dieser Typ muß daher hier nicht näher erläutert werden). Der
WishEvent-Typ sollte von der Benutzerseite her bekannt sein.
tkBindWidget :: ObjectName -> -- Tcl-Pfad des Objektes
BindTag -> -- historisch, rausnehmen !!
[WishEvent] -> -- Liste der Events
EventInfoSet -> -- Liste der zurückzugebenden
-- Event-Informationen
TclScript
tkBindWidget nm bindTag wishEvents eventInfoSet =
let doBind = "bind " ++ show nm ++ " " ++
delimitString (foldr (\ event soFar -> showP event soFar)
"" wishEvents) ++ " " ++
mkBoundCmdArg bindTag eventInfoSet
in [doBind]
tkUnbindWidget :: ObjectName ->
BindTag ->
[WishEvent] -> TclScript
tkUnbindWidget nm bindTag wishEvents =
let doUnBind = "bind " ++ show nm ++ " " ++
delimitString (foldr (\ event soFar -> showP event soFar)
"" wishEvents) ++ " {}"
in [doUnBind]