Index: buix/doc/analyze-guide.rst diff -u buix/doc/analyze-guide.rst:1.1 buix/doc/analyze-guide.rst:1.2 --- buix/doc/analyze-guide.rst:1.1 Mon Sep 6 15:46:08 2004 +++ buix/doc/analyze-guide.rst Fri Sep 10 15:39:01 2004 @@ -24,8 +24,9 @@ retourner une liste de PropertyChildDescriptor. L'objet PropertyChildDescriptor se présente comme PropertyDescriptor. Il possède un nom, un type, un éditeur, etc. Cette classe possède aussi -deux méthodes abstraites : - abstract public Object getValue(Object -comp); - abstract public void setValue(Object comp, Object newValue); +deux méthodes abstraites : +- abstract public Object getValue(Object comp); +- abstract public void setValue(Object comp, Object newValue); Chaque classe de propriété spéciale du layout va hériter de cette classe PropertyChildDescriptor. @@ -40,7 +41,11 @@ place dans le container. En outre, lorsque toutes les places sont prises sauf une et qui en plus n'est pas la dernière par défaut, le composant doit s'ajouter par défaut à cette place libre, par exemple -au centre +au centre. + +Pour que le changement sur l'une des propriétés du GridBagLayout soit +prise en compte, il est nécessaire de "reconstruire" la contrainte +dans la méthode setValue. ClipBoard @@ -77,7 +82,9 @@ fichiers xml pour charger les différentes entités présentes dans tous les fichiers xml du répertoire. Toutefois, il est indispensable que les fichiers xml se terminent soit par -widget.xml pour les entités de -types widget, soit par -layout.xml. +types widget, soit par -layout.xml. Si ces fichiers sont ajoutés dans +src/resources alors Buix doit être compilé pour que le chargement de +ces nouvelles entités soit pris en compte. Ces fichiers xml peuvent également se trouver dans un fichier jar. Ainsi, il est possible de charger des entités préalablement @@ -88,6 +95,9 @@ *. xml. Cette méthode statique se trouve dans un autre module de Code Lutin : LutinUtil. Elle est développée dans la classe Ressource +S'il existe un problème lors du chargement de l'une des classes du +fichier xml alors les composants swing présents dans swing-widgets.xml +et les layouts ne seront pas chargés. Encoders ======== @@ -117,3 +127,85 @@ sont décrits dans la documentation bilanExport.rst. +C'est pourquoi, nous avons décidé de créer un nouvel encoder mais qui +n'hériterait pas de XMLEncoder. Il fallait donc obtenir les enfants +des objets, les propriétés, les events ... Pour récupérer ces +informations, j'ai de nouveau utilisé l'introspection. Par la même +occasion, la sérialisation s'effectue en une seule passe. En outre, +l'application devait pouvoir gérer plusieurs encoders différents avec +des formats de sortie xml différents. + +UIModelWriter est construit grâce à DOM4J. ComponentWalker est une +interface qui propose un ensemble de méthodes permettant de construire +le fichier xml. UIModelWriter hérite de cette interface. Une fois +l'implantation terminée, je me suis aperçue que la sérialisation des +arguments était incorrecte. Il a donc fallu abandonner cette voie. + + +Nous avons donc souhaité reprendre l'ancien encoder BuixXmlEncoder et +corriger les erreurs. Par la même occasion, j'ai revu la sérialisation +et UIModelWriter a été modifié pour s'adapter à la lecture des HashMap +présents dans cet encoder. + +Par la suite, nous avons testé le fonctionnement de ce système pour +XMLEncoder. En toute logique, l'ensemble des enfants du panel +apparaissait dans le fichier xml. A ce stade du stage, nous avons +réalisé que notre encoder était devenu aussi compliqué que celui de +Java. Nous avons alors abandonné l'idée d'un encoder supplémentaire +pour utiliser celui proposé par Java. En outre, nous disposions du +décodeur. + +En premier lieu, l'objet Chorem devait être reconnu lors de +l'exportation ce qui n'était pas le cas. Le fichier jar de Chorem +était bien chargé au démarrage dans le classLoader mais le chargement +n'était pas conservé. Dans ce cas, l'objet n'était pas trouvé lors de +l'exécution en phase d'exportation. Nous avons tenté de modifier le +classLoader à l'aide du thread par exemple. Nous avons finalement +réussi à trouver une solution qui reste plus ou moins +satisfaisante. L'instanciation de l'encoder doit s'effectuer dans un +thread et c'est seulement dans ce thread que le classLoader peut être +modifié. Ce problème est lié au JDK 1.4.2. C'est pourquoi, nous avons +choisi cette solution. Néanmoins, cette difficulté n'est pas présente +dans le JDK 1.5. + +Mais il restait toujours le problème des sous composants d'un +container de type Chorem. Ces composants n'apparaissaient pas dans le +fichier xml. Nous avons donc souhaité modifier la génération pour que +le panel hérite d'un panel particulier TopiaPanel. Le but de cet +héritage est de permettre à l'encoder de « reconnaitre » les panels +issus de Chorem. Nous avons créée un nouveau PersistenceDelegate pour +ce genre de panels. Ainsi, lorsque l'encoder souhaitera encoder ce +panel, il utilisera les méthodes surchargées dans cette nouvelle +classe : TopiaPanel_PersistenceDelegate (présente dans BuixXmlEncoder). + +Avec l'encoder BuixXmlEncoder, l'utilisateur devait saisir le nom du +package grâce à l'objet JOptionPane ainsi l'attribut de UIModelImpl +était initialisé avec cette valeur. En outre, la dernière valeur était +conservée dans les préférence de l'utilisateur. Toutefois, avec +l'encoder Java il est impossible de sérialiser le nom du package ainsi +l'attribut packageName de l'UIModelImpl ne possède aucune +valeur. C'est pourquoi, il est nécessaire de saisir l'arborescence du +package pour les fichiers javaxml (fichiers exportés avec +XMLEncoder). Par exemple, le fichier LoggedPanel.javaxml dans +org.codelutin.chorem.entities.ui doit être entregistré comme ceci : +org.codelutin.chorem.entities.ui.LoggedPanel.javaxml. Vous pouvez +consulter la doc de LutinGenerator pour savoir comment ce fichier sera +utilisé dans ce projet. + +Pour que les propriétés apparaissent dans le fichier exporté, elles +devront être modifiées et validées avant l'exportation. + +Il existe une dépendance avec Topia dans Buix. En effet, les panels +Chorem contiennent des panneaux non générés comme ButtonsPanel. Ces +derniers sont des panels implanté dans Topia d'où cette dépendance. Il +existe une deuxième conséquence. Il est impossible voir l'arborescence +de ces panels.Ainsi, on ne peut accéder au bouton Save, Cancel +... présent dans ButtonsPanel. + +Autres +====== + +Voici comment est construit le TreeNode : + +à l'indice 0 -> layout +aux autres indices se trouvent les enfants Index: buix/doc/user-guide.rst diff -u buix/doc/user-guide.rst:1.1.1.1 buix/doc/user-guide.rst:1.2 --- buix/doc/user-guide.rst:1.1.1.1 Fri Apr 9 17:15:30 2004 +++ buix/doc/user-guide.rst Fri Sep 10 15:39:01 2004 @@ -6,3 +6,37 @@ répertoire ${JAVA_HOME}/jre/lib/ext ou de faire un lien dans ce répertoire vers le fichier dt.jar. +Clipboard +========= + +Pour copier un élément dans le presse papier, il suffit de +sélectionner un composant (et seulement un composant dans l'arbre ou +dans le preview) puis d'appuyer sur les touches Ctrl + C, pour couper +Ctrl + X. On peut constater que le composant est venu s'ajouter dans +l'arbre et dans le clipboard (mode graphique). Par contre, pour coller +un composant du presse papier dans l'arbre, il faut sélectionner le +composant à coller dans l'une des vues du clipBoard puis l'utilisateur +doit cliquer sur le container dans lequel le composant doit être +ajouté. Ensuite, il peut appuyer sur les touches Ctrl + V. + +Il est possible de supprimer un composant sur le clipboard et +le preview quelque soit la vue en appuyant sur le bouton +Suppr. + +Ajouter un évènement à un composant +=================================== + +L'utilisateur sélectionne un composant dans l'arbre ou sur le panneau +de prévisualisation. Par la suite, il peut choisir un listener et la +méthode associée parmi la liste proposée pour le bean sélectionné. Il +peut ensuite saisir le nom de la méthode de l'action ainsi que ces +arguments. Puis, il suffit de cliquer sur « Add » pour ajouter un +nouvel événement à la liste située en bas. Pour enlever un événement, +il faut le sélectionner dans cette même liste et cliquer sur « Remove +». + +Preview +======= + +Il est impossible d'ajouter un layout ou un composant de type Window +au preview. De plus, il est impossible de "visionner" un arbre vide.