Windowtools est un progiciel destiné à faciliter la construction
d'interfaces graphiques pour les programmes écrits en Simula. Windowtools
utilise X, un protocole d'interaction graphique largement répandu dans le
monde UNIX qui normalise l'encodage des actions de l'usager comme le
"clickage" d'une souris ou l'appui sur une touche du clavier et qui
fournit aussi un certain nombre de primitives graphiques pour le dessin de
lignes, de rectangles et de cercles de diverses couleurs. Par contre, ce
que X ne fait pas, c'est implanter (imposer ?) le comportement des éléments graphiques.
Si on veut avoir des fenêtres d'édition de texte ou des menus déroulants,
il faut ajouter une couche de logiciel entre X et l'usager. Dans la
parlance de X, cette couche est appelée un "Toolkit" et Motif en est
l'exemple le plus connu. Si la programmation graphique a été normalisée et
simplifiée par l'emploi de X et de Motif, elle reste relativement complexe
à cause du grand nombre de paramètres et d'objets fournis afin de répondre
au plus grande nombre d'applications.
Windowtools est un "toolkit" comme Motif dont l'objectif est de faciliter
le plus possible la création d'interface du style Mac/Windows. Pour ce
faire, Windowtools utilise la programmation par objet. Le comportement
par défaut des objets implantés est celui auquel les usagers modernes sont
habitués: nous avons sacrifié la flexibilité à la simplicité. Dans
la
majorité des cas, les objets fournis peuvent être utilisés tels quels et
il
est donc possible de mettre en oeuvre une interface GUI professionnelle
avec peu d'efforts. Effectivement, pour faire apparaître une
fenêtre
affichant ``Hello World'' à l'écran, il suffit d'une dizaine de
lignes avec WindowTools au lieu de plusieurs pages avec X (c.f helloworld
).
Windowtools est l'oeuvre de B. Kirkerud qui a travaillé dessus depuis plusieurs années. En 1995, ce logiciel a été installé au DIRO et il a servi pour les TP de ift1020. Entre temps, il a subit une première révision par J. Vaucher. Durant l'été 1995, Charles De Léan (sous la direction du prof. Vaucher) a soumis Windowtools à une phase de vérification intensive, d'extension et de réécriture.
Le document quit suit vise les programmeurs qui se servent de WindowTools pour créer des interfaces graphiques. Son but est de présenter rapidement les differéntes classes (ainsi que leurs fonctions) qui peuvent leur être utiles. Un développeur éventuel pourrait avoir besoin de plus d'information, voir à lire le code source. Pour d'autres informations, vous pouvez explorer le site ftp ftp.ifi.uio.no dans le rpertoire /pub/simulatools. Mais de façon plus simple, vous pouvez explorer le répertoire vaucher/simulatools sur le réseau JSP.
Windowtools contient une grande varieté de classes. La majorité
d'entre elles sont des classes de fenêtres dont nous discuterons
plus loin. Sinon, il y a quelques classes à part. La plus importante
d'entre elles est XDisplay. C'est la classe d'un objet qui
gère les messages (venant du clavier ou de la souris par exemple)
et les ressources (fontes et curseurs par exemple). Il ne doit y avoir
qu'un seule instance de cet objet dans le programme. Cette instance
sera mentionné dans ce document sous le nom de ``display''. Pour s'assurer
de l'unicité d'un tel objet, nous introduisons deux fenêtres
spéciales qui seront les fenêtres principales dans le programme.
Ces fenêtres créent le display, et donc, il faut en faire une et
une seule (c.f MainWindow et SimpleWindow
) au tout début du programme.
Les ressources, gérées par le display, sont définies par plusieurs classes.
Les fontes sont définies par XFont (c.f ),
les curseurs
le sont par la classe Cursor (c.f
), les bitmaps et
pixmaps (très utiles pour simuler de la couleur) par Bitmap et
PixMap (c.f
), et les
requêtes d'alarmes ainsi que les messages internes, par alarm_request et
own_event (c.f
).
Chaque fenêtre possède un objet très utile pour ses fonctions
graphiques. C'est le contexte graphique (graphic context), défini
par la classe XGraphicalContext. C'est un objet contenant
des paramètres servant aux fonctions graphiques. Ces paramètres
peuvent être modifiés par plusieurs fonctions (c.f ).
Passons maintenant aux fenêtres. On peut dire qu'il existe trois types de fenêtres :
Il doit y avoir une et une seule de ces fenêtres crée au début
du programme.
Comme les fenêtres principales, sauf qu'on peut les créer et détruire
quand on veut et à volonté.
Ce sont les classes les plus nombreuses. Ces fenêtres appartiennent à une autre. Elles sont détruites en même temps que leurs parents et se repèrent comme si leur parent était l'écran.
Les classes utiles pour fabriquer les fenêtres de WindowTools ne sont pas toutes décrites ici. Certaines classes ont été volontairement omises car elles ne risquent pas d'être utiles à un programmeur. Ces classes omises sont
Fenêtre permettant d'indiquer où on se trouve dans une liste dont
on ne voit qu'une partie. Ne peut servir qu'à ScrollWindow
Des fenêtres pouvant changer la sélection courante dans une
fenêtre. Ne peut servir que dans ScrollWindow et MultipleChoiceWindow
Classe de boutons dans une fenêtre de classe RadioPanel. Ne
peut servir que dans RadioPanel.
Sous-classe de ListWindow servant à PopupMenu. Elle n'est pas pensée pour servir à construire d'autres types de fenêtres.
Voici la hiérarchie des fenêtres dont nous discuterons.
Hiérarchie des classes de fenêtres
XWindow |---MainWindow | |---SideWindow | | |---GraphPage | | |---PopupWindow | | | |---PopupMenu | |---SimpleWindow |---Subwindow |---Button | |---FancyButton | |---MenuButton |---DrawWindow | |---GraphWindow |---InputWindow | |---ItemWindow | | |---BoolItemWindow | | |---CharItemWindow | | |---IntItemWindow | | |---ReallItemWindow | | |---TextItemWindow | |---ListWindow | |---SelectionListWindow |---MessageWindow |---ParameterList |---ParameterMenu |---ParameterWindow | |---BoolParameter | |---CharParameter | |---IntParameter | |---RealParameter | |---TextParameter |---PromptWindow |---RadioPanel |---ScrollWindow |---MenuScrollWindow |-DirectoryMenu