ButtonWidget =============================================================================== ``maongo.core.toolkit.ButtonWidget extends Widget`` .. note:: ########### gegenlesen laeuft / 24.3.11 #################### Ein einfacher **Button** führt eine Aktion bei Klick aus:: Beispiel 1: this.BackgroundColor = "red"; this.BackgroundColor = "yellow"; $(this, "TheButton1").BackgroundColor = "white"; $(this, "TheButton2").BackgroundColor = "white"; this.BackgroundColor = "green"; Bei Klick auf den ersten Button wird die Hintergrundfarbe von ``TheButton1`` auf rot gesetzt, bei Klick auf den zweiten Button wird die Hintergrundfarbe von ``TheButton2`` auf gelb gesetzt, und ein Klick auf den dritten Button setzt die Farbe der ersten beiden Buttons auf weiß und sich selber auf grün. Ein **Data-Button** speichert ein ankommendes Data und sendet es bei Klick weiter:: Beispiel 2: #ffff00 Das bei Aufruf der Presentation geladene Data wird an den Button geroutet und dort gespeichert, bis ein Klick erfolgt. Dann wird es anhand der in ``btn`` angegebenen Route weitergeleitet zu ``aWidget``, wo über ein Binding eine Property aus dem Data ausgelesen wird. ``aWidget`` wird die in ``myColor`` gespeicherte Farbe annehmen. Näheres zu Data und Binding siehe :ref:`ref-data`. Eine **Buttongruppe** erlaubt das Umschalten zwischen verschiedenen Optionen:: Beispiel 3: Beim Start der Presentation wird ``btn1`` eingeschaltet (State = `on`). Ein Klick auf ``btn2`` oder ``btn3`` wird ``btn1`` ausschalten und den geklickten Button einschalten. ``btn4`` gehört nicht zur ButtonGroup. Klick auf ``btn4`` gibt hier den aktuell gedrückten Button der ButtonGroup ``myButtons`` aus. Funktionsweisen des ButtonWidgets ---------------------------------------- Das Button-Widget kennt drei Verhaltensweisen, die über die Property ``ButtonType`` eingestellt werden. Die folgende Aufstellung gibt an, welche Zustandsänderungen bei zwei vollständigen Klicks auf den Button (Press und Release auf dem ButtonWidget) stattfinden und wann jeweils die Buttonaktionen ausgeführt werden. Verhalten bei... ... ButtonType = ``"click"``:: Aktion State Signal Aktion? Press 'on' button-pressed Release 'off' button-released ButtonAktion Press 'on' button-pressed Release 'off' button-released ButtonAktion ... ButtonType = ``"toggle"``:: Press 'on' button-pressed Release 'on' ButtonAktion Press 'on' Release 'off' button-released ... ButtonType = ``"radio"``:: Press 'on' button-pressed Release 'on' ButtonAktion Press 'on' Release 'on' ***Press*** 'off' button-released (wird released bei Klick auf einen anderen Button der Gruppe) Das direkte Setzen der Property ButtonState auf ``"on"`` bzw. ``"off"`` ist möglich, um eigene Buttonfunktionen zu implementieren. Eine solche Property-Änderung löst direkt ``button-pressed`` bzw. ``button-released`` aus, unabhängig vom ButtonType. Mit der Property ``ActionOnPress`` lässt sich außerdem bewirken, dass die Buttonaktion bereits bei der Press-Aktion ausgeführt wird. **Button und Data:** Der Button verhält sich in Bezug auf Data, die durch die Anwendung geroutet werden, standardmäßig wie ein normales Widget: Es leitet das Data weiter, wenn entsprechende Routen auf dem Widget definiert sind. Zusätzlich speichert der Button das Data in seiner Property ``Data`` (was ein ``data``-Signal auslöst). Das ButtonWidget registriert sich außerdem als Listener für Änderungen im Data und sendet ein ``data-changed``-Signal, wenn sich das gespeicherte Data ändert. Die Property DataMode ermöglicht es, dieses Verhalten zu modifizieren. Standardwert ist ``"route"``, mit der genau das geschilderte Verhalten erreicht wird. Verhalten bei... ... DataMode = ``"store-forward"``: Das geroutete Data wird wie beschrieben gespeichert, und erst bei Klick wird das Data anhand der Routen weiter geroutet. ... DataMode = ``"request"``: Das geroutete Data wird wie beschrieben gespeichert, bei Klick wird ein Request gestartet, um eine Transmission von der in der Property ``DataSource`` definierten URL abzuholen. Bei Eintreffen der Data-Transmission werden die enthaltenen Data anhand der Routen des ButtonWidgets weiter geroutet. Ein Data kann auch direkt der Property Data auf dem ButtonWidget zugewiesen werden. Ist dies der Fall, so wird das zugewiesene Data nicht automatisch weiter geroutet. Es ersetzt aber das gespeicherte Data und würde im DataMode ``store-forward`` bei Klick weiter geroutet. **LabelTemplates:** Der Button nutzt die Property ``Text``, um eine einfache Buttonbeschriftung anzuzeigen. Soll die Buttonbeschriftung spezifisch formatiert sein, so können Sie beliebige weitere Widgets in den Button legen, die die Darstellung übernehmen. Binden Sie an die Property Text des Buttons, um den Wert der Property an anderer Stelle zu verwenden.:: Beispiel 4 Der Button ``mybutton`` nutzt ein vorformatiertes Textwidget; die Property ``Text`` des Childwidgets ist an die Property ``Text`` des Parents gebunden. Properties ------------ Das ButtonWidget hat für zwei von Widget ererbte Properties andere Defaultwerte als das Widget: ``BorderWidth``: Default ``1.0`` (Widget: ``0.0``) ``Interactive``: Default ``true`` (Widget: ``false``) Eigene Properties: **ActionOnPress** (Boolean) Per Default werden Actions beim Loslassen (``button-released``) ausgeführt. Diese Property erlaubt es, dieses Verhalten zu modifizieren, um Aktionen bereits auf Drücken (``button-pressed``) auszuführen. Default: ``false`` **ButtonGroup** (String) Erlaubt die Zuordnung eines Buttons zu einer Gruppe. Ist der Typ der gruppierten Buttons ``radio``, so werden beim Einschalten eines Buttons alle anderen ausgeschaltet (wird der ButtonState auf ``0`` gesetzt). Ist der ButtonType ``toggle`` oder ``click``, so hat die ButtonGroup keinen Effekt. Gruppen gelten innerhalb einer Presentation. Default: ``""`` (keine ButtonGroup) **ButtonState** (Symbol) Setzt den Zustand des Buttons auf ``on`` oder ``off``. Wenn damit eine State-Änderung einhergeht (d.h., wenn der Button nicht schon im gesetzten Zustand war), wird ein ``button-pressed``- oder ein ``button-released``-Signal gesendet. Default: ``"off"`` **ButtonType** (Symbol) Legt die Verhaltensweise des Buttons fest. Mögliche Werte sind: ``click``, ``toggle`` und ``radio``. Default: ``"click"`` **Data** (Object) : WidgetProperty Die Property erlaubt es, dem Button ein Data zuzuweisen (durch direktes Setzen der Property in einem JavaScript oder über Binding). Wird die Property ``Data`` auf ein Object vom Typ ``Data`` gesetzt, so sendet der Button ein ``data``-Signal. Ändert sich das gespeicherte Data, so sendet der Button ein ``data-changed``-Signal. Ein auf dem Button gespeichertes Data wird erst ersetzt, wenn ein neues Data einläuft oder gesetzt wird. Default: ``null`` (kein Data) Beispiel:: trace("Data erhalten" + d); var d = Type.newData("Hans"); $(this,"mybutton").Data = d; **DataMode** (Symbol) Der DataMode ``store-forward`` legt fest, dass der Button ein auf ihn geroutetes Data automatisch in die Property Data speichert und erst bei Klick weiterleitet (entlang der gesetzten Routen). Der DataMode ``request`` legt fest, dass DataSource genutzt wird, um bei Klick eine Transmission anzufordern. Steht DataMode auf dem Defaultwert ``"route"``, so verhält sich das ButtonWidget wie ein normales Widget und leitet Data, die es empfängt, anhand seiner Routen direkt weiter. Werte: ``"route"``, ``"store-forward"``, ``"request"`` Default: ``"route"`` (normales Widget-Verhalten, kein Data-Button) **DataSource** (URL) Wenn der DataMode des Buttons ``request`` ist, wird bei Klick auf den Button eine Transmission von der in ``DataSource`` angegebenen URL geladen und das erste Data der Property Data zugewiesen. Enthält die Transmission weitere Data, so werden diese verworfen. Ist DataMode ``request`` und DataSource ``null``, so wird nichts geladen. Default: ``null`` (keine DataSource) **Text** (String) Die Property erlaubt es, eine Buttonbeschriftung anzugeben. Default: ``""`` (Keine Beschriftung) Methoden ------------- **click** simuliert einen Klick auf den Button (was die Ausführung eines Klicks aus JavaScript heraus ermöglicht). **press** simuliert einen Drücken auf dem Button. **release** simuliert ein Loslassen auf dem Button. Beispiel:: $(this, "aButton").click() Signale ------------- **button-pressed** Signal, das anzeigt, dass der Button gedrückt wurde. **button-released** Signal, das anzeigt, dass der gedrückte Button losgelassen wurde. Das Release ist auf dem Button selbst erfolgt. **button-released-outside** Signal, das anzeigt, dass der gedrückte Button losgelassen wurde. Das Release ist nicht auf dem Button erfolgt. **button-clicked** Bei Mausbedienung das Signal, das einen vollständigen Klick (Press und Release innerhalb des Shape des Buttons) anzeigt. Vgl. auch :ref:`ref-actions` und :ref:`ref-trigger`.