Ca y est, après des dizaines de cours théoriques faisant appel à une vieille console en noir et blanc, des heures passées à écrire des lignes de code pour n'aboutir qu'à un médiocre logiciel ne reconnaissant que le clavier, nous allons enfin pouvoir nous lancer dans la conception de logiciels plus modernes, avec des images, des boutons qui réagissent quand on clique dessus… Pour faire cela, plusieurs choix s'offraient à nous, j'ai choisi de vous en proposer un : GTK et surtout sa version prévue pour Ada, GTKAda.
Avant de rentrer dans le vif du sujet, je vais prendre quelques unes de vos précieuses minutes pour vous exposer ce que sont GTK et GTKAda. Je vous expliquerai pourquoi j'ai fait ce choix alors que d'autres solutions s'offraient à nous. Nous verrons également comment l'installer et enfin comment l'utiliser.
Vous avez dit GTK ?
Qu'est-ce que GTK ?
GTK n'est pas un logiciel. Il s'agit d'un ensemble de bibliothèques permettant de créer des interfaces graphiques pour vos programmes. Il existe plusieurs bibliothèques de la sorte, elles permettent aux développeurs de créer rapidement des interfaces graphiques (aussi appelées GUI, pour Graphical Users Interface), c'est-à-dire des programmes fenêtrés, disposant de boutons, de textes, d'images… et permettant à l'utilisateur d'agir via son clavier mais également via la souris ou d'autres périphériques. Ces bibliothèques fournissent aux programmeurs tout un ensemble de méthodes leur évitant de réinventer la roue : pas question de perdre du temps à dessiner les bords du bouton, à définir sa couleur principale, sa couleur lorsqu'il est survolé, sa couleur lorsqu'il est enfoncé…
Et GTK dans tout cela ?
GTK est l'une de ces bibliothèques. C'est l'acronyme pour Gimp ToolKit, cette bibliothèque ayant été à l'origine créée pour le puissant logiciel de traitement d'images GIMP. Elle est depuis utilisée dans de nombreux logiciels :
- le logiciel de retouche d'image Gimp, bien sûr ;
- l'environnement graphique Gnome, utilisé sur de nombreuses distributions Linux, telle la célèbre Ubuntu ;
- le logiciel de virtualisation VmWare ;
- le logiciel de dessin vectoriel Inkscape ;
- de nombreux logiciels ayant l'initiale G : GEdit, Gnumerics, GParted, GThumb… et d'autres encore tels Nautilus ou Totem ;
- vous pourrez trouver une liste de logiciels réalisés sous GTK en allant sur le site GTK+ Applications Repository.
GTK, GTKAda, GDK, Glib et toute la famille
C'est quoi la différence entre GTK et GTKAda ? J'ai aussi entendu parler de GDK et GTK+ : c'est mieux ou pas ?
Avant d'aller plus en avant, il faut clarifier tous ces noms et logos. Le projet GTK (aussi appelé GTK+) est une bibliothèque écrite en C et pour le C. Elle est toutefois disponible dans de nombreux autres langages de programmation dont Ada. Mais pour cela, il aura fallu réaliser un interfaçage (ou binding), une traduction partielle de la bibliothèque. GTKAda est donc cette traduction de GTK du C vers l'Ada. Comme de nombreux projets liés à l'univers Linux, GTK est composé de différentes couches (des sous-projets en quelques sortes) :
- Cairo : il s'agit d'une bibliothèque graphique 2D. Absente des premières versions de GTK, Cairo prend de plus en plus de place dans le projet.
- GLib : il s'agit d'une bibliothèque permettant d'étendre les possibilités du C, et notamment de manipuler diverses structures de données. Elle n'a rien à voir avec le rendu graphique mais est à la base du projet GTK+.
Au-dessus, viennent se greffer d'autres couches :
- Pango : cette bibliothèque est en charge du texte. Elle permet l'utilisation de diverses polices, la mise en forme du texte ainsi que l'écriture dans divers alphabets (anglo-saxon, latin, scandinave, cyrillique…). Avec elle, plus de soucis avec les caractères accentués ! Vous pourrez même écrire en japonais si le cœur vous en dit.
- GDK : pour GIMP Drawing Kit. Il s'agit de la couche graphique bas-niveau de GTK+. Elle était présente dès l'origine de GTK mais tend à céder la place à Cairo.
- ATK : ou Accessibility Toolkit. Cette bibliothèque permet une meilleure accessibilité des logiciels aux personnes handicapées : forts contrastes, loupes, navigation au clavier seul ou à la souris seule… nous ne nous servirons pas de cette bibliothèque, mais libre à vous d'y jeter un oeil.
- GIO : de moindre importance, cette bibliothèque est désormais intégrée à Glib.
Le projet GTK+ fait appel à ces différentes couches. Ce que l'on peut résumer par le schéma suivant.
Autre acronyme que vous pourriez voir : Glade. Il s'agit d'un logiciel permettant la réalisation de votre interface graphique en quelques clics. Nous n'utiliserons pas Glade car il est important que vous maîtrisiez GTKAda au préalable afin de comprendre le code qui sera généré.
Pourquoi ce choix ?
Pourquoi avoir choisi une bibliothèque écrite en C ?
J'ai avant tout choisi l'une des bibliothèques graphiques les plus connues, non pas que ce soit un gage de qualité mais cela vous apporte l'assurance de trouver des ressources complémentaires (tutoriels, cours, forums…) . Certes elle est écrite en C, mais elle a bénéficié d'un interfaçage vers Ada complet et de qualité. Pour tout vous dire, vous ne verrez presque jamais de C en vous baladant dans les packages. D'ailleurs, GTK n'est pas réservé au C, il est disponible dans de nombreux autres langages : C++, C#, Java, Javascript, Python, Vala et Perl pour les bindings officiels. Il est également supporté (tout ou partie) par Ruby, Pascal, R, Lua, Guile, OCaml, Haskell, FreeBasic, D, Go ou Fortran. Ouf ! Impressionnant non ?
J'ai plusieurs ordinateurs avec différents systèmes d'exploitation. Je suppose que ça ne marche que sous Windows ton GTK ?
Pas du tout, GTK est multiplateforme, vos projets pourrons être développés sous Windows, Mac OS, Linux ou Unix. Bien sûr, il faudra recompiler sous chaque système d'exploitation, les .exe ne fonctionnant pas ailleurs que sous Windows (c'est un exemple).
Et ça va me coûter combien ?
Pas un centime ! GTK est un projet gratuit et libre. Il est placé sous la licence des logiciels libres LGPL. Cela vous permettra, si vous le souhaitez, de vendre votre programme sans pour autant en faire un logiciel sous licence LGPL. En revanche, si vous veniez à modifier le code source de GTK, alors la bibliothèque obtenue devrait absolument être sous licence LGPL.
J'ai regardé sur internet des logiciels faits avec GTK… ils sont moches !
GTK a un aspect très… Linux qui ne plaît pas à tous. Et pour cause, l'environnement de Bureau GNOME, utilisé par de nombreuses distributions est basé sur GTK. Mais rassurez-vous, si cet aspect ne vous plaît pas, GTK est personnalisable. Différents thèmes graphiques sont aisément téléchargeables sur le site Gnome-look.org.
GTK est donc une bibliothèque libre, gratuite, multilangage et notamment bien adaptée à l'Ada, multiplateforme, personnalisable, très utilisée et pour laquelle vous trouverez donc aisément des informations sur le net. J'ajouterai encore un avantage à GTK : sa conception orientée objet. Pour vous qui venez tout juste de découvrir la POO, il me semblait intéressant que la bibliothèque que vous alliez étudier soit elle aussi orientée objet.
Télécharger et installer GTKAda
Télécharger
Autre atout de GTKAda : il est aisément téléchargeable sur le site d'Adacore, à l'adresse suivante : http://libre.adacore.com/download/configurations . Après avoir vérifié votre système d'exploitation (voir le 1 du schéma ci-dessous), dans le menu GtkAda 2.24.2 (2) (la version en cours lorsque j'écris ces lignes), sélectionnez le bouton gtkada-gpl-2.24.2-nt.exe (3) puis cliquez sur le bouton Download selected files (4). Sous Linux, vous aurez deux archives à télécharger : gtkada-gpl-2.24.2-src.tgz et gtk+-2.24.5-i686-pc-linux-gnu.tgz
Installer
Sous Windows
Sous Windows, l'installation est elle aussi simplissime. Ouvrez le fichier zip téléchargé ainsi que les sous-répertoires qu'il contient. Extrayez le fichier gtkada-gpl-2.24.2-nt.exe puis lancez-le et suivez les instructions.
Sous Linux
Ouvrez le répertoire /usr et créez un sous-répertoire gtkada. Dans l'archive téléchargée, vous trouverez deux sous-archives. Commencez par ouvrir gtk+-2.24.5-i686-pc-linux-gnu.tgz et décompresser son contenu dans le répertoire /usr/gtkada que vous venez de créer.
La seconde sous-archive pourra être décompressée dans un répertoire temporaire. À l'aide de la console, placez-vous dans ce répertoire temporaire et entrez les instructions suivantes :
1 2 3 4 | configure --prefix=/usr/gtkada make all sudo make install sudo ldconfig |
Vous pourrez ensuite supprimer le répertoire temporaire.
Configurer votre IDE
Attention, ce n'est pas parce que GtkAda est installé que vous pouvez déjà l'utiliser. Vous devrez préalablement configurer votre IDE pour qu'il indique au compilateur où se trouvent les packages de Gtk.
Sous Adagide
Pour Adagide, il vous suffit d'aller dans le menu Compile > Select Target. Une fenêtre s'ouvre, cliquez alors sur l'onglet Debug settings. Dans la ligne Compiler Options, vous n'aurez qu'à écrire -I suivi immédiatement du chemin pour accéder au répertoire GtkAda/include/gtkada. Par exemple, voici ce que vous pourriez écrire (tout dépend du répertoire choisi pour installer GtkAda) :
1 | -IC:\Program Files\GtkAda\include\gtkada |
Sous GPS
Une manipulation similaire est nécessaire sous GPS. Rendez-vous dans le menu Build > Settings > Targets. Puis dans chacun des outils que vous utilisez (c'est-à-dire Compile File et Build <current file=""></current>), ajoutez à la ligne d'instruction située au bas de la fenêtre la commande indiquée précédemment.
Un premier essai
Pour s'assurer que tout fonctionne correctement, copiez le code ci-dessous. N'oubliez pas d'indiquer au compilateur l'emplacement des packages de GtkAda.
1 2 3 4 5 6 7 8 9 10 11 12 | WITH Gtk.Main ; USE Gtk.Main ; WITH Gtk.Window ; USE Gtk.Window ; PROCEDURE Test01 IS win : Gtk_window ; BEGIN Init ; Gtk_New(Win) ; Win.show_all ; Main ; END Test01 ; |
Compilez, exécutez et vous devriez obtenir ceci :
Ce n'est pas extraordinaire, mais c'est bien une fenêtre tout ce qu'il y a de plus normale, pas une vilaine console ! Vous venez de réaliser votre tout premier programme fenêtré avec GTK !
Vous devriez voir apparaître un fichier gnat.ago. Je vous déconseille de le supprimer car c'est dans ce fichier qu'est inscrit le chemin -IC:...\Gtkada\include\gtkada. Alors si vous ne souhaitez pas le réécrire à chaque fois, ne le supprimez pas.
En résumé :
- GTK est un ensemble de bibliothèques graphiques codées en C, mais le projet GtkAda permet d'utiliser GTK tout en codant en Ada.
- La conception de GTK est orientée objet. Il sera donc possible d'utiliser l'héritage et la dérivation.
- Avant tout projet utilisant GTK, vous devrez absolument indiquer au compilateur le chemin pour accéder aux packages de GTK.