Index: topia/doc/UI.rst diff -u /dev/null topia/doc/UI.rst:1.1 --- /dev/null Fri Oct 8 13:08:01 2004 +++ topia/doc/UI.rst Fri Oct 8 13:07:56 2004 @@ -0,0 +1,382 @@ +====================================== +Implantation des interfaces graphiques +====================================== + +:author: Benjamin Poussin +:date: 20041007 + +Concept +======= + +L'utilisateur écrit ces interfaces en XML très simple, l'extension des +fichiers sont .suix (Simple User Interface Xml). + +Les fichiers .suix ne contiennent aucune information de présentation, il ne +contient que des groupes et des widgets fonctionnels. Le style (couleur, +font, position, ...) est décrit dans un fichier séparer de style CSS. + +Topia lit la description .suix pour généré une interface permettant de +récupérer simplement des éléments graphiques décrit dans cette interface, +cela est utile pour ne pas avoir à caster les objets retournés. + +Les callbacks sont écrit directement dans des classes Java. Ces classes +contiennent des méthodes respectant une certaine signature ce qui permet par +introspection de les enregistrer en tant que listener sur les bons objets. + +Un moteur de rendu graphique lit les fichiers .suix pour créer l'interface +graphique à l'exécution. Sur l'objet qui gère l'interface lu depuis le +fichier .suix, on peut enregistrer des objets contenants les méthodes de +callback, ajouter des objets gérants le style des objets. Il permet aussi de +récupérer un objet de l'interface graphique par son nom. Le type d'objet +retourné est Object. + +Un proxy répondant à l'interface généré par topia et encapsulant un moteur +de rendu graphique peut-être utilisé pour simplifier l'utilisation de +l'interface graphique. De cette façon on n'a plus à caster les Object qui +nous sont retourné. + +Les fichiers .suix +================== + +Les fichiers .suix sont des fichiers xml contenant seulement la description +des widgets que l'on souhaite. Un ensemble de widgets prédéfinis existent, et +permettent une portabilité entre différente librairie graphique. Il est aussi +possible d'utiliser des objets très spécifique à une librairie graphique ou +un langage, dans ce cas, la description XML ne sera utilisable que dans la +cible choisie. + +Si seul les composants prédéfini sont utilisé, alors la description XML +est portable d'une librairie à une autre (HTML, Swing/Java, AWT/Java, +SWT/Java, .NET, ...) + +Les widgets prédéfinis +---------------------- + +Tous les widgets prédéfinis sont des objets que l'on trouve dans la +librairie lutinwidget pour l'implantation Swing/Java, ces widgets ont été +choisi car ils répondent le mieux possible au besoin des interfaces graphiques +utilisateur. Certaine fois il s'agit simplement d'un héritage d'un widget +de la librairie Swing. + +Tous les widgets prédéfinis ont des caractéristiques commune comme la +possibilité de les rendre inactif (disable), ou de leur demander la valeur +qu'il contiennent, ou de modifier leur valeur courante. + +Les widgets prédéfinis sont des widgets que l'on retrouve dans la plupart +des librairies d'interface utilisateur. On y trouve: + +label + pour afficher un texte ou un icône + +fieldtext + pour l'entrer d'une zone texte sur une seul ligne, un mask de saisie peut + lui être défini + +textarea + pour l'entrer d'une zone de texte sur plusieurs lignes. + +list + pour le choix d'un ou plusieurs élément dans une liste. Une liste à un + modèle qui permet de définir les objets à afficher dans la liste + +combo + pour le choix d'un élement dans une liste déroulante. Elle contient un + modèle qui permet de définir les objets à afficher dans la liste. + On peut aussi indiquer que la combo est éditable + +table + une table permet d'afficher un ensemble de cellule contenant des + informations. Un modèle permet d'indiquer les objets à afficher dans la + table. + +tree + Un tree permet d'afficher sous forme d'arbre de l'information. Un modèle + permet de définir la structure de l'arbre est les objets à afficher + +button + Un bouton peut avoir une image et ou un texte. + +statusBar (progressBar, ...) + La status bar, permet d'afficher un message d'information pour + l'utilisateur, elle contient aussi une progressBar pour que l'utilisateur + sache ou en est la commande qu'il a exécuté, ... + D'autre petit élément peuvent être ajouté comme, l'heure, la mémoire, la + charge cpu, ... (ceci peut aussi être demandé au travers des CSS.) + +Slider + Un slider permet de sélectionner une valeur parmi d'autre en modifiant la + possition d'un curseur sur une ligne. Un modèle permet de définir les + valeur possible pour le slider. + +Spinner + Un spinner permet de sélectionner une valeur numérique soit en la + saisissant directement dans une zone de texte, soit en utilisant deux + petites flèches (vers le haut, vers le bas) qui permettent de modifier + la valeur simplement. Un modèle permet de définir les valeurs acceptables. + +checkbox + Une checkbox permet de saisir une valeur booléenne (vrai/faux), elle + contient un label ou une image. + +radioButton + Un radionButton est la même chose que la checkBox, mais il fait parti d'un + groupe. Dans un groupe un seul radioButton peut être séletionné à la fois, + et au moins un doit être sélectionné. + +datePicker + Un datePicker permet de saisir/choisir une date simplement. La date + peut-être soit: un jour et une heure, un jour ou une heure. + +Aucun widget de placement existe car tout le placement des composants se +fait grâce au CSS. + +Les éléments XML +---------------- + +Chaque widget prédéfini est un élément XML. Les autres éléments sont: + +group + permet de définir des groupes de widget devant aller ensemble + +unknown + permet d'ajouter des widgets non prédéfini. Dans ce cas, le fichier + .suix devient dépendant de la librairie utilisé pour ce widget. + +include + permet d'inclure un autre fichier XML dans le fichier. + +Exemple de fichier .suix +------------------------ + +Dans cette exemple on à simplement une interface permettant de décrire une +personne:: + + + + + + + + + + + + + + + + + + + + + + + +