2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								<?xml version="1.0" encoding="UTF-8" ?>  
						 
					
						
							
								
									
										
										
										
											2023-03-01 01:44:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								<class  name= "UndoRedo"  inherits= "Object"  version= "4.1"  xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"  xsi:noNamespaceSchemaLocation= "../class.xsd" >  
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									<brief_description > 
							 
						 
					
						
							
								
									
										
										
										
											2023-04-30 16:26:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										Provides a high-level interface for implementing undo and redo operations.
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									</brief_description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									<description > 
							 
						 
					
						
							
								
									
										
										
										
											2023-04-30 16:26:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										UndoRedo works by registering methods and property changes inside "actions". You can create an action, then provide ways to do and undo this action using function calls and property changes, then commit the action.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										When an action is committed, all of the [code]do_*[/code] methods will run. If the [method undo] method is used, the [code]undo_*[/code] methods will run. If the [method redo] method is used, once again, all of the [code]do_*[/code] methods will run.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Here's an example on how to add an action:
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 00:33:15 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										[codeblocks]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[gdscript]
							 
						 
					
						
							
								
									
										
										
										
											2023-03-29 16:21:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										var undo_redo = UndoRedo.new()
							 
						 
					
						
							
								
									
										
										
										
											2018-08-26 21:11:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										func do_something():
							 
						 
					
						
							
								
									
										
										
										
											2019-02-21 11:07:41 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    pass # Put your code here.
							 
						 
					
						
							
								
									
										
										
										
											2018-08-26 21:11:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										func undo_something():
							 
						 
					
						
							
								
									
										
										
										
											2019-02-21 11:07:41 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    pass # Put here the code that reverts what's done by "do_something()".
							 
						 
					
						
							
								
									
										
										
										
											2018-08-26 21:11:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-01-15 13:26:21 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										func _on_my_button_pressed():
							 
						 
					
						
							
								
									
										
										
										
											2018-08-26 21:11:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    var node = get_node("MyNode2D")
							 
						 
					
						
							
								
									
										
										
										
											2019-02-21 11:07:41 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    undo_redo.create_action("Move the node")
							 
						 
					
						
							
								
									
										
										
										
											2023-03-29 16:21:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    undo_redo.add_do_method(do_something)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    undo_redo.add_undo_method(undo_something)
							 
						 
					
						
							
								
									
										
										
										
											2019-02-21 11:07:41 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    undo_redo.add_do_property(node, "position", Vector2(100,100))
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    undo_redo.add_undo_property(node, "position", node.position)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    undo_redo.commit_action()
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 00:33:15 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										[/gdscript]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[csharp]
							 
						 
					
						
							
								
									
										
										
										
											2023-01-31 18:21:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										private UndoRedo _undoRedo;
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 00:33:15 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										public override void _Ready()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{
							 
						 
					
						
							
								
									
										
										
										
											2023-03-29 16:21:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    _undoRedo = new UndoRedo();
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 00:33:15 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										public void DoSomething()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    // Put your code here.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										public void UndoSomething()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    // Put here the code that reverts what's done by "DoSomething()".
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										private void OnMyButtonPressed()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    var node = GetNode< Node2D> ("MyNode2D");
							 
						 
					
						
							
								
									
										
										
										
											2023-01-31 18:21:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    _undoRedo.CreateAction("Move the node");
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    _undoRedo.AddDoMethod(new Callable(this, MethodName.DoSomething));
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    _undoRedo.AddUndoMethod(new Callable(this, MethodName.UndoSomething));
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    _undoRedo.AddDoProperty(node, "position", new Vector2(100, 100));
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    _undoRedo.AddUndoProperty(node, "position", node.Position);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    _undoRedo.CommitAction();
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 00:33:15 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[/csharp]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[/codeblocks]
							 
						 
					
						
							
								
									
										
										
										
											2023-06-02 23:03:39 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										Before calling any of the [code]add_(un)do_*[/code] methods, you need to first call [method create_action]. Afterwards you need to call [method commit_action].
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										If you don't need to register a method, you can leave [method add_do_method] and [method add_undo_method] out; the same goes for properties. You can also register more than one method/property.
							 
						 
					
						
							
								
									
										
										
										
											2023-03-29 16:21:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										If you are making an [EditorPlugin] and want to integrate into the editor's undo history, use [EditorUndoRedoManager] instead.
							 
						 
					
						
							
								
									
										
										
										
											2023-06-02 23:03:39 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										If you are registering multiple properties/method which depend on one another, be aware that by default undo operation are called in the same order they have been added. Therefore instead of grouping do operation with their undo operations it is better to group do on one side and undo on the other as shown below.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[codeblocks]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[gdscript]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										undo_redo.create_action("Add object")
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										# DO
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										undo_redo.add_do_method(_create_object)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										undo_redo.add_do_method(_add_object_to_singleton)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										# UNDO
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										undo_redo.add_undo_method(_remove_object_from_singleton)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										undo_redo.add_undo_method(_destroy_that_object)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										undo_redo.commit_action()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[/gdscript]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[csharp]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										_undo_redo.CreateAction("Add object");
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										// DO
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										_undo_redo.AddDoMethod(new Callable(this, MethodName.CreateObject));
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										_undo_redo.AddDoMethod(new Callable(this, MethodName.AddObjectToSingleton));
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										// UNDO
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										_undo_redo.AddUndoMethod(new Callable(this, MethodName.RemoveObjectFromSingleton));
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										_undo_redo.AddUndoMethod(new Callable(this, MethodName.DestroyThatObject));
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										_undo_redo.CommitAction();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[/csharp]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[/codeblocks]
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									<tutorials > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									</tutorials> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									<methods > 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-18 23:27:00 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										<method  name= "add_do_method" > 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-30 15:28:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<return  type= "void"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-18 23:27:00 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<param  index= "0"  name= "callable"  type= "Callable"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-18 23:27:00 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Register a [Callable] that will be called when the action is committed.
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										<method  name= "add_do_property" > 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-30 15:28:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<return  type= "void"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-06 21:11:48 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<param  index= "0"  name= "object"  type= "Object"  /> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<param  index= "1"  name= "property"  type= "StringName"  /> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<param  index= "2"  name= "value"  type= "Variant"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-08 19:41:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Register a [param property] that would change its value to [param value] when the action is committed.
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										<method  name= "add_do_reference" > 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-30 15:28:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<return  type= "void"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-06 21:11:48 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<param  index= "0"  name= "object"  type= "Object"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-22 01:04:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Register a reference for "do" that will be erased if the "do" history is lost. This is useful mostly for new nodes created for the "do" call. Do not use for resources.
							 
						 
					
						
							
								
									
										
										
										
											2023-03-29 16:21:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												[codeblock]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												var node = Node2D.new()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												undo_redo.create_action("Add node")
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												undo_redo.add_do_method(add_child.bind(node))
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												undo_redo.add_do_reference(node)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												undo_redo.add_undo_method(remove_child.bind(node))
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												undo_redo.commit_action()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												[/codeblock]
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-18 23:27:00 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										<method  name= "add_undo_method" > 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-30 15:28:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<return  type= "void"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-18 23:27:00 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<param  index= "0"  name= "callable"  type= "Callable"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-18 23:27:00 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Register a [Callable] that will be called when the action is undone.
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										<method  name= "add_undo_property" > 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-30 15:28:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<return  type= "void"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-06 21:11:48 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<param  index= "0"  name= "object"  type= "Object"  /> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<param  index= "1"  name= "property"  type= "StringName"  /> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<param  index= "2"  name= "value"  type= "Variant"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-08 19:41:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Register a [param property] that would change its value to [param value] when the action is undone.
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										<method  name= "add_undo_reference" > 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-30 15:28:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<return  type= "void"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-06 21:11:48 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<param  index= "0"  name= "object"  type= "Object"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-22 01:04:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Register a reference for "undo" that will be erased if the "undo" history is lost. This is useful mostly for nodes removed with the "do" call (not the "undo" call!).
							 
						 
					
						
							
								
									
										
										
										
											2023-03-29 16:21:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												[codeblock]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												var node = $Node2D
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												undo_redo.create_action("Remove node")
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												undo_redo.add_do_method(remove_child.bind(node))
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												undo_redo.add_undo_method(add_child.bind(node))
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												undo_redo.add_undo_reference(node)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												undo_redo.commit_action()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												[/codeblock]
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										<method  name= "clear_history" > 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-30 15:28:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<return  type= "void"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-06 21:11:48 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<param  index= "0"  name= "increase_version"  type= "bool"  default= "true"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Clear the undo/redo history and associated references.
							 
						 
					
						
							
								
									
										
										
										
											2022-08-08 19:41:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Passing [code]false[/code] to [param increase_version] will prevent the version number from increasing when the history is cleared.
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										<method  name= "commit_action" > 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-30 15:28:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<return  type= "void"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-06 21:11:48 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<param  index= "0"  name= "execute"  type= "bool"  default= "true"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-08 19:41:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Commit the action. If [param execute] is [code]true[/code] (which it is by default), all "do" methods/properties are called/set when this function is called.
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										<method  name= "create_action" > 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-30 15:28:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<return  type= "void"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-06 21:11:48 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<param  index= "0"  name= "name"  type= "String"  /> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<param  index= "1"  name= "merge_mode"  type= "int"  enum= "UndoRedo.MergeMode"  default= "0"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-02 23:03:39 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<param  index= "2"  name= "backward_undo_ops"  type= "bool"  default= "false"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
									
										
										
										
											2018-08-26 21:11:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Create a new action. After this is called, do all your calls to [method add_do_method], [method add_undo_method], [method add_do_property], and [method add_undo_property], then commit the action with [method commit_action].
							 
						 
					
						
							
								
									
										
										
										
											2022-08-08 19:41:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												The way actions are merged is dictated by [param merge_mode]. See [enum MergeMode] for details.
							 
						 
					
						
							
								
									
										
										
										
											2023-06-02 23:03:39 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												The way undo operation are ordered in actions is dictated by [param backward_undo_ops]. When [param backward_undo_ops] is [code]false[/code] undo option are ordered in the same order they were added. Which means the first operation to be added will be the first to be undone.
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-12 14:03:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										<method  name= "end_force_keep_in_merge_ends" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<return  type= "void"  /> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Stops marking operations as to be processed even if the action gets merged with another in the [constant MERGE_ENDS] mode. See [method start_force_keep_in_merge_ends].
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-12 12:48:41 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										<method  name= "get_action_name" > 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-30 15:28:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<return  type= "String"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-06 21:11:48 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<param  index= "0"  name= "id"  type= "int"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-12 12:48:41 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Gets the action name from its index.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										<method  name= "get_current_action" > 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-30 15:28:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<return  type= "int"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-12 12:48:41 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Gets the index of the current action.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										<method  name= "get_current_action_name"  qualifiers= "const" > 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-30 15:28:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<return  type= "String"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-12 12:48:41 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Gets the name of the current action, equivalent to [code]get_action_name(get_current_action())[/code].
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										<method  name= "get_history_count" > 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-30 15:28:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<return  type= "int"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-12 12:48:41 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-02 18:32:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Returns how many elements are in the history.
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										<method  name= "get_version"  qualifiers= "const" > 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-30 15:28:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<return  type= "int"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-22 01:04:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Gets the version. Every time a new action is committed, the [UndoRedo]'s version number is increased automatically.
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
												This is useful mostly to check if something changed from a saved version.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-17 11:41:46 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										<method  name= "has_redo"  qualifiers= "const" > 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-30 15:28:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<return  type= "bool"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-14 00:52:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-22 01:04:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Returns [code]true[/code] if a "redo" action is available.
							 
						 
					
						
							
								
									
										
										
										
											2019-02-14 00:52:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-17 11:41:46 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										<method  name= "has_undo"  qualifiers= "const" > 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-30 15:28:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<return  type= "bool"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-14 00:52:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-22 01:04:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Returns [code]true[/code] if an "undo" action is available.
							 
						 
					
						
							
								
									
										
										
										
											2019-02-14 00:52:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-08 18:36:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										<method  name= "is_committing_action"  qualifiers= "const" > 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-30 15:28:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<return  type= "bool"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-07 10:54:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-22 01:04:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Returns [code]true[/code] if the [UndoRedo] is currently committing the action, i.e. running its "do" method or property change (see [method commit_action]).
							 
						 
					
						
							
								
									
										
										
										
											2019-03-07 10:54:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-17 18:57:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										<method  name= "redo" > 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-30 15:28:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<return  type= "bool"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-17 18:57:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-26 15:57:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Redo the last action.
							 
						 
					
						
							
								
									
										
										
										
											2017-09-17 18:57:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-12 14:03:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										<method  name= "start_force_keep_in_merge_ends" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<return  type= "void"  /> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Marks the next "do" and "undo" operations to be processed even if the action gets merged with another in the [constant MERGE_ENDS] mode. Return to normal operation using [method end_force_keep_in_merge_ends].
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-17 18:57:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										<method  name= "undo" > 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-30 15:28:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<return  type= "bool"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-17 18:57:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-26 15:57:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Undo the last action.
							 
						 
					
						
							
								
									
										
										
										
											2017-09-17 18:57:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									</methods> 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-14 00:52:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									<signals > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										<signal  name= "version_changed" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Called when [method undo] or [method redo] was called.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</signal> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									</signals> 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									<constants > 
							 
						 
					
						
							
								
									
										
										
										
											2017-11-24 23:16:30 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										<constant  name= "MERGE_DISABLE"  value= "0"  enum= "MergeMode" > 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-22 01:04:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											Makes "do"/"undo" operations stay in separate actions.
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										</constant> 
							 
						 
					
						
							
								
									
										
										
										
											2017-11-24 23:16:30 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										<constant  name= "MERGE_ENDS"  value= "1"  enum= "MergeMode" > 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-12 14:03:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											Makes so that the action's "undo" operations are from the first action created and the "do" operations are from the last subsequent action with the same name.
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										</constant> 
							 
						 
					
						
							
								
									
										
										
										
											2017-11-24 23:16:30 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										<constant  name= "MERGE_ALL"  value= "2"  enum= "MergeMode" > 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-21 11:07:41 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											Makes subsequent actions with the same name be merged into one.
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 17:42:36 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										</constant> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									</constants> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								</class>