Modèle dynamique
Gestion du XML
Nous utilisons l'interface SAX pour parser nos documents. Chaque objets est
responsable de son chargement ou de sa sauvegarde en XML. (Il n'y a pas
de super-objet qui crée toute la scène)
SAX utilise une programmation événementielle, à chaque début de balise
SAX nous envoie un événement (StartElement). Cet événement est associé
avec le nom de la balise et ses attibuts.
Nous utilisons une pile pour représenter l'arbre XML, les méthodes add et set
sont toujours appliquées sur le sommet de pile. La DTD nous garantie que l'on
ne va pas demander n'importe quoi aux objets.
Interactions avec l'utilisateur
Dans ce premier scénario, l'utilisateur clique sur un objet visible. Cet
événement est transmis à un objet MmGUICallback. Ce dernier décide des actions
à mettre en oeuvre.
Il existe plusieurs modes de déplacement dans jMm :
Mode réel
Ce mode indique aux objets si leur comportement doit être réel ou
pas. En effet dans un mode non réaliste, un objet draggé est obligé de bouger,
c'est un mode de mise au point. Tous les composants de l'objet sont déplacés de
la même façon. L'attribut MmState.deplace est surchargé.
Mode Multiple
Ce mode indique aux objets que leur déplacement est complétement libre,
le MouseMotionListener ne fait plus bouger le MmObject, mais juste le
MmGUIObject.
Gestion des librairies
Pour pouvoir mettre en place la gestion des librairies, nous avons ajouté une
balise mmlib. Comme le chargement de nouveau élément est dynamique, la
dtd seule ne nous assure plus l'unicité des id dans le systéme. En
effet si l'utilisateur décide de charger plusieurs fois le même élément,
cela risque de provoquer des conflits de id.
Nous avons donc mis en place un gestionnaire dynamique
d'indentifiant. L'objet s'enregistre auprès de ce gestionnaire qui lui
indique l'identifiant qu'il peut prendre dans cette session. Ce
gestionnaire assure une convertion entre les identifiants de la librairie
(interne) et ceux qui seront utilisé dans le Micro Monde.