PushCircle

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

PushXXXX sont des classes de boutons poussoirs, genre bouton de sonnette. Lorsque l'on appuie dessus "le courant passe" et "s'arrête" si on relâche. Pour cette bibliothèque, lorsqu'on appuie dessus un événement onSelect est généré et il devient actif. Lorsque l'on relâche l'appui, ou si l'appui sort de la zone d'action, un événement onUnselect est généré et le bouton devient inactif. Bon nombre d'applications n'utilisent que l'événement onSelect.

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.

PushCircle est donc une classe de boutons poussoirs dessinés avec des cercles.

 

Exemples d'utilisation

PushCircle  bouton(0,0,LARGEUR,HAUTEUR); // Crée bouton sur toute la surface de l'écran, mais le dessin sera tout petit, au centre
PushCircle bouton = new PushCircle(100,100,120,120); // Crée une instance dynamique bouton
new PushCircle(100,100,120,120); // Crée une instance dynamique 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 l'appui

bouton.onUnselectFunction = &action; // Appel la fonction void action(void) lors du relâchement

if (bouton.isSelect())... // Si on est en train d'appuyer sur le bouton

 

Référence

class 
 public:
  PushCircle(int x1, int y1, int x2, int y2);
  byte demiX1, demiY1, demiX2, demiY2;
  word buttonColor;
  void (*onSelectFunction)(void);
  void (*onUnselectFunction)(void);
  PushZone *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

PushCircle(): 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
  word 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ésélectionné
  *controleSuivant: Pointeur sur le contrôle suivant dans la liste des contrôles
  select: Active un bouton. Le bouton est automatiquement activé lorsque l'on appuie dessus
  unselect: Désactive ce bouton. Le bouton est automatiquement déactivé lorsque l'on le relâche
  isSelected: Informe de l'état du bouton. Pour ce bouton, il est actif tant qu'on appuie dessus
  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: Dessine le bouton

 

Voir aussi

- scanEvent(); Moteur de la gestion des événements
- PushZone; Bouton poussoir sans dessin
- PushCoche; Bouton poussoir case à cocher
- CheckCircle; Bouton bistable (va vient) rond
- 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 PushZone. Ici les boutons ne font rien. Pour avoir des boutons qui travaillent, se reporter aussi à PushZone.

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

// Mise en place de 3 boutons de type PushCircle (poussoir sur une zone, dessin
// carré avec une coche si il est actif). On peut voir l'activité du bouton
// à la présence d'une coche sous le stylet. 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
PushCircle boutonHaut(190, 90, 230, 130); // Bouton en haut
PushCircle boutonCentre(190, 140, 230, 180); // Bouton au centre
PushCircle boutonBas(190, 190, 230, 230); // Bouton en bas


void setup()
{
  // Si on veut 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.
  PushCircle::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: