RadioCoche

Définition Utilisation Exemple Côté technique
 

Beaucoup d'informations sont données pour le bouton PushZone qui ne sont pas toutes reprises ici. Un lecture de PushZone est une bonne idée.

RadioXXXX sont des classes de boutons radio comme on avait sur les vieux postes. Un bouton par game 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... Pour cette bibliothèque, lorsqu'on appuie dessus, s'active (ou reste actif), et un événement onSelect est généré. Lorsque l'on relâche l'appui, ou si l'appui sort de la zone d'action, il ne se passe rien. Si on appuie sur un bouton radio, cela va désactiver les autres boutons radio de la même série.

On peut avoir plusieurs groupes indépendents. Avec cette bibliothèque, le 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 séries 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 PecheuxGraph.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
                               // 6: 64 paires de boutons maxi
Il suffit de changer le chiffre 2 en rouge pour ajuster les nombres à nos besoins.

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

Un grope est un ensemble de boutons se désactivant les uns les autres, mais ne touchant pas aux autres groupes. On peut attribuer à chaque groupe un nom GROUPE_0, GROUPE_1, GROUPE_2 ou GROUPE_3. Cela correspond aux nombres de 0 à 3, mais c'est plus lisible.

Trois fonctions vont permettre de gérer efficacement les boutons radio:
- unselectRadio() permet de déselectionner tous les boutons radios d'un groupe
- getRadioValeur() nous donne la valeur du contrôle actif du groupe
- getRadioPointeur() retourne l'adresse du contrôle actif, ce qui nous permet d'accéder à toutes ses données, par exemple sa position.

XXXXCoche sont des classes de boutons carrés avec une coche quand ils sont actifs. Le carré visible mesure 11 pixels sur 11 pixels, mais la zone sur laquelle on peut pointer est définie par les paramètres passés au constructeur. Elle peut être plus grande ou plus petite. Le carré se positionne au milieu, ce n'est qu'un dessin.

RadioCoche est donc une classe de boutons radio carrées avec une coche quand ils sont actifs.

class RadioCoche
{
 public:
  RadioCoche(x1, y1, x2, y2, valeur = 0, groupe = GROUPE_0);

Constructeur, s'insère dans la liste des contrôles gérées.
x1, y1, x2, y2: zone d'action
valeur: un numéro attribué à chaque bouton
groupe: numéro du groupe, par exemple GROUPE_0, GROUPE_2, GROUPE_3 ou GROUPE_3
  demiX1, demiY1, demiX2, demiY2;
Occupation de l'espace dans l'écran, coordonnnés absolues DIVISEES par 2
  buttonColor;
Couleur du fond des boutons (Bordure et coche sont de la couleur opposée)
  *onSelectFunction;
Pointeur sur la fonction à appeler lorsque le bouton est sélectionné
  *onUnselectFunction;
Pointeur sur la fonction à appeler lorsque le bouton est déselectionné
  *controleSuivant;
Pointeur sur le contrôle suivant dans la liste des contrôles
  select();
Active un bouton
  unselect();
Désactive ce bouton
  isSelected();
Informe de l'état du bouton (sélectionné ou non)
  onSelect();
Fonction appelée lors de la sélection. On peut surcharger cette fonction, par défaut elle est vide
  onUnselect();
Fonction appelée lors de la déselection. On peut surcharger cette fonction, par défaut elle est vide
  drawButton();
Fonction appelée lors de l'activation, la désactivation, à l'initialisation de la librairie ou sur appel de la fonction drawControles(). On peut surcharger cette fonction, par défaut elle est vide pour les boutons XXXXZone, et fait ce qu'il faut pour les autres. On peut surcharger cette méthode, mais si on veut garder le dessin par défaut, il faut appeler la méthode drawButton() de la classe mère.

 

Exemples d'utilisation:
RadioCoche:
RadioCoche bouton(0,0,LARGEUR,HAUTEUR); Crée bouton sur toute la surface de l'écran

RadioCoche bouton(150,100,170,120); Crée bouton au centre en mode PAYSAGE

RadioCoche bouton = new RadioCoche(100,100,120,120); Crée une instance dynamique bouton central

new RadioCoche(100,100,120,120); Crée une instance dynamique bouton central mais sans pointeur dessus on n'a pas forcément besion d'y accéder si on a surchargé la fonction onSelect()

demiX1, demiY1, demiX2, demiY2:
circle(demiX1+demiX2, demiY1+demiY2, 10); Trace un cercle de rayon 10 centré sur le bouton

onSelectFunction:
bouton.onSelectFunction = & action; Appel la fonction void action(void) lors de la sélection

onUnselectFunction:
bouton.onUnselectFunction = & action; Appel la fonction void action(void) lors de la déselection

select(), unselect()
bouton.select(); Sélectionne ce bouton

isSelect():
if (bouton.isSelect())... Si la case est cochée

onSelect(), onUnselect():
voir les exemples complets

 

Voir aussi:
- unselectRadio() Déselectionne 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
- scanEvent(); Moteur de la gestion des évènements
- RadioZone; Bouton radio (un seul bouton actif parmi plusieurs) sans dessin
- RadioCircle; Bouton radio (un seul bouton actif parmi plusieurs) rond
- PushCoche; Bouton poussoir case à cocher
- CheckCoche; Bouton bistable (va vient) case à cocher