Ce chapitre décrit un ensemble de fonctions permettant de manipuler les objets d'une boîte de dialogue. Ces fonctions sont toujours utilisables, à partir du moment ou l'arbre existe, qu'il soit affiché ou non et que l'objet considéré soit visible, partiellement visible ou entirement chaché.
Un objet est l'élément de base d'une boîte de dialogue (qui est un assemblage ordonné et hiérarchisé d'objets), il représente un bouton ou un texte de cette boîte.
Pour des raisons de simplicité, la structure d'objet de l'AES a été adoptée pour cette bibliothque :
typedef struct { int ob_next; /* Numéro de l'objet suivant */ int ob_head; /* Numéro du premier objet fils */ int ob_tail; /* Numéro du dernier objet fils */ int ob_type; /* Nature de l'objet */ int ob_flags; /* Indicateurs divers */ int ob_state; /* État de l'objet */ union { char *texte; /* Pour Button, String, Title */ TEDINFO *tedinfo; /* Pour Text, Boxtext, Ftext et FBoxtext */ USERBLK *util; /* Pour Userdef */ ICONBLK *icone; /* Pour Icon */ CICONBLK *icone_coul; /* Pour les icônes couleur, Cicon */ BITBLK *image; /* Pour les images noir et blanc */ Texte_Infini *txt_infini; /* Pour les textes de longueur infinie */ long autre; } ob_spec; /* Caractéristiques spécifiques de l'objet */ int ob_x; /* Position de l'objet RELATIVE AU PÈRE */ int ob_y; int ob_width; /* Dimensions de l'objet */ int ob_height; } OBJECT;
A priori, vous n'avez pas besoin de connaître particulirement la signification des différents champs pour manipuler les objets dans cette bibliothque, en particulier si vous utilisez un logiciel spécialisé dans la conception des boîtes de dialogue pour créer des fichiers RSC ou du code C à inclure.
Si vous voulez davantage d'informations à ce sujet, consultez un livre sur la programmation du GEM.
boolean OBJ_active(int arbre, int objet, boolean mode)
Permet d'activer ou désactiver un l'objet objet de l'arbre arbre. La fonction renvoie VRAI si l'objet est actif, FAUX si l'objet est inactif aprs l'opération. mode permet de contrôler l'opération :
mode | action |
---|---|
FORCE_OUI | On active |
FORCE_NON | On désactive |
ECHANGE | On active s'il était désactivé On désactive s'il était activé |
QUESTION | Aucune, on demande juste l'état actuel |
Les valeurs sont choisies de telle sorte que FORCE_OUI corresponde à une vérité logique et FORCE_NON à une erreur logique. Ainsi, s'il faut désactiver un objet si a < 2, on peut directement utiliser OBJ_active(arbre, objet, a >= 2).
Si l'arbre est affiché et l'objet visible, il est redessiné aprs modification de l'état. Si un objet éditable contenant le curseur est désactivé, le curseur est placé sur le premier objet éditable actif suivant de l'arbre ; s'il n'y en a pas, il est placé sur le premier objet éditable actif de l'arbre. Si un objet éditable est activé et s'il n'y avait aucun curseur texte auparavant, le curseur texte est placé à la fin du texte de cet objet éditable.
void OBJ_agrandit(int arbre, int objet, int larg, int haut)
Permet de modifier la taille d'un objet de faon relative. arbre et objet précisent l'objet à modifier ; larg et haut indiquent la variation de dimension en largeur et en hauteur à appliquer (0 : aucune variation ; +1 : augmenter de 1 pixel ; -1 : diminuer d'un pixel).
Si l'arbre est affiché et l'objet visible, il est redessiné.
boolean OBJ_cache(int arbre, int objet, boolean mode)
Permet de rendre visible ou invisible l'objet objet de l'arbre arbre. Si l'arbre est affiché, la région concernée est redessinée de faon à rendre ce changement visible. Si un objet est invisible, tous ses fils sont invisibles. mode permet de contrôler l'opération :
mode | action |
---|---|
FORCE_OUI | On cache |
FORCE_NON | On rend visible |
ECHANGE | On cache s'il était visible On rend visible s'il était invisible |
QUESTION | Aucune, on demande juste l'état actuel |
La fonction renvoie l'état de l'objet aprs l'opération.
boolean OBJ_coche(int arbre, int objet, boolean mode)
Permet de marquer comme coché ou non l'objet objet de l'arbre arbre ; mode permet de contrôler le sens de l'opération, avec les valeurs suivantes :
mode | action |
---|---|
FORCE_OUI | On coche |
FORCE_NON | On décoche |
ECHANGE | On coche s'il n'était pas coché On décoche s'il était coché |
QUESTION | Aucune, on demande juste l'état actuel |
Si l'objet est visible, il est redessiné. Un objet coché est dessiné avec une espce de V qui occupe les deux caractres les plus à gauche de l'objet.
La fonction renvoie l'état de l'objet aprs l'opération.
boolean OBJ_choisit(int arbre, int objet, boolean mode)
Permet de marquer comme sélectionné ou non l'objet objet de l'arbre arbre ; mode permet de contrôler le sens de l'opération, avec les valeurs suivantes :
mode | action |
---|---|
FORCE_OUI | On sélectionne |
FORCE_NON | On désélectionne |
ECHANGE | On sélectionne s'il n'était pas choisi On désélectionne s'il était choisi |
QUESTION | Aucune, on demande juste l'état actuel |
Un objet sélectionné est affiché de faon différente suivant le type et le systme :
Si on demande de sélectionner un objet avec l'attribut RADIOBUTTON, tous les autres objets ayant le même pre et cet attribut sont automatiquement désélectionnés.
Si l'objet est visible, il est redessiné.
La fonction renvoie l'état de l'objet aprs l'opération.
int OBJ_couleur(int arbre, int objet, int couleur, boolean partie, boolean mode)
Permet de modifier la couleur de l'un des éléments de l'objet, si cet objet autorise cette modification. arbre et objet permettent de définir l'objet à traiter ;couleur est l'index de couleur AES à utiliser, compris entre 0 et 15. partie précise la partie de l'objet à modifier :
partie | Partie | Remarque |
---|---|---|
COULEUR_BORD | Bord | |
COULEUR_FOND | Fond | |
COULEUR_TEXTE | Texte |
Si mode vaut METTRE, on installe effectivement la couleur, s'il vaut QUESTION, on ne fait que la demander. Dans le premier cas, l'objet est redessiné s'il est visible.
La fonction renvoie l'index de couleur de la partie choisie.
void OBJ_deplace(int arbre, int objet, int x, int y, boolean mode)
Permet de déplacer un objet de faon relative. arbre et objet permettent de définir l'objet à traiter ; x et y indiquent de combien on doit déplacer l'objet dans chaque direction.
Si mode vaut DEPLACE_PIXELS, x et y indiquent un décalage en pixels ; si mode vaut DEPLACE_RELATIF, ils indiquent un déplacement en pour-milles de la largeur et de la hauteur de l'objet.
Si l'arbre est affiché, la région concernée est redessinée.
void OBJ_position(int arbre, int objet, int x, int y, int *nv_x, int *nv_y)
Permet de placer de faon absolue l'objet objet de l'arbre arbre. x et y indiquent la position absolue, en pixels, de l'objet par rapport à son pre ; une valeur de -1 indique que l'on ne veut pas changer la valeur actuelle.
nv_x et nv_y contiennent la position absolue de l'objet par rapport à son pre aprs l'opération.
void OBJ_taille(int arbre, int objet, int larg, int haut, int *nv_larg, int *nv_haut)
Identique à la fonction ci-dessus, mais pour les dimensions de l'objet.
long OBJ_utilisateur(int arbre, int objet, int (*fonction)(PARMBLK *), long parametre, boolean mode)
Permet de modifier les paramtres d'un objet G_USERDEF (objet défini par l'utilisateur). Si l'objet objet de l'arbre arbre n'est pas un objet G_USERDEF, la fonction ne fait rien et renvoie 0. Sinon, elle renvoie la valeur du parmtre associé à l'objet indiqué.
Si mode vaut QUESTION, la fonction se contente de renvoyer la valeur du paramtre associé à l'objet indiqué.
Si mode vaut METTRE, la fonction installe parametre comme paramtre associé à l'objet ; si fonction ne vaut pas NULL, elle définit fonction comme fonction de redessin associée à l'objet. Cette fonction sera donc appelée à chaque fois que l'objet devra être dessiné. Si l'objet est visible, il est redessiné.
Les fonctions qui suivent permettent de faciliter la gestion des objets contenant du texte en permettant de récupérer leur contenu ou de le modifier simplement, en particulier dans le cas de valeurs numériques.
char *lit_chaine(int arbre, int objet, unsigned long l_max, char *texte, char mode)
Renvoie l'adresse du texte associé à l'objet objet de l'arbre arbre.
Si mode vaut TXT_COPIER et si texte est non NULL, la fonction copie aussi au plus l_max caractres du texte de l'objet dans la chaîne texte.
void met_chaine(int arbre, int objet, unsigned long l_max, char *texte, char mode)
Modifie le texte associé à l'objet objet de l'arbre arbre. texte contient le nouveau texte de l'objet.
Si mode vaut TXT_COPIER, la fonction copie au plus l_maxcaractres de texte dans la chaîne contenant le texte de l'objet. Si l'objet est de type G_FTEXT ou G_FBOXTEXT, le texte modifié est le texte éditable par l'utilisateur ; la fonction vérifie que ce texte peut bien accueillir les l_max caractres.
Si mode vaut TXT_REMPLACE, la fonction place la chaîne texte comme nouvelle chaîne associée à l'objet. Si l'objet est de type G_FTEXT ou G_FBOXTEXT, le texte modifié est le masque (non modifiable par l'utilisateur) ; la fonction y compte les caractres éditables (indiqués par le caractre _) et étend au besoin la chaîne contenant le texte entré par l'utilisateur.
Si l'objet est visible, il est redessiné.
void met_valeur(int arbre, int objet, int valeur)
Met le nombre valeur comme texte de l'objet objet de l'arbre arbre. Si le nombre est trop grand pour tenir, l'effet est indéterminé sauf pour un objet de type G_FTEXT ou G_FBOXTEXT (le nombre affiché est alors le plus grand nombre affichable).
Si l'objet est visible, il est redessiné.
void met_lvaleur(int arbre, int objet, long valeur)
Comme ci-dessus, mais pour une valeur de type long.
void met_ulvaleur(int arbre, int objet, unsigned long valeur)
Comme ci-dessus, mais pour une valeur de type unsigned long.
void met_fvaleur(int arbre, int objet, double valeur)
Affiche le nombre réel valeur comme texte de l'objet objet dans l'arbre arbre. Si cet objet est visible, il est redessiné.
Si l'objet est de type G_STRING ou G_BUTTON, la valeur est affichée avec le modle %6.3f. Le résultat est indéfini si la chaîne associée à l'objet n'est pas assez grande pour y stocker cette valeur.
Si l'objet est de type G_FTEXT ou G_FBOXTEXT, la bibliothque suppose que le masque est de la forme
(texte) ___._____ (texte)
où
La valeur à afficher est alors convertie en chaîne de faon à coller avec le masque ci-dessus. Si la partie entire comporte moins de chiffres que ne l'autorise le masque, les premires positions sont occupées par des espaces. Si la partie décimale finit par des zéros, ils ne sont pas affichés.
void met_svaleur (int arbre, int objet, double valeur)
Comme ci-dessus, mais la valeur est affichée sous forme scientifique. Pour un objet éditable, le masque doit être de la forme
(texte) __._____ (texte) ___ (texte) s9 ddddd eeeoù
Les emplacements d et e doivent être séparés par au moins un caractre non éditable.
int prend_valeur(int arbre, int objet)
Lit le texte associé à l'objet objet de l'arbre arbre et le convertit en un nombre entier de type int, renvoyé par la fonction.
long prend_lvaleur(int arbre, int objet)
Comme ci-dessus, mais renvoie un nombre entier de type long
unsigned long prend_ulvaleur(int arbre, int objet)
Comme ci-dessus, mais renvoie un nombre entier positif de type unsigned long.
float prend_fvaleur(int arbre, int objet)
Comme ci-dessus, mais renvoie un nombre réel de type float. Si l'objet est de type G_FTEXT ou G_FBOXTEXT, la bibliothque suppose un masque de même type que dans met_fvaleur.
double prend_svaleur(int arbre, int objet)
Comme ci-dessus, mais suppose que le nombre contenu dans le texte est écrit dans la notation scientifique. Si l'objet est de type G_FTEXT ou G_FBOXTEXT, la bibliothque suppose un masque de même type que dans met_svaleur.