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 appie 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'utilise que l'événement onSelect.
XXXXZone sont des classes de boutons sans dessin prédéfini. En principe, on affiche une image de
fond qui va servir de zone visible pour les boutons de cette classe.
PushZone est donc une classe de boutons poussoirs sans dessin prédéfini.
class PushZone
{
public:
PushZone(x1, y1, x2, y2);
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, coordonnnés absolues DIVISEES par 2
buttonColor;
Couleur du fond des boutons Coche et Cercle
*onSelectFunction;
Pointeur sur la fonction à appeler lorsque le bouton est sélectionné
*onUnselectFunction;
Pointeur sur la fonction à appeler lorsque le bouton est déselectionné
PushZone *controleSuivant;
Pointeur sur le contrôle suivant dans la liste des contrôles
select();
Active un bouton. N'a aucun intérêt pour ce bouton, mais pas pour des descendants. Le bouton est automatiquement
activé lorsque l'on appuie dessus
unselect();
Désactive ce bouton N'a aucun intérêt pour ce bouton, mais pas pour des descendants. 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é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.
Pour définir un bouton, il faut donner sa zone d'action. Pour des raisons de stockage mémoire et de précision,
n'est enregisré que les nombres pairs des valeurs passées. Les nombres impairs sont arrondis au nombre pair inférieur.
Ainsi la zone (100,100,201,201) est équivalente à (100,100,200,200).
Si on a plusieurs boutons dont les zones d'actions ont une partie commune, comme les boutons sont anlysés dans l'ordre
inverse de leur déclaration, la zone commune devient propriété du bouton défini en dernier. Cela évite les conflits. Cela
permet aussi d'avoir un bouton dont la zone n'est pas rectangulaire, il peut manquer un coin.
Si on définit: |
Nombres pairs retenus: |
Zones actives: |
PushZone bouton1(100,100,120,120); |
(100,100,120,120); |
(100,100,120,119); |
PushZone bouton2(100,121,120,140); |
(100,120,120,140); |
(100,120,120,139); |
PushZone bouton3(100,141,120,160); |
(100,140,120,160); |
(100,140,120,160); |
La définition la plus simple pour l'exemple ci dessus est:
PushZone bouton1(100,100,120,120);
PushZone bouton2(100,120,120,140);
PushZone bouton3(100,140,120,160);
Exemples d'utilisation:
PushZone:
PushZone bouton(0,0,LARGEUR,HAUTEUR); Crée bouton sur toute la surface de l'écran
PushZone bouton(150,100,170,120); Crée bouton au centre en mode PAYSAGE
PushZone bouton = new PushZone(100,100,120,120); Crée une instance dynamique bouton central
new PushZone(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 l'appui
onUnselectFunction:
bouton.onUnselectFunction = & action; Appel la fonction void action(void) lors du relâchement
select(), unselect()
Peu d'intérêt pour ce bouton, c'est pour les descendants
isSelect():
if (bouton.isSelect())... Si on est en train d'appuyer sur le bouton
onSelect(), onUnselect():
voir les exemples complets
Voir aussi:
- scanEvent(); Moteur de la gestion des évènements
- pourBoutonTexte("texte"); Aide pour dessiner des boutons textes
- PushCoche; Bouton poussoir case à cocher
- PushCircle; Bouton poussoir rond
- CheckZone; Bouton bistable (va vient) sans dessin
- RadioZone; Bouton radio (un seul bouton actif parmi plusieurs) sans dessin
|