LC’s built in undo does not appear to undo anything done by something I have 
scripted.
My approach is to use a global array variable “u” to store information needed 
to undo the most recent action.  On each action, an “undoInit” puts empty into 
u, after (if necessary) cleaning up anything u’s values indicate is left over 
from the prior action (e.g., actually deleting an object that had been only 
“pseudo-deleted” (hidden) so as to make the user’s choice of deletion 
undoable).  Then the appropriate new values are loaded into u.  The main 
elements I use are

# u["cardID"] = short id of the card where the undoable action was taken
# u["stackName"] = short name of the stack where the undoable action was taken
# u["changed"], list of objects being changed, each line has:  propName,objectID
# u[propName,objectID] holds prior value of that property of that object (one 
key/value for each line of u["changed"]
# u["removed"], list of objectID,cardID,stackName for objects being 
pseudo-removed
# u["added"], list of objectID,cardID,stackName for objects being added
# u["cardsRemoved"], list of cards being pseudo-removed, each line has:  
cardID,cardNumber
# u["cardsAdded"], list of cards being added, each line has:  cardID,cardNumber

The “Undo” command makes sure we’re on card id u[“cardID”] of stack 
u[“stackName”}, then checks for non-empty values of 
u[“changed”],u[“removed”],u[“added”],u{“cardsRemoved”], and u[“cardsAdded”], 
and uses values stored in u to restore the prior state of things, while 
reloading u with values reporting the state of things now being reversed.

For text, I load u[“changed”] with “htmlText”,<myFieldID>, and load 
u[“htmlText”,<myFieldID>] with the htmlText of that field before the latest 
editing.

David Epstein
_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to