Gestion des composants et des attributs
en cours de travail de création de pages, je vous prie de m'excuser
Modification des modes et des valeurs
au moment de l'appel en retour (callback)
Au moment de l'appel en retour, vous pouvez vérifier la valeur d'un composant.
Si l'application l'appelle, vous pouvez à nouveau utiliser (set_tile) pour modifier la valeur du composant.
Lors des appels en retour, vous pouvez aussi recourir à (mode_tile) pour modifier l'état d'un composant.
Le tableau ci-après indique les valeurs de l'argument mode de (mode_tile).
Codes des modes de composant de mode_tile :
Valeur | Signification |
0 |
Active le composant |
1 |
Désactive le composant |
2 |
Place le focus sur le composant |
3 |
Sélectionne le contenu de la boîte d'édition |
4 |
Active ou désactive la surbrillance de l'image |
Si, à l'aide de (mode_tile), vous désactivez un composant sur lequel le focus est placé, vous devez à nouveau appeler (mode_tile) pour placer le focus sur un autre composant (en général, la tabulation suivante dans la boîte de dialogue).
Sinon, le focus restera sur un composant désactivé, ce qui est illogique et peut entraîner des erreurs.
Prenons le cas d'un composant qui se désactive lui-même.
Un utilisateur parcourt une série de "pages" dans une boîte de dialogue en choisissant le bouton Suivant ou Précédent.
S'il choisit Suivant alors qu'il est dans l'avant-dernière page, le bouton est désactivé.
La même chose se produit s'il choisit Précédent lorsqu'il est sur la deuxième page.
Dans les deux cas, le code doit désactiver le bouton choisi, puis placer le focus sur un autre composant.
Supposons que le composant "group_on" soit une bascule qui contrôle un groupe appelé "groupe".
Si la bascule est désactivée, les composants du groupe seront inactifs et ne devraient pas être modifiés.
Dans ce cas, vous devez définir l'action suivante de la bascule.
Notez l'usage du caractère de contrôle \", qui permet d'inclure les guillemets dans un argument de action_ tile .
(action_tile "group_on" "(mode_tile \"groupe\" (- 1 (atoi $value)))") |
La soustraction et l'appel à atoi dans l'expression d'actions définit l'argument mode de la fonction (mode_tile).
La valeur d'une bascule étant égale à 0 lorsqu'elle est désactivée et à 1 lorsqu'elle est activée, la soustraction inverse sa valeur et l'argument mode détermine si la barre est active.
Outre l'attribut value des composants, vous pouvez contrôler d'autres attributs à l'aide de la fonction (get_attr).
Par exemple, pour retrouver le libellé d'un bouton nommé "cliquez", entrez :
(get_attr "cliquez" "label") |
Lorsque vous recherchez la valeur d'un attribut value à l'aide de (get_attr), vous obtenez la valeur initiale du composant enregistrée dans le fichier DCL,par contre la fonction (get_tile) retourne la valeur du composant en cours d'exécution.
Ces deux valeurs ne sont pas forcément identiques.
La fonction (get_attr) renvoie la valeur de l'attribut spécifié en tant que chaîne de caractères (string).
Gestion des barres de défilement
Si vous gérez des actions et des appels en retour à partir de barres de défilement, votre application devra vérifier le code de motif reçu avec l'appel en retour.
Vous n'avez pas besoin de vérifier ce code, mais vous pouvez le faire pour réduire les temps de traitement.
La fréquence des appels en retour générés par les barres de défilement dépend de la plateforme. Certaines d'entre elles génèrent un appel en retour de code 1 pour chaque déplacement de souris détecté par la barre de défilement.
La structure de base d'une fonction gérant une barre de défilement est présentée ci-dessous.
Elle est appelée à partir d'une expression d'actions associée au composant de barre de défilement. La barre de défilement (slider_info) utilisée par la fonction affiche la valeur courante de la barre sous forme décimale.
Il s'agit très souvent d'une boîte d'édition, qui donne à l'utilisateur la possibilité, soit de manipuler la barre de défilement, soit d'entrer directement sa valeur.
Si l'utilisateur entre la valeur dans(slider_info) , l'appel en retour de la boîte d'édition mettra à jour la valeur de la barre de défilement.
DCL :
1 2 3 4 5 | (action_tile "mabarre" "(slider_action $value $reason)" (action_tile "slider info" "(ebox_action $value $reason)" ) |
LSP:
1 2 3 4 5 6 | (defun slider action (val why) (if (or (= why 2) (= why 1)) (set_tile "slider_info" val) ; indique le résultat provisoire ) |
1 2 3 4 5 | (defun ebox_action (val why) (if (or (= why 2) ( = why 1)) (set_tile "mabarre" val) ; indique le résultat provisoire ) |
Gestion des boîtes d'édition
Les actions et les appels en retour gérant les boîtes d'édition sont semblables à ceux des barres de défilement.
Toutefois, comme les caractères contenus dans les boîtes sont déjà visibles, il est inutile d'intervenir sur les résultats provisoires.
Les boîtes d'édition ne renvoient un code d'appel en retour que lorsque le composant n'a plus le focus.
Le code donné en exemple ci-dessous vérifie la valeur, mais ne la réaffiche pas.
DCL :
(action_tile "maboite" "(edit_action $value $reason)") |
LSP :
1 2 3 4 5 6 7 | (defun edit_action (val why) (if (or ( = why 2 ) ( = why 4)) ;;;Contrôle de validité de la valeur provisoire ;;;par rapport à la plage définie ) ) |
Imbrication des boîtes de dialogue
Pour créer et gérer des boîtes de dialogue imbriquées, il suffit d'appeler (new_dialog) et (start_dialog) à partir d'une expression d'actions ou d'une fonction d'appel en retour (callback).
Par exemple, si vous spécifiez l'instruction suivante, la fonction peut afficher la boîte "Bonjour, tout le monde" lorsque l'utilisateur choisit le bouton button_1.
(action_tile "button_1" "(c:hello)") |
L'utilisateur devra quitter la boîte imbriquée avant de sélectionner à nouveau la boîte précédente.
AutoCAD impose une limite maximale d'imbrication de huit boîtes de dialogue, mais il est préférable, pour éviter toute confusion de ne pas en imbriquer plus de quatre.
Masquage des boîtes de dialogue
Un utilisateur ne peut pas effectuer une sélection interactive tant qu'une boîte de dialogue est active, c’est-à-dire "ouverte" dans l'interface d'AutoCAD, les boîtes sont dites non modales.
Pour qu'il puisse sélectionner un élément à l'écran, vous devez cacher la boîte de dialogue, puis la restaurer.
Cette opération équivaut à quitter la boîte en faisant appel à (done_dialog), si ce n'est que la fonction d'appel en retour devra utiliser l'argument status de (done_dialog) pour signaler que la boîte est cachée (et non fermée ou annulée).
Donnez à status une valeur définie par l'application.
La fonction (start_dialog) renvoie cette valeur lorsque la boîte de dialogue disparaît.
Votre programme l'examine alors pour savoir ce qu'il doit faire.
Ceci implique que vous devez également intercepter les valeurs renvoyées par (start_dialog) en plaçant l'appel dans une boucle, de sorte à pouvoir réafficher la boîte masquée.
Pour plus de détails sur les valeurs standard de l'argument status définies par l'application, voir "done dialog".
Le programme d'exemple bmake.lsp possède un bouton, qui masque la boîte de dialogue afin que l'utilisateur puisse spécifier un point sur l'écran graphique.
Ainsi, lorsqu'il choisit ce bouton, la boîte de dialogue disparaît de l'écran et la valeur 4 est affectée à l'argument status.
(action_tile "pick_pt" "(done_dialog 4)") |
à suivre ... je m'y remets dès que possible