unlimited undo's for text fields
MisterX
b.xavier at internet.lu
Thu Feb 24 23:40:45 EST 2005
Good job!
I'll definitely test this later!
Does it work also in Script editors?
cheers
Xavier
> -----Original Message-----
> From: use-revolution-bounces at lists.runrev.com
> [mailto:use-revolution-bounces at lists.runrev.com] On Behalf Of Wouter
> Sent: Friday, February 25, 2005 02:17
> To: use-revolution at lists.runrev.com
> Subject: unlimited undo's for text fields
>
> Hi All,
>
> For those who like unlimited undo's (or is it ram limited
> undo's?) an undo framework starter for text in fields.
> This script can be placed in a stackscript and will act on all
> (editable) fields.
> Drag dropping text from one field to the other is supported.
> It is functional and tested on OS X. But for the other
> platforms I don't know yet.
> Adapt as necessary and beware of the mail wraps!
>
> global gHistory
> local lSC,lData
>
> on rawkeydown x
> writeHistory x
> pass rawkeydown
> end rawkeydown
>
> on dragstart
> put the selectedchunk into lSC
> pass dragstart
> end dragstart
>
> on dragend
> put the dragData["text"] into lData
> send "checkdragdata" to me in 20 millisecs
> pass dragend
> end dragend
>
> on checkdragdata
> put the selectedchunk into tSC
> get word -2 to -1 of lSC
> put word 1 to 7 of the long id of it into tFNameOrig
> get word -2 to -1 of tSC
> put word 1 to 7 of the long id of it into tFNameDest
> if tFNameOrig = tFNameDest and not (word 2 of tSC > word 4
> of tSC) then
> put "d",lSC,tSC,hexadize(lData) & cr after gHistory[tFNameDest]
> else if tFNameOrig <> tFNameDest then
> delete word 3 to 4 of lSC
> put "x",lSC,hexadize(lData) & cr after gHistory[tFNameOrig]
> put "v",tSC,hexadize(lData) & cr after gHistory[tFNameDest]
> end if
> put "" into lSC
> put "" into lData
> end checkdragdata
>
> ### first item indicates the action
> ### w = write
> ### v = paste
> ### x = cut
> ### b = backspace
> ### d = dragplaced
>
> on writeHistory x
> put the selectedchunk into tSC
> get word -2 to -1 of tSC
> put word 1 to 7 of the long id of it into tFName
> if the commandkey is down then
> switch x
> case "122" ### z
> reverseHistory
> break
> case "118" ### v
> put clipboardData["text"] into x
> put "v",tSC,hexadize(x) & cr after gHistory[tFName]
> break
> case "120" ### x
> put the value of tSC into x
> if x <> "" then
> delete word 3 to 4 of tSC
> put "x",tSC,hexadize(x) & cr after gHistory[tFName]
> end if
> break
> end switch
> else
> switch x
> case "65421" ### enter in field
> case "65307" ### escape key
> case "65308" ### scrollwheel up and down
> case "65309"
> case "65361" ### arrowkeys
> case "65363"
> case "65362"
> case "65364"
> -- do nothing
> break
> case "65288" ### backspace
> if word 4 of tSC <> 0 then
> if word 2 of tSC < word 4 of tSC then
> get the value of tSC
> delete word 3 to 4 of tsC
> else if word 2 of tSC > word 4 of tSC then
> delete word 2 to 3 of tSC
> get the value of tsC
> end if
> put hexadize(it) into x
> put "b",tSC,x & cr after gHistory[tFName] ## b = backspace
> end if
> break
> case "65293" ### return in field
> delete word 3 to 4 of tSC
> put "w",tSC,hexadize(return) & cr after gHistory[tFName]
> break
> default
> delete word 3 to 4 of tSC
> put "w",tSC,hexadize(numtochar(x)) & cr after gHistory[tFName]
> break
> end switch
> end if
> end writeHistory
>
> on reverseHistory
> put word 1 to 7 of the the focusedobject into tFName
> if gHistory[tFName] = "" then
> beep
> exit reverseHistory
> end if
> get line -1 of gHistory[tFName]
> delete line - 1 of gHistory[tFName]
> switch item 1 of it
> case "b"
> put dehexadize(last item of it) into x
> if x = return then put "cr" into x
> else if x = space then put "space" into x
> else if x = tab then put "tab" into x
> else
> replace quote with quote & ""e&" & quote in x
> replace cr with quote&"&cr&"& quote in x
> put quote & x & quote into x
> end if
> do "put" && x && "before" && item 2 of it
> break
> case "w"
> do "delete" && item 2 of it
> break
> case "v"
> put dehexadize(last item of it) into x
> put the num of chars in x into y
> put word 2 of item 2 of it + y - 1 into word 4 of item 2 of it
> do " delete" && item 2 of it
> break
> case "x"
> put dehexadize(last item of it) into x
> if x = return then put "cr" into x
> else if x = space then put "space" into x
> else if x = tab then put "tab" into x
> else
> replace quote with quote & ""e&" & quote in x
> replace cr with quote&"&cr&"& quote in x
> put quote & x & quote into x
> end if
> do " put" && x && "before" && item 2 of it
> break
> case "d"
> put dehexadize(last item of it) into x
> if last char of x = cr then add 1 to word 4 of item 3 of it
> if the num of lines in x > 1 then delete last char of x
> if x = return then put "cr" into x
> else if x = space then put "space" into x
> else if x = tab then put "tab" into x
> else
> replace quote with quote & ""e&" & quote in x
> replace cr with quote&"&cr&"& quote in x
> put quote & x & quote into x
> end if
> do "delete" && item 3 of it
> delete word 3 to 4 of item 2 of it
> do " put" && x && "before" && item 2 of it
> break
> end switch
> end reverseHistory
>
> ### Big Endian BinaryDecode ###
> function hexadize sx
> get binarydecode("H*", sx, x1)
> return x1
> end hexadize
>
> ### Big Endian Binary Encode ###
> function deHexadize sx
> replace space with "" in sx
> try
> get binaryEncode("H*", sx, x1)
> catch errornum
> put "no hex value" into it
> finally
> return it
> end try
> end deHexadize
>
> ###################
> ## for test purposes ##
> ###################
>
> on emptyHistory
> delete global gHistory
> end emptyHistory
>
> on putHistory
> put word 1 to 7 of the the focusedobject into tFName
> if the optionkey is down then put the keys of gHistory
> else put gHistory[tFName]
> end putHistory
>
>
> Greetings,
> WA
>
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> http://lists.runrev.com/mailman/listinfo/use-revolution
>
More information about the use-livecode
mailing list