Td sur les MainWindows et les Menus
Travail à faire
- Créer une MainWindow comprenant une barre de menu, un label
dans la zone de messages, un CommandWidget dans la zone de commande et
un label dans la zone de travail.
- Dans le menu, trois boutons File, Color et Help, le bouton Help se
trouvant sur la droite.
- Le menu File comprend deux entrées : Open et Quit. Quit fait
sortir de l'application, File permettra par la suite de choisir un nom
de fichier.
- Le menu Color comprend cinq entrées de type radioButton : Red,
Green, Blue, Pink, Grey, un separateur et un sous-menu Apply To comprenant
deux entrées de type RadioButton : Foreground et Background. Lorsqu'un
choix est effectué, et selon la valeur des RadioButton du sous-menu,
la couleur de foreground ou de background du label situé dans la
zone de travail change.
- Le menu Help quant à lui comprend une entrée About.
Cette entrée déclenchera l'affichage d'un MessageDialog contenant
un message de présentation.
- Le label de la zone de travail devra contenir un texte assez important,
sur plusieurs lignes.
- On indiquera à la MainWIndow de se comporter comme une ScrolledWindow,
en positionnant les ressources :
- XmNscrollingPolicy à Xm_AUTOMATIC
- XmNdisplayScrollBarPolicy à Xm_AS_NEEDED
- Spécifiez les différentes ressources des objets dans
un fichier de ressources.
- Pour chaque choix dans un des menus, affichez un message dans le label
situé dans la zone de mesages. Attention, le texte situé
dans un label doit être de type XmString. Deux fonctions de conversion
char * <-> XmString sont disponibles avec Motif :
- XmString XmStringCreateLocalized(char * chaine);
- XmStringGetLtoR(XmString chaine_motif, XmFONTLIST_DEFAULT_TAG, &chaine)
- Entrez des commandes dans le CommandWidget, regardez ce qu'il se passe.
Essayez d'afficher dans la zone de message la dernière commande
entrée. Le callback appelé lorsqu'une command eest entrée
est XmNcommandEnteredCallback.
Aide
- Pour mettre des boutons On/Off dans un menu, il faut forcer la RowColumn
qui est en fait le menu déroulant, à se comporter comme une
RadioBox. Les ressources à positionner sont :
- XmNradioBehavior à True
- XmNalwaysOne à True
- Ne pas oublier de positionner un des boutons sur on par défaut
(ressource XmNset du ToggleButton).
- Pour modifier la couleur du label, il faut allouer les couleurs à
l'aide de fonctions Xlib de type XallocNamedColor(). Cette fonction a besoin
du display et de la colormap. On pourra les obtenir à l'aide des
fonctions XtDisplay(Widget w) et DefaultColormapOfScreen(XtScreen(Widget
w))