Browse Source

Merge pull request #1181 from adolson/duplicate-node-naming-prefs

fix naming of duplicated nodes, closes #1161
Juan Linietsky 10 years ago
parent
commit
cdf3c5b0eb
2 changed files with 23 additions and 5 deletions
  1. 4 0
      tools/editor/editor_settings.cpp
  2. 19 5
      tools/editor/scene_tree_dock.cpp

+ 4 - 0
tools/editor/editor_settings.cpp

@@ -414,6 +414,10 @@ void EditorSettings::_load_defaults() {
 	set("text_editor/auto_brace_complete", false);
 
 
+	set("scenetree_editor/duplicate_node_name_num_separator",0);
+	hints["scenetree_editor/duplicate_node_name_num_separator"]=PropertyInfo(Variant::INT,"scenetree_editor/duplicate_node_name_num_separator",PROPERTY_HINT_ENUM, "None,Space,Underscore,Dash");
+
+
 	set("3d_editor/default_fov",45.0);
 	set("3d_editor/default_z_near",0.1);
 	set("3d_editor/default_z_far",500.0);

+ 19 - 5
tools/editor/scene_tree_dock.cpp

@@ -100,6 +100,16 @@ Node* SceneTreeDock::instance(const String& p_file) {
 
 }
 
+static String _get_name_num_separator() {
+	switch(EditorSettings::get_singleton()->get("scenetree_editor/duplicate_node_name_num_separator").operator int()) {
+		case 0: return "";
+		case 1: return " ";
+		case 2: return "_";
+		case 3: return "-";
+	}
+	return " ";
+}
+
 void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
 
 	current_option=p_tool;
@@ -318,17 +328,21 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
 				}
 
 				int num=nums.to_int();
-				if (num<2)
-					num=2;
+				if (num<1)
+					num=1;
 				else
 					num++;
 
-				name=name.substr(0,name.length()-nums.length()).strip_edges();
-				String attempt=name+" "+itos(num);
+				String nnsep = _get_name_num_separator();
+				name = name.substr(0,name.length()-nums.length()).strip_edges();
+				if ( name.substr(name.length()-nnsep.length(),nnsep.length()) == nnsep) {
+					name = name.substr(0,name.length()-nnsep.length());
+				}
+				String attempt = (name + nnsep + itos(num)).strip_edges();
 
 				while(parent->has_node(attempt)) {
 					num++;
-					attempt=name+" "+itos(num);
+					attempt = (name + nnsep + itos(num)).strip_edges();
 				}
 
 				dup->set_name(attempt);