:github_url: hide .. DO NOT EDIT THIS FILE!!! .. Generated automatically from Godot engine sources. .. Generator: https://github.com/godotengine/godot/tree/3.5/doc/tools/make_rst.py. .. XML source: https://github.com/godotengine/godot/tree/3.5/doc/classes/UndoRedo.xml. .. _class_UndoRedo: UndoRedo ======== **Inherits:** :ref:`Object` Helper to manage undo/redo operations in the editor or custom tools. Description ----------- Helper to manage undo/redo operations in the editor or custom tools. It works by registering methods and property changes inside "actions". Common behavior is to create an action, then add do/undo calls to functions or property changes, then committing the action. Here's an example on how to add an action to the Godot editor's own ``UndoRedo``, from a plugin: :: var undo_redo = get_undo_redo() # Method of EditorPlugin. func do_something(): pass # Put your code here. func undo_something(): pass # Put here the code that reverts what's done by "do_something()". func _on_MyButton_pressed(): var node = get_node("MyNode2D") undo_redo.create_action("Move the node") undo_redo.add_do_method(self, "do_something") undo_redo.add_undo_method(self, "undo_something") undo_redo.add_do_property(node, "position", Vector2(100,100)) undo_redo.add_undo_property(node, "position", node.position) undo_redo.commit_action() \ :ref:`create_action`, :ref:`add_do_method`, :ref:`add_undo_method`, :ref:`add_do_property`, :ref:`add_undo_property`, and :ref:`commit_action` should be called one after the other, like in the example. Not doing so could lead to crashes. If you don't need to register a method, you can leave :ref:`add_do_method` and :ref:`add_undo_method` out; the same goes for properties. You can also register more than one method/property. Methods ------- +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`add_do_method` **(** :ref:`Object` object, :ref:`String` method, ... **)** |vararg| | +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`add_do_property` **(** :ref:`Object` object, :ref:`String` property, :ref:`Variant` value **)** | +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`add_do_reference` **(** :ref:`Object` object **)** | +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`add_undo_method` **(** :ref:`Object` object, :ref:`String` method, ... **)** |vararg| | +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`add_undo_property` **(** :ref:`Object` object, :ref:`String` property, :ref:`Variant` value **)** | +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`add_undo_reference` **(** :ref:`Object` object **)** | +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`clear_history` **(** :ref:`bool` increase_version=true **)** | +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`commit_action` **(** **)** | +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`create_action` **(** :ref:`String` name, :ref:`MergeMode` merge_mode=0 **)** | +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`String` | :ref:`get_current_action_name` **(** **)** |const| | +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`get_version` **(** **)** |const| | +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`has_redo` **(** **)** |const| | +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`has_undo` **(** **)** |const| | +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`is_commiting_action` **(** **)** |const| | +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`redo` **(** **)** | +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`undo` **(** **)** | +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Signals ------- .. _class_UndoRedo_signal_version_changed: - **version_changed** **(** **)** Called when :ref:`undo` or :ref:`redo` was called. Enumerations ------------ .. _enum_UndoRedo_MergeMode: .. _class_UndoRedo_constant_MERGE_DISABLE: .. _class_UndoRedo_constant_MERGE_ENDS: .. _class_UndoRedo_constant_MERGE_ALL: enum **MergeMode**: - **MERGE_DISABLE** = **0** --- Makes "do"/"undo" operations stay in separate actions. - **MERGE_ENDS** = **1** --- Makes so that the action's "do" operation is from the first action created and the "undo" operation is from the last subsequent action with the same name. - **MERGE_ALL** = **2** --- Makes subsequent actions with the same name be merged into one. Method Descriptions ------------------- .. _class_UndoRedo_method_add_do_method: - void **add_do_method** **(** :ref:`Object` object, :ref:`String` method, ... **)** |vararg| Register a method that will be called when the action is committed. ---- .. _class_UndoRedo_method_add_do_property: - void **add_do_property** **(** :ref:`Object` object, :ref:`String` property, :ref:`Variant` value **)** Register a property value change for "do". ---- .. _class_UndoRedo_method_add_do_reference: - void **add_do_reference** **(** :ref:`Object` object **)** 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. ---- .. _class_UndoRedo_method_add_undo_method: - void **add_undo_method** **(** :ref:`Object` object, :ref:`String` method, ... **)** |vararg| Register a method that will be called when the action is undone. ---- .. _class_UndoRedo_method_add_undo_property: - void **add_undo_property** **(** :ref:`Object` object, :ref:`String` property, :ref:`Variant` value **)** Register a property value change for "undo". ---- .. _class_UndoRedo_method_add_undo_reference: - void **add_undo_reference** **(** :ref:`Object` object **)** 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!). ---- .. _class_UndoRedo_method_clear_history: - void **clear_history** **(** :ref:`bool` increase_version=true **)** Clear the undo/redo history and associated references. Passing ``false`` to ``increase_version`` will prevent the version number to be increased from this. ---- .. _class_UndoRedo_method_commit_action: - void **commit_action** **(** **)** Commit the action. All "do" methods/properties are called/set when this function is called. ---- .. _class_UndoRedo_method_create_action: - void **create_action** **(** :ref:`String` name, :ref:`MergeMode` merge_mode=0 **)** Create a new action. After this is called, do all your calls to :ref:`add_do_method`, :ref:`add_undo_method`, :ref:`add_do_property`, and :ref:`add_undo_property`, then commit the action with :ref:`commit_action`. The way actions are merged is dictated by the ``merge_mode`` argument. See :ref:`MergeMode` for details. ---- .. _class_UndoRedo_method_get_current_action_name: - :ref:`String` **get_current_action_name** **(** **)** |const| Gets the name of the current action. ---- .. _class_UndoRedo_method_get_version: - :ref:`int` **get_version** **(** **)** |const| Gets the version. Every time a new action is committed, the ``UndoRedo``'s version number is increased automatically. This is useful mostly to check if something changed from a saved version. ---- .. _class_UndoRedo_method_has_redo: - :ref:`bool` **has_redo** **(** **)** |const| Returns ``true`` if a "redo" action is available. ---- .. _class_UndoRedo_method_has_undo: - :ref:`bool` **has_undo** **(** **)** |const| Returns ``true`` if an "undo" action is available. ---- .. _class_UndoRedo_method_is_commiting_action: - :ref:`bool` **is_commiting_action** **(** **)** |const| Returns ``true`` if the ``UndoRedo`` is currently committing the action, i.e. running its "do" method or property change (see :ref:`commit_action`). ---- .. _class_UndoRedo_method_redo: - :ref:`bool` **redo** **(** **)** Redo the last action. ---- .. _class_UndoRedo_method_undo: - :ref:`bool` **undo** **(** **)** Undo the last action. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)` .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)` .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`