Browse Source

Move the deadzone to a column in the input project settings

Gilles Roudiere 7 years ago
parent
commit
6daed7d122
2 changed files with 82 additions and 78 deletions
  1. 82 76
      editor/project_settings_editor.cpp
  2. 0 2
      editor/project_settings_editor.h

+ 82 - 76
editor/project_settings_editor.cpp

@@ -149,53 +149,71 @@ void ProjectSettingsEditor::_action_edited() {
 	if (!ti)
 	if (!ti)
 		return;
 		return;
 
 
-	String new_name = ti->get_text(0);
-	String old_name = add_at.substr(add_at.find("/") + 1, add_at.length());
+	if (input_editor->get_selected_column() == 0) {
 
 
-	if (new_name == old_name)
-		return;
+		String new_name = ti->get_text(0);
+		String old_name = add_at.substr(add_at.find("/") + 1, add_at.length());
 
 
-	if (new_name == "" || !_validate_action_name(new_name)) {
+		if (new_name == old_name)
+			return;
 
 
-		ti->set_text(0, old_name);
-		add_at = "input/" + old_name;
+		if (new_name == "" || !_validate_action_name(new_name)) {
 
 
-		message->set_text(TTR("Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or '\"'."));
-		message->popup_centered(Size2(300, 100) * EDSCALE);
-		return;
-	}
+			ti->set_text(0, old_name);
+			add_at = "input/" + old_name;
 
 
-	String action_prop = "input/" + new_name;
+			message->set_text(TTR("Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or '\"'"));
+			message->popup_centered(Size2(300, 100) * EDSCALE);
+			return;
+		}
 
 
-	if (ProjectSettings::get_singleton()->has_setting(action_prop)) {
+		String action_prop = "input/" + new_name;
 
 
-		ti->set_text(0, old_name);
-		add_at = "input/" + old_name;
+		if (ProjectSettings::get_singleton()->has_setting(action_prop)) {
 
 
-		message->set_text(vformat(TTR("Action '%s' already exists!"), new_name));
-		message->popup_centered(Size2(300, 100) * EDSCALE);
-		return;
-	}
+			ti->set_text(0, old_name);
+			add_at = "input/" + old_name;
 
 
-	int order = ProjectSettings::get_singleton()->get_order(add_at);
-	Dictionary action = ProjectSettings::get_singleton()->get(add_at);
-
-	setting = true;
-	undo_redo->create_action(TTR("Rename Input Action Event"));
-	undo_redo->add_do_method(ProjectSettings::get_singleton(), "clear", add_at);
-	undo_redo->add_do_method(ProjectSettings::get_singleton(), "set", action_prop, action);
-	undo_redo->add_do_method(ProjectSettings::get_singleton(), "set_order", action_prop, order);
-	undo_redo->add_undo_method(ProjectSettings::get_singleton(), "clear", action_prop);
-	undo_redo->add_undo_method(ProjectSettings::get_singleton(), "set", add_at, action);
-	undo_redo->add_undo_method(ProjectSettings::get_singleton(), "set_order", add_at, order);
-	undo_redo->add_do_method(this, "_update_actions");
-	undo_redo->add_undo_method(this, "_update_actions");
-	undo_redo->add_do_method(this, "_settings_changed");
-	undo_redo->add_undo_method(this, "_settings_changed");
-	undo_redo->commit_action();
-	setting = false;
+			message->set_text(vformat(TTR("Action '%s' already exists!"), new_name));
+			message->popup_centered(Size2(300, 100) * EDSCALE);
+			return;
+		}
 
 
-	add_at = action_prop;
+		int order = ProjectSettings::get_singleton()->get_order(add_at);
+		Dictionary action = ProjectSettings::get_singleton()->get(add_at);
+
+		setting = true;
+		undo_redo->create_action(TTR("Rename Input Action Event"));
+		undo_redo->add_do_method(ProjectSettings::get_singleton(), "clear", add_at);
+		undo_redo->add_do_method(ProjectSettings::get_singleton(), "set", action_prop, action);
+		undo_redo->add_do_method(ProjectSettings::get_singleton(), "set_order", action_prop, order);
+		undo_redo->add_undo_method(ProjectSettings::get_singleton(), "clear", action_prop);
+		undo_redo->add_undo_method(ProjectSettings::get_singleton(), "set", add_at, action);
+		undo_redo->add_undo_method(ProjectSettings::get_singleton(), "set_order", add_at, order);
+		undo_redo->add_do_method(this, "_update_actions");
+		undo_redo->add_undo_method(this, "_update_actions");
+		undo_redo->add_do_method(this, "_settings_changed");
+		undo_redo->add_undo_method(this, "_settings_changed");
+		undo_redo->commit_action();
+		setting = false;
+
+		add_at = action_prop;
+	} else if (input_editor->get_selected_column() == 1) {
+
+		String name = "input/" + ti->get_text(0);
+		Dictionary old_action = ProjectSettings::get_singleton()->get(name);
+		Dictionary new_action = old_action.duplicate();
+		new_action["deadzone"] = ti->get_range(1);
+
+		undo_redo->create_action(TTR("Change Action deadzone"));
+		undo_redo->add_do_method(ProjectSettings::get_singleton(), "set", name, new_action);
+		undo_redo->add_do_method(this, "_update_actions");
+		undo_redo->add_do_method(this, "_settings_changed");
+		undo_redo->add_undo_method(ProjectSettings::get_singleton(), "set", name, old_action);
+		undo_redo->add_undo_method(this, "_update_actions");
+		undo_redo->add_undo_method(this, "_settings_changed");
+		undo_redo->commit_action();
+	}
 }
 }
 
 
 void ProjectSettingsEditor::_device_input_add() {
 void ProjectSettingsEditor::_device_input_add() {
@@ -237,24 +255,18 @@ void ProjectSettingsEditor::_device_input_add() {
 			jm->set_axis_value(device_index->get_selected() & 1 ? 1 : -1);
 			jm->set_axis_value(device_index->get_selected() & 1 ? 1 : -1);
 			jm->set_device(_get_current_device());
 			jm->set_device(_get_current_device());
 
 
-			bool should_update_event = true;
-			Variant deadzone = device_special_value->get_value();
 			for (int i = 0; i < events.size(); i++) {
 			for (int i = 0; i < events.size(); i++) {
 
 
 				Ref<InputEventJoypadMotion> aie = events[i];
 				Ref<InputEventJoypadMotion> aie = events[i];
 				if (aie.is_null())
 				if (aie.is_null())
 					continue;
 					continue;
+
 				if (aie->get_device() == jm->get_device() && aie->get_axis() == jm->get_axis() && aie->get_axis_value() == jm->get_axis_value()) {
 				if (aie->get_device() == jm->get_device() && aie->get_axis() == jm->get_axis() && aie->get_axis_value() == jm->get_axis_value()) {
-					should_update_event = false;
-					break;
+					return;
 				}
 				}
 			}
 			}
 
 
-			if (!should_update_event && deadzone == action["deadzone"])
-				return;
-
 			ie = jm;
 			ie = jm;
-			action["deadzone"] = deadzone;
 
 
 		} break;
 		} break;
 		case INPUT_JOY_BUTTON: {
 		case INPUT_JOY_BUTTON: {
@@ -430,8 +442,6 @@ void ProjectSettingsEditor::_add_item(int p_item, Ref<InputEvent> p_exiting_even
 			press_a_key->popup_centered(Size2(250, 80) * EDSCALE);
 			press_a_key->popup_centered(Size2(250, 80) * EDSCALE);
 			press_a_key->grab_focus();
 			press_a_key->grab_focus();
 
 
-			device_special_value_label->hide();
-			device_special_value->hide();
 		} break;
 		} break;
 		case INPUT_MOUSE_BUTTON: {
 		case INPUT_MOUSE_BUTTON: {
 
 
@@ -458,8 +468,6 @@ void ProjectSettingsEditor::_add_item(int p_item, Ref<InputEvent> p_exiting_even
 				device_input->get_ok()->set_text(TTR("Add"));
 				device_input->get_ok()->set_text(TTR("Add"));
 			}
 			}
 
 
-			device_special_value_label->hide();
-			device_special_value->hide();
 		} break;
 		} break;
 		case INPUT_JOY_MOTION: {
 		case INPUT_JOY_MOTION: {
 
 
@@ -482,14 +490,6 @@ void ProjectSettingsEditor::_add_item(int p_item, Ref<InputEvent> p_exiting_even
 				device_input->get_ok()->set_text(TTR("Add"));
 				device_input->get_ok()->set_text(TTR("Add"));
 			}
 			}
 
 
-			device_special_value_label->set_text(TTR("Deadzone (global to the action):"));
-			device_special_value_label->show();
-			device_special_value->set_min(0.0f);
-			device_special_value->set_max(1.0f);
-			device_special_value->set_step(0.01f);
-			Dictionary action = ProjectSettings::get_singleton()->get(add_at);
-			device_special_value->set_value(action.has("deadzone") ? action["deadzone"] : Variant(0.5f));
-			device_special_value->show();
 		} break;
 		} break;
 		case INPUT_JOY_BUTTON: {
 		case INPUT_JOY_BUTTON: {
 
 
@@ -512,8 +512,6 @@ void ProjectSettingsEditor::_add_item(int p_item, Ref<InputEvent> p_exiting_even
 				device_input->get_ok()->set_text(TTR("Add"));
 				device_input->get_ok()->set_text(TTR("Add"));
 			}
 			}
 
 
-			device_special_value_label->hide();
-			device_special_value->hide();
 		} break;
 		} break;
 		default: {}
 		default: {}
 	}
 	}
