From 1b0e2b0c39f5fe36adaee8aa1a2eee39534850c0 Mon Sep 17 00:00:00 2001 From: Rémi Verschelde Date: Sat, 18 Mar 2017 23:45:45 +0100 Subject: Refactoring: rename tools/editor/ to editor/ The other subfolders of tools/ had already been moved to either editor/, misc/ or thirdparty/, so the hiding the editor code that deep was no longer meaningful. (Manual redo of 49c065d29ca07040c3fd810026121164ad86b247) --- editor/editor_data.cpp | 984 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 984 insertions(+) create mode 100644 editor/editor_data.cpp (limited to 'editor/editor_data.cpp') diff --git a/editor/editor_data.cpp b/editor/editor_data.cpp new file mode 100644 index 000000000..25a7290f4 --- /dev/null +++ b/editor/editor_data.cpp @@ -0,0 +1,984 @@ +/*************************************************************************/ +/* editor_data.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ +#include "editor_data.h" +#include "globals.h" +#include "editor_settings.h" +#include "os/dir_access.h" +#include "io/resource_loader.h" +#include "scene/resources/packed_scene.h" +#include "os/file_access.h" +#include "editor_node.h" + +void EditorHistory::_cleanup_history() { + + for(int i=0;i=history.size()) + current=history.size()-1; +} + +void EditorHistory::_add_object(ObjectID p_object,const String& p_property,int p_level_change) { + + Object *obj = ObjectDB::get_instance(p_object); + ERR_FAIL_COND(!obj); + Reference *r = obj->cast_to(); + Obj o; + if (r) + o.ref=REF(r); + o.object=p_object; + o.property=p_property; + + History h; + + bool has_prev = current>=0 && current=history.size()); +} + + +bool EditorHistory::next() { + + + _cleanup_history(); + + if ((current+1)0) + current--; + else + return false; + + return true; +} + +ObjectID EditorHistory::get_current() { + + + if (current<0 || current >=history.size()) + return 0; + + History &h=history[current]; + Object *obj = ObjectDB::get_instance(h.path[h.level].object); + if (!obj) + return 0; + + return obj->get_instance_ID(); +} + +int EditorHistory::get_path_size() const { + + if (current<0 || current >=history.size()) + return 0; + + const History &h=history[current]; + return h.path.size(); + +} + +ObjectID EditorHistory::get_path_object(int p_index) const { + + if (current<0 || current >=history.size()) + return 0; + + const History &h=history[current]; + + ERR_FAIL_INDEX_V(p_index,h.path.size(),0); + + Object *obj = ObjectDB::get_instance(h.path[p_index].object); + if (!obj) + return 0; + + return obj->get_instance_ID(); +} + +String EditorHistory::get_path_property(int p_index) const { + + if (current<0 || current >=history.size()) + return ""; + + const History &h=history[current]; + + ERR_FAIL_INDEX_V(p_index,h.path.size(),""); + + return h.path[p_index].property; + +} + +void EditorHistory::clear() { + + history.clear(); + current=-1; +} + +EditorHistory::EditorHistory() { + + current=-1; +} + +EditorPlugin* EditorData::get_editor(Object *p_object) { + + for (int i=0;ihas_main_screen() && editor_plugins[i]->handles(p_object)) + return editor_plugins[i]; + } + + return NULL; +} + +EditorPlugin* EditorData::get_subeditor(Object *p_object) { + + for (int i=0;ihas_main_screen() && editor_plugins[i]->handles(p_object)) + return editor_plugins[i]; + } + + return NULL; +} + +Vector EditorData::get_subeditors(Object* p_object) { + Vector sub_plugins; + for (int i = 0; i < editor_plugins.size(); i++) { + if (!editor_plugins[i]->has_main_screen() && editor_plugins[i]->handles(p_object)) { + sub_plugins.push_back(editor_plugins[i]); + } + } + return sub_plugins; +} + +EditorPlugin* EditorData::get_editor(String p_name) { + + for(int i=0;iget_name()==p_name) + return editor_plugins[i]; + } + + return NULL; +} + +void EditorData::copy_object_params(Object *p_object) { + + clipboard.clear(); + + List pinfo; + p_object->get_property_list(&pinfo); + + for( List::Element *E=pinfo.front();E;E=E->next()) { + + if (!(E->get().usage&PROPERTY_USAGE_EDITOR)) + continue; + + PropertyData pd; + pd.name=E->get().name; + pd.value=p_object->get(pd.name); + clipboard.push_back(pd); + } +} + +void EditorData::get_editor_breakpoints(List *p_breakpoints) { + + + for(int i=0;iget_breakpoints(p_breakpoints); + } + + +} + +Dictionary EditorData::get_editor_states() const { + + Dictionary metadata; + for(int i=0;iget_state(); + if (state.empty()) + continue; + metadata[editor_plugins[i]->get_name()]=state; + } + + return metadata; + +} + +Dictionary EditorData::get_scene_editor_states(int p_idx) const +{ + ERR_FAIL_INDEX_V(p_idx,edited_scene.size(),Dictionary()); + EditedScene es = edited_scene[p_idx]; + return es.editor_states; +} + +void EditorData::set_editor_states(const Dictionary& p_states) { + + List keys; + p_states.get_key_list(&keys); + + List::Element *E=keys.front(); + for(;E;E=E->next()) { + + String name = E->get(); + int idx=-1; + for(int i=0;iget_name()==name) { + idx=i; + break; + } + } + + if (idx==-1) + continue; + editor_plugins[idx]->set_state(p_states[name]); + } + +} + +void EditorData::notify_edited_scene_changed() { + + for(int i=0;iedited_scene_changed(); + } +} + +void EditorData::clear_editor_states() { + + for(int i=0;iclear(); + } + +} + +void EditorData::save_editor_external_data() { + + for(int i=0;isave_external_data(); + } +} + +void EditorData::apply_changes_in_editors() { + + for(int i=0;iapply_changes(); + } + +} + +void EditorData::save_editor_global_states() { + + for(int i=0;isave_global_state(); + } +} + +void EditorData::restore_editor_global_states(){ + + for(int i=0;irestore_global_state(); + } + +} + + +void EditorData::paste_object_params(Object *p_object) { + + + for( List::Element *E=clipboard.front();E;E=E->next()) { + + p_object->set( E->get().name, E->get().value); + } + +} + + +UndoRedo &EditorData::get_undo_redo() { + + return undo_redo; +} + +void EditorData::remove_editor_plugin(EditorPlugin *p_plugin) { + + p_plugin->undo_redo=NULL; + editor_plugins.erase(p_plugin); + +} + +void EditorData::add_editor_plugin(EditorPlugin *p_plugin) { + + p_plugin->undo_redo=&undo_redo; + editor_plugins.push_back(p_plugin); +} + +int EditorData::get_editor_plugin_count() const { + return editor_plugins.size(); +} +EditorPlugin *EditorData::get_editor_plugin(int p_idx) { + + ERR_FAIL_INDEX_V(p_idx,editor_plugins.size(),NULL); + return editor_plugins[p_idx]; +} + + +void EditorData::add_custom_type(const String& p_type, const String& p_inherits,const Ref