# Bouton

> La touche de commande : écrit une valeur préréglée, lance une commande d'unité, ouvre un autre tableau de bord ou exécute une action Logic.

Le **Bouton** est la touche de commande de la palette. Un clic fait la seule chose que le composant
déclare, son *action*, et le volet de propriétés ne demande alors que les champs propres à cette
action, si bien qu'aucun champ ne reste à l'écran sous une règle cachée disant quand il compte.
C'est un composant de *Commande* ; un nouveau occupe 3 × 1 cellules.

Quelle que soit l'action, le bouton porte son allure à lui : une paire de couleurs et une icône
facultative. Sur un pupitre d'exploitation, le bouton est la pièce vers laquelle la main de
l'opérateur va, et la couleur et la marque sont ce qui en rend un repérable d'un coup d'œil.

## Contenu {#content}

| Champ | Ce qu'il fait | Valeurs | Par défaut |
|---|---|---|---|
| Libellé | La légende sur la touche. Vide, elle retombe sur ce que l'action choisie vise : le dernier segment d'adresse du point écrit, le nom du tableau de bord de destination, ou le nom de l'action Logic liée, et « (aucun point) », « (aucun tableau de bord) », « (aucune action) » ou « (manquant) » tant qu'il n'y a rien à nommer. | Texte libre | vide |

## Action {#action}

| Champ | Ce qu'il fait | Valeurs | Par défaut |
|---|---|---|---|
| Au clic | Ce que le clic fait. Chaque champ ci-dessous appartient à l'action choisie. | `Écrire une valeur` · `Lancer une commande d'unité` · `Ouvrir un autre tableau de bord` · `Exécuter une action Logic` | `Écrire une valeur` |

### Écrire une valeur {#write-a-value}

| Champ | Ce qu'il fait | Valeurs | Par défaut |
|---|---|---|---|
| Point | Le point écrit. La liste est réduite à ce qui peut réellement être écrit : les variables mémoire et les tags qui ne sont pas en lecture seule. | Texte libre ; propositions de points inscriptibles | vide |
| Valeur écrite | Le littéral préréglé envoyé à chaque clic. Il est d'abord lu contre le type propre au point, si bien qu'une valeur que le point ne peut pas contenir est refusée sur la ligne de retour du bouton et n'atteint jamais la file. | Texte libre | `true` |

L'écriture passe par le canal unique de la logique de la station et est journalisée comme toute
autre écriture. C'est le bouton qui attend l'équipement, pas la Logique : la ligne de retour ne dit
« Écrit » qu'une fois la valeur prise ; tout autre dénouement y inscrit le refus avec les mots de
qui a refusé, ceux de la station pour ce qu'elle a tranché avant l'envoi (« « Cmd » n'a pas été
écrit : l'équipement n'est pas connecté. ») et ceux de l'équipement pour ce qui s'est passé sur le
câble. Une valeur qu'une écriture plus récente sur le même point a dépassée avant l'envoi se lit
« « Cmd » a été remplacé par une valeur plus récente avant l'envoi. »

Sur un tag dont l'étape **Limites** est activée, une valeur préréglée hors de ces limites
est refusée sur la ligne de retour avec un motif qui nomme ces limites, et
rien n'est écrit : sinon le tag la prendrait au bord, et le bouton confirmerait une valeur
que l'installation n'a jamais reçue.

Sur un point qui contient des entiers (un tag de type entier dont la Mise à l'échelle et l'Étalonnage laissent la valeur inchangée, ou une variable mémoire qui contient des entiers), une valeur préréglée avec une partie décimale est refusée sur la ligne de retour au lieu d'être arrondie (« Ce point attend un entier, donc 2.5 n'y est pas écrit. »), et rien n'est écrit.

### Lancer une commande d'unité {#run-a-unit-command}

| Champ | Ce qu'il fait | Valeurs | Par défaut |
|---|---|---|---|
| Commande | Un point de commande d'essai d'une unité (`Process.<Model>.<Unit>.Commands.*`). Lancer la commande est l'instruction entière : il n'y a aucune valeur à écrire. | Texte libre ; la liste propose les points de commande d'essai de l'unité | vide |

Un point de commande dit « exécutable maintenant », donc le bouton se désactive tant que la commande
ne s'applique pas ; un Démarrer alors que le runtime est bloqué montre en plus la raison du blocage.
L'appui exécute la commande sur l'unité, attribuée à l'opérateur connecté, et la ligne de retour
nomme la commande qui s'est exécutée.

### Ouvrir un autre tableau de bord {#open-another-dashboard}

| Champ | Ce qu'il fait | Valeurs | Par défaut |
|---|---|---|---|
| Tableau de bord | La vue de destination. Le sélecteur liste les tableaux de bord de la station ; les vues définies sur un modèle Process ne sont pas proposées, parce qu'elles ne s'ouvrent que depuis une unité. | `(aucun)` ou un tableau de bord | `(aucun)` |

Changer de vue est un geste d'exploitation : un pupitre qui tourne en plein écran reste en plein
écran quand l'opérateur arrive. La référence est lâche : une vue supprimée, ou que le rôle connecté
ne voit pas, ne désactive rien d'autre ; l'appui répond « Ce tableau de bord est indisponible. » sur
la ligne propre au bouton au lieu de casser la vue.

### Exécuter une action Logic {#run-a-logic-action}

| Champ | Ce qu'il fait | Valeurs | Par défaut |
|---|---|---|---|
| Action | L'action Logic liée (voir la [page Logic](logic)). | `(aucun)` ou une action | `(aucun)` |

L'action s'exécute sur la voie des actions, journalisée comme venant du tableau de bord. La ligne
de retour rapporte le résultat : « Exécuté · 12 ms », ou l'erreur propre à l'action. Une action
supprimée ou désactivée désactive le bouton plutôt que de le casser.

## Couleur et icône {#color-and-icon}

Lues quelle que soit l'action :

| Champ | Ce qu'il fait | Valeurs | Par défaut |
|---|---|---|---|
| Couleur du bouton | La face de la touche, sous forme de paire, une moitié par thème, les deux à l'écran à la fois, parce que le thème en cours décide quelle moitié peint. Un hexadécimal à moitié tapé est refusé et les champs reviennent aux couleurs en vigueur. Ce qu'une couleur signifie est votre convention ; l'application n'en lit aucune. | `#RRGGBB` chacune | `#FFFFFF` clair · `#2B2B2B` sombre |
| Icône | Marque facultative devant la légende, choisie dans la bibliothèque d'icônes de l'application (environ 2 770 marques), cherchée par nom ou par mot-clé (« en anglais : play, stop, warning… »). La cellule `—` est le choix d'aucune icône. | Glyphe du catalogue ou aucun | aucune |

