Browse Source

Fix enum values in the editor and hide enum numeric values in the Inspector

- Hide numeric value of enum constants in the inspector (EditorPropertyEnum)
- EditorPropertyEnum, CustomPropertyEditor: Calculate values of enum constants correctly when only some of these constants have explicit values.
Ignacio Etcheverry 7 years ago
parent
commit
57f46f7fcd
2 changed files with 19 additions and 27 deletions
  1. 11 21
      editor/editor_properties.cpp
  2. 8 6
      editor/property_editor.cpp

+ 11 - 21
editor/editor_properties.cpp

@@ -477,33 +477,16 @@ EditorPropertyCheck::EditorPropertyCheck() {
 
 void EditorPropertyEnum::_option_selected(int p_which) {
 
-	String text = options->get_item_text(p_which);
-	Vector<String> text_split = text.split(":");
-	if (text_split.size() == 1) {
-		emit_signal("property_changed", get_edited_property(), p_which);
-		return;
-	}
-	String name = text_split[1];
-	emit_signal("property_changed", get_edited_property(), name.to_int());
+	int val = options->get_item_metadata(p_which);
+	emit_signal("property_changed", get_edited_property(), val);
 }
 
 void EditorPropertyEnum::update_property() {
 
 	int which = get_edited_object()->get(get_edited_property());
-	if (which == 0) {
-		options->select(which);
-		return;
-	}
 
 	for (int i = 0; i < options->get_item_count(); i++) {
-		String text = options->get_item_text(i);
-		Vector<String> text_split = text.split(":");
-		if (text_split.size() == 1) {
-			options->select(which);
-			return;
-		}
-		String name = text_split[1];
-		if (itos(which) == name) {
+		if (which == (int)options->get_item_metadata(i)) {
 			options->select(i);
 			return;
 		}
@@ -511,8 +494,15 @@ void EditorPropertyEnum::update_property() {
 }
 
 void EditorPropertyEnum::setup(const Vector<String> &p_options) {
+
+	int current_val = 0;
 	for (int i = 0; i < p_options.size(); i++) {
-		options->add_item(p_options[i], i);
+		Vector<String> text_split = p_options[i].split(":");
+		if (text_split.size() != 1)
+			current_val = text_split[1].to_int();
+		options->add_item(text_split[0]);
+		options->set_item_metadata(i, current_val);
+		current_val += 1;
 	}
 }
 

+ 8 - 6
editor/property_editor.cpp

@@ -132,7 +132,7 @@ void CustomPropertyEditor::_menu_option(int p_which) {
 				emit_signal("variant_changed");
 			} else if (hint == PROPERTY_HINT_ENUM) {
 
-				v = p_which;
+				v = menu->get_item_metadata(p_which);
 				emit_signal("variant_changed");
 			}
 		} break;
@@ -427,12 +427,14 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant::
 			} else if (hint == PROPERTY_HINT_ENUM) {
 
 				Vector<String> options = hint_text.split(",");
+				int current_val = 0;
 				for (int i = 0; i < options.size(); i++) {
-					if (options[i].find(":") != -1) {
-						menu->add_item(options[i].get_slicec(':', 0), options[i].get_slicec(':', 1).to_int());
-					} else {
-						menu->add_item(options[i], i);
-					}
+					Vector<String> text_split = options[i].split(":");
+					if (text_split.size() != 1)
+						current_val = text_split[1].to_int();
+					menu->add_item(text_split[0]);
+					menu->set_item_metadata(i, current_val);
+					current_val += 1;
 				}
 				menu->set_position(get_position());
 				menu->popup();