Der Umgang mit Ereignissen von RapaGUI basiert auf den Werten
bestimmter Attribute der verschiedenen MOAI-Klassen. Sie können
die Werte aller Attribute überwachen, die eine Anwendbarkeit
von N
haben. Wenn Sie einen Benachrichtigung für einen Attributwert
einrichten, führt RapaGUI Ihre Callback-Funktion aus,
wenn sich dieser Attributwert ändert.
Sie können z.B. eine Benachrichtigung für das Attribut Listview.Active
einrichten, welches das aktive Element eines Listview-Widgets (Listenansicht)
ist. In diesem Fall wird Ihre Callback-Funktion immer dann aufgerufen,
wenn sich das aktive Element des jeweiligen Listview-Widget
ändert. Um eine Überwachung auf einem bestimmten Attribut zu
installieren, müssen Sie beim Erstellen Ihres Objekts eine Benachrichtigung
für dieses Attribut einrichten. Dies geschieht direkt in der
XML-Datei unter Verwendung des Attributs notify
, das von allen
MOAI-Klassen akzeptiert wird:
<listview id="lv" notify="active"> <column> <item>One</item> <item>Two</item> <item>Three</item> </column> </listview> |
Der obige Code führt Ihre Callback-Funktion immer dann
aus, wenn sich das aktive Element des Listview-Objekts mit der
ID lv
ändert, weil Sie den Wert des Attributs Listview.Active
überwachen.
Wenn Sie mehrere verschiedene Benachritigungen vom demselben MOAI-Objekt einrichten möchten, müssen Sie diese durch Semikolons (;) trennen, z.B:
<listview id="lv" notify="active; doubleclick"> ... </listview> |
Wie Sie sehen können, installiert der obige Code die Überwachung für die beiden Attributen Listview.Active und Listview.DoubleClick, so dass Ihre Callback-Funktion auch dann aufgerufen wird, wenn der Benutzer auf einen Listeneintrag doppelklickt.
Alternativ können Sie Benachrichtigungen zur Laufzeit auch mit dem Befehl moai.Notify() aus Ihrem Code einrichten oder entfernen.
Um das gerade aktive Listenelement in Ihrer Callback-Funktion auszulesen, können Sie den folgenden Code verwenden:
Function p_EventHandler(msg) Switch msg.action Case "RapaGUI": Switch msg.attribute Case "Active": Switch msg.id Case "lv": DebugPrint("Active listview item:", msg.triggervalue) EndSwitch EndSwitch EndSwitch EndFunction |
Beachten Sie jedoch, dass Attributwerte auch manuell geändert werden können. Beispielsweise könnte Ihr Programm ein bestimmtes Element der Listenansicht manuell aktivieren wollen, indem es z.B. folgenden Befehl ausführt:
moai.Set("lv", "active", 5) ; aktiviert Element Nummer 6 |
Da der obige Code auch den Wert des Attributs Listview.Active
ändert, wird auch Ihre Callback-Funktion durch diesen
Aufruf ausgelöst. Wenn Sie dies nicht wollen, können Sie das
spezielle Attribut MOAI.NoNotify im Befehl moai.Set()
verwenden. Immer wenn MOAI.NoNotify auf True
gesetzt
ist, wird der Wert des Attributs geändert, ohne dass irgendwelche
Callback-Funktionen aufgerufen werden. Um also das aktive Element
der Listenansicht ohne Callback-Funktionen zu ändern, müssen
Sie einfach folgendes schreiben:
moai.Set("lv", "active", 5, "nonotify", True) |
Schließlich gibt es, wie bereits im vorherigen Abschnitt erwähnt, einige Attribute, die RapaGUI immer überwacht. Dies sind: Button.Pressed, Button.Selected, Toolbarbutton.Pressed, Toolbarbutton.Selected und Menuitem.Selected. Da diese so häufig und weit verbreitet sind und Sie normalerweise immer Attribute wie Button.Pressed überwachen möchten, weil das Drücken einer Taste immer eine Reaktion hervorruft, benachrichtigt Sie RapaGUI automatisch. Daher müssen Sie nicht explizit eine Benachrichtigung von diesen Attributen anfordern, d.h. das Schreiben des Folgenden ist überflüssig:
<button id="btn" notify="pressed">Click me</button> |
Stattdessen können Sie einfach schreiben:
<button id="btn">Click me</button> |
Dasselbe gilt für Menüeinträge und Schaltflächen in der Symbolleiste (Toolbar).