class_undoredo.rst 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  1. :github_url: hide
  2. .. DO NOT EDIT THIS FILE!!!
  3. .. Generated automatically from Godot engine sources.
  4. .. Generator: https://github.com/godotengine/godot/tree/3.6/doc/tools/make_rst.py.
  5. .. XML source: https://github.com/godotengine/godot/tree/3.6/doc/classes/UndoRedo.xml.
  6. .. _class_UndoRedo:
  7. UndoRedo
  8. ========
  9. **Inherits:** :ref:`Object<class_Object>`
  10. Helper to manage undo/redo operations in the editor or custom tools.
  11. .. rst-class:: classref-introduction-group
  12. Description
  13. -----------
  14. Helper to manage undo/redo operations in the editor or custom tools. It works by registering methods and property changes inside "actions".
  15. Common behavior is to create an action, then add do/undo calls to functions or property changes, then committing the action.
  16. Here's an example on how to add an action to the Godot editor's own **UndoRedo**, from a plugin:
  17. ::
  18. var undo_redo = get_undo_redo() # Method of EditorPlugin.
  19. func do_something():
  20. pass # Put your code here.
  21. func undo_something():
  22. pass # Put here the code that reverts what's done by "do_something()".
  23. func _on_MyButton_pressed():
  24. var node = get_node("MyNode2D")
  25. undo_redo.create_action("Move the node")
  26. undo_redo.add_do_method(self, "do_something")
  27. undo_redo.add_undo_method(self, "undo_something")
  28. undo_redo.add_do_property(node, "position", Vector2(100,100))
  29. undo_redo.add_undo_property(node, "position", node.position)
  30. undo_redo.commit_action()
  31. \ :ref:`create_action<class_UndoRedo_method_create_action>`, :ref:`add_do_method<class_UndoRedo_method_add_do_method>`, :ref:`add_undo_method<class_UndoRedo_method_add_undo_method>`, :ref:`add_do_property<class_UndoRedo_method_add_do_property>`, :ref:`add_undo_property<class_UndoRedo_method_add_undo_property>`, and :ref:`commit_action<class_UndoRedo_method_commit_action>` should be called one after the other, like in the example. Not doing so could lead to crashes.
  32. If you don't need to register a method, you can leave :ref:`add_do_method<class_UndoRedo_method_add_do_method>` and :ref:`add_undo_method<class_UndoRedo_method_add_undo_method>` out; the same goes for properties. You can also register more than one method/property.
  33. .. rst-class:: classref-reftable-group
  34. Methods
  35. -------
  36. .. table::
  37. :widths: auto
  38. +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  39. | void | :ref:`add_do_method<class_UndoRedo_method_add_do_method>` **(** :ref:`Object<class_Object>` object, :ref:`String<class_String>` method, ... **)** |vararg| |
  40. +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  41. | void | :ref:`add_do_property<class_UndoRedo_method_add_do_property>` **(** :ref:`Object<class_Object>` object, :ref:`String<class_String>` property, :ref:`Variant<class_Variant>` value **)** |
  42. +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  43. | void | :ref:`add_do_reference<class_UndoRedo_method_add_do_reference>` **(** :ref:`Object<class_Object>` object **)** |
  44. +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  45. | void | :ref:`add_undo_method<class_UndoRedo_method_add_undo_method>` **(** :ref:`Object<class_Object>` object, :ref:`String<class_String>` method, ... **)** |vararg| |
  46. +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  47. | void | :ref:`add_undo_property<class_UndoRedo_method_add_undo_property>` **(** :ref:`Object<class_Object>` object, :ref:`String<class_String>` property, :ref:`Variant<class_Variant>` value **)** |
  48. +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  49. | void | :ref:`add_undo_reference<class_UndoRedo_method_add_undo_reference>` **(** :ref:`Object<class_Object>` object **)** |
  50. +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  51. | void | :ref:`clear_history<class_UndoRedo_method_clear_history>` **(** :ref:`bool<class_bool>` increase_version=true **)** |
  52. +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  53. | void | :ref:`commit_action<class_UndoRedo_method_commit_action>` **(** **)** |
  54. +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  55. | void | :ref:`create_action<class_UndoRedo_method_create_action>` **(** :ref:`String<class_String>` name, :ref:`MergeMode<enum_UndoRedo_MergeMode>` merge_mode=0 **)** |
  56. +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  57. | :ref:`String<class_String>` | :ref:`get_current_action_name<class_UndoRedo_method_get_current_action_name>` **(** **)** |const| |
  58. +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  59. | :ref:`int<class_int>` | :ref:`get_version<class_UndoRedo_method_get_version>` **(** **)** |const| |
  60. +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  61. | :ref:`bool<class_bool>` | :ref:`has_redo<class_UndoRedo_method_has_redo>` **(** **)** |const| |
  62. +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  63. | :ref:`bool<class_bool>` | :ref:`has_undo<class_UndoRedo_method_has_undo>` **(** **)** |const| |
  64. +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  65. | :ref:`bool<class_bool>` | :ref:`is_commiting_action<class_UndoRedo_method_is_commiting_action>` **(** **)** |const| |
  66. +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  67. | :ref:`bool<class_bool>` | :ref:`redo<class_UndoRedo_method_redo>` **(** **)** |
  68. +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  69. | :ref:`bool<class_bool>` | :ref:`undo<class_UndoRedo_method_undo>` **(** **)** |
  70. +-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  71. .. rst-class:: classref-section-separator
  72. ----
  73. .. rst-class:: classref-descriptions-group
  74. Signals
  75. -------
  76. .. _class_UndoRedo_signal_version_changed:
  77. .. rst-class:: classref-signal
  78. **version_changed** **(** **)**
  79. Called when :ref:`undo<class_UndoRedo_method_undo>` or :ref:`redo<class_UndoRedo_method_redo>` was called.
  80. .. rst-class:: classref-section-separator
  81. ----
  82. .. rst-class:: classref-descriptions-group
  83. Enumerations
  84. ------------
  85. .. _enum_UndoRedo_MergeMode:
  86. .. rst-class:: classref-enumeration
  87. enum **MergeMode**:
  88. .. _class_UndoRedo_constant_MERGE_DISABLE:
  89. .. rst-class:: classref-enumeration-constant
  90. :ref:`MergeMode<enum_UndoRedo_MergeMode>` **MERGE_DISABLE** = ``0``
  91. Makes "do"/"undo" operations stay in separate actions.
  92. .. _class_UndoRedo_constant_MERGE_ENDS:
  93. .. rst-class:: classref-enumeration-constant
  94. :ref:`MergeMode<enum_UndoRedo_MergeMode>` **MERGE_ENDS** = ``1``
  95. 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.
  96. .. _class_UndoRedo_constant_MERGE_ALL:
  97. .. rst-class:: classref-enumeration-constant
  98. :ref:`MergeMode<enum_UndoRedo_MergeMode>` **MERGE_ALL** = ``2``
  99. Makes subsequent actions with the same name be merged into one.
  100. .. rst-class:: classref-section-separator
  101. ----
  102. .. rst-class:: classref-descriptions-group
  103. Method Descriptions
  104. -------------------
  105. .. _class_UndoRedo_method_add_do_method:
  106. .. rst-class:: classref-method
  107. void **add_do_method** **(** :ref:`Object<class_Object>` object, :ref:`String<class_String>` method, ... **)** |vararg|
  108. Register a method that will be called when the action is committed.
  109. .. rst-class:: classref-item-separator
  110. ----
  111. .. _class_UndoRedo_method_add_do_property:
  112. .. rst-class:: classref-method
  113. void **add_do_property** **(** :ref:`Object<class_Object>` object, :ref:`String<class_String>` property, :ref:`Variant<class_Variant>` value **)**
  114. Register a property value change for "do".
  115. .. rst-class:: classref-item-separator
  116. ----
  117. .. _class_UndoRedo_method_add_do_reference:
  118. .. rst-class:: classref-method
  119. void **add_do_reference** **(** :ref:`Object<class_Object>` object **)**
  120. 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.
  121. .. rst-class:: classref-item-separator
  122. ----
  123. .. _class_UndoRedo_method_add_undo_method:
  124. .. rst-class:: classref-method
  125. void **add_undo_method** **(** :ref:`Object<class_Object>` object, :ref:`String<class_String>` method, ... **)** |vararg|
  126. Register a method that will be called when the action is undone.
  127. .. rst-class:: classref-item-separator
  128. ----
  129. .. _class_UndoRedo_method_add_undo_property:
  130. .. rst-class:: classref-method
  131. void **add_undo_property** **(** :ref:`Object<class_Object>` object, :ref:`String<class_String>` property, :ref:`Variant<class_Variant>` value **)**
  132. Register a property value change for "undo".
  133. .. rst-class:: classref-item-separator
  134. ----
  135. .. _class_UndoRedo_method_add_undo_reference:
  136. .. rst-class:: classref-method
  137. void **add_undo_reference** **(** :ref:`Object<class_Object>` object **)**
  138. 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!).
  139. .. rst-class:: classref-item-separator
  140. ----
  141. .. _class_UndoRedo_method_clear_history:
  142. .. rst-class:: classref-method
  143. void **clear_history** **(** :ref:`bool<class_bool>` increase_version=true **)**
  144. Clear the undo/redo history and associated references.
  145. Passing ``false`` to ``increase_version`` will prevent the version number to be increased from this.
  146. .. rst-class:: classref-item-separator
  147. ----
  148. .. _class_UndoRedo_method_commit_action:
  149. .. rst-class:: classref-method
  150. void **commit_action** **(** **)**
  151. Commit the action. All "do" methods/properties are called/set when this function is called.
  152. .. rst-class:: classref-item-separator
  153. ----
  154. .. _class_UndoRedo_method_create_action:
  155. .. rst-class:: classref-method
  156. void **create_action** **(** :ref:`String<class_String>` name, :ref:`MergeMode<enum_UndoRedo_MergeMode>` merge_mode=0 **)**
  157. Create a new action. After this is called, do all your calls to :ref:`add_do_method<class_UndoRedo_method_add_do_method>`, :ref:`add_undo_method<class_UndoRedo_method_add_undo_method>`, :ref:`add_do_property<class_UndoRedo_method_add_do_property>`, and :ref:`add_undo_property<class_UndoRedo_method_add_undo_property>`, then commit the action with :ref:`commit_action<class_UndoRedo_method_commit_action>`.
  158. The way actions are merged is dictated by the ``merge_mode`` argument. See :ref:`MergeMode<enum_UndoRedo_MergeMode>` for details.
  159. .. rst-class:: classref-item-separator
  160. ----
  161. .. _class_UndoRedo_method_get_current_action_name:
  162. .. rst-class:: classref-method
  163. :ref:`String<class_String>` **get_current_action_name** **(** **)** |const|
  164. Gets the name of the current action.
  165. .. rst-class:: classref-item-separator
  166. ----
  167. .. _class_UndoRedo_method_get_version:
  168. .. rst-class:: classref-method
  169. :ref:`int<class_int>` **get_version** **(** **)** |const|
  170. Gets the version. Every time a new action is committed, the **UndoRedo**'s version number is increased automatically.
  171. This is useful mostly to check if something changed from a saved version.
  172. .. rst-class:: classref-item-separator
  173. ----
  174. .. _class_UndoRedo_method_has_redo:
  175. .. rst-class:: classref-method
  176. :ref:`bool<class_bool>` **has_redo** **(** **)** |const|
  177. Returns ``true`` if a "redo" action is available.
  178. .. rst-class:: classref-item-separator
  179. ----
  180. .. _class_UndoRedo_method_has_undo:
  181. .. rst-class:: classref-method
  182. :ref:`bool<class_bool>` **has_undo** **(** **)** |const|
  183. Returns ``true`` if an "undo" action is available.
  184. .. rst-class:: classref-item-separator
  185. ----
  186. .. _class_UndoRedo_method_is_commiting_action:
  187. .. rst-class:: classref-method
  188. :ref:`bool<class_bool>` **is_commiting_action** **(** **)** |const|
  189. 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_commit_action>`).
  190. .. rst-class:: classref-item-separator
  191. ----
  192. .. _class_UndoRedo_method_redo:
  193. .. rst-class:: classref-method
  194. :ref:`bool<class_bool>` **redo** **(** **)**
  195. Redo the last action.
  196. .. rst-class:: classref-item-separator
  197. ----
  198. .. _class_UndoRedo_method_undo:
  199. .. rst-class:: classref-method
  200. :ref:`bool<class_bool>` **undo** **(** **)**
  201. Undo the last action.
  202. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
  203. .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`
  204. .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`
  205. .. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`