C. RECANATI

Interfaces Graphiques

ILOG 2,  septembre 2004

 

 

 

 

 

TP 6

 

 

Exercice 1: (exercice form.c)

On veut réaliser un programme qui affiche la fenêtre suivante:

 

 

Les widgets seront placés à l'interieur d'un XmForm. Pour régler les positions (et les changements de taille) dans le XmForm, on réalisera les attachements adéquats.

 

Les boutons Quitter et Recommencer serviront respectivement à quitter et à relancer le programme. Pour relancer le programme, on passera argv[0] à la callback et on utilisera la commande execl(argv[0], argv[0], NULL).

 

Les trois premiers boutons lorsqu'ils seront activés feront un printf du texte situé dans le XmText situé en vis-à-vis. On leur associera une même procédure de callback en les créant dans une boucle du type:

 

#define NFIELDS  3

static char*       button_name [NFIELDS] = { "Nom", "Prenom", "Telephone" };

static char*       text_name [NFIELDS] = { "e1", "e2", "e3" };

Widget     edit [ NFIELDS ];

Widget     pushb [ NFIELDS ];

...

for (i = 0; i<NFIELDS; i++)  {

         pushb [ i ] = XtVaCreateManagedWidget (... );

         edit [ i ] = XtVaCreateManagedWidget (... );

         XtAddCallback (pushb [ i ] , ... ); // quel client_data passer en argument ?

}

 

Exercice 2: (variante de l’exercice précédent)

1) Au lieu d’afficher par printf le contenu des XmText,  le programme intercepte l’activation des boutons pour afficher le contenu du texte correspondant en vis-à-vis dans un XmMessageBox. La boîte de message instaure un dialogue modal et ne fait pas apparaître le bouton Cancel. Le bouton Help apparaît en grisé

(fonction XtSetSensitive (widget, False) ).

2) Affecter la ressource XmNkeyboardFocusPolicy en utilisant l’argument fallback de XtVaAppInitialize. Dans le mode explicit, tester l'appartenance des widgets à différents groupes, en observant les modifications du focus sur enfoncement des touches tab et des flèches.

 

Exercice 3:

1) créer une ScrolledWindow fille d'un ApplicationShell dans laquelle on place un Label. On affectera les ressources XmNscrollingPolicy et XmNscrollbarDisplayPolicy de sorte que les scrollbars soient affichées automatiquement quand elles sont requises (par rapport à la taille du texte ou du Pixmap figurant dans le Label).

2) tester le programme avec un fichier de ressources dans lequel on affectera les ressources labelType et labelPixmap du Label pour qu'il affiche le fichier bitmap /usr/openwin/include/X11/bitmaps/escherknot.

3) tester le programme avec un autre fichier de ressources pour que le Label affiche une ligne multiple (sur plusieurs lignes), par ex:

*label*labelString:     ceci est une ligne multiple \n\

figurant sur plusieurs lignes \n\

et affichee dans une ScrolledWindow

Modifier également la ressource XmNalignment pour avoir un alignement à gauche, centré ou à droite.

 

 

Exercice 4: Une horloge digitale utilisant un Timer. On crée un Label puis on lance une fonction update qui met à jour l’heure dans la chaîne affichée par le Label et relance une mise-à-jour 1 seconde plus tard.

F   #include <time.h>

static void update (Widget w)

{        long           tloc;

         char          tc [64];

        

         time (&tloc);                                 /* recupère l’heure dans tloc */

         sprintf (tc, “%s”, ctime (&tloc));           /* la convertit en chaine de caractères */

         tc [ strlen(tc) - 1] = 0;                            /* supprime le return */

         ...

}