@@ -673,17 +671,24 @@ void ProjectSettingsEditor::_update_actions() {
 		if (name == "")
 		if (name == "")
 			continue;
 			continue;
 
 
+		Dictionary action = ProjectSettings::get_singleton()->get(pi.name);
+		Array events = action["events"];
+
 		TreeItem *item = input_editor->create_item(root);
 		TreeItem *item = input_editor->create_item(root);
 		item->set_text(0, name);
 		item->set_text(0, name);
-		item->add_button(0, get_icon("Add", "EditorIcons"), 1, false, TTR("Add Event"));
-		if (!ProjectSettings::get_singleton()->get_input_presets().find(pi.name)) {
-			item->add_button(0, get_icon("Remove", "EditorIcons"), 2, false, TTR("Remove"));
-			item->set_editable(0, true);
-		}
 		item->set_custom_bg_color(0, get_color("prop_subsection", "Editor"));
 		item->set_custom_bg_color(0, get_color("prop_subsection", "Editor"));
 
 
-		Dictionary action = ProjectSettings::get_singleton()->get(pi.name);
-		Array events = action["events"];
+		item->set_editable(1, true);
+		item->set_cell_mode(1, TreeItem::CELL_MODE_RANGE);
+		item->set_range_config(1, 0.0, 1.0, 0.01);
+		item->set_range(1, action["deadzone"]);
+		item->set_custom_bg_color(1, get_color("prop_subsection", "Editor"));
+
+		item->add_button(2, get_icon("Add", "EditorIcons"), 1, false, TTR("Add Event"));
+		if (!ProjectSettings::get_singleton()->get_input_presets().find(pi.name)) {
+			item->add_button(2, get_icon("Remove", "EditorIcons"), 2, false, TTR("Remove"));
+			item->set_editable(2, true);
+		}
 
 
 		for (int i = 0; i < events.size(); i++) {
 		for (int i = 0; i < events.size(); i++) {
 
 
@@ -752,10 +757,11 @@ void ProjectSettingsEditor::_update_actions() {
 				action->set_text(0, str);
 				action->set_text(0, str);
 				action->set_icon(0, get_icon("JoyAxis", "EditorIcons"));
 				action->set_icon(0, get_icon("JoyAxis", "EditorIcons"));
 			}
 			}
-			action->add_button(0, get_icon("Edit", "EditorIcons"), 3, false, TTR("Edit"));
-			action->add_button(0, get_icon("Remove", "EditorIcons"), 2, false, TTR("Remove"));
 			action->set_metadata(0, i);
 			action->set_metadata(0, i);
 			action->set_meta("__input", event);
 			action->set_meta("__input", event);
+
+			action->add_button(2, get_icon("Edit", "EditorIcons"), 3, false, TTR("Edit"));
+			action->add_button(2, get_icon("Remove", "EditorIcons"), 2, false, TTR("Remove"));
 		}
 		}
 	}
 	}
 
 
