From d65455185a2e72bbbf5aaa8943643a49cd811fce Mon Sep 17 00:00:00 2001 From: krzycho Date: Sun, 21 Jun 2015 21:55:47 +0200 Subject: - added GDscript bidings for UndoRedo class mechanizm - registered UndoRedo --- core/undo_redo.cpp | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) (limited to 'core/undo_redo.cpp') diff --git a/core/undo_redo.cpp b/core/undo_redo.cpp index 5e7df3be7e..a93e469f3f 100644 --- a/core/undo_redo.cpp +++ b/core/undo_redo.cpp @@ -339,3 +339,123 @@ UndoRedo::~UndoRedo() { clear_history(); } + +Variant UndoRedo::_add_do_method(const Variant** p_args, int p_argcount, Variant::CallError& r_error) { + + if (p_argcount<1) { + r_error.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; + r_error.argument=0; + return Variant(); + } + + if (p_args[0]->get_type()!=Variant::OBJECT) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument=0; + r_error.expected=Variant::OBJECT; + return Variant(); + } + + if (p_args[1]->get_type()!=Variant::STRING) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument=1; + r_error.expected=Variant::STRING; + return Variant(); + } + + r_error.error=Variant::CallError::CALL_OK; + + Object* object = *p_args[0]; + String method = *p_args[1]; + + Variant v[VARIANT_ARG_MAX]; + + + for(int i=0;iget_type()!=Variant::OBJECT) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument=0; + r_error.expected=Variant::OBJECT; + return Variant(); + } + + if (p_args[1]->get_type()!=Variant::STRING) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument=1; + r_error.expected=Variant::STRING; + return Variant(); + } + + r_error.error=Variant::CallError::CALL_OK; + + Object* object = *p_args[0]; + String method = *p_args[1]; + + Variant v[VARIANT_ARG_MAX]; + + + for(int i=0;i defargs; + for(int i=0;i defargs; + for(int i=0;i Date: Mon, 22 Jun 2015 00:03:19 -0300 Subject: Multiple scene editing *POTENTIALLY UNSTABLE* -ability to edit multiple scenes at the same time -resource internal IDs are now persistent, this makes multiple scene editing possible but maaaaay result in file corruption bugs (tested and could not find anything but possibility exists because core code changed, report immediately if you find this). -properly save settings, layout, etc when edited -script editing is independent from scene editing now -show a yellow box when a script belongs to the scene --- core/undo_redo.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'core/undo_redo.cpp') diff --git a/core/undo_redo.cpp b/core/undo_redo.cpp index 5e7df3be7e..90ca397275 100644 --- a/core/undo_redo.cpp +++ b/core/undo_redo.cpp @@ -282,6 +282,7 @@ void UndoRedo::undo() { return; //nothing to redo _process_operation_list(actions[current_action].undo_ops.front()); current_action--; + version--; } void UndoRedo::clear_history() { @@ -292,7 +293,7 @@ void UndoRedo::clear_history() { while(actions.size()) _pop_history_tail(); - version++; + //version++; } String UndoRedo::get_current_action_name() const { @@ -326,7 +327,7 @@ void UndoRedo::set_commit_notify_callback(CommitNotifyCallback p_callback,void* UndoRedo::UndoRedo() { - version=0; + version=1; action_level=0; current_action=-1; max_steps=-1; -- cgit v1.2.3 From fafcc52d1cdf13a57fad613944109169b3be5594 Mon Sep 17 00:00:00 2001 From: krzycho Date: Mon, 22 Jun 2015 14:42:52 +0200 Subject: added some missing biddings --- core/undo_redo.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'core/undo_redo.cpp') diff --git a/core/undo_redo.cpp b/core/undo_redo.cpp index a93e469f3f..bb001c9f73 100644 --- a/core/undo_redo.cpp +++ b/core/undo_redo.cpp @@ -458,4 +458,7 @@ void UndoRedo::_bind_methods() { ObjectTypeDB::bind_method(_MD("add_undo_property","object", "property", "value"),&UndoRedo::add_undo_property); ObjectTypeDB::bind_method(_MD("add_do_reference","object"),&UndoRedo::add_do_reference); ObjectTypeDB::bind_method(_MD("add_undo_reference","object"),&UndoRedo::add_undo_reference); + ObjectTypeDB::bind_method(_MD("clear_history"),&UndoRedo::clear_history); + ObjectTypeDB::bind_method(_MD("get_current_action_name"),&UndoRedo::get_current_action_name); + ObjectTypeDB::bind_method(_MD("get_version"),&UndoRedo::get_version); } \ No newline at end of file -- cgit v1.2.3 From 0805e83e59a5dd245176f3ced93cf5f637496bc8 Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Mon, 22 Jun 2015 23:44:13 -0300 Subject: small in place fixes --- core/undo_redo.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'core/undo_redo.cpp') diff --git a/core/undo_redo.cpp b/core/undo_redo.cpp index 53b7078b39..f565070216 100644 --- a/core/undo_redo.cpp +++ b/core/undo_redo.cpp @@ -343,7 +343,7 @@ UndoRedo::~UndoRedo() { Variant UndoRedo::_add_do_method(const Variant** p_args, int p_argcount, Variant::CallError& r_error) { - if (p_argcount<1) { + if (p_argcount<2) { r_error.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; r_error.argument=0; return Variant(); @@ -382,7 +382,7 @@ Variant UndoRedo::_add_do_method(const Variant** p_args, int p_argcount, Variant Variant UndoRedo::_add_undo_method(const Variant** p_args, int p_argcount, Variant::CallError& r_error) { - if (p_argcount<1) { + if (p_argcount<2) { r_error.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; r_error.argument=0; return Variant(); @@ -455,11 +455,11 @@ void UndoRedo::_bind_methods() { ObjectTypeDB::bind_native_method(METHOD_FLAGS_DEFAULT,"add_undo_method",&UndoRedo::_add_undo_method,mi,defargs); } - ObjectTypeDB::bind_method(_MD("add_do_property","object", "property", "value"),&UndoRedo::add_do_property); - ObjectTypeDB::bind_method(_MD("add_undo_property","object", "property", "value"),&UndoRedo::add_undo_property); + ObjectTypeDB::bind_method(_MD("add_do_property","object", "property", "value:var"),&UndoRedo::add_do_property); + ObjectTypeDB::bind_method(_MD("add_undo_property","object", "property", "value:var"),&UndoRedo::add_undo_property); ObjectTypeDB::bind_method(_MD("add_do_reference","object"),&UndoRedo::add_do_reference); ObjectTypeDB::bind_method(_MD("add_undo_reference","object"),&UndoRedo::add_undo_reference); ObjectTypeDB::bind_method(_MD("clear_history"),&UndoRedo::clear_history); ObjectTypeDB::bind_method(_MD("get_current_action_name"),&UndoRedo::get_current_action_name); ObjectTypeDB::bind_method(_MD("get_version"),&UndoRedo::get_version); -} \ No newline at end of file +} -- cgit v1.2.3