Der interne GUIOBJECT-Wert wird für Widgets durch die Funktion
createGUIObject :: GUIOBJECT -> -- Vaterobjekt
ObjectKind -> -- Objekttyp
Methods -> -- Objekt-spezifische Zugriffsmethoden
IO GUIOBJECT
im Modul Core erzuegt werden. Hierbei müssen die folgenden
Parameter angegeben werden:
GUIOBJECT)
des Containers, der das Widget enthalten soll. Obwohl Widgets erst später
gepackt werden, muß dieser bereits bei der Konstruktion angegeben werden,
da der Tcl-Pfad zu dem erzeugten Objekt entsprechend (hierarchisch)
gesetzt werden muß.
GUIOBJECT-Werte
verschiedene Objekte unterscheiden zu können, gibt es den
ObjectKind-Typ:
data ObjectKind =
FRAME
| LABEL
| MESSAGE
| BUTTON
...
Für neue Widgets muß hier ein entsprechender Konstruktor hinzugefügt
werden. Er steht im Modul GUIObjectKind in
kernel/GUIObjectKind.hs.
Methods-Typ enthält eine Sammlung
verschiedener Zugriffs-Methoden auf Objekte. Da sich für unterschiedliche
Objekte die Tcl-Syntax z.B. für das Setzen einer Konfigurationsoption oder
für die Zerstörung des Objektes unterschiedlich sein kann, liefern diese
Methoden eine einheitliche Schnittstelle für den Zugriff auf verschiedene
Objekte (dazu mehr im nächsten Abschnitt). Für einfache Widgets reichen
hier aber meist die Standard-Methoden in den defMethods im Modul
Core. So wird man auch selten alle Methoden selbst schreiben,
in der Regel reicht es, die defMethods als Ausgangspunkt zu nehmen
und evtl. einzelne Methoden durch eigene zu überschreiben.
Will man keine der Default-Methoden überschreiben, reicht es, die Funktion
createWidget :: GUIOBJECT -> ObjectKind -> IO GUIOBJECTaufzurufen. Diese ruft dann
createGUIObject auf und setzt dabei die
Default-Methoden.
newLabel :: Container par => par -> [Config (Label a)] -> IO (Label a)
newLabel par cnf =
do
w <- createWidget (toGUIObject par) LABEL -- GUIOBJECT erzeugen
configure (Label w) cnf -- Konfigurationen setzen
configure aus dem Modul Computation wendet dabei einfach
eine Liste von Konfigurationen auf ein Objekt an und hat die folgende
Funktionalität:
configure :: w -> [Config w] -> IO w