Merge pull request #3191 from neikeq/filedialog_hotkeys
Add keyboard shortcut to toggle "show hidden files" in FileDialog
This commit is contained in:
commit
a0c39a4b33
6 changed files with 97 additions and 2 deletions
|
@ -862,6 +862,13 @@ bool Control::window_has_modal_stack() const {
|
||||||
return data.window->window->modal_stack.size();
|
return data.window->window->modal_stack.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Control::is_window_modal_on_top() const {
|
||||||
|
|
||||||
|
if (window_has_modal_stack())
|
||||||
|
return data.window->window->modal_stack.back()->get()==this;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void Control::_window_cancel_tooltip() {
|
void Control::_window_cancel_tooltip() {
|
||||||
|
|
||||||
window->tooltip=NULL;
|
window->tooltip=NULL;
|
||||||
|
|
|
@ -270,6 +270,8 @@ public:
|
||||||
void set_custom_minimum_size(const Size2& p_custom);
|
void set_custom_minimum_size(const Size2& p_custom);
|
||||||
Size2 get_custom_minimum_size() const;
|
Size2 get_custom_minimum_size() const;
|
||||||
|
|
||||||
|
bool is_window_modal_on_top() const;
|
||||||
|
|
||||||
bool is_window() const;
|
bool is_window() const;
|
||||||
Control *get_window() const;
|
Control *get_window() const;
|
||||||
Control *get_parent_control() const;
|
Control *get_parent_control() const;
|
||||||
|
|
|
@ -57,6 +57,41 @@ void FileDialog::_notification(int p_what) {
|
||||||
//RID ci = get_canvas_item();
|
//RID ci = get_canvas_item();
|
||||||
//get_stylebox("panel","PopupMenu")->draw(ci,Rect2(Point2(),get_size()));
|
//get_stylebox("panel","PopupMenu")->draw(ci,Rect2(Point2(),get_size()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (p_what==NOTIFICATION_POPUP_HIDE) {
|
||||||
|
|
||||||
|
set_process_unhandled_input(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FileDialog::_unhandled_input(const InputEvent& p_event) {
|
||||||
|
|
||||||
|
if (p_event.type==InputEvent::KEY && is_window_modal_on_top()) {
|
||||||
|
|
||||||
|
const InputEventKey &k=p_event.key;
|
||||||
|
|
||||||
|
if (k.pressed) {
|
||||||
|
|
||||||
|
bool handled=true;
|
||||||
|
|
||||||
|
switch (k.scancode) {
|
||||||
|
|
||||||
|
case KEY_H: {
|
||||||
|
|
||||||
|
if (k.mod.command) {
|
||||||
|
set_show_hidden_files(!show_hidden_files);
|
||||||
|
} else {
|
||||||
|
handled=false;
|
||||||
|
}
|
||||||
|
|
||||||
|
} break;
|
||||||
|
default: { handled=false; }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (handled)
|
||||||
|
accept_event();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileDialog::set_enable_multiple_selection(bool p_enable) {
|
void FileDialog::set_enable_multiple_selection(bool p_enable) {
|
||||||
|
@ -114,6 +149,8 @@ void FileDialog::_post_popup() {
|
||||||
else
|
else
|
||||||
tree->grab_focus();
|
tree->grab_focus();
|
||||||
|
|
||||||
|
set_process_unhandled_input(true);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileDialog::_action_pressed() {
|
void FileDialog::_action_pressed() {
|
||||||
|
@ -628,6 +665,8 @@ bool FileDialog::default_show_hidden_files=false;
|
||||||
|
|
||||||
void FileDialog::_bind_methods() {
|
void FileDialog::_bind_methods() {
|
||||||
|
|
||||||
|
ObjectTypeDB::bind_method(_MD("_unhandled_input"),&FileDialog::_unhandled_input);
|
||||||
|
|
||||||
ObjectTypeDB::bind_method(_MD("_tree_selected"),&FileDialog::_tree_selected);
|
ObjectTypeDB::bind_method(_MD("_tree_selected"),&FileDialog::_tree_selected);
|
||||||
ObjectTypeDB::bind_method(_MD("_tree_db_selected"),&FileDialog::_tree_dc_selected);
|
ObjectTypeDB::bind_method(_MD("_tree_db_selected"),&FileDialog::_tree_dc_selected);
|
||||||
ObjectTypeDB::bind_method(_MD("_dir_entered"),&FileDialog::_dir_entered);
|
ObjectTypeDB::bind_method(_MD("_dir_entered"),&FileDialog::_dir_entered);
|
||||||
|
|
|
@ -117,6 +117,8 @@ private:
|
||||||
|
|
||||||
void _update_drives();
|
void _update_drives();
|
||||||
|
|
||||||
|
void _unhandled_input(const InputEvent& p_event);
|
||||||
|
|
||||||
virtual void _post_popup();
|
virtual void _post_popup();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -53,13 +53,52 @@ void EditorFileDialog::_notification(int p_what) {
|
||||||
|
|
||||||
//RID ci = get_canvas_item();
|
//RID ci = get_canvas_item();
|
||||||
//get_stylebox("panel","PopupMenu")->draw(ci,Rect2(Point2(),get_size()));
|
//get_stylebox("panel","PopupMenu")->draw(ci,Rect2(Point2(),get_size()));
|
||||||
|
} else if (p_what==NOTIFICATION_POPUP_HIDE) {
|
||||||
|
|
||||||
|
set_process_unhandled_input(false);
|
||||||
|
|
||||||
} else if (p_what==EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) {
|
} else if (p_what==EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) {
|
||||||
|
|
||||||
set_show_hidden_files(EditorSettings::get_singleton()->get("file_dialog/show_hidden_files"));
|
bool show_hidden=EditorSettings::get_singleton()->get("file_dialog/show_hidden_files");
|
||||||
|
if (show_hidden_files!=show_hidden)
|
||||||
|
set_show_hidden_files(show_hidden);
|
||||||
set_display_mode((DisplayMode)EditorSettings::get_singleton()->get("file_dialog/display_mode").operator int());
|
set_display_mode((DisplayMode)EditorSettings::get_singleton()->get("file_dialog/display_mode").operator int());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EditorFileDialog::_unhandled_input(const InputEvent& p_event) {
|
||||||
|
|
||||||
|
if (p_event.type==InputEvent::KEY && is_window_modal_on_top()) {
|
||||||
|
|
||||||
|
const InputEventKey &k=p_event.key;
|
||||||
|
|
||||||
|
if (k.pressed) {
|
||||||
|
|
||||||
|
bool handled=true;
|
||||||
|
|
||||||
|
switch (k.scancode) {
|
||||||
|
|
||||||
|
case KEY_H: {
|
||||||
|
|
||||||
|
if (k.mod.command) {
|
||||||
|
|
||||||
|
bool show=!show_hidden_files;
|
||||||
|
set_show_hidden_files(show);
|
||||||
|
EditorSettings::get_singleton()->set("file_dialog/show_hidden_files",show);
|
||||||
|
} else {
|
||||||
|
handled=false;
|
||||||
|
}
|
||||||
|
|
||||||
|
} break;
|
||||||
|
default: { handled=false; }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (handled)
|
||||||
|
accept_event();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void EditorFileDialog::set_enable_multiple_selection(bool p_enable) {
|
void EditorFileDialog::set_enable_multiple_selection(bool p_enable) {
|
||||||
|
|
||||||
item_list->set_select_mode(p_enable?ItemList::SELECT_MULTI:ItemList::SELECT_SINGLE);
|
item_list->set_select_mode(p_enable?ItemList::SELECT_MULTI:ItemList::SELECT_SINGLE);
|
||||||
|
@ -151,6 +190,8 @@ void EditorFileDialog::_post_popup() {
|
||||||
_update_favorites();
|
_update_favorites();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set_process_unhandled_input(true);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorFileDialog::_thumbnail_result(const String& p_path,const Ref<Texture>& p_preview, const Variant& p_udata) {
|
void EditorFileDialog::_thumbnail_result(const String& p_path,const Ref<Texture>& p_preview, const Variant& p_udata) {
|
||||||
|
@ -1049,6 +1090,8 @@ EditorFileDialog::DisplayMode EditorFileDialog::get_display_mode() const{
|
||||||
|
|
||||||
void EditorFileDialog::_bind_methods() {
|
void EditorFileDialog::_bind_methods() {
|
||||||
|
|
||||||
|
ObjectTypeDB::bind_method(_MD("_unhandled_input"),&EditorFileDialog::_unhandled_input);
|
||||||
|
|
||||||
ObjectTypeDB::bind_method(_MD("_item_selected"),&EditorFileDialog::_item_selected);
|
ObjectTypeDB::bind_method(_MD("_item_selected"),&EditorFileDialog::_item_selected);
|
||||||
ObjectTypeDB::bind_method(_MD("_item_db_selected"),&EditorFileDialog::_item_dc_selected);
|
ObjectTypeDB::bind_method(_MD("_item_db_selected"),&EditorFileDialog::_item_dc_selected);
|
||||||
ObjectTypeDB::bind_method(_MD("_dir_entered"),&EditorFileDialog::_dir_entered);
|
ObjectTypeDB::bind_method(_MD("_dir_entered"),&EditorFileDialog::_dir_entered);
|
||||||
|
|
|
@ -176,6 +176,8 @@ private:
|
||||||
void _thumbnail_done(const String& p_path,const Ref<Texture>& p_preview, const Variant& p_udata);
|
void _thumbnail_done(const String& p_path,const Ref<Texture>& p_preview, const Variant& p_udata);
|
||||||
void _request_single_thumbnail(const String& p_path);
|
void _request_single_thumbnail(const String& p_path);
|
||||||
|
|
||||||
|
void _unhandled_input(const InputEvent& p_event);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
void _notification(int p_what);
|
void _notification(int p_what);
|
||||||
|
|
Loading…
Reference in a new issue