La librairie Intrinsic - Xt


Introduction :

La librairie Xt (aussi appelée "librairie Intrinsics", ou encore "les Intrinsics") propose des fonctions spécialisées dans la construction d'interfaces graphiques au-dessus du système de fenêtrage X Window. Une boîte à outils graphiques, par exemple Motif, se compose de la librairie Xt et d'un ensemble de fonctions décrivant des boutons, menus, ascenseurs, etc... que l'on appelle plus généralement des Widgets.

Les Intrinsics fournisssent les mécanismes de base nécessaires à la construction d'une large variétée de Widgets et sont construits au-dessus de la Xlib. Ils étendent les concepts abstraits de X Window (objets, évènements, etc...) mais demeurent indépendants du look des boîtes à outils qu'ils permettent de construire. Motif, Athena, Openlook ne se ressemblent pas mais utilisent pourtant tous les Intrinsics.

Les Intrinsics utilisent des techniques de programmation orientée objet permettant la construction homogène des éléments d'une interface graphique (Widgets): les programmeurs peuvent créer de nouveaux Widgets soit à partir de zéro, soit en dérivant des Widgets existants (mécanisme de surclassage).

Lorsque les Intrinsics furent conçus, la racine de la hierarchie des objets était une classe de Widgets nommée Core. Dans la version 4 des Intrinsics, trois superclasses ont été crées au-dessus de la classe Core. Le nom de la classe racine est aujourd'hui Object.

Les Intrinsics ont été crées dans deux buts précis :

  1. Créer des Widgets.
  2. Programmer des applications avec un toolkit.
Les programmeurs qui désirent créer de nouveaux Widgets vont utiliser la plupars des fonctions de la librairie Intrinsics pour créer tout types de Widgets, du plus simple (bouton poussoir par ex.) au plus compliqué (requester de choix de fichier).

Les programmeurs d'applications ne vont utiliser qu'un petit sous-ensemble des Intrinsics, en collaboration avec une librarie décrivant un ensemble de Widgets. Par exemple, pour créer une application à l'aide de la Toolkit Motif, il faudra appeler aussi bien des fonctions Motif que des fonctions des Intrinsics.

Les applications qui utilisent les Intrinsics doivent inclure <X11/Intrinsic.h> et <X11/StringDefs.h>, optionnellement <X11/Xatoms.h> et <X11/Shell.h>. Elles doivent aussi inclure un fichier pour chaque classe de Widget utilisée (par exemple, <X11/Xaw/Label.h> ou <X11/Xaw/Scrollbar.h>).

Les sources qui implémentent de nouveaux Widgets doivent inclure <X11/IntrinsicP.h> au lieu de <X11/Intrinsic.h>.

Sur les systèmes Unix, la librairies des Intrinsics se nomme /usr/lib/X11/libXt.a. Pour l'utiliser on effectue l'édition de liens avec l'option -lXt.

L'abstraction fondamentale, l'objet de base d'une boîte à outils (un Toolkit) est le Widget. Un Widget est la combinaison d'une ou plusieurs fenêtres X (son look) et d'un comportement (entrées/sorties, sémantique d'affichage). Il est alloué dynamiquement et posséde un état. Certains Widgets affichent de l'information (par exemple du texte ou des graphiques), d'autres sont juste des containers pour d'autres Widgets (par exemple une barre de menu). Certains Widgets ne permettent que des sorties et ne réagiront pas aux évènements clavier ou souris, d'autres modifieront leur apparence en fonction des entrées ou exécuteront des fonctions utilisateur qui leur sont attachées (bouton poussoir).

Chaque Widget appartient exactement à une classe, statiquement allouée et initialisée, qui contient la liste des opérations possibles sur tous les Widgets lui appartenant. D'un point de vue logique, Une classe de Widget est un ensemble de procédures (avec les valeurs autorisées pour les paramètres de ces procédures) associées aux Widgets de la classe. Ces procédures peuvent être héritées des classes péres (un Widget d'une classe donnée posséde les atributs de sa classe mais également les attributs des classes englobantes).

D'un point de vue physique, une classe de Widgets est un pointeur vers une structure. Les éléments de cette structure sont constants pour tous les Widgets d'une même classe.


 
 Une instance de Widget est composée de deux parties :

  Une structure de données qui contient des éléments 
    spécifiques au Widget instancié.

  Une struture de classe qui contient des informations 
    applicables à tous les Widgets de la classe.


