IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Comment implementer undo/redo ?


Sujet :

Windows

  1. #1
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut Comment implementer undo/redo ?
    Bonjour,

    Dans le projet que je developpe actuellement, je souhaite permettre des actions du genre Annuler/Retablir.

    Actuellement j'ai ça :

    - Une hierarchie d'objets (imbriqués ou non)
    - Des controles graphiques permettant de modifier les objets, en créer, en supprimer...

    Lorsqu'une action a lieu sur un controle de la GUI (clic sur un bouton...) une instance d'une classe "cAction" est créée avec les parametres de l'action (objet sur lequel agir, type d'action, nouvelle valeur...)

    Cette action est ensuite remontée à un "écouteur d'action" qui la traite.
    Toutes les actions sont donc traitées dans la même fonction.

    Voici ce que je pensait mettre en place :


    Lorsque l'écouteur recoit une action à traiter :

    1/ enregistrer dans une liste un couple d'actions : l'action "Retablir" et l'action "Annuler" avec des parametres "symetriques"
    2/ traiter l'action demandée

    Lorsque l'on souhaite annuler une action :

    1/ traiter l'action "Annuler" de ce couple
    2/ ne pas enregistrer l'action

    Lorsque l'on souhaite retablir une action :

    1/ traiter l'action "Rétablir" de ce couple
    2/ ne pas enregistrer l'action



    -------------------

    Les questions :

    1/ est-ce que ça vous parait malin ou stupide ?
    2/ par rapport à une gestion avec des états (comme le parttern state) qui risque de me prendre beaucoup de mémoire, qu'en pensez-vous ?

    Evidemment, avec mon système, pour annuler 5 actions d'un coup, il faut les traiter une par une et dans l'ordre...

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    1. C'est comme ça que je le ferais : Pour chaque action, on donne toutes les clés en main pour l'annuler (paramètres ET données perdues).
    2. Connais pas.

  3. #3
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    La gestion par etats, ca consiste à fournir pour chaque objet deux fonctions :

    - sauverEtat();
    - chargerEtat();

    et une classe cEtatObjet dérivée de cEtat

    Comme ça, pour annuler/retablir, on a juste à sauver/charger l'etat.

    Ca me parait le plus sûr, mais j'ai calculé rapidement la consommation mémoire, et ça me fait un peu peur... je trouve ça un peu lourdingue...

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Ah, c'est donc le conflit entre annulation absolue et incrémentale.
    Tu peux toujours faire un modèle hybride, comme pour la plupart des utilitaires de sauvegardes : Une sauvegarde absolue toutes les N sauvegardes incrémentales...

  5. #5
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Oui, c'est une bonne idée...

    De toute manière, la sauvegarde absolue, je serais obligé de l'implémenter pour la gestion de la sauvegarde des fichiers...

    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/03/2012, 14h36
  2. Réponses: 5
    Dernier message: 31/03/2006, 18h12
  3. Undo-Redo (Ctrl-Z, Ctrl-Y) : comment le gérer ?
    Par MiJack dans le forum Langage
    Réponses: 6
    Dernier message: 13/01/2006, 13h26
  4. [2.0] Comment implémenter un projet de ressources ?
    Par Louis-Guillaume Morand dans le forum Framework .NET
    Réponses: 5
    Dernier message: 01/07/2005, 16h57
  5. [VB.Net] Comment implémenter une fonction BitWise ?
    Par graphicsxp dans le forum VB.NET
    Réponses: 6
    Dernier message: 20/04/2005, 15h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo