Struct UndoRedo
Helper to manage undo/redo operations in the editor or custom tools.
struct UndoRedo
;
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()
createAction
, addDoMethod
, addUndoMethod
, addDoProperty
, addUndoProperty
, and commitAction
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 addDoMethod
and addUndoMethod
out; the same goes for properties. You can also register more than one method/property.
Methods
Name | Description |
---|---|
addDoMethod
|
Register a method that will be called when the action is committed. |
addDoProperty
|
Register a property value change for "do". |
addDoReference
|
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. |
addUndoMethod
|
Register a method that will be called when the action is undone. |
addUndoProperty
|
Register a property value change for "undo". |
addUndoReference
|
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!). |
clearHistory
|
Clear the undo/redo history and associated references.
Passing false to increase_version will prevent the version number to be increased from this.
|
commitAction
|
Commit the action. All "do" methods/properties are called/set when this function is called. |
createAction
|
Create a new action. After this is called, do all your calls to addDoMethod , addUndoMethod , addDoProperty , and addUndoProperty , then commit the action with commitAction .
The way actions are merged is dictated by the merge_mode argument. See mergemode for details.
|
getCurrentActionName
|
Gets the name of the current action. |
getVersion
|
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.
|
hasRedo
|
Returns true if a "redo" action is available.
|
hasUndo
|
Returns true if an "undo" action is available.
|
isCommitingAction
|
Returns true if the UndoRedo is currently committing the action, i.e. running its "do" method or property change (see commitAction ).
|
redo
|
Redo the last action. |
undo
|
Undo the last action. |
Enums
Name | Description |
---|---|
Constants
|
|
MergeMode
|