# Schaltfläche

> Die Befehlstaste: schreibt einen hinterlegten Wert, führt einen Laufbefehl einer Einheit aus, öffnet ein anderes Dashboard oder startet eine Logic-Aktion.

**Schaltfläche** ist die Befehlstaste der Palette. Ein Klick tut das eine, was die Komponente
erklärt, ihre *Aktion*, und der Eigenschaftsbereich fragt danach nur nach den eigenen Feldern
dieser Aktion, kein Feld sitzt also unter einer verborgenen Regel darüber, wann es zählt, auf dem
Bild. Sie ist eine Komponente der Kategorie *Bedienung*; eine neue belegt 3 × 1 Zellen.

Was die Aktion auch ist, die Schaltfläche trägt ihr eigenes Aussehen: ein Farbpaar und wahlweise
ein Icon. Auf einer Bedienfläche ist die Schaltfläche das Stück, zu dem die Hand des Bedieners
geht, und Farbe und Zeichen sind das, was eine davon auf einen Blick auffindbar macht.

## Inhalt {#content}

| Feld | Was es tut | Werte | Vorgabe |
|---|---|---|---|
| Beschriftung | Die Aufschrift der Taste. Leer fällt auf das zurück, worauf die gewählte Aktion zeigt: das letzte Segment der Adresse des geschriebenen Datenpunkts, die Bezeichnung des Ziel-Dashboards oder die Bezeichnung der gebundenen Logic-Aktion, und "(kein Datenpunkt)", "(kein Dashboard)", "(keine Aktion)" oder "(fehlt)", solange es nichts zu benennen gibt. | Freier Text | leer |

## Aktion {#action}

| Feld | Was es tut | Werte | Vorgabe |
|---|---|---|---|
| Beim Klick | Was der Klick tut. Jedes Feld darunter gehört zur gewählten Aktion. | `Einen Wert schreiben` · `Einen Befehl der Einheit ausführen` · `Ein anderes Dashboard öffnen` · `Eine Logic-Aktion ausführen` | `Einen Wert schreiben` |

### Einen Wert schreiben {#write-a-value}

| Feld | Was es tut | Werte | Vorgabe |
|---|---|---|---|
| Datenpunkt | Der geschriebene Datenpunkt. Die Liste ist auf das eingeengt, was sich tatsächlich schreiben lässt: Merkervariablen und Tags, die nicht nur lesbar sind. | Freier Text; Vorschläge schreibbarer Datenpunkte | leer |
| Geschriebener Wert | Der hinterlegte Wert, der bei jedem Klick gesendet wird. Er wird zuerst gegen den eigenen Typ des Datenpunkts gelesen, ein Wert, den der Datenpunkt nicht halten kann, wird also auf der Rückmeldezeile der Schaltfläche abgewiesen und erreicht die Warteschlange nie. | Freier Text | `true` |

