| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*  settings_config_dialog.cpp                                           */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*                       This file is part of:                           */ | 
					
						
							|  |  |  | /*                           GODOT ENGINE                                */ | 
					
						
							| 
									
										
										
										
											2017-08-27 14:16:55 +02:00
										 |  |  | /*                      https://godotengine.org                          */ | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2017-01-01 22:01:57 +01:00
										 |  |  | /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur.                 */ | 
					
						
							| 
									
										
										
										
											2017-04-08 00:11:42 +02:00
										 |  |  | /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)    */ | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* Permission is hereby granted, free of charge, to any person obtaining */ | 
					
						
							|  |  |  | /* a copy of this software and associated documentation files (the       */ | 
					
						
							|  |  |  | /* "Software"), to deal in the Software without restriction, including   */ | 
					
						
							|  |  |  | /* without limitation the rights to use, copy, modify, merge, publish,   */ | 
					
						
							|  |  |  | /* distribute, sublicense, and/or sell copies of the Software, and to    */ | 
					
						
							|  |  |  | /* permit persons to whom the Software is furnished to do so, subject to */ | 
					
						
							|  |  |  | /* the following conditions:                                             */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* The above copyright notice and this permission notice shall be        */ | 
					
						
							|  |  |  | /* included in all copies or substantial portions of the Software.       */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       */ | 
					
						
							|  |  |  | /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    */ | 
					
						
							|  |  |  | /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ | 
					
						
							|  |  |  | /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY  */ | 
					
						
							|  |  |  | /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  */ | 
					
						
							|  |  |  | /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE     */ | 
					
						
							|  |  |  | /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | #include "settings_config_dialog.h"
 | 
					
						
							| 
									
										
										
										
											2017-01-16 08:04:19 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | #include "editor_file_system.h"
 | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | #include "editor_node.h"
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | #include "editor_settings.h"
 | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | #include "os/keyboard.h"
 | 
					
						
							| 
									
										
										
										
											2017-07-30 22:53:40 +02:00
										 |  |  | #include "project_settings.h"
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | #include "scene/gui/margin_container.h"
 | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | void EditorSettingsDialog::ok_pressed() { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (!EditorSettings::get_singleton()) | 
					
						
							|  |  |  | 		return; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	_settings_save(); | 
					
						
							|  |  |  | 	timer->stop(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void EditorSettingsDialog::_settings_changed() { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	timer->start(); | 
					
						
							| 
									
										
										
										
											2016-07-18 18:46:16 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | void EditorSettingsDialog::_settings_property_edited(const String &p_name) { | 
					
						
							| 
									
										
										
										
											2016-07-18 18:46:16 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	String full_name = property_editor->get_full_item_path(p_name); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Small usability workaround to update the text color settings when the
 | 
					
						
							|  |  |  | 	// color theme is changed
 | 
					
						
							| 
									
										
										
										
											2017-01-05 19:41:36 -03:00
										 |  |  | 	if (full_name == "text_editor/theme/color_theme") { | 
					
						
							| 
									
										
										
										
											2016-07-18 18:46:16 -03:00
										 |  |  | 		property_editor->get_property_editor()->update_tree(); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void EditorSettingsDialog::_settings_save() { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	EditorSettings::get_singleton()->notify_changes(); | 
					
						
							|  |  |  | 	EditorSettings::get_singleton()->save(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void EditorSettingsDialog::cancel_pressed() { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (!EditorSettings::get_singleton()) | 
					
						
							|  |  |  | 		return; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	EditorSettings::get_singleton()->notify_changes(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void EditorSettingsDialog::popup_edit_settings() { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (!EditorSettings::get_singleton()) | 
					
						
							|  |  |  | 		return; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-12 15:45:31 +01:00
										 |  |  | 	EditorSettings::get_singleton()->list_text_editor_themes(); // make sure we have an up to date list of themes
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	property_editor->edit(EditorSettings::get_singleton()); | 
					
						
							| 
									
										
										
										
											2015-12-15 23:39:36 -03:00
										 |  |  | 	property_editor->get_property_editor()->update_tree(); | 
					
						
							| 
									
										
										
										
											2015-11-21 13:42:15 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-23 16:05:27 -03:00
										 |  |  | 	search_box->select_all(); | 
					
						
							|  |  |  | 	search_box->grab_focus(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 	_update_shortcuts(); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-02 22:43:56 +01:00
										 |  |  | 	// Restore valid window bounds or pop up at default size.
 | 
					
						
							|  |  |  | 	if (EditorSettings::get_singleton()->has("interface/dialogs/editor_settings_bounds")) { | 
					
						
							|  |  |  | 		popup(EditorSettings::get_singleton()->get("interface/dialogs/editor_settings_bounds")); | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		popup_centered_ratio(0.7); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-23 16:05:27 -03:00
										 |  |  | void EditorSettingsDialog::_clear_search_box() { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	if (search_box->get_text() == "") | 
					
						
							| 
									
										
										
										
											2016-01-23 16:05:27 -03:00
										 |  |  | 		return; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	search_box->clear(); | 
					
						
							|  |  |  | 	property_editor->get_property_editor()->update_tree(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-03 14:07:16 +01:00
										 |  |  | void EditorSettingsDialog::_clear_shortcut_search_box() { | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	if (shortcut_search_box->get_text() == "") | 
					
						
							| 
									
										
										
										
											2016-07-03 14:07:16 +01:00
										 |  |  | 		return; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	shortcut_search_box->clear(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | void EditorSettingsDialog::_filter_shortcuts(const String &p_filter) { | 
					
						
							| 
									
										
										
										
											2016-07-03 14:07:16 +01:00
										 |  |  | 	shortcut_filter = p_filter; | 
					
						
							|  |  |  | 	_update_shortcuts(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | void EditorSettingsDialog::_notification(int p_what) { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-02 22:43:56 +01:00
										 |  |  | 	switch (p_what) { | 
					
						
							|  |  |  | 		case NOTIFICATION_ENTER_TREE: { | 
					
						
							|  |  |  | 			clear_button->set_icon(get_icon("Close", "EditorIcons")); | 
					
						
							|  |  |  | 			shortcut_clear_button->set_icon(get_icon("Close", "EditorIcons")); | 
					
						
							|  |  |  | 		} break; | 
					
						
							|  |  |  | 		case NOTIFICATION_POPUP_HIDE: { | 
					
						
							|  |  |  | 			EditorSettings::get_singleton()->set("interface/dialogs/editor_settings_bounds", get_rect()); | 
					
						
							|  |  |  | 		} break; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | void EditorSettingsDialog::_update_shortcuts() { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	shortcuts->clear(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	List<String> slist; | 
					
						
							|  |  |  | 	EditorSettings::get_singleton()->get_shortcut_list(&slist); | 
					
						
							|  |  |  | 	TreeItem *root = shortcuts->create_item(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	Map<String, TreeItem *> sections; | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	for (List<String>::Element *E = slist.front(); E; E = E->next()) { | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		Ref<ShortCut> sc = EditorSettings::get_singleton()->get_shortcut(E->get()); | 
					
						
							|  |  |  | 		if (!sc->has_meta("original")) | 
					
						
							|  |  |  | 			continue; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-20 12:38:03 -03:00
										 |  |  | 		Ref<InputEvent> original = sc->get_meta("original"); | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		String section_name = E->get().get_slice("/", 0); | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		TreeItem *section; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (sections.has(section_name)) { | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 			section = sections[section_name]; | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 		} else { | 
					
						
							|  |  |  | 			section = shortcuts->create_item(root); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 			section->set_text(0, section_name.capitalize()); | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 			sections[section_name] = section; | 
					
						
							|  |  |  | 			section->set_custom_bg_color(0, get_color("prop_subsection", "Editor")); | 
					
						
							|  |  |  | 			section->set_custom_bg_color(1, get_color("prop_subsection", "Editor")); | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-03 17:08:36 +02:00
										 |  |  | 		if (shortcut_filter.is_subsequence_ofi(sc->get_name()) || shortcut_filter.is_subsequence_ofi(sc->get_as_text())) { | 
					
						
							| 
									
										
										
										
											2016-07-03 14:07:16 +01:00
										 |  |  | 			TreeItem *item = shortcuts->create_item(section); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 			item->set_text(0, sc->get_name()); | 
					
						
							|  |  |  | 			item->set_text(1, sc->get_as_text()); | 
					
						
							| 
									
										
										
										
											2017-05-20 12:38:03 -03:00
										 |  |  | 			if (!sc->is_shortcut(original) && !(sc->get_shortcut().is_null() && original.is_null())) { | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 				item->add_button(1, get_icon("Reload", "EditorIcons"), 2); | 
					
						
							| 
									
										
										
										
											2016-07-03 14:07:16 +01:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 			item->add_button(1, get_icon("Edit", "EditorIcons"), 0); | 
					
						
							|  |  |  | 			item->add_button(1, get_icon("Close", "EditorIcons"), 1); | 
					
						
							|  |  |  | 			item->set_tooltip(0, E->get()); | 
					
						
							|  |  |  | 			item->set_metadata(0, E->get()); | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-03 14:07:16 +01:00
										 |  |  | 	// remove sections with no shortcuts
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	for (Map<String, TreeItem *>::Element *E = sections.front(); E; E = E->next()) { | 
					
						
							| 
									
										
										
										
											2016-07-03 14:07:16 +01:00
										 |  |  | 		TreeItem *section = E->get(); | 
					
						
							|  |  |  | 		if (section->get_children() == NULL) { | 
					
						
							|  |  |  | 			root->remove_child(section); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | void EditorSettingsDialog::_shortcut_button_pressed(Object *p_item, int p_column, int p_idx) { | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-24 22:58:51 +02:00
										 |  |  | 	TreeItem *ti = Object::cast_to<TreeItem>(p_item); | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 	ERR_FAIL_COND(!ti); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	String item = ti->get_metadata(0); | 
					
						
							|  |  |  | 	Ref<ShortCut> sc = EditorSettings::get_singleton()->get_shortcut(item); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	if (p_idx == 0) { | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 		press_a_key_label->set_text(TTR("Press a Key..")); | 
					
						
							| 
									
										
										
										
											2017-05-20 12:38:03 -03:00
										 |  |  | 		last_wait_for_key = Ref<InputEventKey>(); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		press_a_key->popup_centered(Size2(250, 80) * EDSCALE); | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 		press_a_key->grab_focus(); | 
					
						
							|  |  |  | 		press_a_key->get_ok()->set_focus_mode(FOCUS_NONE); | 
					
						
							|  |  |  | 		press_a_key->get_cancel()->set_focus_mode(FOCUS_NONE); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		shortcut_configured = item; | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	} else if (p_idx == 1) { //erase
 | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 		if (!sc.is_valid()) | 
					
						
							|  |  |  | 			return; //pointless, there is nothing
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo(); | 
					
						
							|  |  |  | 		ur->create_action("Erase Shortcut"); | 
					
						
							| 
									
										
										
										
											2017-05-20 12:38:03 -03:00
										 |  |  | 		ur->add_do_method(sc.ptr(), "set_shortcut", Ref<InputEvent>()); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		ur->add_undo_method(sc.ptr(), "set_shortcut", sc->get_shortcut()); | 
					
						
							|  |  |  | 		ur->add_do_method(this, "_update_shortcuts"); | 
					
						
							|  |  |  | 		ur->add_undo_method(this, "_update_shortcuts"); | 
					
						
							|  |  |  | 		ur->add_do_method(this, "_settings_changed"); | 
					
						
							|  |  |  | 		ur->add_undo_method(this, "_settings_changed"); | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 		ur->commit_action(); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	} else if (p_idx == 2) { //revert to original
 | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 		if (!sc.is_valid()) | 
					
						
							|  |  |  | 			return; //pointless, there is nothing
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-20 12:38:03 -03:00
										 |  |  | 		Ref<InputEvent> original = sc->get_meta("original"); | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo(); | 
					
						
							|  |  |  | 		ur->create_action("Restore Shortcut"); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		ur->add_do_method(sc.ptr(), "set_shortcut", original); | 
					
						
							|  |  |  | 		ur->add_undo_method(sc.ptr(), "set_shortcut", sc->get_shortcut()); | 
					
						
							|  |  |  | 		ur->add_do_method(this, "_update_shortcuts"); | 
					
						
							|  |  |  | 		ur->add_undo_method(this, "_update_shortcuts"); | 
					
						
							|  |  |  | 		ur->add_do_method(this, "_settings_changed"); | 
					
						
							|  |  |  | 		ur->add_undo_method(this, "_settings_changed"); | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 		ur->commit_action(); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-20 12:38:03 -03:00
										 |  |  | void EditorSettingsDialog::_wait_for_key(const Ref<InputEvent> &p_event) { | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-20 12:38:03 -03:00
										 |  |  | 	Ref<InputEventKey> k = p_event; | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-20 12:38:03 -03:00
										 |  |  | 	if (k.is_valid() && k->is_pressed() && k->get_scancode() != 0) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		last_wait_for_key = k; | 
					
						
							|  |  |  | 		String str = keycode_get_string(k->get_scancode()).capitalize(); | 
					
						
							|  |  |  | 		if (k->get_metakey()) | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 			str = TTR("Meta+") + str; | 
					
						
							| 
									
										
										
										
											2017-05-20 12:38:03 -03:00
										 |  |  | 		if (k->get_shift()) | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 			str = TTR("Shift+") + str; | 
					
						
							| 
									
										
										
										
											2017-05-20 12:38:03 -03:00
										 |  |  | 		if (k->get_alt()) | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 			str = TTR("Alt+") + str; | 
					
						
							| 
									
										
										
										
											2017-05-20 12:38:03 -03:00
										 |  |  | 		if (k->get_control()) | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 			str = TTR("Control+") + str; | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		press_a_key_label->set_text(str); | 
					
						
							|  |  |  | 		press_a_key->accept_event(); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void EditorSettingsDialog::_press_a_key_confirm() { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-20 12:38:03 -03:00
										 |  |  | 	if (last_wait_for_key.is_null()) | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 		return; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-20 12:38:03 -03:00
										 |  |  | 	Ref<InputEventKey> ie; | 
					
						
							|  |  |  | 	ie.instance(); | 
					
						
							|  |  |  | 	ie->set_scancode(last_wait_for_key->get_scancode()); | 
					
						
							|  |  |  | 	ie->set_shift(last_wait_for_key->get_shift()); | 
					
						
							|  |  |  | 	ie->set_control(last_wait_for_key->get_control()); | 
					
						
							|  |  |  | 	ie->set_alt(last_wait_for_key->get_alt()); | 
					
						
							|  |  |  | 	ie->set_metakey(last_wait_for_key->get_metakey()); | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	Ref<ShortCut> sc = EditorSettings::get_singleton()->get_shortcut(shortcut_configured); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo(); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	ur->create_action("Change Shortcut '" + shortcut_configured + "'"); | 
					
						
							|  |  |  | 	ur->add_do_method(sc.ptr(), "set_shortcut", ie); | 
					
						
							|  |  |  | 	ur->add_undo_method(sc.ptr(), "set_shortcut", sc->get_shortcut()); | 
					
						
							|  |  |  | 	ur->add_do_method(this, "_update_shortcuts"); | 
					
						
							|  |  |  | 	ur->add_undo_method(this, "_update_shortcuts"); | 
					
						
							|  |  |  | 	ur->add_do_method(this, "_settings_changed"); | 
					
						
							|  |  |  | 	ur->add_undo_method(this, "_settings_changed"); | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 	ur->commit_action(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | void EditorSettingsDialog::_bind_methods() { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	ClassDB::bind_method(D_METHOD("_settings_save"), &EditorSettingsDialog::_settings_save); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("_settings_changed"), &EditorSettingsDialog::_settings_changed); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("_settings_property_edited"), &EditorSettingsDialog::_settings_property_edited); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("_clear_search_box"), &EditorSettingsDialog::_clear_search_box); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("_clear_shortcut_search_box"), &EditorSettingsDialog::_clear_shortcut_search_box); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("_shortcut_button_pressed"), &EditorSettingsDialog::_shortcut_button_pressed); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("_filter_shortcuts"), &EditorSettingsDialog::_filter_shortcuts); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("_update_shortcuts"), &EditorSettingsDialog::_update_shortcuts); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("_press_a_key_confirm"), &EditorSettingsDialog::_press_a_key_confirm); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("_wait_for_key"), &EditorSettingsDialog::_wait_for_key); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | EditorSettingsDialog::EditorSettingsDialog() { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	set_title(TTR("Editor Settings")); | 
					
						
							| 
									
										
										
										
											2017-03-02 22:43:56 +01:00
										 |  |  | 	set_resizable(true); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	tabs = memnew(TabContainer); | 
					
						
							| 
									
										
										
										
											2017-05-03 05:13:12 +09:00
										 |  |  | 	tabs->set_tab_align(TabContainer::ALIGN_LEFT); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	add_child(tabs); | 
					
						
							| 
									
										
										
										
											2017-01-10 01:49:55 -03:00
										 |  |  | 	//set_child_rect(tabs);
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	VBoxContainer *vbc = memnew(VBoxContainer); | 
					
						
							| 
									
										
										
										
											2016-01-23 16:05:27 -03:00
										 |  |  | 	tabs->add_child(vbc); | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	vbc->set_name(TTR("General")); | 
					
						
							| 
									
										
										
										
											2016-01-23 16:05:27 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	HBoxContainer *hbc = memnew(HBoxContainer); | 
					
						
							| 
									
										
										
										
											2016-01-23 16:05:27 -03:00
										 |  |  | 	hbc->set_h_size_flags(Control::SIZE_EXPAND_FILL); | 
					
						
							|  |  |  | 	vbc->add_child(hbc); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	Label *l = memnew(Label); | 
					
						
							|  |  |  | 	l->set_text(TTR("Search:") + " "); | 
					
						
							| 
									
										
										
										
											2016-01-23 16:05:27 -03:00
										 |  |  | 	hbc->add_child(l); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	search_box = memnew(LineEdit); | 
					
						
							| 
									
										
										
										
											2016-01-23 16:05:27 -03:00
										 |  |  | 	search_box->set_h_size_flags(Control::SIZE_EXPAND_FILL); | 
					
						
							|  |  |  | 	hbc->add_child(search_box); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	clear_button = memnew(ToolButton); | 
					
						
							| 
									
										
										
										
											2016-01-23 16:05:27 -03:00
										 |  |  | 	hbc->add_child(clear_button); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	clear_button->connect("pressed", this, "_clear_search_box"); | 
					
						
							| 
									
										
										
										
											2016-01-23 16:05:27 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	property_editor = memnew(SectionedPropertyEditor); | 
					
						
							| 
									
										
										
										
											2015-12-15 23:39:36 -03:00
										 |  |  | 	//property_editor->hide_top_label();
 | 
					
						
							| 
									
										
										
										
											2016-01-23 16:05:27 -03:00
										 |  |  | 	property_editor->get_property_editor()->set_use_filter(true); | 
					
						
							| 
									
										
										
										
											2017-07-17 21:05:38 -03:00
										 |  |  | 	property_editor->register_search_box(search_box); | 
					
						
							| 
									
										
										
										
											2015-11-21 13:42:15 -03:00
										 |  |  | 	property_editor->set_v_size_flags(Control::SIZE_EXPAND_FILL); | 
					
						
							| 
									
										
										
										
											2016-01-23 16:05:27 -03:00
										 |  |  | 	vbc->add_child(property_editor); | 
					
						
							| 
									
										
										
										
											2016-07-18 18:46:16 -03:00
										 |  |  | 	property_editor->get_property_editor()->connect("property_edited", this, "_settings_property_edited"); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	vbc = memnew(VBoxContainer); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	tabs->add_child(vbc); | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 	vbc->set_name(TTR("Shortcuts")); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	hbc = memnew(HBoxContainer); | 
					
						
							| 
									
										
										
										
											2016-07-03 14:07:16 +01:00
										 |  |  | 	hbc->set_h_size_flags(Control::SIZE_EXPAND_FILL); | 
					
						
							|  |  |  | 	vbc->add_child(hbc); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	l = memnew(Label); | 
					
						
							|  |  |  | 	l->set_text(TTR("Search:") + " "); | 
					
						
							| 
									
										
										
										
											2016-07-03 14:07:16 +01:00
										 |  |  | 	hbc->add_child(l); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	shortcut_search_box = memnew(LineEdit); | 
					
						
							| 
									
										
										
										
											2016-07-03 14:07:16 +01:00
										 |  |  | 	shortcut_search_box->set_h_size_flags(Control::SIZE_EXPAND_FILL); | 
					
						
							|  |  |  | 	hbc->add_child(shortcut_search_box); | 
					
						
							|  |  |  | 	shortcut_search_box->connect("text_changed", this, "_filter_shortcuts"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	shortcut_clear_button = memnew(ToolButton); | 
					
						
							| 
									
										
										
										
											2016-07-03 14:07:16 +01:00
										 |  |  | 	hbc->add_child(shortcut_clear_button); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	shortcut_clear_button->connect("pressed", this, "_clear_shortcut_search_box"); | 
					
						
							| 
									
										
										
										
											2016-07-03 14:07:16 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	shortcuts = memnew(Tree); | 
					
						
							|  |  |  | 	vbc->add_margin_child("Shortcut List:", shortcuts, true); | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 	shortcuts->set_columns(2); | 
					
						
							|  |  |  | 	shortcuts->set_hide_root(true); | 
					
						
							|  |  |  | 	//shortcuts->set_hide_folding(true);
 | 
					
						
							|  |  |  | 	shortcuts->set_column_titles_visible(true); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	shortcuts->set_column_title(0, "Name"); | 
					
						
							|  |  |  | 	shortcuts->set_column_title(1, "Binding"); | 
					
						
							|  |  |  | 	shortcuts->connect("button_pressed", this, "_shortcut_button_pressed"); | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	press_a_key = memnew(ConfirmationDialog); | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 	press_a_key->set_focus_mode(FOCUS_ALL); | 
					
						
							|  |  |  | 	add_child(press_a_key); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	l = memnew(Label); | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 	l->set_text(TTR("Press a Key..")); | 
					
						
							|  |  |  | 	l->set_area_as_parent_rect(); | 
					
						
							|  |  |  | 	l->set_align(Label::ALIGN_CENTER); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	l->set_margin(MARGIN_TOP, 20); | 
					
						
							|  |  |  | 	l->set_anchor_and_margin(MARGIN_BOTTOM, ANCHOR_BEGIN, 30); | 
					
						
							|  |  |  | 	press_a_key_label = l; | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 	press_a_key->add_child(l); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	press_a_key->connect("gui_input", this, "_wait_for_key"); | 
					
						
							|  |  |  | 	press_a_key->connect("confirmed", this, "_press_a_key_confirm"); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-19 00:08:12 +02:00
										 |  |  | 	//get_ok()->set_text("Apply");
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	set_hide_on_ok(true); | 
					
						
							| 
									
										
										
										
											2016-05-19 00:08:12 +02:00
										 |  |  | 	//get_cancel()->set_text("Close");
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	timer = memnew(Timer); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	timer->set_wait_time(1.5); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	timer->connect("timeout", this, "_settings_save"); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	timer->set_one_shot(true); | 
					
						
							|  |  |  | 	add_child(timer); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	EditorSettings::get_singleton()->connect("settings_changed", this, "_settings_changed"); | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	get_ok()->set_text(TTR("Close")); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	updating = false; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | } |