From fdc79f5286a8f449b1ba93cf6b159c35ce692679 Mon Sep 17 00:00:00 2001 From: kobewi Date: Thu, 2 Oct 2025 13:23:02 +0200 Subject: [PATCH] Remaining FileDialog changes before unification --- doc/classes/FileDialog.xml | 7 +++++++ editor/editor_node.cpp | 3 +++ scene/gui/file_dialog.cpp | 11 ++++++++++- scene/gui/file_dialog.h | 3 +++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/doc/classes/FileDialog.xml b/doc/classes/FileDialog.xml index c9869cc232c..697f23c36e5 100644 --- a/doc/classes/FileDialog.xml +++ b/doc/classes/FileDialog.xml @@ -246,6 +246,9 @@ The number of additional [OptionButton]s and [CheckBox]es in the dialog. + + If [code]true[/code], the [FileDialog] will warn the user before overwriting files in save mode. + If [code]true[/code], shows the recent directories list on the left side of the dialog. @@ -352,6 +355,10 @@ If enabled, shows the layout switch buttons (list/thumbnails). Equivalent to [member layout_toggle_enabled]. + + If enabled, the [FileDialog] will warn the user before overwriting files in save mode. + Equivalent to [member overwrite_warning_enabled]. + diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index f7b780356cb..3db0b50d06c 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -980,6 +980,7 @@ void EditorNode::_notification(int p_what) { case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { if (EditorSettings::get_singleton()->check_changed_settings_in_group("filesystem/file_dialog")) { FileDialog::set_default_show_hidden_files(EDITOR_GET("filesystem/file_dialog/show_hidden_files")); + FileDialog::set_default_display_mode(EDITOR_GET("filesystem/file_dialog/display_mode")); EditorFileDialog::set_default_show_hidden_files(EDITOR_GET("filesystem/file_dialog/show_hidden_files")); EditorFileDialog::set_default_display_mode((EditorFileDialog::DisplayMode)EDITOR_GET("filesystem/file_dialog/display_mode").operator int()); } @@ -7703,6 +7704,8 @@ EditorNode::EditorNode() { DisplayServer::get_singleton()->window_set_min_size(minimum_size); } + FileDialog::set_default_show_hidden_files(EDITOR_GET("filesystem/file_dialog/show_hidden_files")); + FileDialog::set_default_display_mode(EDITOR_GET("filesystem/file_dialog/display_mode")); EditorFileDialog::set_default_show_hidden_files(EDITOR_GET("filesystem/file_dialog/show_hidden_files")); EditorFileDialog::set_default_display_mode((EditorFileDialog::DisplayMode)EDITOR_GET("filesystem/file_dialog/display_mode").operator int()); diff --git a/scene/gui/file_dialog.cpp b/scene/gui/file_dialog.cpp index dc7f57a0d5c..5fb8a336db7 100644 --- a/scene/gui/file_dialog.cpp +++ b/scene/gui/file_dialog.cpp @@ -540,7 +540,7 @@ void FileDialog::_action_pressed() { return; } - if (dir_access->file_exists(f) || dir_access->is_bundle(f)) { + if (customization_flags[CUSTOMIZATION_OVERWRITE_WARNING] && (dir_access->file_exists(f) || dir_access->is_bundle(f))) { confirm_save->set_text(vformat(atr(ETR("File \"%s\" already exists.\nDo you want to overwrite it?")), f)); confirm_save->popup_centered(Size2(250, 80)); } else { @@ -2057,6 +2057,7 @@ void FileDialog::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "favorites_enabled"), "set_customization_flag_enabled", "is_customization_flag_enabled", CUSTOMIZATION_FAVORITES); ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "recent_list_enabled"), "set_customization_flag_enabled", "is_customization_flag_enabled", CUSTOMIZATION_RECENT); ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "layout_toggle_enabled"), "set_customization_flag_enabled", "is_customization_flag_enabled", CUSTOMIZATION_LAYOUT); + ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "overwrite_warning_enabled"), "set_customization_flag_enabled", "is_customization_flag_enabled", CUSTOMIZATION_OVERWRITE_WARNING); ADD_PROPERTY(PropertyInfo(Variant::STRING, "current_dir", PROPERTY_HINT_DIR, "", PROPERTY_USAGE_NONE), "set_current_dir", "get_current_dir"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "current_file", PROPERTY_HINT_FILE_PATH, "*", PROPERTY_USAGE_NONE), "set_current_file", "get_current_file"); @@ -2087,6 +2088,7 @@ void FileDialog::_bind_methods() { BIND_ENUM_CONSTANT(CUSTOMIZATION_FAVORITES); BIND_ENUM_CONSTANT(CUSTOMIZATION_RECENT); BIND_ENUM_CONSTANT(CUSTOMIZATION_LAYOUT); + BIND_ENUM_CONSTANT(CUSTOMIZATION_OVERWRITE_WARNING); BIND_THEME_ITEM(Theme::DATA_TYPE_CONSTANT, FileDialog, thumbnail_size); BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, FileDialog, parent_folder); @@ -2169,6 +2171,10 @@ void FileDialog::set_default_show_hidden_files(bool p_show) { default_show_hidden_files = p_show; } +void FileDialog::set_default_display_mode(DisplayMode p_mode) { + default_display_mode = p_mode; +} + void FileDialog::set_get_icon_callback(const Callable &p_callback) { get_icon_callback = p_callback; } @@ -2209,6 +2215,7 @@ FileDialog::FileDialog() { } show_hidden_files = default_show_hidden_files; + display_mode = default_display_mode; dir_access = DirAccess::create(DirAccess::ACCESS_RESOURCES); main_vbox = memnew(VBoxContainer); @@ -2315,6 +2322,7 @@ FileDialog::FileDialog() { favorite_list = memnew(ItemList); favorite_list->set_v_size_flags(Control::SIZE_EXPAND_FILL); favorite_list->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); + favorite_list->set_theme_type_variation("ItemListSecondary"); favorite_list->set_accessibility_name(ETR("Favorites:")); favorite_vbox->add_child(favorite_list); favorite_list->connect(SceneStringName(item_selected), callable_mp(this, &FileDialog::_favorite_selected)); @@ -2331,6 +2339,7 @@ FileDialog::FileDialog() { recent_list = memnew(ItemList); recent_list->set_v_size_flags(Control::SIZE_EXPAND_FILL); recent_list->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); + recent_list->set_theme_type_variation("ItemListSecondary"); recent_list->set_accessibility_name(ETR("Recent:")); recent_vbox->add_child(recent_list); recent_list->connect(SceneStringName(item_selected), callable_mp(this, &FileDialog::_recent_selected)); diff --git a/scene/gui/file_dialog.h b/scene/gui/file_dialog.h index f8b31a7ff6b..1a28af42a66 100644 --- a/scene/gui/file_dialog.h +++ b/scene/gui/file_dialog.h @@ -143,6 +143,7 @@ public: CUSTOMIZATION_FAVORITES, CUSTOMIZATION_RECENT, CUSTOMIZATION_LAYOUT, + CUSTOMIZATION_OVERWRITE_WARNING, CUSTOMIZATION_MAX }; @@ -159,6 +160,7 @@ private: PropertyListHelper property_helper; inline static bool default_show_hidden_files = false; + static inline DisplayMode default_display_mode = DISPLAY_THUMBNAILS; bool show_hidden_files = false; bool use_native_dialog = false; bool customization_flags[CUSTOMIZATION_MAX]; // Initialized to true in the constructor. @@ -432,6 +434,7 @@ public: bool get_show_filename_filter() const; static void set_default_show_hidden_files(bool p_show); + static void set_default_display_mode(DisplayMode p_mode); static void set_get_icon_callback(const Callable &p_callback); static void set_get_thumbnail_callback(const Callable &p_callback);