GÉNÉRALITÉ

Sous Dolmen, tous les objets peuvent contenir eux-même des objets. Ils sont organisés en arbre, mais sont stockés en mémoire (et de même sur disque) sous la forme d'un tableau où les objets sont mis les uns après les autres.

Par exemple, sur la photo d'écran ci-contre, on peut voire que la boite principale est à la fois le parent du texte (Please Select...), de la boite englobant les deux radio bouton (Screen et Printer) et du bouton de sortie (OK). De plus, les deux radio boutons "Screen" et "Printer" sont enfants d'une seconde boite qui permet d'englober ceux-ci. On peut représenter alors ces six objets sous la forme d'arbre n-aire. Chaque objet à alors un numéro dans le tableau où ils sont placés, que l'on appelle index. Les relations entres les différents objets dépendent justement de ces indexes.

Les objets étant stockés les uns après les autres dans un vecteur, on utilise leur numéro pour les désigner. Chaque objet a donc un index unique l'identifiant au seins d'une boite de dialogue (attention : deux objets dans des dialogues différentes peuvent avoir le mêˆme numéro).

L'arbre ci-contre donne les relations entre les différents objets de la boite de dialogue ci-dessus.

On voit que l'on a d‚fini 3 mots de 16 bits pour représenter les relations entres les diff‚rents objets : "ob_next", "ob_head" et "ob_tail" qui sont respectivement les index de l'objet suivant, du premier fils, et du dernier fils.

L'objet racine (root) contient toujours -1 dans son ob_next, puisqu'il ne peut avoir d'objet au même niveau que lui. Si il avait zéro dans son ob_next (erreur courante, semble-t-il), le système entrerait dans une boucle infinie où l'objet racine serait redessiné sans cesse. Les objets n'ayant pas de descendance ont -1 dans leurs ob_head et ob_tail. Lorsqu'un objet est le dernier d'un niveau, son ob_next contient alors l'index de son père.

En plus de ces 3 mots de 16 bits, un objet graphique Dolmen comporte 18 octets suppl‚mentaire (ce qui fait donc une taille totale de 24 octets). En voici la structure, au format du langage C :

typedef struct objet {
   unsigned short   ob_next;   // Index de l'objet suivant du mˆme niveau
   unsigned short   ob_head;   // Index du premier fils
   unsigned short   ob_tail;   // Index du dernier fils
   unsigned char    ob_extype; // Type ‚tendu de l'objet (laiss‚ libre au programmeur)
   unsigned char    ob_type;   // Type de l'objet
   unsigned short   ob_flag;   // Champ de bit : paramŠtres de dessin et de comportement de l'objet
   unsigned short   ob_state;  // Champ de bit : ‚tat de l'objet
   void             *ob_spec;  // Donn‚es ou pointeurs sur donn‚es suppl‚mentaire de l'objet
   signed short     ob_x;      // Coordonn‚e X de l'objet
   signed short     ob_y;      // Idem Y
   unsigned short   ob_w;      // Largeur de l'objet
   unsigned short   ob_h;      // Hauteur
} objet;


L'octet ob_type informe de ce que contient l'ob_spec, qui peut soit accueillir un champ de bit, soit un pointeur vers une structure.

Valeur de l'ob_typeNom du type l'objetDescription
20G_BOXBoite
21G_TEXTTexte format‚
22G_BOXTEXTTexte format‚ dans une boite
23G_IMAGEImage monochrome
24G_PROGDEFObjet utilisateur (routine de dessin programm‚)
25G_IBOXBoite avec fond invisible
26G_BUTTONBouton poussoir
27G_BOXCHARBoite contenant un caractŠre unique
28G_STRINGChaŒne de texte
29G_FTEXTTexte format‚ ‚ditable
30G_FBOXTEXTTexte format‚ ‚ditable dans une boite
31G_ICONIc“ne monochrome
32G_TITLETitre de menu
33G_CICONIc“ne couleur (contenant plusieurs r‚solutions)
34G_BOUNDINGObjet pointant vers un autre formulaire
35G_BOUNDEDObjet affich‚ dans un G_BOUNDING
36G_PIXImage contenue sur disque
37G_LINELigne param‚trable


Les menus sont ici considéré comme des boite de dialogue un peu spéciale ou l'on n'affiche qu'une partie de l'arbre.

Notez que toutes les chaînes utilisées par les objets sont au format du language C (par opposition à celui du Pascal), c'est à dire que leur fin est matérialisée par un octet nul.


Retour à l'index ob_flags et ob_states