Le Widget de type RowColumn


Dernière modification le 4/11/96

Table des matières

Généralités

Il s'agit du plus simple des "container widgets" car il permet aisément de gèrer le positionnement de ses widgets fils, en lignes et/ou en colonnes. Il est également utilisé par Motif sous divers déguisements pour implanter les menus ou les RadioBox. Certaines ressources des RowColumns sont spécifiques à ces déguisements, et sont en général positionnées automatiquement lors de la création de ces objets déguisés à l'aide de fonctions Motif telles que XmCreateMenuBar() ou XmCreateRadioBox().Nous ne parlerons pas ici de ces ressources très spéciales, nous nous contenterons de décrire les ressources les plus usuelles des RowColumns.

Caractéristiques des RowColumns

Dans un RowColumn, les widgets sont positionnés de la manière suivante :

Examinons maintenant quelques exemples...

Les programmes rowcol1.c et rowcol2.c

Ces deux programmes créent une petite boîte qui contient 4 boutons poussoirs (alignés verticalement dans rowcol1.c et horizontalement dans rowcol2.c). Le résultat est le suivant :

Les exécutables se trouvent dans :

    ~buffa/cours/minfo/motif/rowcol/rowcol1 et 
    ~buffa/cours/minfo/motif/rowcol/rowcol2 

Essayez donc de changer la taille des fenêtres de rowcol1 et rowcol2.

rowcol1.c :



#include <Xm/Xm.h>
#include <Xm/PushB.h>
#include <Xm/RowColumn.h>

main(argc, argv)
int argc;
char *argv[];
{
    Widget top_widget, row_column, button1, button2, button3, button4;
    XtAppContext app;
    int n;
    Arg args[10];

    top_widget = XtVaAppInitialize(&app, "rowcol1", NULL, 0, 
                                   &argc, argv, NULL, NULL);

    n=0;
    row_column = XmCreateRowColumn (top_widget, "row_column", args, n);
    XtManageChild(row_column);

    n=0;
    button1 = XmCreatePushButton(row_column, "button1", args, n);
    XtManageChild(button1);

    n=0;
    button2 = XmCreatePushButton(row_column, "button2", args, n);
    XtManageChild(button2);

    n=0;
    button3 = XmCreatePushButton(row_column, "button3", args, n);
    XtManageChild(button3);

    n=0;
    button4 = XmCreatePushButton(row_column, "button4", args, n);
    XtManageChild(button4);

    XtRealizeWidget(top_widget);
    XtAppMainLoop(app);
}


rowcol2.c :

Remplacer juste les lignes de création du RowColumn par :



    n=0;
    XtSetArg(args[n], XmNorientation, XmHORIZONTAL); n++;
    row_column = XmCreateRowColumn (top_widget, "row_column", 
                                    args, n);
    XtManageChild(row_column);


Seule la valeur de la ressource XmNorientation a changé. Au lieu de valoir XmVERTICAL qui est la valeur par défaut, comme dans rowcol1.c, elle vaut ici XmHORIZONTAL. Le reste du code est le même.

Remarque : pour compiler sans erreur, nous avons inclu le fichier <Xm/RowColumn.h>

Il existe bien d'autres ressources pour les widgets de type RowColumn, mais nous avons vu les trois plus importantes : XmNorientation, XmNpacking et XmNnumColumns.


michel.buffa@unice.fr