3.7 Benachrichtigungen der Attribute

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).


Navigation zeigen