CheckCircle

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

CheckXXXX sont des classes de cases à cocher, genre "j'ai lu les conditions de vente". Comme bouton, c'est comme un bouton de lumière avec télérupteur, a la limite un interrupteur va et vient. Lorsque l'on appuie dessus il change d'état. Pour cette bibliothèque, lorsqu'on appuie dessus, si il n'est pas actif, il le devient, et un événement onSelect est généré. Si il était déjà actif, il se désactive et un événement onUnselect 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.

XXXXCircle sont des classes de boutons ronds qui changent de couleur quand ils sont actifs. Le disque visible mesure 11 pixels de diamètre, 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 disque se positionne au milieu, ce n'est qu'un dessin.

CheckCircle est donc une classe de cases à cocher dessinées avec des cercles.

 

Exemples d'utilisation

CheckCircle bouton(0,0,LARGEUR,HAUTEUR); // Crée bouton sur toute la surface de l'écran
CheckCircle bouton(150,100,170,120); // Crée bouton au centre en mode PAYSAGE 320x240
CheckCircle bouton = new CheckCircle(100,100,120,120); // Crée une instance dynamique bouton
new CheckCircle(100,100,120,120); // Crée une instance dynamique bouton sans pointeur dessus

circle(bouton.demiX1+bouton.demiX2, bouton.demiY1+bouton.demiY2, 10); // Cercle centré sur le bouton

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

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

 

Référence

class CheckCircle
 public:
  CheckCircle(int x1, int y1, int x2, int y2);
  byte demiX1, demiY1, demiX2, demiY2;
  word buttonColor;
  void (*onSelectFunction)(void);
  void (*onUnselectFunction)(void);
  CheckCircle *controleSuivant;
  void select(void);
  void unselect(void);
  boolean isSelected(void);
  virtual void onSelect(void);
  virtual void onUnselect(void)
  virtual void drawButton(void);

Attributs et méthodes

CheckCircle(): Constructeur, s'insère dans la liste des contrôles gérées. x1, y1, x2, y2: zone d'action

demiX1, demiY1, demiX2, demiY2: Occupation de l'espace dans l'écran, coordonnés absolues DIVISEES par 2

buttonColor: Couleur du fond des boutons de la classe

*onSelectFunction: : Pointeur sur la fonction à appeler lorsque le bouton est sélectionné

*onUnselectFunction: : Pointeur sur la fonction à appeler lorsque le bouton est désélectionné

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

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

 

Voir aussi

- scanEvent(); Moteur de la gestion des événements
- PushCircle; Bouton poussoir rond
- CheckZone; Bouton bistable (va vient) sans dessin
- CheckCoche; Bouton bistable (va vient) case à cocher
- RadioCircle; Bouton radio (un seul bouton actif parmi plusieurs) rond

 

Exemples

Dans l'exemple qui suit trois boutons sont placées à droite de l'écran. Il y a plusieurs implantations possibles, je ne donne ici que la plus simple. Pour avoir toutes les possibilités se reporter au bouton CheckZone. Ici les boutons ne font rien. Pour avoir des boutons qui travaillent, se reporter aussi à CheckZone.

PecheuxGraph_ILI9341_8bits.zip\PecheuxGraph_ILI9341_8bits\examples\Documentation\Exemple-931-CheckCircle\Exemple-931-CheckCircle.ino (dans votre fichier téléchargé):

// Mise en place de 3 boutons de type CheckCircle (cases à cocher, dessinés
// avec des disques qui changent de couleur si ils sont actif). On peut voir 
// l'activité des boutons au changement de couleur. La zone d'action est bien
// plus grande que le dessin, on peut donc pointer légèrement à côté

// Les boutons ont une définition statique

#
  $menu = ":PG";
  include <PecheuxGraph_ILI9341_8bits.h> // Appel de la bibliothèque 


// Déclaration statique de l'instance, doit se faire en dehors du setup
// Dans ce cas le bouton est accessible partout
CheckCircle boutonHaut(190, 90, 230, 130); // Bouton en haut
CheckCircle boutonCentre(190, 140, 230, 180); // Bouton au centre
CheckCircle boutonBas(190, 190, 230, 230); // Bouton en bas


void setup()
{
  // Si on veur changer la couleur par défaut des boutons, il vaut mieux le
  // faire avant qu'ils soient dessinés. La première fois c'est à l'appel de
  // setGraphMode(), les fois suivantes c'est lors des appuis et des
  // relâchements.
  CheckCircle::buttonColor=BLUE;
  
  setGraphMode(PAYSAGE); // Initialisation de la carte
  text(F("Appuyez sur un bouton"));
}


void loop()
{
  scanEvent(); // Gestion des boutons et des horloges
}

Résultat: