scanEvent

Définition Utilisation Exemple Côté technique
 

La gestion d'évènements temporels peut fonctionner sans l'afficheur et sans l'initialisation setGraphMode(). ScanEvent() ne peut pas lire le touchpad et croit que l'on appuie pas dessus, et passe donc à la gestion temporelle.

La gestion des événements s'occupe de deux choses différentes l'une apès l'autre, assez semblable dans le principe, mais suffisament différentes pour être disociée:
- la gestion des contrôles (boutons)
- la gestion des horloges (minuterie et temoporisateurs)

Gestion des contrôles

La gestion des contrôles passe par deux méthodes non documentées car elles sont utilisées en fonctionnement interne, et un utilisateur non averti ne doit pas les modifier. Un utilisateur averti, ira voir comment elle fonctionnent dans le source. scanEvent()génère un événement en appelant onClic() d'un contrôle si on vient d'appuyer sur ce contrôle, un événement en appelant la méthode onClac() d'un contrôle si on vient de le relâcher. Grâce à onClic() et onClac(), les contrôles vont se sélectionner, se déselectionner, appeler les méthodes internes onSelect() et onUnselect() qui par défaut ne font rien (laissées pour l'utilisateur) ainsi que les fonctions externes si elles ont été définies en utilisant *onClicFunction et *onClacFunction.

scanEvent() mémorise l'état du touchpad de son dernier appel. Il mémorise aussi si un contrôle a été sélectionné et si oui le quel. Quand on appelle scanEvent():
- Si un contrôle avait été sélectionné lors de son dernier passage et que le stylet est toujours dessus, il ne fait rien - Si le stylet est sorti de ce contrôle (en glissant sur le côté ou en se soulevant), un évènement onClac est généré.
Puis, quel que soit le résultat, il va, si le touchpad est appuyé mais qu'aucun contrôle sélectionné n'a été mémorisé, il va rechercher le dernier contrôle qui correspond. Si il le trouve, il va le mémoriser pour le prochain tour, et générer un événement onClic().

Pour ne pas perdre les informations sur le touchpad qu'il faut voir le plus rapidement, on doit bien souvent le metre seul dans la boucle loop(). Mais il n'est pas intrdit d'y avoir aussi autre chose à faire.

Les contrôles sont insérés dans une liste chaînée par le début au moment de leur création par le constructeur. Comme scanEvent() va lire cette liste pour trouver un contrôle, c'est le dernier entré qui sera vu avant.

Gestion des horloges

La gestion des horloges passe par une méthode non documentée car elle est utilisée en fonctionnement interne, et un utilisateur non averti ne doit pas la modifier. Un utilisateur averti, ira voir comment elle fonctionne dans le source. scanEvent() génère un événement en appelant onCloc() d'une horloge si elle a fini son comptage. Grâce à onCloc(), les horloges vont se sélectionner, se déselectionner. Puis scanEvent() appelle la méthode interne onTime() qui par défaut ne fait rien (laissée pour l'utilisateur) ainsi que la fonction externe si elle a été définie en utilisant *onTimeFunction.

scanEvent() ne mémorise pas les états des horloges contrairement à ce qui est fait pour les contrôles, et elle scanne toutes les horloges. Ainsi si deux horloges ont fini leur comptage en même temps, elle n'oubliera pas de s'occuper des deux.

Pour ne pas avoir des temps trop différents de ceux voulus, il faut scruter les horloges le plus rapidement possible et c'est pour cela qu'on doit bien souvent le metre seul dans la boucle loop(). Mais il n'est pas intrdit d'y avoir aussi autre chose à faire.

Les horlogess sont insérés dans une liste chaînée par le début au moment de leur création par le constructeur. L'ordre d'insertion n'a pas une grande importance car scanEvent() va scruter toutes les hologes.