labl{tk,gtk}
Transcription
labl{tk,gtk}
Programmation avancée – TD6: labl{tk,gtk} Ocan Sankur <[email protected]> 19 Mars 2012 Voir la page des TPs: http://www.lsv.ens-cachan.fr/~sankur/prog2 Nous allons étudier deux librairies d’interface utilisateur graphique (GUI) en Caml: lablgtk2 et labltk. Le premier est à base de classes, l’autre de modules. 1 lablgtk2 1.1 Installation Lablgtk2 est une interface, orientée objets, à la librairie gtk2+1 . Télécharger et extraire les sources de lablgtk2 sur http://lablgtk.forge.ocamlcore.org/. Dans le répertoire extrait, faire ./configure, make et make install. Si vous utilisez les machines de la salle, faites plutôt make install DESTDIR=..., en précisant un répertoire d’installation local (par ex. /lablgtk2). Si vous avez votre propre machine, par exemple sous Ubuntu, vous pouvez aussi faire sudo apt-get install libgtk2.0-dev. Vous pouvez tester en allant dans le répertoire examples et en tapant: ocaml -I $DESTDIR/usr/lib/ocaml/lablgtk2 lablgtk.cma gtkInit.cmo \ -I $DESTDIR/usr/lib/ocaml/stublibs hello.ml où $DESTDIR est là où vous avez installé lablgtk2. Si vous avez utilisé l’installation par défaut (par ex. avec apt-get), alors vos fichiers sont probablement dans /usr/lib/ocaml/lablgtk2. Si vous n’arrivez pas à compiler / installer, ce n’est pas grave, passez à la suite du sujet sans perdre trop de temps. Vous pouvez consulter la documentation en ligne sur la page citée en haut. 1.2 Questions On va découvrir l’utilisation de la librairie à travers le simple programme examples/nihongo.ml. Dans ce programme, on crée plusieurs objets: window, text, button, label... Chaque objet provient d’une classe différente. Quelle est la relation entre ces classes (en terme d’héritage par exemple)? Qu’est-ce qui se passe concrètement quand on appelle GButton.button? Expliquer l’argument optionnel ~packing qui apparaı̂t dans les constructeurs de ces objets. Quel est son type, et que fait-il? Que retourne window#connect? Expliquer ce qui se passe à la ligne 23. 1 www.gtk.org 1 Mettre un titre à cette fenêtre, et faire en sorte qu’il affiche “Au revoir” dans le terminal avant de quitter. On regarde maintenant examples/fixpoint.ml. Expliquer l’appel entry#coerce à la ligne 27. Est-il nécessaire? 2 labltk La distribution standard de Caml contient normalement la librairie Tk. Pour pouvoir examiner les signatures des modules, vous pouvez utiliser ocamlbrowser. Pour cela, il faut aller dans le menu Modules/Path Editor et ajouter le répertoire /usr/lib/ocaml/labltk ou bien l’équivalent dans votre système (je suis là pour vous aider). Il peut être intéressant aussi de regarder les fichiers .mli, qui se trouvent dans le même répertoire. On considère un petit calculateur de pgcd, disponible sur la page des TDs. Pour exécuter le programme, comme d’habitude, il faut préciser les fichiers d’interface et les librairies à Ocaml: ocaml -I +labltk labltk.cma monfichier.ml Vous pouvez aussi utiliser labltk monfichier.ml s’il est installé. Quel est le type de Frame.create, Label.create ? Quell est donc la représentation d’un élément graphique (fenêtre, bouton etc). Que fait la fonction pack? Identifier la restriction dans l’utilisation de pack. Télécharger tetris.ml et l’image gif sur la page de TDs. Ajouter à ce programme un menu Aide, qui affiche une fenêtre d’information. Si vous avez fini, faites la même chose avec examples/pousse.ml dans votre répertoire de lablgtk2. 2