TextAreaUndo mod
BlitzMax Forums/MaxGUI Module/TextAreaUndo mod| 
 | ||
| This was extremely difficult and time-consuming.  It works just like it should, though: http://www.leadwerks.com/index.php?page=downloads.htm&subbar=blank.htm TextAreaUndo:Int(gadget:TGadget) TextAreaRedo:Int(gadget:TGadget) TextAreaCanUndo:Int(gadget:TGadget) TextAreaCanRedo:Int(gadget:TGadget) Function TextAreaFlushUndos:Int(gadget:TGadget) TextAreaCreateUndoState() If you manually alter the text area text with SetTextAreaText(), you must call TextAreaCreateUndoState() after the alterations, or your undos will be messed up. With this, TextAreas will only return a GADGETACTION event when they really have changed. EventData() will contain the length of the changed text, and may be a positive or negative number. This only alters the changed text, so it has low memory usage, and is compatible with syntax highlighting. Example program: Import leadwerks.textareaundo
Strict 
Global window:TGadget
Global textarea:TGadget
Local menu:TGadget
window=CreateWindow("TextAreaUndo",200,200,640,480,,15|WINDOW_ACCEPTFILES)
textarea=CreateTextArea(0,0,ClientWidth(window),ClientHeight(window),window)
SetGadgetLayout textarea,1,1,1,1
ActivateGadget textarea
menu=CreateMenu("Edit",0,WindowMenu(window))
Global menuundo:TGadget=CreateMenu("Undo",1,menu,KEY_Z,MODIFIER_COMMAND)
Global menuredo:TGadget=CreateMenu("Redo",2,menu,KEY_Z,MODIFIER_COMMAND|MODIFIER_OPTION)
UpdateWindowMenu window
While WaitEvent()
	UpdateMenu()
	Select EventID()
		Case EVENT_MENUACTION
			Select EventData()
				Case 1
					TextAreaUndo textarea
				Case 2
					TextAreaRedo textarea
			EndSelect
		Case EVENT_WINDOWCLOSE
			End
		Case EVENT_APPTERMINATE
			End
	End Select
Wend
Function UpdateMenu()
	If TextAreaCanUndo(textarea)
		EnableMenu menuundo
	Else
		DisableMenu menuundo
	EndIf
	If TextAreaCanRedo(textarea)
		EnableMenu menuredo
	Else
		DisableMenu menuredo
	EndIf
	UpdateWindowMenu window
EndFunction | 
| 
 | ||
| Just noticed this... many thanks Josh, a great piece of work. | 
| 
 | ||
| Source: |