I cannot help with the project of "unlimited" undo/redo, but a simple one-layer 
undo for fields is not hard to implement.  

Sean Cole's suggestion that we should record the field state whenever a key is 
pressed I think does more than is wanted; if you type 10 characters, you don't 
want to choose Undo 10 times to get rid of them.  

My approach is to record the field state on keypresses ONLY if there is a text 
selection (about to be lost when the key is pressed) rather than an insertion 
point.  If text has been added but no text has been lost, you don’t need an 
Undo command to remove what was added.  If you also record the field's state 
before anything is typed in it, and before the Undo command itself is executed, 
and before any scripted handlers change the field, I think this will resemble 
ordinary Word Processor behavior.

on keyDown
  if the selectedText is not empty then uStoreFieldState the short id of the 
selectedField
  pass keyDown
end keyDown
-- and a similar handler for the other keys Sean mentions, although I don't 
think for arrow keys.  

on uStoreFieldState fID -- fID is the short id of the field
  global u
  put the selectedChunk into myChunk
  put fID into u["fieldModified"]
  put the htmlText of fld id fID into u[fID]
  put word 2 of myChunk into u["chunkA"]
  put word 4 of myChunk into u["chunkB"]
end uStoreFieldState

Then on undo, you read the values of u to revise the field, and reload u with 
the state of the field just before undoing.  I store the chunk information so 
that undo can restore the selection as well as the text to its prior state.

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