Undo et Redo
Philippe49
Membre
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 ?
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 ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
http://developer.apple.com/documentation/Cocoa/Conceptual/UndoArchitecture/Tasks/RegisteringUndo.html
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".
Bilan :
Il sait quand il est en "undoing" ou "redoing".