next up previous
Next: Translations Up: Généralités Previous: Généralités

Actions

Les actions et les callbacks diffèrent par la méthode d'implémentation des fonctions:

Pour déclarer une action, il faut d'abord déclarer une Table des Actions qui organise les chaînes de noms d'actions avec des pointeurs sur fonctions. La table est déclarée par XtAppAddActions(). On crée ensuite une table de translations stockée généralement dans le fichier de resources de l'application (on peut également la coder en ``dur'').

Le schéma suivant montre une table de translation et une table d'action, et indique comment chacune est utilisée lorsqu'un événement est reçu pour activer la fonction correspondante.

Key Event (Return key pressed)
Translation Table
static char default Translations[]=
       "Return:Activate()";
Action Table
static XtActionsRec actions[]={
  {"Activate",Activate}
};
Action Function
Activate(w,event,params,num_params)
widget w;
XEvent *events;
String *params;
Cardinal *num_params;
{
   /* action code */
}
        

Translation :
Traduit un événement en un nom d'action. Les translations se trouvent donc dans le fichier de resources.
Action Table :
Traduit le nom d'action en un pointeur sur fonction. Elle est donc spécifiée dans le code.

Schéma type de la création de la table des actions :

main(...)
{ 
        /* autres declarations */
        ...
        static XtActionsRec actions[]={
               {``RedrawSmallPicture'',RedrawSmallPicture},
        }
        ...
        /* XtAppInitialize */
        ...
        XtAppAddActions(app_context,actions,XtNumber(actions));
        ...
        /* XtMainLoop */
}

Les actions ajoutées par XtAppAddActions sont globales au contexte de l'application, et donc utilisables par n'importe quelle instance de widget de l'application.
Typiquement, une action est juste un pointeur sur une fonction à 4 arguments :

  1. un widget.
  2. un événement.
  3. une chaîne contenant tous les arguments spécifiés pour l'action dans la table de translation.
  4. le nombre d'arguments de la chaîne.


Gauthier Lebrun
Thu Apr 17 17:36:31 MET DST 1997