Skip to content

Commit e188cf6

Browse files
committed
Merge pull request #99182 from timoschwarzer/fix/editor-save-dialog-options
Improve editor file dialog options
2 parents dee79d5 + 11bf2da commit e188cf6

File tree

2 files changed

+33
-15
lines changed

2 files changed

+33
-15
lines changed

editor/gui/editor_file_dialog.cpp

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
#include "editor/themes/editor_scale.h"
4343
#include "scene/gui/center_container.h"
4444
#include "scene/gui/check_box.h"
45+
#include "scene/gui/flow_container.h"
4546
#include "scene/gui/grid_container.h"
4647
#include "scene/gui/label.h"
4748
#include "scene/gui/option_button.h"
@@ -1951,30 +1952,38 @@ void EditorFileDialog::_update_option_controls() {
19511952
}
19521953
options_dirty = false;
19531954

1954-
while (grid_options->get_child_count() > 0) {
1955-
Node *child = grid_options->get_child(0);
1956-
grid_options->remove_child(child);
1955+
while (flow_checkbox_options->get_child_count() > 0) {
1956+
Node *child = flow_checkbox_options->get_child(0);
1957+
flow_checkbox_options->remove_child(child);
19571958
child->queue_free();
19581959
}
1960+
while (grid_select_options->get_child_count() > 0) {
1961+
Node *child = grid_select_options->get_child(0);
1962+
grid_select_options->remove_child(child);
1963+
child->queue_free();
1964+
}
1965+
19591966
selected_options.clear();
19601967

19611968
for (const EditorFileDialog::Option &opt : options) {
1962-
Label *lbl = memnew(Label);
1963-
lbl->set_text(opt.name);
1964-
grid_options->add_child(lbl);
19651969
if (opt.values.is_empty()) {
19661970
CheckBox *cb = memnew(CheckBox);
19671971
cb->set_pressed(opt.default_idx);
1968-
grid_options->add_child(cb);
1972+
cb->set_text(opt.name);
1973+
flow_checkbox_options->add_child(cb);
19691974
cb->connect(SceneStringName(toggled), callable_mp(this, &EditorFileDialog::_option_changed_checkbox_toggled).bind(opt.name));
19701975
selected_options[opt.name] = (bool)opt.default_idx;
19711976
} else {
1977+
Label *lbl = memnew(Label);
1978+
lbl->set_text(opt.name);
1979+
grid_select_options->add_child(lbl);
1980+
19721981
OptionButton *ob = memnew(OptionButton);
19731982
for (const String &val : opt.values) {
19741983
ob->add_item(val);
19751984
}
19761985
ob->select(opt.default_idx);
1977-
grid_options->add_child(ob);
1986+
grid_select_options->add_child(ob);
19781987
ob->connect(SceneStringName(item_selected), callable_mp(this, &EditorFileDialog::_option_changed_item_selected).bind(opt.name));
19791988
selected_options[opt.name] = opt.default_idx;
19801989
}
@@ -2266,11 +2275,13 @@ void EditorFileDialog::add_side_menu(Control *p_menu, const String &p_title) {
22662275
void EditorFileDialog::_update_side_menu_visibility(bool p_native_dlg) {
22672276
if (p_native_dlg) {
22682277
pathhb->set_visible(false);
2269-
grid_options->set_visible(false);
2278+
flow_checkbox_options->set_visible(false);
2279+
grid_select_options->set_visible(false);
22702280
list_hb->set_visible(false);
22712281
} else {
22722282
pathhb->set_visible(true);
2273-
grid_options->set_visible(true);
2283+
flow_checkbox_options->set_visible(true);
2284+
grid_select_options->set_visible(true);
22742285
list_hb->set_visible(true);
22752286
}
22762287
}
@@ -2372,10 +2383,15 @@ EditorFileDialog::EditorFileDialog() {
23722383
body_hsplit->set_v_size_flags(Control::SIZE_EXPAND_FILL);
23732384
vbc->add_child(body_hsplit);
23742385

2375-
grid_options = memnew(GridContainer);
2376-
grid_options->set_h_size_flags(Control::SIZE_SHRINK_CENTER);
2377-
grid_options->set_columns(2);
2378-
vbc->add_child(grid_options);
2386+
flow_checkbox_options = memnew(HFlowContainer);
2387+
flow_checkbox_options->set_h_size_flags(Control::SIZE_EXPAND_FILL);
2388+
flow_checkbox_options->set_alignment(FlowContainer::ALIGNMENT_CENTER);
2389+
vbc->add_child(flow_checkbox_options);
2390+
2391+
grid_select_options = memnew(GridContainer);
2392+
grid_select_options->set_h_size_flags(Control::SIZE_SHRINK_CENTER);
2393+
grid_select_options->set_columns(2);
2394+
vbc->add_child(grid_select_options);
23792395

23802396
list_hb = memnew(HSplitContainer);
23812397
list_hb->set_h_size_flags(Control::SIZE_EXPAND_FILL);

editor/gui/editor_file_dialog.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
class DependencyRemoveDialog;
4040
class GridContainer;
4141
class HSplitContainer;
42+
class HFlowContainer;
4243
class ItemList;
4344
class MenuButton;
4445
class OptionButton;
@@ -94,7 +95,8 @@ class EditorFileDialog : public ConfirmationDialog {
9495
Button *makedir = nullptr;
9596
Access access = ACCESS_RESOURCES;
9697

97-
GridContainer *grid_options = nullptr;
98+
HFlowContainer *flow_checkbox_options = nullptr;
99+
GridContainer *grid_select_options = nullptr;
98100
VBoxContainer *vbox = nullptr;
99101
FileMode mode = FILE_MODE_SAVE_FILE;
100102
bool can_create_dir = false;

0 commit comments

Comments
 (0)