@@ -1790,6 +1796,14 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) {
 	input_editor = memnew(Tree);
 	input_editor = memnew(Tree);
 	vbc->add_child(input_editor);
 	vbc->add_child(input_editor);
 	input_editor->set_v_size_flags(SIZE_EXPAND_FILL);
 	input_editor->set_v_size_flags(SIZE_EXPAND_FILL);
+	input_editor->set_columns(3);
+	input_editor->set_column_titles_visible(true);
+	input_editor->set_column_title(0, TTR("Action"));
+	input_editor->set_column_title(1, TTR("Deadzone"));
+	input_editor->set_column_expand(1, false);
+	input_editor->set_column_min_width(1, 80);
+	input_editor->set_column_expand(2, false);
+	input_editor->set_column_min_width(2, 50);
 	input_editor->connect("item_edited", this, "_action_edited");
 	input_editor->connect("item_edited", this, "_action_edited");
 	input_editor->connect("item_activated", this, "_action_activated");
 	input_editor->connect("item_activated", this, "_action_activated");
 	input_editor->connect("cell_selected", this, "_action_selected");
 	input_editor->connect("cell_selected", this, "_action_selected");
@@ -1846,14 +1860,6 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) {
 	device_index = memnew(OptionButton);
 	device_index = memnew(OptionButton);
 	vbc_right->add_child(device_index);
 	vbc_right->add_child(device_index);
 
 
-	l = memnew(Label);
-	l->set_text(TTR("Special value:"));
-	vbc_right->add_child(l);
-	device_special_value_label = l;
-
-	device_special_value = memnew(SpinBox);
-	vbc_right->add_child(device_special_value);
-
 	setting = false;
 	setting = false;
 
 
 	//translations
 	//translations

+ 0 - 2
editor/project_settings_editor.h

@@ -83,8 +83,6 @@ class ProjectSettingsEditor : public AcceptDialog {
 	OptionButton *device_id;
 	OptionButton *device_id;
 	OptionButton *device_index;
 	OptionButton *device_index;
 	Label *device_index_label;
 	Label *device_index_label;
-	SpinBox *device_special_value;
-	Label *device_special_value_label;
 	MenuButton *popup_copy_to_feature;
 	MenuButton *popup_copy_to_feature;
 
 
 	LineEdit *action_name;
 	LineEdit *action_name;