| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*  quick_open.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
										 |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2019-01-01 12:53:14 +01:00
										 |  |  | /* Copyright (c) 2007-2019 Juan Linietsky, Ariel Manzur.                 */ | 
					
						
							|  |  |  | /* Copyright (c) 2014-2019 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.                */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2018-01-05 00:50:27 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | #include "quick_open.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 18:13:45 +02:00
										 |  |  | #include "core/os/keyboard.h"
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-02 12:07:44 +02:00
										 |  |  | void EditorQuickOpen::popup_dialog(const StringName &p_base, bool p_enable_multi, bool p_add_dirs, bool p_dontclear) { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	add_directories = p_add_dirs; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	popup_centered_ratio(0.6); | 
					
						
							|  |  |  | 	if (p_dontclear) | 
					
						
							|  |  |  | 		search_box->select_all(); | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 		search_box->clear(); | 
					
						
							| 
									
										
										
										
											2016-01-08 08:27:34 -03:00
										 |  |  | 	if (p_enable_multi) | 
					
						
							|  |  |  | 		search_options->set_select_mode(Tree::SELECT_MULTI); | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 		search_options->set_select_mode(Tree::SELECT_SINGLE); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	search_box->grab_focus(); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	base_type = p_base; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	_update_search(); | 
					
						
							| 
									
										
										
										
											2016-01-08 08:27:34 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | String EditorQuickOpen::get_selected() const { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-08 08:27:34 -03:00
										 |  |  | 	TreeItem *ti = search_options->get_selected(); | 
					
						
							|  |  |  | 	if (!ti) | 
					
						
							|  |  |  | 		return String(); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-08 08:27:34 -03:00
										 |  |  | 	return "res://" + ti->get_text(0); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-08 08:27:34 -03:00
										 |  |  | Vector<String> EditorQuickOpen::get_selected_files() const { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Vector<String> files; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	TreeItem *item = search_options->get_next_selected(search_options->get_root()); | 
					
						
							| 
									
										
										
										
											2016-01-08 08:27:34 -03:00
										 |  |  | 	while (item) { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		files.push_back("res://" + item->get_text(0)); | 
					
						
							| 
									
										
										
										
											2016-01-08 08:27:34 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		item = search_options->get_next_selected(item); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return files; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | void EditorQuickOpen::_text_changed(const String &p_newtext) { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	_update_search(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-20 12:38:03 -03:00
										 |  |  | void EditorQuickOpen::_sbox_input(const Ref<InputEvent> &p_ie) { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-20 12:38:03 -03:00
										 |  |  | 	Ref<InputEventKey> k = p_ie; | 
					
						
							|  |  |  | 	if (k.is_valid()) { | 
					
						
							| 
									
										
										
										
											2016-01-17 10:25:15 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-20 12:38:03 -03:00
										 |  |  | 		switch (k->get_scancode()) { | 
					
						
							| 
									
										
										
										
											2016-01-17 10:25:15 -03:00
										 |  |  | 			case KEY_UP: | 
					
						
							|  |  |  | 			case KEY_DOWN: | 
					
						
							|  |  |  | 			case KEY_PAGEUP: | 
					
						
							|  |  |  | 			case KEY_PAGEDOWN: { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-20 12:38:03 -03:00
										 |  |  | 				search_options->call("_gui_input", k); | 
					
						
							| 
									
										
										
										
											2016-01-17 10:25:15 -03:00
										 |  |  | 				search_box->accept_event(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				TreeItem *root = search_options->get_root(); | 
					
						
							|  |  |  | 				if (!root->get_children()) | 
					
						
							|  |  |  | 					break; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				TreeItem *current = search_options->get_selected(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				TreeItem *item = search_options->get_next_selected(root); | 
					
						
							|  |  |  | 				while (item) { | 
					
						
							|  |  |  | 					item->deselect(0); | 
					
						
							|  |  |  | 					item = search_options->get_next_selected(item); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				current->select(0); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			} break; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-06 19:29:15 -03:00
										 |  |  | float EditorQuickOpen::_path_cmp(String search, String path) const { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (search == path) { | 
					
						
							|  |  |  | 		return 1.2f; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if (path.findn(search) != -1) { | 
					
						
							|  |  |  | 		return 1.1f; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return path.to_lower().similarity(search.to_lower()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | void EditorQuickOpen::_parse_fs(EditorFileSystemDirectory *efsd, Vector<Pair<String, Ref<Texture> > > &list) { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-23 20:15:56 -03:00
										 |  |  | 	if (!add_directories) { | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		for (int i = 0; i < efsd->get_subdir_count(); i++) { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-30 15:47:13 -03:00
										 |  |  | 			_parse_fs(efsd->get_subdir(i), list); | 
					
						
							| 
									
										
										
										
											2015-08-23 20:15:56 -03:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-30 15:47:13 -03:00
										 |  |  | 	String search_text = search_box->get_text(); | 
					
						
							| 
									
										
										
										
											2015-08-23 20:15:56 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if (add_directories) { | 
					
						
							|  |  |  | 		String path = efsd->get_path(); | 
					
						
							|  |  |  | 		if (!path.ends_with("/")) | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 			path += "/"; | 
					
						
							|  |  |  | 		if (path != "res://") { | 
					
						
							|  |  |  | 			path = path.substr(6, path.length()); | 
					
						
							| 
									
										
										
										
											2016-06-30 15:47:13 -03:00
										 |  |  | 			if (search_text.is_subsequence_ofi(path)) { | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 				Pair<String, Ref<Texture> > pair; | 
					
						
							| 
									
										
										
										
											2016-06-30 15:47:13 -03:00
										 |  |  | 				pair.first = path; | 
					
						
							|  |  |  | 				pair.second = get_icon("folder", "FileDialog"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-06 19:29:15 -03:00
										 |  |  | 				if (search_text != String() && list.size() > 0) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					float this_sim = _path_cmp(search_text, path); | 
					
						
							|  |  |  | 					float other_sim = _path_cmp(list[0].first, path); | 
					
						
							| 
									
										
										
										
											2016-06-30 15:47:13 -03:00
										 |  |  | 					int pos = 1; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-06 19:29:15 -03:00
										 |  |  | 					while (pos < list.size() && this_sim <= other_sim) { | 
					
						
							|  |  |  | 						other_sim = _path_cmp(list[pos++].first, path); | 
					
						
							| 
									
										
										
										
											2016-06-30 15:47:13 -03:00
										 |  |  | 					} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-06 19:29:15 -03:00
										 |  |  | 					pos = this_sim >= other_sim ? pos - 1 : pos; | 
					
						
							| 
									
										
										
										
											2016-06-30 15:47:13 -03:00
										 |  |  | 					list.insert(pos, pair); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				} else { | 
					
						
							|  |  |  | 					list.push_back(pair); | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2015-08-23 20:15:56 -03:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	for (int i = 0; i < efsd->get_file_count(); i++) { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		String file = efsd->get_file_path(i); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		file = file.substr(6, file.length()); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		if (ClassDB::is_parent_class(efsd->get_file_type(i), base_type) && (search_text.is_subsequence_ofi(file))) { | 
					
						
							|  |  |  | 			Pair<String, Ref<Texture> > pair; | 
					
						
							| 
									
										
										
										
											2016-06-30 15:47:13 -03:00
										 |  |  | 			pair.first = file; | 
					
						
							|  |  |  | 			pair.second = get_icon((has_icon(efsd->get_file_type(i), ei) ? efsd->get_file_type(i) : ot), ei); | 
					
						
							| 
									
										
										
										
											2017-09-02 16:17:59 +02:00
										 |  |  | 			list.push_back(pair); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (add_directories) { | 
					
						
							|  |  |  | 		for (int i = 0; i < efsd->get_subdir_count(); i++) { | 
					
						
							| 
									
										
										
										
											2016-06-30 15:47:13 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-02 16:17:59 +02:00
										 |  |  | 			_parse_fs(efsd->get_subdir(i), list); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2016-06-30 15:47:13 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-02 16:17:59 +02:00
										 |  |  | Vector<Pair<String, Ref<Texture> > > EditorQuickOpen::_sort_fs(Vector<Pair<String, Ref<Texture> > > &list) { | 
					
						
							| 
									
										
										
										
											2016-06-30 15:47:13 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-02 16:17:59 +02:00
										 |  |  | 	String search_text = search_box->get_text(); | 
					
						
							|  |  |  | 	Vector<Pair<String, Ref<Texture> > > sorted_list; | 
					
						
							| 
									
										
										
										
											2016-06-30 15:47:13 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-02 16:17:59 +02:00
										 |  |  | 	if (search_text == String() || list.size() == 0) | 
					
						
							| 
									
										
										
										
											2017-09-16 13:14:22 +00:00
										 |  |  | 		return list; | 
					
						
							| 
									
										
										
										
											2016-06-30 15:47:13 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-02 16:17:59 +02:00
										 |  |  | 	Vector<float> scores; | 
					
						
							|  |  |  | 	scores.resize(list.size()); | 
					
						
							|  |  |  | 	for (int i = 0; i < list.size(); i++) | 
					
						
							| 
									
										
										
										
											2018-07-25 03:11:03 +02:00
										 |  |  | 		scores.write[i] = _path_cmp(search_text, list[i].first); | 
					
						
							| 
									
										
										
										
											2016-06-30 15:47:13 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-02 16:17:59 +02:00
										 |  |  | 	while (list.size() > 0) { | 
					
						
							| 
									
										
										
										
											2015-08-23 20:15:56 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-02 16:17:59 +02:00
										 |  |  | 		float best_score = 0.0f; | 
					
						
							|  |  |  | 		int best_idx = 0; | 
					
						
							| 
									
										
										
										
											2015-08-23 20:15:56 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-02 16:17:59 +02:00
										 |  |  | 		for (int i = 0; i < list.size(); i++) { | 
					
						
							|  |  |  | 			float current_score = scores[i]; | 
					
						
							|  |  |  | 			if (current_score > best_score) { | 
					
						
							|  |  |  | 				best_score = current_score; | 
					
						
							|  |  |  | 				best_idx = i; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-08-23 20:15:56 -03:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-09-02 16:17:59 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		sorted_list.push_back(list[best_idx]); | 
					
						
							|  |  |  | 		list.remove(best_idx); | 
					
						
							|  |  |  | 		scores.remove(best_idx); | 
					
						
							| 
									
										
										
										
											2015-08-23 20:15:56 -03:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-09-02 16:17:59 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return sorted_list; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void EditorQuickOpen::_update_search() { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	search_options->clear(); | 
					
						
							|  |  |  | 	TreeItem *root = search_options->create_item(); | 
					
						
							| 
									
										
										
										
											2016-06-30 15:47:13 -03:00
										 |  |  | 	EditorFileSystemDirectory *efsd = EditorFileSystem::get_singleton()->get_filesystem(); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	Vector<Pair<String, Ref<Texture> > > list; | 
					
						
							| 
									
										
										
										
											2016-06-30 15:47:13 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	_parse_fs(efsd, list); | 
					
						
							| 
									
										
										
										
											2017-09-02 16:17:59 +02:00
										 |  |  | 	list = _sort_fs(list); | 
					
						
							| 
									
										
										
										
											2016-06-30 15:47:13 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	for (int i = 0; i < list.size(); i++) { | 
					
						
							|  |  |  | 		TreeItem *ti = search_options->create_item(root); | 
					
						
							|  |  |  | 		ti->set_text(0, list[i].first); | 
					
						
							|  |  |  | 		ti->set_icon(0, list[i].second); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-17 10:25:15 -03:00
										 |  |  | 	if (root->get_children()) { | 
					
						
							|  |  |  | 		TreeItem *ti = root->get_children(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		ti->select(0); | 
					
						
							|  |  |  | 		ti->set_as_cursor(0); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	get_ok()->set_disabled(root->get_children() == NULL); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void EditorQuickOpen::_confirmed() { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	TreeItem *ti = search_options->get_selected(); | 
					
						
							|  |  |  | 	if (!ti) | 
					
						
							|  |  |  | 		return; | 
					
						
							| 
									
										
										
										
											2016-01-08 08:27:34 -03:00
										 |  |  | 	emit_signal("quick_open"); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	hide(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void EditorQuickOpen::_notification(int p_what) { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-16 21:47:57 -03:00
										 |  |  | 	switch (p_what) { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-16 21:47:57 -03:00
										 |  |  | 		case NOTIFICATION_ENTER_TREE: { | 
					
						
							| 
									
										
										
										
											2018-07-26 13:45:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-16 21:47:57 -03:00
										 |  |  | 			connect("confirmed", this, "_confirmed"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			search_box->set_right_icon(get_icon("Search", "EditorIcons")); | 
					
						
							|  |  |  | 			search_box->set_clear_button_enabled(true); | 
					
						
							|  |  |  | 		} break; | 
					
						
							|  |  |  | 		case NOTIFICATION_EXIT_TREE: { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			disconnect("confirmed", this, "_confirmed"); | 
					
						
							|  |  |  | 		} break; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-23 20:15:56 -03:00
										 |  |  | StringName EditorQuickOpen::get_base_type() const { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return base_type; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void EditorQuickOpen::_bind_methods() { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	ClassDB::bind_method(D_METHOD("_text_changed"), &EditorQuickOpen::_text_changed); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("_confirmed"), &EditorQuickOpen::_confirmed); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("_sbox_input"), &EditorQuickOpen::_sbox_input); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-08 08:27:34 -03:00
										 |  |  | 	ADD_SIGNAL(MethodInfo("quick_open")); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | EditorQuickOpen::EditorQuickOpen() { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	VBoxContainer *vbc = memnew(VBoxContainer); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	add_child(vbc); | 
					
						
							| 
									
										
										
										
											2017-01-10 01:49:55 -03:00
										 |  |  | 	//set_child_rect(vbc);
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	search_box = memnew(LineEdit); | 
					
						
							|  |  |  | 	vbc->add_margin_child(TTR("Search:"), search_box); | 
					
						
							|  |  |  | 	search_box->connect("text_changed", this, "_text_changed"); | 
					
						
							|  |  |  | 	search_box->connect("gui_input", this, "_sbox_input"); | 
					
						
							|  |  |  | 	search_options = memnew(Tree); | 
					
						
							|  |  |  | 	vbc->add_margin_child(TTR("Matches:"), search_options, true); | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	get_ok()->set_text(TTR("Open")); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	get_ok()->set_disabled(true); | 
					
						
							|  |  |  | 	register_text_enter(search_box); | 
					
						
							|  |  |  | 	set_hide_on_ok(false); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	search_options->connect("item_activated", this, "_confirmed"); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	search_options->set_hide_root(true); | 
					
						
							| 
									
										
										
										
											2019-03-16 21:47:57 -03:00
										 |  |  | 	search_options->add_constant_override("draw_guides", 1); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	ei = "EditorIcons"; | 
					
						
							|  |  |  | 	ot = "Object"; | 
					
						
							|  |  |  | 	add_directories = false; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | } |