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
This commit is contained in:
Juan Linietsky
2015-06-22 00:04:15 -03:00
parent 37af8b4136
commit e9bbb97acc
37 changed files with 1268 additions and 284 deletions
+173
View File
@@ -424,9 +424,182 @@ void EditorData::remove_custom_type(const String& p_type){
}
int EditorData::add_edited_scene(int p_at_pos) {
if (p_at_pos<0)
p_at_pos=edited_scene.size();
EditedScene es;
es.root=NULL;
es.history_current=-1;
es.version=0;
if (p_at_pos==edited_scene.size())
edited_scene.push_back(es);
else
edited_scene.insert(p_at_pos,es);
if (current_edited_scene<0)
current_edited_scene=0;
return p_at_pos;
}
void EditorData::move_edited_scene_index(int p_idx,int p_to_idx){
ERR_FAIL_INDEX(p_idx,edited_scene.size());
ERR_FAIL_INDEX(p_to_idx,edited_scene.size());
SWAP(edited_scene[p_idx],edited_scene[p_to_idx]);
}
void EditorData::remove_scene(int p_idx){
ERR_FAIL_INDEX(p_idx,edited_scene.size());
if (edited_scene[p_idx].root)
memdelete(edited_scene[p_idx].root);
if (current_edited_scene>p_idx)
current_edited_scene--;
else if (current_edited_scene==p_idx && current_edited_scene>0) {
current_edited_scene--;
}
edited_scene.remove(p_idx);
}
int EditorData::get_edited_scene() const {
return current_edited_scene;
}
void EditorData::set_edited_scene(int p_idx){
ERR_FAIL_INDEX(p_idx,edited_scene.size());
current_edited_scene=p_idx;
//swap
}
Node* EditorData::get_edited_scene_root(){
ERR_FAIL_INDEX_V(current_edited_scene,edited_scene.size(),NULL);
return edited_scene[current_edited_scene].root;
}
void EditorData::set_edited_scene_root(Node* p_root) {
ERR_FAIL_INDEX(current_edited_scene,edited_scene.size());
edited_scene[current_edited_scene].root=p_root;
}
int EditorData::get_edited_scene_count() const {
return edited_scene.size();
}
void EditorData::set_edited_scene_version(uint64_t version) {
ERR_FAIL_INDEX(current_edited_scene,edited_scene.size());
edited_scene[current_edited_scene].version=version;
}
uint64_t EditorData::get_edited_scene_version() const{
ERR_FAIL_INDEX_V(current_edited_scene,edited_scene.size(),0);
return edited_scene[current_edited_scene].version;
}
uint64_t EditorData::get_scene_version(int p_idx) const{
ERR_FAIL_INDEX_V(p_idx,edited_scene.size(),false);
return edited_scene[p_idx].version;
}
String EditorData::get_scene_title(int p_idx) const {
ERR_FAIL_INDEX_V(p_idx,edited_scene.size(),String());
if (!edited_scene[p_idx].root)
return "[empty]";
if (edited_scene[p_idx].root->get_filename()=="")
return "[unsaved]";
return edited_scene[p_idx].root->get_filename().get_file();
}
String EditorData::get_scene_path(int p_idx) const {
ERR_FAIL_INDEX_V(p_idx,edited_scene.size(),String());
if (!edited_scene[p_idx].root)
return "";
return edited_scene[p_idx].root->get_filename();
}
void EditorData::save_edited_scene_state(EditorSelection *p_selection, EditorHistory *p_history, const Dictionary& p_custom) {
ERR_FAIL_INDEX(current_edited_scene,edited_scene.size());
EditedScene &es=edited_scene[current_edited_scene];
es.selection = p_selection->get_selected_node_list();
es.history_current=p_history->current;
es.history_stored=p_history->history;
es.editor_states=get_editor_states();
es.custom_state=p_custom;
}
Dictionary EditorData::restore_edited_scene_state(EditorSelection *p_selection, EditorHistory *p_history) {
ERR_FAIL_INDEX_V(current_edited_scene,edited_scene.size(),Dictionary());
EditedScene &es=edited_scene[current_edited_scene];
p_history->current=es.history_current;
p_history->history=es.history_stored;
p_selection->clear();
for(List<Node*>::Element *E=es.selection.front();E;E=E->next()) {
p_selection->add_node(E->get());
}
set_editor_states(es.editor_states);
return es.custom_state;
}
void EditorData::set_edited_scene_import_metadata(Ref<ResourceImportMetadata> p_mdata) {
ERR_FAIL_INDEX(current_edited_scene,edited_scene.size());
edited_scene[current_edited_scene].medatata=p_mdata;
}
Ref<ResourceImportMetadata> EditorData::get_edited_scene_import_metadata() const{
ERR_FAIL_INDEX_V(current_edited_scene,edited_scene.size(),Ref<ResourceImportMetadata>());
return edited_scene[current_edited_scene].medatata;
}
void EditorData::clear_edited_scenes() {
for(int i=0;i<edited_scene.size();i++) {
if (edited_scene[i].root) {
memdelete( edited_scene[i].root );
}
}
edited_scene.clear();
}
void EditorData::set_plugin_window_layout(Ref<ConfigFile> p_layout) {
for(int i=0;i<editor_plugins.size();i++) {
editor_plugins[i]->set_window_layout(p_layout);
}
}
void EditorData::get_plugin_window_layout(Ref<ConfigFile> p_layout) {
for(int i=0;i<editor_plugins.size();i++) {
editor_plugins[i]->get_window_layout(p_layout);
}
}
EditorData::EditorData() {
current_edited_scene=-1;
// load_imported_scenes_from_globals();
}