La plus grande partie des entrées/sorties d'un Widget (police de caractères, couleur, taille, bordure, etc...) est customizable par l'utilisateur.




La librairie des Widgets Athena - Xaw

Nous l'avons vu, un toolkit X comporte deux parties distinctes : La librairie Xt Intrinsincs et un ensemble de Widgets. L'ensemble des Widgets Athena est un exemple d'implémentation de Widgets à partir des Intrinsincs. C'est le toolkit livré en standard avec les bandes de distribution de X.

Parceque les Intrinsics fournissent les mêmes fonctionnalités de base à tous les ensemble de Widgets, il est possible par exemple d'utiliser des Widgets Athena avec d'autres Widgets issus d'une autre boîte à outil, Motif par exemple. Un tel mélange n'est cependant pas recommandé car chaque ensemble de Widgets posséde son propre protocole et il se peut que toutes les fonctionnalités des Widgets utilisés ne soient pas disponibles.

L'ensemble des Widgets Athena est une librairie située une couche au-dessus des Intrinsics (eux même une couche au-dessus de la Xlib). Ils fournissent au développeur d'applications graphiques un ensemble cohérent d'objets permettant de répondre à la plupars de ses besoins.

Bien que les Intrinsics soient un standard issu d'un Consortium, il n'y a pas d'ensemble de Widgets standard.

Un toolkit X se compose de :



 Un ensemble de fonctions Intrinsincs pour construire des widgets
 Un modéle, une architecture pour assembler des widgets
 Un ensemble de widgets pour la programmation d'interfaces graphiques.


Alors que la majorité des fonctions des Intrinsincs sont destinées au programmeur de widgets, une partie d'entre elles sont utiles au programmeur d'applications graphiques (voir le X Toolkit Intrinsics - C Langage Interface). Le modèle architectural permet au programmeur de widgets de désigner de nouveaux widgets à l'aide des fonctions Intrinsics et en combinant les widgets existants. Un Toolkit X est formé d'un ensemble de widgets et de méthodes d'assemblage.


Terminologie


En plus des termes déjà définis pour la programmation sous Xlib (display, window, events, etc...), il est nécessaire d'introduire un nouvel ensemble de termes propres à la programmation à l'aide d'un Toolkit.



`les widgets sont des fenêtres X'
  • Chaque widget est associé à une fenêtre X. L'ID de cette fenêtre est accessible à l'aide d'une fonction des Intrinsincs. Ainsi on peut utiliser des fonctions de la Xlib directement, pour gèrer les entrées sorties d'un widget donné.
`Encapsulation d'informations'
  • Les données relatives à chaque widget et à ses sous-classes sont privées. AInsi, ces données ne sont jamais directement accessibles au programmeur d'application, elles sont encapsulées dans le module logiciel qui les implante. La librairie Xt fournit cependant des fonctions et macros pour accèder à certains attributs des widgets.
`Sémantique et géométrie des widgets'
  • La sémantique des widget est clairement séparée de leur géométrie. Les widgets sont concernées par la sémantique de l'application et le rôle qu'ils ont à jouer pour interagir avec l'utilisaateur, mais ils ont peu de contrôle sur leur taille, leur placement relatif par rapport aux autres widgets, etc... Il existe des mécanismes pour associer plusieurs widgets et faire des suggestions quant à leur géométrie (geometric managers).



7.4. Input Focus

The Intrinsics define a resource on all Shell widgets that interact with the window manager called input. This resource requests the assistance of window manager in acquiring the input focus. The resource defaults to False in the Intrinsics, but is redefined to default to True when an application is using the Athena widget set. An application programmer may override this default and set the resource back to False if the application does not need the window manager to give it the input focus. See the X Toolkit Intrinsics - C Language Interface for details on the input resource.


7.5. Using Widgets

Widgets serve as the primary tools for building a user interface or application environment. The Athena widget set consists of primitive widgets that contain no children (for example, a command button) and composite widgets which may contain one or more widget children (for example, a Box widget).

     



Select any of the following buttons to either move to previous page, to next page, return to contents page, perform a search query, give your feedback and comments, or get in touch with the author of the notes:


Désolé, je travaille encore à la suite de ce cours.....
michel.buffa@essi.fr