Le Fox Toolkit


précédentsommairesuivant

I. Introduction

Vous en avez assez des applications en ligne de commande, vous voulez manipuler des fenêtres, des boutons graphiques, des barres de menus ... ? Voici un outil Open Source pour réaliser des interfaces graphiques en C++ de manière parfaitement portable. Le Fox Toolkit fonctionnera sur les systèmes Windows et Unix/Linux. Il pourra fonctionner sur un environnement Mac OS-X si un serveur X est installé.

Fox Toolkit n'est pas le seul outil pour réaliser de telles interfaces graphiques, il existe également WxWidgets, QT ...
Le Fox Toolkit se révèle proche de la WxWidgets, au niveau de la syntaxe comme au niveau de la philosophie d'utilisation. Il est donc très facile en connaissant l'un de passer à l'autre. De plus c'est une bibliothèque très légère, elle est moins volumineuse que ses principales rivales, WxWidgets et QT. La bibliothèque et les binaires sont donc d'autant plus petits et rapides à compiler et à utiliser.
Contrairement à QT, la compilation d'applications Fox ne nécessite pas l'utilisation d'un compilateur méta-objets particulier. Donc, vous l'aurez compris, la simplicité est l'un des points forts du Fox Toolkit.

Fox Toolkit est une bibliothèque relativement jeune, elle ne possède pas encore d'éditeur officiel de ressources pour construire rapidement des interfaces. Par contre, il existe un éditeur de ressources en cours de développement, dont la première version est disponible : le Fox Constructor.

Je présente ici un aperçu du Fox Toolkit. Je ne vais pas en détailler toutes les fonctionalités ni toutes les options, je vais en expliquer le principe de fonctionnement.
A l'heure où j'écris cet article, la dernière version stable du Fox Toolkit est la 1.4.17, c'est donc sur celle là que je m'appuie.

Le Fox Toolkit est distribué selon les termes de la LGPL (GNU LESSER GENERAL PUBLIC LICENSE). Le texte de la licence est disponible ici.

I-A. Installation du Fox Toolkit

Tout d'abord, téléchargez le package correspondant à votre système

Saisissez-vous de votre compilateur C++ favori pour compiler la bibliothèque. La procédure de compilation dépend de votre compilateur, notez toutefois la procédure simplissime si vous utilisez le GNU/make et GNU/g++ :

 
Sélectionnez
 ./configure ; make
 su
 make install

Et pour les adeptes de DevC++, la Fox Toolkit est disponible en version déjà compilée sous forme d'un devpack.

I-B. Hello world

Pour ne pas perdre les bonnes habitudes, commençons par présenter la création d'une simple fenêtre avec un texte "hello world". La démarche est la suivante :

  • Création d'une application FoxToolkit
  • Création d'une instance d'une classe définissant notre fenêtre
  • Association de cette instance à notre application
  • Démarrage de l'application

Les noms de toutes les classes du Fox Toolkit commencent par 'FX'.
L'utilisation de cette bibliothèque en est d'autant plus confortable

Voici le code des fichiers main.cpp ainsi que NotreWindow.h et NotreWindow.cpp décrivant la classe NotreWindow :

main.cpp
Sélectionnez
 #include <fox/fx.h>
 #include "NotreWindow.h"
 
 int main(int argc, char **argv){
    
   FXApp notre_appli_fox("Hello World","FoxApp");
   notre_appli_fox.init(argc,argv);
   new NotreWindow(&notre_appli_fox);
   notre_appli_fox.create();
 
   return notre_appli_fox.run();
 }
NotreWindow.h
Sélectionnez
 #ifndef __NotreWindow_h__ 
 #define __NotreWindow_h__ 
 
 class NotreWindow : public FXMainWindow{ 
	FXDECLARE(NotreWindow); 
	private: 
		NotreWindow(){} 
	public: 
		NotreWindow(FXApp *); 
		void create(); 
 }; 
 
 #endif 
	
NotreWindow.cpp
Sélectionnez
 #include <fox/fx.h>
 #include "NotreWindow.h"
 
 FXDEFMAP(NotreWindow) NotreWindowMap[]={};
 FXIMPLEMENT(NotreWindow,FXMainWindow,NotreWindowMap,ARRAYNUMBER(NotreWindowMap))
 
 NotreWindow::NotreWindow(FXApp *a):FXMainWindow(a,"Ma fenêtre FOX",NULL,NULL,DECOR_ALL,100,100,250,20){
     FXLabel *lab = new FXLabel(this, "hello world",NULL,LAYOUT_FILL_X);
 }
 
 void NotreWindow::create(){
   FXMainWindow::create();
 
   show(PLACEMENT_VISIBLE);
 }

I-B-1. Compilation

