diff options
Diffstat (limited to 'scene')
-rw-r--r-- | scene/gui/file_dialog.cpp | 36 | ||||
-rw-r--r-- | scene/main/node.cpp | 51 | ||||
-rw-r--r-- | scene/main/node.h | 3 | ||||
-rw-r--r-- | scene/main/scene_main_loop.cpp | 17 | ||||
-rw-r--r-- | scene/main/scene_main_loop.h | 9 |
5 files changed, 62 insertions, 54 deletions
diff --git a/scene/gui/file_dialog.cpp b/scene/gui/file_dialog.cpp index 705ce55d42..732cbb8e72 100644 --- a/scene/gui/file_dialog.cpp +++ b/scene/gui/file_dialog.cpp @@ -258,7 +258,7 @@ void FileDialog::_action_pressed() { } if (dir_access->file_exists(f)) { - confirm_save->set_text("File Exists, Overwrite?"); + confirm_save->set_text(RTR("File Exists, Overwrite?")); confirm_save->popup_centered(Size2(200,80)); } else { @@ -463,7 +463,7 @@ void FileDialog::update_filters() { if (max_filters<filters.size()) all_filters+=", ..."; - filter->add_item("All Recognized ( "+all_filters+" )"); + filter->add_item(RTR("All Recognized")+" ( "+all_filters+" )"); } for(int i=0;i<filters.size();i++) { @@ -475,7 +475,7 @@ void FileDialog::update_filters() { filter->add_item("( "+flt+" )"); } - filter->add_item("All Files (*)"); + filter->add_item(RTR("All Files (*)")); } @@ -548,11 +548,11 @@ void FileDialog::set_mode(Mode p_mode) { mode=p_mode; switch(mode) { - case MODE_OPEN_FILE: get_ok()->set_text("Open"); set_title("Open a File"); makedir->hide(); break; - case MODE_OPEN_FILES: get_ok()->set_text("Open"); set_title("Open File(s)"); makedir->hide(); break; - case MODE_OPEN_DIR: get_ok()->set_text("Open"); set_title("Open a Directory"); makedir->show(); break; - case MODE_OPEN_ANY: get_ok()->set_text("Open"); set_title("Open a File or Directory"); makedir->show(); break; - case MODE_SAVE_FILE: get_ok()->set_text("Save"); set_title("Save a File"); makedir->show(); break; + case MODE_OPEN_FILE: get_ok()->set_text(RTR("Open")); set_title(RTR("Open a File")); makedir->hide(); break; + case MODE_OPEN_FILES: get_ok()->set_text(RTR("Open")); set_title(RTR("Open File(s)")); makedir->hide(); break; + case MODE_OPEN_DIR: get_ok()->set_text(RTR("Open")); set_title(RTR("Open a Directory")); makedir->show(); break; + case MODE_OPEN_ANY: get_ok()->set_text(RTR("Open")); set_title(RTR("Open a File or Directory")); makedir->show(); break; + case MODE_SAVE_FILE: get_ok()->set_text(RTR("Save")); set_title(RTR("Save a File")); makedir->show(); break; } if (mode==MODE_OPEN_FILES) { @@ -742,7 +742,7 @@ FileDialog::FileDialog() { set_child_rect(vbc); mode=MODE_SAVE_FILE; - set_title("Save a File"); + set_title(RTR("Save a File")); dir = memnew(LineEdit); HBoxContainer *pathhb = memnew( HBoxContainer ); @@ -758,24 +758,24 @@ FileDialog::FileDialog() { drives->connect("item_selected",this,"_select_drive"); makedir = memnew( Button ); - makedir->set_text("Create Folder"); + makedir->set_text(RTR("Create Folder")); makedir->connect("pressed",this,"_make_dir"); pathhb->add_child(makedir); - vbc->add_margin_child("Path:",pathhb); + vbc->add_margin_child(RTR("Path:"),pathhb); tree = memnew(Tree); tree->set_hide_root(true); - vbc->add_margin_child("Directories & Files:",tree,true); + vbc->add_margin_child(RTR("Directories & Files:"),tree,true); file = memnew(LineEdit); //add_child(file); - vbc->add_margin_child("File:",file); + vbc->add_margin_child(RTR("File:"),file); filter = memnew( OptionButton ); //add_child(filter); - vbc->add_margin_child("Filter:",filter); + vbc->add_margin_child(RTR("Filter:"),filter); filter->set_clip_text(true);//too many extensions overflow it dir_access = DirAccess::create(DirAccess::ACCESS_RESOURCES); @@ -800,21 +800,21 @@ FileDialog::FileDialog() { confirm_save->connect("confirmed", this,"_save_confirm_pressed"); makedialog = memnew( ConfirmationDialog ); - makedialog->set_title("Create Folder"); + makedialog->set_title(RTR("Create Folder")); VBoxContainer *makevb= memnew( VBoxContainer ); makedialog->add_child(makevb); makedialog->set_child_rect(makevb); makedirname = memnew( LineEdit ); - makevb->add_margin_child("Name:",makedirname); + makevb->add_margin_child(RTR("Name:"),makedirname); add_child(makedialog); makedialog->register_text_enter(makedirname); makedialog->connect("confirmed",this,"_make_dir_confirm"); mkdirerr = memnew( AcceptDialog ); - mkdirerr->set_text("Could not create folder."); + mkdirerr->set_text(RTR("Could not create folder.")); add_child(mkdirerr); exterr = memnew( AcceptDialog ); - exterr->set_text("Must use a valid extension."); + exterr->set_text(RTR("Must use a valid extension.")); add_child(exterr); diff --git a/scene/main/node.cpp b/scene/main/node.cpp index 29925b62f5..f8af83e23b 100644 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -168,11 +168,8 @@ void Node::_propagate_enter_tree() { data.inside_tree=true; - const StringName *K=NULL; - - while ((K=data.grouped.next(K))) { - - data.tree->add_to_group(*K,this); + for (Map< StringName, GroupData>::Element *E=data.grouped.front();E;E=E->next()) { + E->get().group=data.tree->add_to_group(E->key(),this); } @@ -257,13 +254,13 @@ void Node::_propagate_exit_tree() { data.tree->node_removed(this); // exit groups - const StringName *K=NULL; - while ((K=data.grouped.next(K))) { - - data.tree->remove_from_group(*K,this); + for (Map< StringName, GroupData>::Element *E=data.grouped.front();E;E=E->next()) { + data.tree->remove_from_group(E->key(),this); + E->get().group=NULL; } + data.viewport = NULL; if (data.tree) @@ -307,6 +304,9 @@ void Node::move_child(Node *p_child,int p_pos) { data.children[i]->notification( NOTIFICATION_MOVED_IN_PARENT ); } + for (const Map< StringName, GroupData>::Element *E=p_child->data.grouped.front();E;E=E->next()) { + E->get().group->changed=true; + } data.blocked--; @@ -1193,8 +1193,12 @@ void Node::add_to_group(const StringName& p_identifier,bool p_persistent) { GroupData gd; - if (data.tree) - data.tree->add_to_group(p_identifier,this); + SceneTree::Group *gptr=NULL; + if (data.tree) { + gd.group=data.tree->add_to_group(p_identifier,this); + } else { + gd.group=NULL; + } gd.persistent=p_persistent; @@ -1207,14 +1211,15 @@ void Node::remove_from_group(const StringName& p_identifier) { ERR_FAIL_COND(!data.grouped.has(p_identifier) ); - GroupData *g=data.grouped.getptr(p_identifier); - ERR_FAIL_COND(!g); + Map< StringName, GroupData>::Element *E=data.grouped.find(p_identifier); + + ERR_FAIL_COND(!E); if (data.tree) - data.tree->remove_from_group(p_identifier,this); + data.tree->remove_from_group(E->key(),this); - data.grouped.erase(p_identifier); + data.grouped.erase(E); } @@ -1232,13 +1237,11 @@ Array Node::_get_groups() const { void Node::get_groups(List<GroupInfo> *p_groups) const { - const StringName *K=NULL; - - while ((K=data.grouped.next(K))) { + for (const Map< StringName, GroupData>::Element *E=data.grouped.front();E;E=E->next()) { GroupInfo gi; - gi.name=*K; - gi.persistent=data.grouped[*K].persistent; + gi.name=E->key(); + gi.persistent=E->get().persistent; p_groups->push_back(gi); } @@ -1246,16 +1249,16 @@ void Node::get_groups(List<GroupInfo> *p_groups) const { bool Node::has_persistent_groups() const { - const StringName *K=NULL; - while ((K=data.grouped.next(K))) { - - if (data.grouped[*K].persistent) + for (const Map< StringName, GroupData>::Element *E=data.grouped.front();E;E=E->next()) { + if (E->get().persistent) return true; } + return false; + } void Node::_print_tree(const Node *p_node) { diff --git a/scene/main/node.h b/scene/main/node.h index cf62e7cdea..d099f6e773 100644 --- a/scene/main/node.h +++ b/scene/main/node.h @@ -64,6 +64,7 @@ private: struct GroupData { bool persistent; + SceneTree::Group *group; GroupData() { persistent=false; } }; @@ -91,7 +92,7 @@ private: Viewport *viewport; - HashMap< StringName, GroupData,StringNameHasher> grouped; + Map< StringName, GroupData> grouped; List<Node*>::Element *OW; // owned element List<Node*> owned; diff --git a/scene/main/scene_main_loop.cpp b/scene/main/scene_main_loop.cpp index d7f22c3228..a7ef7ca7c1 100644 --- a/scene/main/scene_main_loop.cpp +++ b/scene/main/scene_main_loop.cpp @@ -64,7 +64,7 @@ void SceneTree::node_removed(Node *p_node) { } -void SceneTree::add_to_group(const StringName& p_group, Node *p_node) { +SceneTree::Group *SceneTree::add_to_group(const StringName& p_group, Node *p_node) { Map<StringName,Group>::Element *E=group_map.find(p_group); if (!E) { @@ -73,10 +73,12 @@ void SceneTree::add_to_group(const StringName& p_group, Node *p_node) { if (E->get().nodes.find(p_node)!=-1) { ERR_EXPLAIN("Already in group: "+p_group); - ERR_FAIL(); + ERR_FAIL_V(&E->get()); } E->get().nodes.push_back(p_node); - E->get().last_tree_version=0; + //E->get().last_tree_version=0; + E->get().changed=true; + return &E->get(); } void SceneTree::remove_from_group(const StringName& p_group, Node *p_node) { @@ -125,7 +127,7 @@ void SceneTree::_flush_ugc() { void SceneTree::_update_group_order(Group& g) { - if (g.last_tree_version==tree_version) + if (!g.changed) return; if (g.nodes.empty()) return; @@ -135,7 +137,8 @@ void SceneTree::_update_group_order(Group& g) { SortArray<Node*,Node::Comparator> node_sort; node_sort.sort(nodes,node_count); - g.last_tree_version=tree_version; + g.changed=false; + } @@ -148,8 +151,6 @@ void SceneTree::call_group(uint32_t p_call_flags,const StringName& p_group,const if (g.nodes.empty()) return; - _update_group_order(g); - if (p_call_flags&GROUP_CALL_UNIQUE && !(p_call_flags&GROUP_CALL_REALTIME)) { @@ -175,6 +176,8 @@ void SceneTree::call_group(uint32_t p_call_flags,const StringName& p_group,const return; } + _update_group_order(g); + Vector<Node*> nodes_copy = g.nodes; Node **nodes = &nodes_copy[0]; int node_count=nodes_copy.size(); diff --git a/scene/main/scene_main_loop.h b/scene/main/scene_main_loop.h index 5fc9e0c1ae..15604a3460 100644 --- a/scene/main/scene_main_loop.h +++ b/scene/main/scene_main_loop.h @@ -76,8 +76,9 @@ private: struct Group { Vector<Node*> nodes; - uint64_t last_tree_version; - Group() { last_tree_version=0; }; + //uint64_t last_tree_version; + bool changed; + Group() { changed=false; }; }; Viewport *root; @@ -135,7 +136,7 @@ private: void _flush_ugc(); void _flush_transform_notifications(); - void _update_group_order(Group& g); + _FORCE_INLINE_ void _update_group_order(Group& g); void _update_listener(); Array _get_nodes_in_group(const StringName& p_group); @@ -162,7 +163,7 @@ friend class Node; void node_removed(Node *p_node); - void add_to_group(const StringName& p_group, Node *p_node); + Group* add_to_group(const StringName& p_group, Node *p_node); void remove_from_group(const StringName& p_group, Node *p_node); void _notify_group_pause(const StringName& p_group,int p_notification); |