Il est souvent appréciable dans le développement de nos applications de pouvoir stocker l'état de nos UI's, de nos données etc etc.
Bien que l'implémentation d'un tel système ne soit pas d'une compléxité à en devenir fou, j'en ai souvent eu besoin dans le développement de mes applis.
Il était temps pour moi de créer un modèle qui pourrait me resservir tout le temps. ;)

La naissance du package memento se fait donc non pas directement dans mon framework AsWing, mais dans mon tout nouveau framework Fever ( Pure ActionScript Framework )
Cela fait maintenant longtemps que Fever est prêt pour sa sortie...mais faute de temps pour finaliser, documenter etc etc...je n'avais jamais oser publier la 1er release.
C'est chose faite. Oh biensur il n'y a rien de révolutionnaire la dedans, mais j'avais besoin de cette sortie pour continuer le développement et la publication d'autres AsWing Extensions

J'en profite au passage pour remercier, encore une fois, Francis Bourre ( The Pixlib Author ). Fever est essentiellement basé sur Pixlib en s'appuyant sur son Event API par exemple...

Mais revenons à nos moutons...l'implémentation de base du modèle memento se trouve donc dans Fever; mais je vais m'intéresser ici aux spécificités du package org.aswing.fever.memento se trouvant lui du coté du Fever AsWing Framework
Je ne vais pas m'étaler sur le principe du modèle memento, un petit tour sur DoFactory permettra de vous faire une idée plus précise ;)

L'arme principale utilisée est le FvAsWingState manager qui va nous permettre :
  • enregister un composant comme étant sous contrôle d'un memento
  • sauvegarder l'état d'un component
  • restaurer un état sur un composant
  • Utliser les méthodes undo et redo sur un composant
var frame : JFrame = new JFrame( "myTitle", ASWingUtils.getRootMovieClip(), true );
 
FvAsWingState.init( frame );

Ensuite tout es une question de volonté ;)
En effet, pour sauvegader un état, on doit définir quelles sont les propriétés que l'ont veut sauvegarder pour cet état, et comment faire pour les sauvegarder.
Pour revenir sur le pattern memento, ça revient à définir un memento et un originator.
Par défault, le FvAsWingState utilise le memento FvComponentMemento et l'originator FvComponentOriginator ce qui permet de gérer par défault :

  • la position
  • la taille
  • La couleur d'avant plan
  • la couleur d'avant plan
  • la police utlisée dans le composant
  • la transparence du composant

Pour enregister plus de chose dans nos états ou bien définir un gestionnaire spécifique pour des composants précis ( le JSlider par exemple ), on devra :

  • Implémenter un nouveau memento
  • Implémenter un nouvel originator
et spécifier ce nouveau paramètre sans l'appel de la méthod init().
Fever defini en natif 3 gestionnaire spécifique, prenez exemple pour définir les votres :

Ensuite il suffit d'appeler les méthodes :

  • saveState
  • getState
  • undo
  • redo
Pour manipuler les différents états de nos composants.
Par exemple :
var frame : JFrame = new JFrame( "myTitle", ASWingUtils.getRootMovieClip(), true );
FvAsWingState.init( frame );
 
frame.setLocation( 400, 200 );
FvAsWingState.undo( frame );
 
var slider : JSlider = new JSlider();
slider.setMinimumValue( 10 );
slider.setMaximumValue( 100 );
slider.setValue( 50 );
FvAsWingState.init( slider, new FvSliderOriginator() );
 
slider.setValue( 75 );
FvAsWingState.undo( slider );
Et le tour est joué. ;)

Une démo est disponible sur le site AsWing.org
Pour le téléchargement, ça se passe du coté du SVN : http://as2fever.googlecode.com/svn/trunk/

Bonne journéeà tous );