Der Schreibzugriff geht durch den einen Schreibkanal der Logik der Station und wird wie jeder
andere Schreibzugriff im Journal festgehalten. Die Schaltfläche ist es, die auf die Anlage wartet,
nicht die Logic: Die Rückmeldezeile sagt "Geschrieben" also erst, wenn der Wert angenommen wurde;
alles andere setzt die Ablehnung dorthin, in den Worten dessen, der sie ausgesprochen hat, in die
eigenen der Station für das, was sie vor dem Senden entschieden hat ("'Cmd' wurde nicht geschrieben:
das Gerät ist nicht verbunden.") und in die der Anlage für das, was auf der Leitung geschah. Ein
Wert, den ein neuerer Schreibzugriff auf denselben Datenpunkt vor dem Senden überholt hat, liest
"'Cmd' wurde vor dem Senden durch einen neueren Wert ersetzt."

Über einem Tag, dessen Stufe **Grenzen** eingeschaltet ist, wird ein fester Wert außerhalb
dieser Grenzen auf der Rückmeldezeile mit einem Grund abgewiesen, der diese Grenzen nennt, und nichts wird geschrieben: sonst nähme das Tag ihn am Rand, und die
Schaltfläche bestätigte einen Wert, den die Anlage nie bekommen hat.

Über einem Datenpunkt, der Ganzzahlen hält (ein Tag eines ganzzahligen Typs, dessen Skalierung und Kalibrierung den Wert unverändert lassen, oder eine Variable im Merker, die Ganzzahlen hält), wird ein fester Wert mit Nachkommastellen auf der Rückmeldezeile abgewiesen, statt gerundet zu werden ("Dieser Datenpunkt nimmt eine Ganzzahl auf, also wird 2.5 nicht geschrieben."), und nichts wird geschrieben.

### Einen Befehl der Einheit ausführen {#run-a-unit-command}

| Feld | Was es tut | Werte | Vorgabe |
|---|---|---|---|
| Befehl | Ein Datenpunkt für einen Laufbefehl einer Einheit (`Process.<Model>.<Unit>.Commands.*`). Das Auslösen des Befehls ist die ganze Anweisung, es gibt keinen Wert zu schreiben. | Freier Text; die Liste bietet die Befehlsdatenpunkte der Einheit an | leer |

Ein Befehlsdatenpunkt liest "lässt sich jetzt ausführen", die Schaltfläche sperrt sich also
selbst, solange der Befehl nicht anwendbar ist; ein Start bei blockierter Runtime zeigt zusätzlich
den Grund der Blockade. Der Druck führt den Befehl an der Einheit aus, dem angemeldeten Bediener
zugeschrieben, und die Rückmeldezeile benennt den Befehl, der lief.

### Ein anderes Dashboard öffnen {#open-another-dashboard}

| Feld | Was es tut | Werte | Vorgabe |
|---|---|---|---|
| Dashboard | Das Zielbild. Die Auswahl führt die Dashboards der Station auf; Bilder, die an einem Process-Modell definiert sind, werden nicht angeboten, denn sie öffnen nur aus einer Einheit heraus. | `(keine)` oder ein Dashboard | `(keine)` |

Das Bild zu wechseln ist eine Geste der Bedienung: eine Fläche, die im Vollbild läuft, bleibt im
Vollbild, wenn der Bediener ankommt. Der Verweis ist lose: ein Bild, das gelöscht wurde oder das
die angemeldete Rolle nicht sieht, sperrt sonst nichts, der Druck antwortet auf der eigenen Zeile
der Schaltfläche "Dieses Dashboard ist nicht verfügbar.", statt das Bild zu zerbrechen.

### Eine Logic-Aktion ausführen {#run-a-logic-action}

| Feld | Was es tut | Werte | Vorgabe |
|---|---|---|---|
| Aktion | Die gebundene Logic-Aktion (siehe die [Seite Logic](logic)). | `(keine)` oder eine Aktion | `(keine)` |

Die Aktion läuft auf der Aktionsspur und wird als vom Dashboard kommend im Journal
festgehalten. Die Rückmeldezeile meldet das Ergebnis: "Fertig · 12 ms", oder den eigenen Fehler der
Aktion. Eine gelöschte oder deaktivierte Aktion sperrt die Schaltfläche, statt sie zu zerbrechen.

## Farbe und Icon {#color-and-icon}

Gelesen, was die Aktion auch ist:

| Feld | Was es tut | Werte | Vorgabe |
|---|---|---|---|
| Farbe der Schaltfläche | Die Fläche der Taste, als Paar, eine Hälfte je Design, beide zugleich auf dem Bild, denn das laufende Design entscheidet, welche Hälfte malt. Ein halb getippter Hex-Wert wird abgewiesen, und die Felder springen auf die Farben zurück, die in Kraft sind. Was eine Farbe bedeutet, ist Ihre Konvention; die Anwendung liest keine. | je `#RRGGBB` | `#FFFFFF` hell · `#2B2B2B` dunkel |
| Icon | Wahlweise ein Zeichen vor der Aufschrift, aus der Icon-Bibliothek der Anwendung gewählt (etwa 2.770 Zeichen), gesucht nach Bezeichnung oder Schlagwort ("z. B. play, stop, warning"). Die Zelle `—` ist die Wahl, kein Icon zu setzen. | Glyphe aus dem Katalog oder keine | keines |

Die Schriftfarbe der Aufschrift ist **abgeleitet**, nie verfasst: über jeder Hälfte der Fläche
wählt die Anwendung diejenige ihrer beiden Textfarben, die den besseren Kontrast hat, keine
Farbe, die Sie wählen, kann die Aufschrift also unlesbar machen. Die Aufschrift bemisst sich
selbst nach dem gemeinsamen Vertrag der Anzeige: was die Taste nicht fasst, wird mit
Auslassungspunkten gekürzt, mit der ganzen Aufschrift im Tooltip.

## Berechtigungen und die Sperre {#permissions-and-the-lock}

Jede Aktion braucht die Berechtigung der Rolle, Dashboards zu bedienen. Was ein Druck darüber
hinaus braucht, wird an seinem *Ziel* abgelesen, nicht an der Art: nur **Einen Befehl der Einheit
ausführen** reicht in eine Änderung an Process hinein und braucht zusätzlich die Berechtigung,
Abläufe auszuführen. Ein Druck, den die angemeldete Rolle nicht tun darf, zeichnet das gemeinsame
Sperrzeichen, mit dem Grund im Tooltip der Komponente (siehe die [Seite der Dashboards](home));
die Berechtigung wird beim Klick erneut geprüft. Die vorübergehende Rückmeldezeile verfällt nach
wenigen Sekunden. In einer Zelle ohne Zeile für sie und ohne Titel in der Ecke über der Taste
(eine Schaltfläche von einer Zeile in einem dichten Raster) nimmt die Antwort den Platz der
Aufschrift auf der Taste ein, solange sie steht: Sie liegt über der Aufschrift in einem
ruhigeren Ton der Schriftfarbe der Aufschrift selbst, eine Ablehnung in der Fehlerfarbe, mit der
ganzen Antwort im Tooltip. Icon und Taste bleiben, wo sie sind, und die Aufschrift kehrt
zurück, wenn die Antwort verfällt (siehe die
[Seite der Dashboards](home#commands-permissions-and-the-lock-mark)).

Die gemeinsamen Abschnitte Darstellung, Kennung, Position und Ebene und Aktionen sind auf
der [Seite der Komponenten](components#the-shared-property-sections) beschrieben.
