How Do You UNDO?
Mark Wieder
mwieder at ahsoftware.net
Sun May 27 01:48:43 EDT 2012
Igor-
Saturday, May 26, 2012, 7:42:31 PM, you wrote:
> How do you do it? How do you implement UNDO in your applications?
> Is there a generic mechanism or technique that you use, or do you
> re-invent the wheel with every project?
Depends on what you want to undo. Here's what I do in an upcoming
change to the glx2 script editor. Here what I'm interested in saving
for later undos is the contents of the script editor field. I'm not
concerned about changes to other objects. This creates a LIFO stack by
setting up a new array element in the undo stack every time I save a
change. The state of the script field is recovered by popping the last
saved off the top of the stack. Note that not deleting the top element
after popping it off the stack allows a redo as well as an undo.
local sUndoPointArray
/**
* UndoPointer
*
* Return the index of the last-saved state
*/
private function UndoPointer
local tCount
put sUndoPointArray["count"] into tCount
if tCount is empty then
put 0 into tCount
end if
return tCount
end UndoPointer
/**
* InsertUndoScript
*
* Save the current script for undoing later on
*/
private command InsertUndoScript
local tCount
put UndoPointer()+1 into tCount
put the htmltext of field kCodeField into sUndoPointArray[tCount]
put tCount into sUndoPointArray["count"]
end InsertUndoScript
/**
* UndoRefactor
*
* undo the last-saved state of the text
*/
command UndoChange
local tCount
lock screen
put UndoPointer() into tCount
if tCount > 0 then
set the htmltext of field kCodeField to sUndoPointArray[tCount]
-- decrement the stack pointer
put tCount-1 into sUndoPointArray["count"]
end if
unlock screen
end UndoChange
Hope this helps.
--
-Mark Wieder
mwieder at ahsoftware.net
More information about the use-livecode
mailing list