summaryrefslogtreecommitdiff
path: root/scene
diff options
context:
space:
mode:
Diffstat (limited to 'scene')
-rw-r--r--scene/gui/file_dialog.cpp36
-rw-r--r--scene/main/node.cpp51
-rw-r--r--scene/main/node.h3
-rw-r--r--scene/main/scene_main_loop.cpp17
-rw-r--r--scene/main/scene_main_loop.h9
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);