1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-14 13:41:12 +00:00

Add QuickLoad option to resource picker.

When clicking on a resource field in the inspector dock, you now have
the "Quick Load" option in addition to "Load". This opens a QuickOpen
dialog allowing the user to type in a phrase to quickly locate the
desired resource (similar to "Quick Open Scene").

In my experience, this is much faster than clicking through the File
Dialog.

Relates to godotengine/godot-proposals#346.

(cherry picked from commit 470b94fe22)
This commit is contained in:
Ryan Roden-Corrent
2020-03-22 09:31:46 -04:00
committed by Rémi Verschelde
parent 68b8cf75ea
commit ae38c672f1
2 changed files with 24 additions and 1 deletions

View File

@@ -137,6 +137,10 @@ void EditorResourcePicker::_file_selected(const String &p_path) {
_update_resource(); _update_resource();
} }
void EditorResourcePicker::_file_quick_selected() {
_file_selected(quick_open->get_selected());
}
void EditorResourcePicker::_update_menu() { void EditorResourcePicker::_update_menu() {
_update_menu_items(); _update_menu_items();
@@ -154,7 +158,10 @@ void EditorResourcePicker::_update_menu_items() {
// Add options for creating specific subtypes of the base resource type. // Add options for creating specific subtypes of the base resource type.
set_create_options(edit_menu); set_create_options(edit_menu);
// Add an option to load a resource from a file. // Add an option to load a resource from a file using the QuickOpen dialog.
edit_menu->add_icon_item(get_icon("Load", "EditorIcons"), TTR("Quick Load"), OBJ_MENU_QUICKLOAD);
// Add an option to load a resource from a file using the regular file dialog.
edit_menu->add_icon_item(get_icon("Load", "EditorIcons"), TTR("Load"), OBJ_MENU_LOAD); edit_menu->add_icon_item(get_icon("Load", "EditorIcons"), TTR("Load"), OBJ_MENU_LOAD);
// Add options for changing existing value of the resource. // Add options for changing existing value of the resource.
@@ -247,6 +254,17 @@ void EditorResourcePicker::_edit_menu_cbk(int p_which) {
file_dialog->popup_centered_ratio(); file_dialog->popup_centered_ratio();
} break; } break;
case OBJ_MENU_QUICKLOAD: {
if (!quick_open) {
quick_open = memnew(EditorQuickOpen);
add_child(quick_open);
quick_open->connect("quick_open", this, "_file_quick_selected");
}
quick_open->popup_dialog(base_type);
quick_open->set_title(TTR("Resource"));
} break;
case OBJ_MENU_EDIT: { case OBJ_MENU_EDIT: {
if (edited_resource.is_valid()) { if (edited_resource.is_valid()) {
emit_signal("resource_selected", edited_resource); emit_signal("resource_selected", edited_resource);
@@ -644,6 +662,7 @@ void EditorResourcePicker::drop_data_fw(const Point2 &p_point, const Variant &p_
void EditorResourcePicker::_bind_methods() { void EditorResourcePicker::_bind_methods() {
// Internal binds. // Internal binds.
ClassDB::bind_method(D_METHOD("_file_selected"), &EditorResourcePicker::_file_selected); ClassDB::bind_method(D_METHOD("_file_selected"), &EditorResourcePicker::_file_selected);
ClassDB::bind_method(D_METHOD("_file_quick_selected"), &EditorResourcePicker::_file_quick_selected);
ClassDB::bind_method(D_METHOD("_resource_selected"), &EditorResourcePicker::_resource_selected); ClassDB::bind_method(D_METHOD("_resource_selected"), &EditorResourcePicker::_resource_selected);
ClassDB::bind_method(D_METHOD("_button_draw"), &EditorResourcePicker::_button_draw); ClassDB::bind_method(D_METHOD("_button_draw"), &EditorResourcePicker::_button_draw);
ClassDB::bind_method(D_METHOD("_button_input"), &EditorResourcePicker::_button_input); ClassDB::bind_method(D_METHOD("_button_input"), &EditorResourcePicker::_button_input);

View File

@@ -32,6 +32,7 @@
#define EDITOR_RESOURCE_PICKER_H #define EDITOR_RESOURCE_PICKER_H
#include "editor_file_dialog.h" #include "editor_file_dialog.h"
#include "quick_open.h"
#include "scene/gui/box_container.h" #include "scene/gui/box_container.h"
#include "scene/gui/button.h" #include "scene/gui/button.h"
#include "scene/gui/popup_menu.h" #include "scene/gui/popup_menu.h"
@@ -54,9 +55,11 @@ class EditorResourcePicker : public HBoxContainer {
TextureRect *preview_rect; TextureRect *preview_rect;
Button *edit_button; Button *edit_button;
EditorFileDialog *file_dialog = nullptr; EditorFileDialog *file_dialog = nullptr;
EditorQuickOpen *quick_open = nullptr;
enum MenuOption { enum MenuOption {
OBJ_MENU_LOAD, OBJ_MENU_LOAD,
OBJ_MENU_QUICKLOAD,
OBJ_MENU_EDIT, OBJ_MENU_EDIT,
OBJ_MENU_CLEAR, OBJ_MENU_CLEAR,
OBJ_MENU_MAKE_UNIQUE, OBJ_MENU_MAKE_UNIQUE,
@@ -75,6 +78,7 @@ class EditorResourcePicker : public HBoxContainer {
void _update_resource_preview(const String &p_path, const Ref<Texture> &p_preview, const Ref<Texture> &p_small_preview, ObjectID p_obj); void _update_resource_preview(const String &p_path, const Ref<Texture> &p_preview, const Ref<Texture> &p_small_preview, ObjectID p_obj);
void _resource_selected(); void _resource_selected();
void _file_quick_selected();
void _file_selected(const String &p_path); void _file_selected(const String &p_path);
void _update_menu(); void _update_menu();