summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/undo_redo.cpp23
-rw-r--r--core/undo_redo.h3
-rw-r--r--doc/classes/UndoRedo.xml21
-rw-r--r--doc/classes/VisualServer.xml2
4 files changed, 47 insertions, 2 deletions
diff --git a/core/undo_redo.cpp b/core/undo_redo.cpp
index f7ca6d3bde..f0c2b8eb9b 100644
--- a/core/undo_redo.cpp
+++ b/core/undo_redo.cpp
@@ -336,6 +336,7 @@ bool UndoRedo::redo() {
_process_operation_list(actions.write[current_action].do_ops.front());
version++;
+ emit_signal("version_changed");
return true;
}
@@ -348,6 +349,8 @@ bool UndoRedo::undo() {
_process_operation_list(actions.write[current_action].undo_ops.front());
current_action--;
version--;
+ emit_signal("version_changed");
+
return true;
}
@@ -359,18 +362,30 @@ void UndoRedo::clear_history(bool p_increase_version) {
while (actions.size())
_pop_history_tail();
- if (p_increase_version)
+ if (p_increase_version) {
version++;
+ emit_signal("version_changed");
+ }
}
String UndoRedo::get_current_action_name() const {
ERR_FAIL_COND_V(action_level > 0, "");
if (current_action < 0)
- return ""; //nothing to redo
+ return "";
return actions[current_action].name;
}
+bool UndoRedo::has_undo() {
+
+ return current_action >= 0;
+}
+
+bool UndoRedo::has_redo() {
+
+ return (current_action + 1) < actions.size();
+}
+
uint64_t UndoRedo::get_version() const {
return version;
@@ -523,10 +538,14 @@ void UndoRedo::_bind_methods() {
ClassDB::bind_method(D_METHOD("add_undo_reference", "object"), &UndoRedo::add_undo_reference);
ClassDB::bind_method(D_METHOD("clear_history", "increase_version"), &UndoRedo::clear_history, DEFVAL(true));
ClassDB::bind_method(D_METHOD("get_current_action_name"), &UndoRedo::get_current_action_name);
+ ClassDB::bind_method(D_METHOD("has_undo"), &UndoRedo::has_undo);
+ ClassDB::bind_method(D_METHOD("has_redo"), &UndoRedo::has_redo);
ClassDB::bind_method(D_METHOD("get_version"), &UndoRedo::get_version);
ClassDB::bind_method(D_METHOD("redo"), &UndoRedo::redo);
ClassDB::bind_method(D_METHOD("undo"), &UndoRedo::undo);
+ ADD_SIGNAL(MethodInfo("version_changed"));
+
BIND_ENUM_CONSTANT(MERGE_DISABLE);
BIND_ENUM_CONSTANT(MERGE_ENDS);
BIND_ENUM_CONSTANT(MERGE_ALL);
diff --git a/core/undo_redo.h b/core/undo_redo.h
index e2cc6c659b..276d00d9af 100644
--- a/core/undo_redo.h
+++ b/core/undo_redo.h
@@ -118,6 +118,9 @@ public:
String get_current_action_name() const;
void clear_history(bool p_increase_version = true);
+ bool has_undo();
+ bool has_redo();
+
uint64_t get_version() const;
void set_commit_notify_callback(CommitNotifyCallback p_callback, void *p_ud);
diff --git a/doc/classes/UndoRedo.xml b/doc/classes/UndoRedo.xml
index c0b73cd8e3..b6e458b43f 100644
--- a/doc/classes/UndoRedo.xml
+++ b/doc/classes/UndoRedo.xml
@@ -141,6 +141,20 @@
This is useful mostly to check if something changed from a saved version.
</description>
</method>
+ <method name="has_redo">
+ <return type="bool">
+ </return>
+ <description>
+ Returns [code]true[/code] if an 'redo' action is available.
+ </description>
+ </method>
+ <method name="has_undo">
+ <return type="bool">
+ </return>
+ <description>
+ Returns [code]true[/code] if an 'undo' action is available.
+ </description>
+ </method>
<method name="is_commiting_action" qualifiers="const">
<return type="bool">
</return>
@@ -162,6 +176,13 @@
</description>
</method>
</methods>
+ <signals>
+ <signal name="version_changed">
+ <description>
+ Called when [method undo] or [method redo] was called.
+ </description>
+ </signal>
+ </signals>
<constants>
<constant name="MERGE_DISABLE" value="0" enum="MergeMode">
Makes [code]do[/code]/[code]undo[/code] operations stay in separate actions.
diff --git a/doc/classes/VisualServer.xml b/doc/classes/VisualServer.xml
index f9b668b38a..10b96f1d60 100644
--- a/doc/classes/VisualServer.xml
+++ b/doc/classes/VisualServer.xml
@@ -1951,6 +1951,8 @@
<argument index="2" name="scenario" type="RID">
</argument>
<description>
+ Returns an array of object IDs intersecting with the provided 3D ray. Only visual 3D nodes are considered, such as [MeshInstance] or [DirectionalLight]. Use [method @GDscript.instance_from_id] to obtain the actual nodes. A scenario RID must be provided, which is available in the [World] you want to query.
+ Warning: this function is primarily intended for editor usage. For in-game use cases, prefer physics collision.
</description>
</method>
<method name="light_directional_set_blend_splits">