Encore une fois, la compilation dépend de votre compilateur. Voici un Makefile utilisable avec g++ :

 
Sélectionnez
 CC     = g++
 CFLAGS = -Wall -ansi
 LIBS   = -lFOX-1.4
 EXEC   = hello
 
 $(EXEC) : main.cpp NotreWindow.o
	$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
	 
 NotreWindow.o: NotreWindow.cpp NotreWindow.h
	$(CC) $(CFLAGS) -o NotreWindow.o -c NotreWindow.cpp
	 
	

Au besoin, rajoutez le répertoire contenant les headers du Fox Toolkit s'ils ne figurent pas dans la variable d'environnement $PATH

I-B-2. Explications du code de la classe NotreWindow

 
Sélectionnez
 ...
 class NotreWindow : public FXMainWindow{
 ...

Notre classe va implémener une fenêtre graphique, elle hérite donc de la classe FXMainWindow correspondant aux fenêtres principales des applications Fox.

 
Sélectionnez
 ... 
 private:
  NotreWindow(){}
 public:
  NotreWindow(FXApp *);
 ...

NotreWindow possède deux constructeurs NotreWindow() et NotreWindow(FXApp*). De par l'architecture fortement orientée objet du FoxToolkit, il n'est pas nécessaire d'implémenter de destructeur pour notre classe NotreWindow. Tous les objets seront détruits à la fin de l'application par le destructeur par défaut. Le premier constructeur déclaré privé est requis pour l'utilisation de la macro FXIMPLEMENT, permettant d'associer une liste d'évènements et de méthodes à une classe. La macro FXDEFMAP permet de définir les associations entre les évènements et des méthodes. Nous reparlerons de ces macros lors de l'utilisation des évènements. Le second constructeur déclaré public permet d'associer une application Fox à une fenêtre. Il fait appel au constructeur de la classe mère FXMainWindow.

Le constructeur de la classe FXMainWindow prend 9 arguments :

  • un pointeur vers l'application Fox
  • l'intitulé de la fenêtre
  • 2 pointeurs vers des icônes
  • une liste de drapeaux décrivant l'allure de la fenêtre
  • la position (x,y) du coin supérieur gauche de la fenêtre par rapport au coin supérieur gauche de l'écran
  • la taille (x,y) de la fenêtre, en pixels
 
Sélectionnez
 FXLabel *lab = new FXLabel(this, "hello world",NULL,LAYOUT_FILL_X);

Dans le constructeur de notre fenêtre, nous insérons les objets graphiques dont nous avons besoin, ici, un simple label avec "Hello World". Le constructeur du FXLabel demande les arguments suivants :

  • Un pointeur sur l'objet contenant le label
  • Le texte à afficher
  • Un pointeur sur une icône
  • Une liste de drapeaux définissant l'allure du label
 
Sélectionnez
 void NotreWindow::create(){
   FXMainWindow::create();
 
   show(PLACEMENT_VISIBLE);
 }

La méthode NotreWindow::create nous permet de créer notre FXMainWindow (non plus au sens des classes C++ mais au sens de Fox). Cette méthode affiche ensuite notre fenêtre d'après un drapeau de positionnement.

Image non disponible
la fenêtre créée

I-B-3. Les drapeaux

Les drapeaux décrivant l'allure d'une fenêtre :

  • DECOR_NONE : aucun attribut graphique
  • DECOR_TITLE : la barre de titre, mais pas de bouton de maximisation / minimisation / fermeture
  • DECOR_MINIMIZE : le bouton de minimisation
  • DECOR_MAXIMIZE : le bouton de maximisation
  • DECOR_CLOSE : le bouton de fermeture (généralement une croix)
  • DECOR_BORDER : la bordure
  • DECOR_RESIZE : possibilité de redimensionner la fenêtre à la souris
  • DECOR_MENU : le menu déroulant au clic sur l'icône dans la barre de titre
  • DECOR_ALL : tous les attributs graphiques

Notez que ce sont des drapeaux, ils peuvent donc être combinés entre eux via l'opérateur |. Ainsi pour obtenir les effets combinés de 3 drapeaux, il faut écrire drapeau1|drapeau2|drapeau3

Quelques uns des drapeaux pour le positionnement d'une fenêtre :

  • PLACEMENT_DEFAULT : la fenêtre sera positionnée d'après les arguments passés au constructeur de FXMainWindow.
  • PLACEMENT_VISIBLE : idem que pour PLACEMENT_DEFAULT, mais la fenêtre sera active.
  • PLACEMENT_CURSOR : la fenêtre sera affichée à la position du curseur.
  • PLACEMENT_SCREEN : la fenêtre sera au centre de l'écran.
  • PLACEMENT_MAXIMIZED : la fenêtre sera maximisée.

précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2005 khayyam Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.