Algorithmique et Langage C
www.polytech.unice.fr/žvg/index-xidian.html
Granet Vincent - [email protected]
Xi’an - Octobre 2019 - Avril 2020
Interface utilisateur
différentes sortes
textuelles, graphiques, sonores, tactiles, virtuelles,etc.
boîtes à outils : Gtk, QT, Awt/Swing, Tcl/Tk, ..., LibSX
bibliothèques de composants graphiques (widgets) prêts à l’emploi fenêtres, boutons, menus déroulant, barres de progression, ...
son
Applications avec Interface Graphique
Conception
Séparation claire entre le cœur de l’application (avec ses données) et l’IG.
Architecture MVC (Modèle, Vue, Contrôleur)
consultation
modification
mise à jour
Contrôleur
évenement
réponse
réponse
Modèle
Utilisateur évenement Vue
son
LibSX
boîte à outils très simple et facile à utiliser
gestion des événements parfonctions de rappels(callbacks) construction de l’interface graphique :
1 création et assemblage des composants graphiques ;
2 connexion des composants graphiques avec le modèle son
LibSX - création des widgets
/usr/share/doc/libsx-dev/
html/
examples/
Button, Label, Menus, ...
typeWidget
Widget MakeButton (char s, ButtonCB func, void data) exemple
Widget b = MakeButton("Clic", NULL, NULL);
Widget l = MakeLabel("Hello");
son
LibSX - assemblage des widgets
méthode simple et limitée
void SetWidgetPos(Widget w, int pos1, Widget w1, int pos2, Widget w2) exemple
SetWidgetPos(b, PLACE_RIGHT, l, NO_CARE, NULL);
SetWidgetPos(x, PLACE_UNDER, b, PLACE_RIGHT, c);
son
LibSX - fonctions de rappel / callbacks
fonctions liées aux widgets
déclenchées par des événements produits par les widgets (e.g.clic sur un bouton)
void func(Widget w, void d) exemple
v o i d func(Widget w, v o i d d) {
//une action déclenchée par w qui agit sur la donnée d ...
} ...
//func sera exécutée lorsque l'utilisateur appuiera sur le bouton Widget b = MakeButton("Clic", func, d);
son
LibSX - architecture
vue.c callbacks.c modèle.c
Vue Callbacks Modèle
Données partagées
événement
user
son
LibSX
main.c
# i n c l u d e <stdio.h>
# i n c l u d e <stdlib.h>
# i n c l u d e <libsx.h>
# i n c l u d e "callbacks.h"
# i n c l u d e "Donnees.h"
i n t main(i n t argc, c h a r argv[]) { Donnees d;
i f (OpenDisplay(argc, argv) == 0) { fprintf(stderr,"Can't open display\n");
r e t u r n EXIT_FAILURE;
}
initDonnees(&d);
init_display(argc, argv, &d); //création de la vue MainLoop();
r e t u r n EXIT_SUCCESS;
}
son
LibSX
vue.c
# i n c l u d e "callbacks.h"
v o i d init_display (i n t argc, c h a r argv[], v o i d d) {
//création et assemblage des widgets ...
Widget b = MakeButton("Click", func, d);
Widget l = MakeLabel("Hello");
SetWidgetPos(b, PLACE_RIGHT, l, NO_CARE, NULL);
...
//pour gérer les couleurs GetStandardColors();
//pour af cher l'interface ShowDisplay();
}
LibSX
callbacks.c
contient toutes les fonctions callbacks
#include <libsx.h>
#include "Donnees.h"
v o i d func(Widget w, v o i d d) {
//une action déclenchée par w qui agit sur la donnée d .... uneFonctionDuModele(d); ....
}
callbacks.h
contient les prototypes de toutes les fonctions callbacks
e x t e r n v o i d func(Widget, v o i d );
...
226/228
LibSX
Donnees.h
contient la définition de données partagées entre les callbacks et le modèle
#pragma once
t y p e d e f s t r u c t { //données partagées } Donnees;
e x t e r n v o i d initDonnees(Donnees );
//fonctions de traitement du modèle
e x t e r n v o i d uneFonctionDuModele(Donnees );
e x t e r n ....
son
LibSX
modele.c
contient toutes les fonctions du modèle qui traitent les données partagées (ou non)
# i n c l u d e "Donnees.h"
//fonctions de traitement du modèle
v o i d initDonnees(Donnees ) {
...
}
v o i d uneFonctionDuModele(Donnees ) { .... }
....
son