public static void toggle_group_select(CraftData craft) { if (active_craft.Count == 0 || (active_craft.Count == 1 && active_craft[0] == craft)) { toggle_selected(craft); } else { if (craft.group_selected) { craft.group_selected = false; } else { CraftData.group_select(craft); } } if (active_craft.Count == 1) { CraftData.select_craft(active_craft[0]); } }
//listen to key press actions protected virtual void key_event_handler() { Event e = Event.current; //This is somewhat batshit, allow me to explain. Event.current.control only detects the key press, not a key hold, so we used Input.GetKey(..) //but if the focus is on the search text field Input.GetKey won't detect CTRL being held. so...this first bit detects CTRL down while focused on search field //also also sets check_ctrl_key to false so the regular check is skipped. check_ctrl_key is returned to true on key up if (GUI.GetNameOfFocusedControl() == "main_search_field" && e.type == EventType.KeyDown && e.control) { ctrl_key_down = true; check_ctrl_key = false; } if (e.type == EventType.KeyUp) { check_ctrl_key = true; } if (check_ctrl_key) { ctrl_key_down = (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl)); } shift_key_down = (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)); if (e.type == EventType.KeyDown) { //'esc' - close interface if (e.keyCode == KeyCode.Escape) { e.Use(); this.hide(); //'ctrl+f' - focus on main search field } else if ((ctrl_key_down || e.control) && e.keyCode == KeyCode.F) { GUI.FocusControl("main_search_field"); ctrl_key_down = false; e.Use(); //'ctrl+t' - create new tag } else if ((ctrl_key_down || e.control) && e.keyCode == KeyCode.T) { CraftManager.main_ui.create_tag_dialog(true); ctrl_key_down = false; e.Use(); } else if ((ctrl_key_down || e.control) && e.keyCode == KeyCode.A) { foreach (CraftData craft in CraftData.filtered) { CraftData.group_select(craft); } e.Use(); //'up arrow' move up in craft list } else if (e.keyCode == KeyCode.UpArrow && !upload_interface_ready) { jump_to_craft(CraftData.filtered.IndexOf(CraftData.selected_craft) - 1); e.Use(); //'down arrow' move down in craft list } else if (e.keyCode == KeyCode.DownArrow && !upload_interface_ready) { jump_to_craft(CraftData.filtered.IndexOf(CraftData.selected_craft) + 1); e.Use(); //'enter key' - load selected craft (if focus is not on search field) } else if ((e.keyCode == KeyCode.Return || e.keyCode == KeyCode.KeypadEnter) && GUI.GetNameOfFocusedControl() != "main_search_field" && CraftData.selected_craft != null) { load_craft(CraftData.selected_craft.construction_type == "Subassembly" ? "subload" : "load"); //'tab' - move focus from search field to craft list. } else if (GUI.GetNameOfFocusedControl() == "main_search_field" && e.keyCode == KeyCode.Tab) { jump_to_craft(0); e.Use(); } } }