L'encre de la légende est **dérivée**, jamais déclarée : sur chaque moitié de la face, l'application
prend celle de ses deux teintes de texte qui a le meilleur contraste, si bien qu'aucune couleur que
vous choisissez ne peut rendre la légende illisible. La légende se dimensionne par le contrat
d'affichage partagé : ce que la touche ne peut pas contenir est écrit en abrégé, avec la légende
entière dans l'infobulle.

## Permissions et verrou {#permissions-and-the-lock}

Toute action demande la permission de rôle de piloter les tableaux de bord. Ce qu'un appui demande
au-delà se lit sur sa *cible*, pas sur son genre : seule **Lancer une commande d'unité** atteint une
mutation de Process et demande en plus la permission d'exécuter les procédures. Un appui que le rôle
connecté ne peut pas faire dessine la marque de verrou partagée avec la raison dans l'infobulle du
composant (voir la [page des tableaux de bord](home)) ; l'autorisation est revérifiée au clic. La
ligne de retour passagère expire au bout de quelques secondes. Dans une cellule sans ligne pour elle
et sans titre de coin au-dessus de la touche (un bouton d'une ligne sur une grille dense), la
réponse prend la place de la légende sur la touche tant qu'elle s'affiche : elle se pose sur la
légende dans une nuance plus discrète de l'encre même de la légende, un refus à l'encre d'erreur,
avec la réponse entière dans l'infobulle. L'icône et la touche restent où elles sont, et la légende
revient quand la réponse expire (voir la
[page des tableaux de bord](home#commands-permissions-and-the-lock-mark)).

Les sections partagées Apparence, Identification du composant, Position et couche et Actions du composant sont décrites sur la
[page des composants](components#the-shared-property-sections).
