Introduction à SwingStates
Guides d'alignement

Cet exercice illustre les possibilités et limites du widget Canvas de SwingStates concernant la gestion des tags. L'objectif est d'implémenter des guides d'alignement magnétiques : des lignes horizontales ou verticales sur lesquelles on va pouvoir "accrocher" des objets pour les aligner.

Récupérer le fichier MagneticGuides.java. Ce programme crée une fenêtre, un canvas occupant tout l'espace disponible et une CStateMachine attachée à ce canvas. Il crée une également une série de rectangles que l'on peut déplacer à la souris sur le canvas.
Créer une classe MagneticGuide dérivée de CExtensionalTag et incluant un champ CSegment. Compléter ensuite le code de la CStateMachine pour pouvoir créer d'un clic une ligne horizontale infinie (ou presque...) sur le canvas avec avec un tag de la classe MagneticGuide.
Compléter la CStateMachine pour pouvoir déplacer les guides créés.
Compléter la CStateMachine pour qu'une forme déplacée au-dessus d'un guide se colle à lui et prenne le tag correspondant. Faire en sorte qu'on puisse également détacher la forme du guide en s'en éloignant.
Traiter de manière similaire le cas des guides verticaux.
Faire en sorte que l'on puisse coller une forme sur plusieurs guides, e.g. un horizontal et un vertical.
Faire en sorte que l'on puisse supprimer un guide.
Faire en sorte que l'on puisse cacher tous les guides, puis les réafficher.