Interface graphique en Prolog avec XPCE


précédentsommairesuivant

III. Programmation graphique avec XPCE.

III-A. La première fenêtre.

Nous allons d'abord créer des fenêtres et boîtes de dialogue très simples en lignes de code.
Sous le prompt Prolog tapons:

Prompt Prolog
Sélectionnez
?- new(D, window('Ma Première Fenêtre')).
D = @39170088/window 
Yes

Pour faire apparaître la fenêtre, on lui envoie un message :

Prompt Prolog
Sélectionnez
?- send(@39170088, open).

Nous obtenons cette première fenêtre :

Image non disponible

Nous constatons que tout n'est pas affiché. Pour que le titre soit entièrement lisible, nous changeons la taille de la fenêtre:

Prompt Prolog
Sélectionnez
?- send(@39170088, size, size(250,100)).
Image non disponible

Lorsque nous n'avons plus besoin d'utiliser cette fenêtre, il est bien de libérer la mémoire qui lui est affectée par un free(@39170088).

III-B. La première boîte de dialogue.

Nous aurions pu créer une boîte de dialogue. Comme il est assez pénible d'écrire les nombres on peut utiliser des références. La référence se note avec @ et un atome, donc la première lettre doit être minuscule :

Prompt Prolog
Sélectionnez
?- new(@d, dialog('Ma première boîte de dialogue.')).
Yes
?  send(@d, size, size(300,50)).
Yes
?- send(@d, append, button(ok, message(@d, destroy))).
Yes
?  send(@d, open).
Yes
Image non disponible

On a ajouté un bouton de fermeture, son nom est ok, par défaut le texte du bouton est Ok. Le message associé est l'envoi à la boîte de dialogue @d du message destroy.

III-C. Le premier programme XPCE.

Nous allons pouvoir écrire notre premier programme, le célèbre « Hello World ».

Prolog
Sélectionnez
mon_premier_program :-
	% on crée la fenêtre
	new(D, window('Ma première fenêtre')),
	% on lui donne la bonne taille
	send(D, size, size(250, 100)),
	% on crée un composant texte
	new(T, text('Hello World !')),
	% on demande à la fenêtre de l'afficher à peu près au milieu
	send(D, display, T, point(80, 40)),
	% on envoie à la fenêtre le message d'affichage.
	send(D, open).
Image non disponible

III-D. Le prédicat send.

Comme on peut le constater le prédicat send est très utilisé. Il sert à envoyer des informations aux objets.
Les deux premiers arguments de send sont l'objet visé, et le message envoyé ensuite à cet objet. En fonction de la cible et du message, il est ajouté ou non des paramètres supplémentaires. Par exemple, comme on peut le voir, le message open n'a pas de paramètre, alors que le message size en a un.
Le prédicat send à deux prototypes send/[2_12] ou send/2.
Nous avons donné une taille à nos fenêtres avec send(D, size, size(250, 100)), nous aurions pu écrire send(D, size(size(250, 100))) ce qui explique les deux versions de send : send(D, size, size(250, 100)) correspond à send/[2-12], et send(D, size(size(250, 100))) à send/2.
Parallèlement à send pour fournir des informations à un objet, on peut en obtenir avec le prédicat get qui lui aussi a deux formes get/3 et get/[3-13].

III-E. Un programme de calcul en XPCE.

Ce programme permet de calculer la valeur d'une expression arithmétique à l'aide du prédicat is.

Prolog
Sélectionnez
% Le prédicat de calcul de l'expression est très simple
calcule(Atom, A) :-
      term_to_atom(Expr, Atom),
      A is Expr.

% le prédicat principal du programme
calcul :-
	% on crée la boîte de dialogue
	new(D, dialog('Prolog au travail !')),
	% on ajoute d'abord un champ de saisie précédé du
	% libellé 'Saisissez votre calcul' 
	send(D, append,
	     new(ExprItem, text_item('Saisissez votre calcul '))),
	% on ajoute ensuite un champ texte, un label en terme XPCE
	send(D, append, new(Resultat, label(''))),
      % on lui donne la couleur rouge
      send(Resultat, colour, red),
	% il sera écrit en caractères gras de taille 18
	send(Resultat, font, font(times, bold, 18)),
	% On ajoute un bouton de nom calcul, son libellé
	% sera Calcul par défaut, et son action consistera
	% a appelé le prédicat Prolog lance_calcul avec 
	% deux arguments, la saisie effectuée et le composant
	% ou écrire le résultat
	send(D, append,
	     button(calcul, message(@prolog, lance_calcul, 
				ExprItem?selection, Resultat))),
	% on ajoute un bouton de nom cancel dont la fonction 
	% est de détruire la fenêtre
	send(D, append,
	     button(cancel, message(D, destroy))),
	% enfin on ouvre la fenêtre
	send(D, open).

% le prédicat d'interaction entre la fenêtre et le prédicat calcul
lance_calcul(Expr, Resultat) :-
	calcule(Expr, Res),
    % le résultat est écrit dans une chaîne de caractères
    % comme le sprintf du C
	sformat(Str, '~w = ~w', [Expr, Res]),
    % on envoie au label Resultat la chaîne
	send(Resultat, selection, Str).	
Image non disponible

précédentsommairesuivant

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

Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.