Undo et Redo

Philippe49Philippe49 Membre
18:24 modifié dans API AppKit #1
J' implémente le undo et le redo sur le titre d'un objet dans une Document-Based Application.
La classe NSDocument possède d'office une instance de NSUndoManager, et les options de menus sont installés, prêts à  fonctionner.

Dans une méthode de transformation du titre dans MyDOcument, je pose
  [undoManager registerUndoWithTarget:monObjet selector:@selector(setTitle:) object:selectedCell.title];
  [undoManager setActionName:@change title];
  // faire la transformation du titre


Cool ... l'enchaà®nement des Pomme+Z se fait bien, automatiquement.
La proposition des Redo apparaissent aussi mais sont inactifs. On voit bien dans le code que le titre précédent n'est pas stocké. Une solution serait de prévoir une propriété newTitle pour les instances de mon objet, et d'y stocker l'ancien objet.

Quelle est votre expérience à  ce sujet ?
Est-il possible d'intervenir sur la définition du redo ?

Réponses

  • schlumschlum Membre
    18:24 modifié #2
    Bah normalement, pendant qu'il fait le "undo", il faut qu'il renvoie la balle au NSUndoManager, et il compte ça comme un "redo".

    http://developer.apple.com/documentation/Cocoa/Conceptual/UndoArchitecture/Tasks/RegisteringUndo.html
  • Philippe49Philippe49 Membre
    18:24 modifié #3
    Oui cela marche bien, sauf que le redo devrait faire l'action contraire du undo.

    Pour moi la pile des undo n'est pas la même que la pile des redo ?

    A moins que les actions undo et redo soient sur la même pile , par exemple les redo au-dessus des undo, et une référence mise à  jour ? auquel cas remettre une invocation sur la pile pour le redo est logiquement possible.

    J'essaies

  • schlumschlum Membre
    18:24 modifié #4
    dans 1205104480:

    Oui cela marche bien, sauf que le redo devrait faire l'action contraire du undo.

    Pour moi la pile des undo n'est pas la même que la pile des redo ?

    A moins que les actions undo et redo soient sur la même pile , par exemple les redo au-dessus des undo, et une référence mise à  jour ? auquel cas remettre une invocation sur la pile pour le redo est logiquement possible.

    J'essaies




    Il n'y a qu'une seule pile effectivement... Il n'y a pas d'action contraire. Au moment où tu fais le "undo", tu lui donnes l'action permettant de faire le "redo", et inversement. Il sait quand il est en "undoing" ou "redoing".
  • Philippe49Philippe49 Membre
    18:24 modifié #5
    Ok, Thanks
  • Philippe49Philippe49 Membre
    18:24 modifié #6
    dans 1205104839:

    Il sait quand il est en "undoing" ou "redoing".


    Bilan :

    Il sait quand il est en "undoing" ou "redoing".
Connectez-vous ou Inscrivez-vous pour répondre.