Constantes pour les boutons radio

Permet d'avoir des noms symboliques pour les 4 premiers numéros de groupes des boutons radio.

 

Exemples d'utilisation

RadioZone bouton(0,0,LARGEUR,HAUTEUR); // Bouton N°0, groupe n°0
RadioZone bouton(0,0,LARGEUR,HAUTEUR,BOUTON_1); // Bouton N°1, groupe n°0
RadioZone bouton(0,0,LARGEUR,HAUTEUR,BOUTON_1,GROUPE_1); // Bouton N°1, groupe n°1
RadioZone bouton(0,0,LARGEUR,HAUTEUR,GROUPE_1); // Ne pas faire (Bouton N°1, groupe n°0)
unselectRadio(); // Désélectionne les boutons radio du groupe GROUPE_0 
unselectRadio(GROUPE_0); // Identique. Pas plus clair
unselectRadio(GROUPE_1); // Désélectionne les boutons radio du groupe GROUPE_1 

 

Référence

#define BOUTON_0   0
#define BOUTON_1   1
#define BOUTON_2   2
#define BOUTON_3   3
#define BOUTON_4   4
#define BOUTON_5   5
#define BOUTON_6   6
#define BOUTON_7   7
#define BOUTON_8   8
#define BOUTON_9   9
#define GROUPE_0   0
#define GROUPE_1   1
#define GROUPE_2   2
#define GROUPE_3   3

 

Voir aussi

- unselectRadio() Désélectionne tous les boutons radios d'un groupe
- getRadioValeur() Donne la valeur du contrôle actif du groupe
- getRadioPointeur() retourne l'adresse du contrôle actif
- RadioZone; Bouton radio (un seul bouton actif parmi plusieurs) sans dessin
- RadioCoche; Bouton radio (un seul bouton actif parmi plusieurs) case à cocher
- RadioCircle; Bouton radio (un seul bouton actif parmi plusieurs) rond

 

Notes

RadioXXXX sont des classes de boutons radio comme on avait sur les vieux postes. Un bouton par gamme FM1, FM2, MW, SW, en appuyant sur un bouton, cela fait remonter les autres. Les commandes de volets roulants sont de ce type, ainsi que le choix d'un programme de lavage...

On peut attribuer à chaque bouton une valeur comprise entre 0 inclus et le nombre maximum de boutons exclu (par défaut ente 0 et 31, tout excès sera tronqué). On n'est pas obligé, mais cela peut être pratique pour savoir quel bouton est sélectionné. Pour les 10 premiers boutons, on peut utiliser les noms symboliques BOUTON_0, BOUTON_1... Si on a beaucoup de boutons, on fera sans doute une boucle d'initialisation, et on utilisera des valeurs numériques.

Pour définir des boutons radio on peut bien sûr utiliser des nombres, mais si on écrit:
RadioZone bouton(1,2,3,4,3,2);
C'est assez difficile de se faire une idée sur ce que représentent ces nombres (lequel est le numéro du bouton?).

Si on a plusieurs boutons radio, celui qui s'active, désactive les autres. En définissant plusieurs groupes, on va légèrement modifier ce mécanisme. Au sein d'un même groupe si un bouton s'active, il va désactiver les boutons du même groupe. On va ainsi avoir plusieurs ensembles de boutons indépendants. Par défaut, on peut avoir au maximum 4 groupes . Les appeler GROUPE_0, GROUPE_1, GROUPE_2 et GROUPE_3 au lieu de 0, 1, 2 et 3 permet d'avoir un code plus lisible.

On peut aussi avoir plusieurs groupes indépendants. Avec cette bibliothèque, les limitations sont:
- le nombre maximum de boutons dans tous les groupes est le même et c'est une puissance de 2
- le nombre maximum de groupes est une puissance de 2
- le produit des deux est 128
Par défaut, on peut avoir 4 groupes de 32 boutons. Ces nombres peuvent se changer au début du fichier PecheuxGraphXXXXX.h . Dans les premières lignes on trouve:

#define RADIO_NB_BITS_GROUPE 2 // Nombre de bits pour la définition du groupe radio 0..6
                               // 0: 1 seul groupe de 128 boutons maxi
                               // 1: 2 groupes maxi de 64 boutons maxi chacun
                               // 2: 4 groupes maxi de 32 boutons maxi
                               // 3: 8 groupes maxi de 16 boutons maxi
                               // 4: 16 groupes maxi de 8 boutons maxi
                               // 5: 32 groupes maxi de 4 boutons maxi
                               // 6: 64 paires de boutons maxi

Il suffit de changer le chiffre 2 en rouge pour ajuster les nombres à nos besoins.

 

Côté technique

Tous les boutons ont besoin d'un booléen pour enregistrer leur état actif ou non. Cette valeur est stockée dans un octet "parametre". Pour limiter l'usage de la mémoire si le nombre de boutons radio est important, et comme sur l'octet parametre comporte 7 bits de libres, le numéro du bouton et le numéro du groupe occuperont cette place. La répartition est définie ainsi:

  //   1 si actif               valeur                      groupe
  // └-------------┴---------------------------┴----------------------------┘
  //      1 bit     7-RADIO_NB_BITS_GROUPE bits   RADIO_NB_BITS_GROUPE bits

C'est pour cela qu'il y a des limitations comme 1 seul groupe de 128 boutons maxi, 4 groupes maxi de 32 boutons maxi...