# Sélecteur

> Les options déclarées sur un point, en touches ou en liste, avec celle dans laquelle l'installation se trouve vraiment.

Le **Sélecteur** propose à l'opérateur un jeu fermé de choix déclarés, un mode de marche, une
recette, un cran de vitesse, sur un point inscriptible. Choisir une option écrit la valeur de cette
option ; le même point relu est ce qui allume l'option active. Cette relecture est toute la raison
d'être du genre : une rangée de [Boutons](component-button) écrivant chacun une valeur fixe écrit
tout aussi bien et ne montre rien. C'est un composant de *Commande* ; un nouveau occupe 5 × 1
cellules.

## Données {#data}

| Champ | Ce qu'il fait | Valeurs | Par défaut |
|---|---|---|---|
| Adresse | L'adresse Logic enracinée dans laquelle le choix est écrit et depuis laquelle il est relu : une variable mémoire ou un tag inscriptible. La liste est réduite aux points qui peuvent réellement être écrits. | Texte libre ; propositions de points inscriptibles | vide |

## Options proposées {#options}

| Champ | Ce qu'il fait | Valeurs | Par défaut |
|---|---|---|---|
| Affiche | Comment les options sont proposées : une touche par option, côte à côte, tous les choix lisibles à la fois, ou une liste qui s'ouvre à la demande, pour une cellule sans place pour une rangée de touches. | `Une touche par option` · `Une liste déroulante` | `Une touche par option` |

Chaque option est une carte qui porte les deux choses qu'une option *est* :

| Champ | Ce qu'il fait | Valeurs | Par défaut |
|---|---|---|---|
| texte | Le mot que l'opérateur lit sur la touche ou dans la liste. Vide, il retombe sur la valeur elle-même, parce qu'une touche sans rien dessus ne dit rien. | Texte libre | vide |
| valeur | La valeur écrite quand cette option est choisie, et la lecture qui la montre active. C'est un code, comparé à l'identique : ce qui se trouve entre deux codes n'est pas un choix. | N'importe quel nombre | vide (ne déclare rien tant que rien n'est tapé) |

L'ordre des cartes est l'ordre des touches sous la main de l'opérateur ; les flèches monter et
descendre réordonnent, et rien ici ne se trie tout seul. Deux options qui nomment la même valeur ne
peuvent pas dessiner toutes les deux une touche (le point ne pourrait signaler qu'une des deux, et
la commande ne saurait pas laquelle) ; le volet le dit et la doublure ne dessine rien.

Toutes les touches partagent une seule taille de texte, réservée depuis le mot déclaré le plus
large, si bien que la rangée se lit comme une seule commande plutôt que comme une rangée de touches
sans rapport. Un Sélecteur sans option dit « Aucune option déclarée. » au lieu de dessiner une
rangée vide qui aurait l'air d'une vue encore en cours de chargement.

## Ce qui s'allume, et quand {#what-lights-and-when}

La touche allumée (ou la sélection de la liste) est la lecture propre au point, jamais le clic :

| Situation | Ce que la commande montre |
|---|---|
| Le point signale une valeur déclarée | Cette option allumée, ou sélectionnée dans la liste |
| Le point signale une valeur qu'aucune option ne déclare | Rien d'allumé : la touche la plus proche qui s'allumerait serait la vue en train d'inventer le mode de l'installation |
| Le point ne lit pas | Rien d'allumé, et le composant porte la marque de lecture mauvaise partagée |

Un choix ne demande aucune lecture au préalable, l'option portant une valeur absolue, donc une
mauvaise qualité laisse la commande *utilisable* tout en retirant l'indication.

## Ce que l'écriture signifie {#write-semantics}

Choisir une option écrit sa valeur par le canal d'écriture unique de la station, sous la même
autorisation que toute commande passe. Un point qui ne peut pas contenir un nombre refuse
l'écriture avec la raison sur la ligne de retour de la commande (« Ce point contient date et heure, donc
2 n'est pas une valeur qu'il accepte. ») ; un choix réussi répond avec le mot de l'option
(« Auto écrit »). La ligne de retour expire au bout de quelques secondes, et l'autorisation est
revérifiée à chaque choix. Là où les options s'affichent en touches, dans une cellule sans place
pour cette ligne et sans titre de coin au-dessus de la rangée, la réponse prend le mot de la
touche qui a été appuyée tant qu'elle s'affiche, un refus à l'encre d'erreur. La touche garde sa
largeur, si bien que ce qu'elle ne peut pas contenir se termine par des points de suspension,
avec la réponse entière dans l'infobulle ; aucune touche ne bouge, et le mot revient quand la
réponse expire.
Là où les options s'affichent en liste, la réponse prend de la même façon la place de ce que
montre la liste fermée : la liste garde sa largeur et sa flèche, et ce qu'elle montrait revient
quand la réponse expire.

Sur un tag dont l'étape **Limites** est activée, une option dont la valeur sort de ces
limites est refusée de la même façon, avec un motif qui nomme ces limites,
et rien n'est écrit : prise au bord, elle mettrait l'installation dans une autre option que
celle choisie, et la ligne confirmerait celle choisie.

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 option dont la valeur a une partie décimale est refusée de la même façon au lieu d'être arrondie (« Ce point attend un entier, donc 2.5 n'y est pas écrit. »), et rien n'est écrit.

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

Manœuvrer le Sélecteur demande la permission de rôle de piloter les tableaux de bord. Un appui
bloqué désactive les touches et dessine la marque de verrou partagée avec la raison dans l'infobulle
du composant (voir la [page des tableaux de bord](home)).

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