@@ -260,6 +260,9 @@ void FileDialog::_notification(int p_what) {
260260 } break ;
261261
262262 case NOTIFICATION_THEME_CHANGED: {
263+ favorite_list->set_custom_minimum_size (Vector2 (128 * get_theme_default_base_scale (), 0 ));
264+ recent_list->set_custom_minimum_size (Vector2 (128 * get_theme_default_base_scale (), 0 ));
265+
263266 if (main_vbox->is_layout_rtl ()) {
264267 _setup_button (dir_prev, theme_cache.forward_folder );
265268 _setup_button (dir_next, theme_cache.back_folder );
@@ -1104,6 +1107,19 @@ void FileDialog::update_filters() {
11041107 processed_filters.push_back (" *.*;" + f + " ;application/octet-stream" );
11051108}
11061109
1110+ void FileDialog::update_customization () {
1111+ _update_make_dir_visible ();
1112+ show_hidden->set_visible (customization_flags[CUSTOMIZATION_HIDDEN_FILES]);
1113+ layout_container->set_visible (customization_flags[CUSTOMIZATION_LAYOUT]);
1114+ layout_separator->set_visible (customization_flags[CUSTOMIZATION_FILE_FILTER] || customization_flags[CUSTOMIZATION_FILE_SORT]);
1115+ show_filename_filter_button->set_visible (customization_flags[CUSTOMIZATION_FILE_FILTER]);
1116+ file_sort_button->set_visible (customization_flags[CUSTOMIZATION_FILE_SORT]);
1117+ show_hidden_separator->set_visible (customization_flags[CUSTOMIZATION_HIDDEN_FILES] && (customization_flags[CUSTOMIZATION_LAYOUT] || customization_flags[CUSTOMIZATION_FILE_FILTER] || customization_flags[CUSTOMIZATION_FILE_SORT]));
1118+ favorite_button->set_visible (customization_flags[CUSTOMIZATION_FAVORITES]);
1119+ favorite_vbox->set_visible (customization_flags[CUSTOMIZATION_FAVORITES]);
1120+ recent_vbox->set_visible (customization_flags[CUSTOMIZATION_RECENT]);
1121+ }
1122+
11071123void FileDialog::clear_filename_filter () {
11081124 set_filename_filter (" " );
11091125 update_filename_filter_gui ();
@@ -1256,21 +1272,18 @@ void FileDialog::set_file_mode(FileMode p_mode) {
12561272 if (mode_overrides_title) {
12571273 set_title (ETR (" Open a File" ));
12581274 }
1259- make_dir_button->hide ();
12601275 break ;
12611276 case FILE_MODE_OPEN_FILES:
12621277 set_default_ok_text (ETR (" Open" ));
12631278 if (mode_overrides_title) {
12641279 set_title (ETR (" Open File(s)" ));
12651280 }
1266- make_dir_button->hide ();
12671281 break ;
12681282 case FILE_MODE_OPEN_DIR:
12691283 set_default_ok_text (ETR (" Select Current Folder" ));
12701284 if (mode_overrides_title) {
12711285 set_title (ETR (" Open a Directory" ));
12721286 }
1273- make_dir_button->show ();
12741287 break ;
12751288 case FILE_MODE_OPEN_ANY:
12761289 set_default_ok_text (ETR (" Open" ));
@@ -1284,9 +1297,9 @@ void FileDialog::set_file_mode(FileMode p_mode) {
12841297 if (mode_overrides_title) {
12851298 set_title (ETR (" Save a File" ));
12861299 }
1287- make_dir_button->show ();
12881300 break ;
12891301 }
1302+ _update_make_dir_visible ();
12901303
12911304 if (mode == FILE_MODE_OPEN_FILES) {
12921305 file_list->set_select_mode (ItemList::SELECT_MULTI);
@@ -1322,6 +1335,20 @@ FileDialog::DisplayMode FileDialog::get_display_mode() const {
13221335 return display_mode;
13231336}
13241337
1338+ void FileDialog::set_customization_flag_enabled (Customization p_flag, bool p_enabled) {
1339+ ERR_FAIL_INDEX (p_flag, CUSTOMIZATION_MAX);
1340+ if (customization_flags[p_flag] == p_enabled) {
1341+ return ;
1342+ }
1343+ customization_flags[p_flag] = p_enabled;
1344+ update_customization ();
1345+ }
1346+
1347+ bool FileDialog::is_customization_flag_enabled (Customization p_flag) const {
1348+ ERR_FAIL_INDEX_V (p_flag, CUSTOMIZATION_MAX, false );
1349+ return customization_flags[p_flag];
1350+ }
1351+
13251352void FileDialog::set_access (Access p_access) {
13261353 ERR_FAIL_INDEX (p_access, 3 );
13271354 if (access == p_access) {
@@ -1383,6 +1410,10 @@ void FileDialog::_setup_button(Button *p_button, const Ref<Texture2D> &p_icon) {
13831410 p_button->end_bulk_theme_override ();
13841411}
13851412
1413+ void FileDialog::_update_make_dir_visible () {
1414+ make_dir_container->set_visible (customization_flags[CUSTOMIZATION_CREATE_FOLDER] && mode != FILE_MODE_OPEN_FILE && mode != FILE_MODE_OPEN_FILES);
1415+ }
1416+
13861417FileDialog::Access FileDialog::get_access () const {
13871418 return access;
13881419}
@@ -1886,6 +1917,8 @@ void FileDialog::_bind_methods() {
18861917 ClassDB::bind_method (D_METHOD (" is_showing_hidden_files" ), &FileDialog::is_showing_hidden_files);
18871918 ClassDB::bind_method (D_METHOD (" set_use_native_dialog" , " native" ), &FileDialog::set_use_native_dialog);
18881919 ClassDB::bind_method (D_METHOD (" get_use_native_dialog" ), &FileDialog::get_use_native_dialog);
1920+ ClassDB::bind_method (D_METHOD (" set_customization_flag_enabled" , " flag" , " enabled" ), &FileDialog::set_customization_flag_enabled);
1921+ ClassDB::bind_method (D_METHOD (" is_customization_flag_enabled" , " flag" ), &FileDialog::is_customization_flag_enabled);
18891922 ClassDB::bind_method (D_METHOD (" deselect_all" ), &FileDialog::deselect_all);
18901923
18911924 ClassDB::bind_method (D_METHOD (" invalidate" ), &FileDialog::invalidate);
@@ -1897,9 +1930,20 @@ void FileDialog::_bind_methods() {
18971930 ADD_PROPERTY (PropertyInfo (Variant::STRING, " root_subfolder" ), " set_root_subfolder" , " get_root_subfolder" );
18981931 ADD_PROPERTY (PropertyInfo (Variant::PACKED_STRING_ARRAY, " filters" ), " set_filters" , " get_filters" );
18991932 ADD_PROPERTY (PropertyInfo (Variant::STRING, " filename_filter" ), " set_filename_filter" , " get_filename_filter" );
1900- ADD_ARRAY_COUNT (" Options" , " option_count" , " set_option_count" , " get_option_count" , " option_" );
19011933 ADD_PROPERTY (PropertyInfo (Variant::BOOL, " show_hidden_files" ), " set_show_hidden_files" , " is_showing_hidden_files" );
19021934 ADD_PROPERTY (PropertyInfo (Variant::BOOL, " use_native_dialog" ), " set_use_native_dialog" , " get_use_native_dialog" );
1935+
1936+ ADD_ARRAY_COUNT (" Options" , " option_count" , " set_option_count" , " get_option_count" , " option_" );
1937+
1938+ ADD_GROUP (" Customization" , " " );
1939+ ADD_PROPERTYI (PropertyInfo (Variant::BOOL, " hidden_files_toggle_enabled" ), " set_customization_flag_enabled" , " is_customization_flag_enabled" , CUSTOMIZATION_HIDDEN_FILES);
1940+ ADD_PROPERTYI (PropertyInfo (Variant::BOOL, " file_filter_toggle_enabled" ), " set_customization_flag_enabled" , " is_customization_flag_enabled" , CUSTOMIZATION_FILE_FILTER);
1941+ ADD_PROPERTYI (PropertyInfo (Variant::BOOL, " file_sort_options_enabled" ), " set_customization_flag_enabled" , " is_customization_flag_enabled" , CUSTOMIZATION_FILE_SORT);
1942+ ADD_PROPERTYI (PropertyInfo (Variant::BOOL, " folder_creation_enabled" ), " set_customization_flag_enabled" , " is_customization_flag_enabled" , CUSTOMIZATION_CREATE_FOLDER);
1943+ ADD_PROPERTYI (PropertyInfo (Variant::BOOL, " favorites_enabled" ), " set_customization_flag_enabled" , " is_customization_flag_enabled" , CUSTOMIZATION_FAVORITES);
1944+ ADD_PROPERTYI (PropertyInfo (Variant::BOOL, " recent_list_enabled" ), " set_customization_flag_enabled" , " is_customization_flag_enabled" , CUSTOMIZATION_RECENT);
1945+ ADD_PROPERTYI (PropertyInfo (Variant::BOOL, " layout_toggle_enabled" ), " set_customization_flag_enabled" , " is_customization_flag_enabled" , CUSTOMIZATION_LAYOUT);
1946+
19031947 ADD_PROPERTY (PropertyInfo (Variant::STRING, " current_dir" , PROPERTY_HINT_DIR, " " , PROPERTY_USAGE_NONE), " set_current_dir" , " get_current_dir" );
19041948 ADD_PROPERTY (PropertyInfo (Variant::STRING, " current_file" , PROPERTY_HINT_FILE, " *" , PROPERTY_USAGE_NONE), " set_current_file" , " get_current_file" );
19051949 ADD_PROPERTY (PropertyInfo (Variant::STRING, " current_path" , PROPERTY_HINT_NONE, " " , PROPERTY_USAGE_NONE), " set_current_path" , " get_current_path" );
@@ -1922,8 +1966,15 @@ void FileDialog::_bind_methods() {
19221966 BIND_ENUM_CONSTANT (DISPLAY_THUMBNAILS);
19231967 BIND_ENUM_CONSTANT (DISPLAY_LIST);
19241968
1925- BIND_THEME_ITEM (Theme::DATA_TYPE_CONSTANT, FileDialog, thumbnail_size);
1969+ BIND_ENUM_CONSTANT (CUSTOMIZATION_HIDDEN_FILES);
1970+ BIND_ENUM_CONSTANT (CUSTOMIZATION_CREATE_FOLDER);
1971+ BIND_ENUM_CONSTANT (CUSTOMIZATION_FILE_FILTER);
1972+ BIND_ENUM_CONSTANT (CUSTOMIZATION_FILE_SORT);
1973+ BIND_ENUM_CONSTANT (CUSTOMIZATION_FAVORITES);
1974+ BIND_ENUM_CONSTANT (CUSTOMIZATION_RECENT);
1975+ BIND_ENUM_CONSTANT (CUSTOMIZATION_LAYOUT);
19261976
1977+ BIND_THEME_ITEM (Theme::DATA_TYPE_CONSTANT, FileDialog, thumbnail_size);
19271978 BIND_THEME_ITEM (Theme::DATA_TYPE_ICON, FileDialog, parent_folder);
19281979 BIND_THEME_ITEM (Theme::DATA_TYPE_ICON, FileDialog, forward_folder);
19291980 BIND_THEME_ITEM (Theme::DATA_TYPE_ICON, FileDialog, back_folder);
@@ -2030,6 +2081,10 @@ FileDialog::FileDialog() {
20302081 set_size (Size2 (640 , 360 ));
20312082 set_default_ok_text (ETR (" Save" )); // Default mode text.
20322083
2084+ for (int i = 0 ; i < CUSTOMIZATION_MAX; i++) {
2085+ customization_flags[i] = true ;
2086+ }
2087+
20332088 show_hidden_files = default_show_hidden_files;
20342089 dir_access = DirAccess::create (DirAccess::ACCESS_RESOURCES);
20352090
@@ -2097,13 +2152,16 @@ FileDialog::FileDialog() {
20972152 top_toolbar->add_child (favorite_button);
20982153 favorite_button->connect (SceneStringName (pressed), callable_mp (this , &FileDialog::_favorite_pressed));
20992154
2100- top_toolbar->add_child (memnew (VSeparator));
2155+ make_dir_container = memnew (HBoxContainer);
2156+ top_toolbar->add_child (make_dir_container);
2157+
2158+ make_dir_container->add_child (memnew (VSeparator));
21012159
21022160 make_dir_button = memnew (Button);
21032161 make_dir_button->set_theme_type_variation (SceneStringName (FlatButton));
21042162 make_dir_button->set_accessibility_name (ETR (" Create New Folder" ));
21052163 make_dir_button->set_tooltip_text (ETR (" Create a new folder." ));
2106- top_toolbar ->add_child (make_dir_button);
2164+ make_dir_container ->add_child (make_dir_button);
21072165 make_dir_button->connect (SceneStringName (pressed), callable_mp (this , &FileDialog::_make_dir));
21082166
21092167 HSplitContainer *main_split = memnew (HSplitContainer);
@@ -2114,12 +2172,12 @@ FileDialog::FileDialog() {
21142172 VSplitContainer *fav_split = memnew (VSplitContainer);
21152173 main_split->add_child (fav_split);
21162174
2117- VBoxContainer *fav_vbox = memnew (VBoxContainer);
2118- fav_vbox ->set_v_size_flags (Control::SIZE_EXPAND_FILL);
2119- fav_split->add_child (fav_vbox );
2175+ favorite_vbox = memnew (VBoxContainer);
2176+ favorite_vbox ->set_v_size_flags (Control::SIZE_EXPAND_FILL);
2177+ fav_split->add_child (favorite_vbox );
21202178
21212179 HBoxContainer *fav_hbox = memnew (HBoxContainer);
2122- fav_vbox ->add_child (fav_hbox);
2180+ favorite_vbox ->add_child (fav_hbox);
21232181
21242182 {
21252183 Label *label = memnew (Label (ETR (" Favorites:" )));
@@ -2141,10 +2199,10 @@ FileDialog::FileDialog() {
21412199 favorite_list->set_v_size_flags (Control::SIZE_EXPAND_FILL);
21422200 favorite_list->set_auto_translate_mode (AUTO_TRANSLATE_MODE_DISABLED);
21432201 favorite_list->set_accessibility_name (ETR (" Favorites" ));
2144- fav_vbox ->add_child (favorite_list);
2202+ favorite_vbox ->add_child (favorite_list);
21452203 favorite_list->connect (SceneStringName (item_selected), callable_mp (this , &FileDialog::_favorite_selected));
21462204
2147- VBoxContainer * recent_vbox = memnew (VBoxContainer);
2205+ recent_vbox = memnew (VBoxContainer);
21482206 recent_vbox->set_v_size_flags (Control::SIZE_EXPAND_FILL);
21492207 fav_split->add_child (recent_vbox);
21502208
@@ -2183,7 +2241,11 @@ FileDialog::FileDialog() {
21832241 lower_toolbar->add_child (show_hidden);
21842242 show_hidden->connect (SceneStringName (toggled), callable_mp (this , &FileDialog::set_show_hidden_files));
21852243
2186- lower_toolbar->add_child (memnew (VSeparator));
2244+ show_hidden_separator = memnew (VSeparator);
2245+ lower_toolbar->add_child (show_hidden_separator);
2246+
2247+ layout_container = memnew (HBoxContainer);
2248+ lower_toolbar->add_child (layout_container);
21872249
21882250 Ref<ButtonGroup> view_mode_group;
21892251 view_mode_group.instantiate ();
@@ -2195,7 +2257,7 @@ FileDialog::FileDialog() {
21952257 thumbnail_mode_button->set_theme_type_variation (SceneStringName (FlatButton));
21962258 thumbnail_mode_button->set_accessibility_name (ETR (" View as Thumbnails" ));
21972259 thumbnail_mode_button->set_tooltip_text (ETR (" View items as a grid of thumbnails." ));
2198- lower_toolbar ->add_child (thumbnail_mode_button);
2260+ layout_container ->add_child (thumbnail_mode_button);
21992261 thumbnail_mode_button->connect (SceneStringName (pressed), callable_mp (this , &FileDialog::set_display_mode).bind (DISPLAY_THUMBNAILS));
22002262
22012263 list_mode_button = memnew (Button);
@@ -2204,10 +2266,11 @@ FileDialog::FileDialog() {
22042266 list_mode_button->set_theme_type_variation (SceneStringName (FlatButton));
22052267 list_mode_button->set_accessibility_name (ETR (" View as List" ));
22062268 list_mode_button->set_tooltip_text (ETR (" View items as a list." ));
2207- lower_toolbar ->add_child (list_mode_button);
2269+ layout_container ->add_child (list_mode_button);
22082270 list_mode_button->connect (SceneStringName (pressed), callable_mp (this , &FileDialog::set_display_mode).bind (DISPLAY_LIST));
22092271
2210- lower_toolbar->add_child (memnew (VSeparator));
2272+ layout_separator = memnew (VSeparator);
2273+ layout_container->add_child (layout_separator);
22112274
22122275 show_filename_filter_button = memnew (Button);
22132276 show_filename_filter_button->set_theme_type_variation (SceneStringName (FlatButton));
0 commit comments