Merge pull request #81178 from KoBeWi/ok_bummer

Rework AcceptDialog's ok button text
This commit is contained in:
Thaddeus Crews
2025-03-11 19:54:38 -05:00
4 changed files with 47 additions and 20 deletions

View File

@ -73,8 +73,8 @@
</member> </member>
<member name="exclusive" type="bool" setter="set_exclusive" getter="is_exclusive" overrides="Window" default="true" /> <member name="exclusive" type="bool" setter="set_exclusive" getter="is_exclusive" overrides="Window" default="true" />
<member name="keep_title_visible" type="bool" setter="set_keep_title_visible" getter="get_keep_title_visible" overrides="Window" default="true" /> <member name="keep_title_visible" type="bool" setter="set_keep_title_visible" getter="get_keep_title_visible" overrides="Window" default="true" />
<member name="ok_button_text" type="String" setter="set_ok_button_text" getter="get_ok_button_text" default="&quot;OK&quot;"> <member name="ok_button_text" type="String" setter="set_ok_button_text" getter="get_ok_button_text" default="&quot;&quot;">
The text displayed by the OK button (see [method get_ok_button]). The text displayed by the OK button (see [method get_ok_button]). If empty, a default text will be used.
</member> </member>
<member name="title" type="String" setter="set_title" getter="get_title" overrides="Window" default="&quot;Alert!&quot;" /> <member name="title" type="String" setter="set_title" getter="get_title" overrides="Window" default="&quot;Alert!&quot;" />
<member name="transient" type="bool" setter="set_transient" getter="is_transient" overrides="Window" default="true" /> <member name="transient" type="bool" setter="set_transient" getter="is_transient" overrides="Window" default="true" />

View File

@ -197,16 +197,12 @@ bool AcceptDialog::has_autowrap() {
} }
void AcceptDialog::set_ok_button_text(String p_ok_button_text) { void AcceptDialog::set_ok_button_text(String p_ok_button_text) {
ok_button->set_text(p_ok_button_text); ok_text = p_ok_button_text;
_update_ok_text();
child_controls_changed();
if (is_visible()) {
_update_child_rects();
}
} }
String AcceptDialog::get_ok_button_text() const { String AcceptDialog::get_ok_button_text() const {
return ok_button->get_text(); return ok_text;
} }
void AcceptDialog::register_text_enter(LineEdit *p_line_edit) { void AcceptDialog::register_text_enter(LineEdit *p_line_edit) {
@ -257,6 +253,25 @@ void AcceptDialog::_update_child_rects() {
} }
} }
void AcceptDialog::_update_ok_text() {
String prev_text = ok_button->get_text();
String new_text = internal_ok_text;
if (!ok_text.is_empty()) {
new_text = ok_text;
}
if (new_text == prev_text) {
return;
}
ok_button->set_text(new_text);
child_controls_changed();
if (is_visible()) {
_update_child_rects();
}
}
Size2 AcceptDialog::_get_contents_minimum_size() const { Size2 AcceptDialog::_get_contents_minimum_size() const {
// First, we then iterate over the label and any other custom controls // First, we then iterate over the label and any other custom controls
// to try and find the size that encompasses all content. // to try and find the size that encompasses all content.
@ -294,6 +309,11 @@ Size2 AcceptDialog::_get_contents_minimum_size() const {
return content_minsize; return content_minsize;
} }
void AcceptDialog::set_internal_ok_text(const String &p_text) {
internal_ok_text = p_text;
_update_ok_text();
}
void AcceptDialog::_custom_action(const String &p_action) { void AcceptDialog::_custom_action(const String &p_action) {
emit_signal(SNAME("custom_action"), p_action); emit_signal(SNAME("custom_action"), p_action);
custom_action(p_action); custom_action(p_action);
@ -442,7 +462,7 @@ AcceptDialog::AcceptDialog() {
buttons_hbox->add_spacer(); buttons_hbox->add_spacer();
ok_button = memnew(Button); ok_button = memnew(Button);
ok_button->set_text(ETR("OK")); set_internal_ok_text(ETR("OK"));
buttons_hbox->add_child(ok_button); buttons_hbox->add_child(ok_button);
buttons_hbox->add_spacer(); buttons_hbox->add_spacer();

View File

@ -51,6 +51,9 @@ class AcceptDialog : public Window {
Button *ok_button = nullptr; Button *ok_button = nullptr;
bool popped_up = false; bool popped_up = false;
String ok_text;
String internal_ok_text;
bool hide_on_ok = true; bool hide_on_ok = true;
bool close_on_escape = true; bool close_on_escape = true;
@ -64,6 +67,7 @@ class AcceptDialog : public Window {
void _custom_action(const String &p_action); void _custom_action(const String &p_action);
void _custom_button_visibility_changed(Button *button); void _custom_button_visibility_changed(Button *button);
void _update_child_rects(); void _update_child_rects();
void _update_ok_text();
static bool swap_cancel_ok; static bool swap_cancel_ok;
@ -81,6 +85,8 @@ protected:
virtual void cancel_pressed() {} virtual void cancel_pressed() {}
virtual void custom_action(const String &) {} virtual void custom_action(const String &) {}
void set_internal_ok_text(const String &p_text);
// Not private since used by derived classes signal. // Not private since used by derived classes signal.
void _text_submitted(const String &p_text); void _text_submitted(const String &p_text);
void _ok_pressed(); void _ok_pressed();

View File

@ -669,10 +669,10 @@ void FileDialog::deselect_all() {
switch (mode) { switch (mode) {
case FILE_MODE_OPEN_FILE: case FILE_MODE_OPEN_FILE:
case FILE_MODE_OPEN_FILES: case FILE_MODE_OPEN_FILES:
set_ok_button_text(ETR("Open")); set_internal_ok_text(ETR("Open"));
break; break;
case FILE_MODE_OPEN_DIR: case FILE_MODE_OPEN_DIR:
set_ok_button_text(ETR("Select Current Folder")); set_internal_ok_text(ETR("Select Current Folder"));
break; break;
case FILE_MODE_OPEN_ANY: case FILE_MODE_OPEN_ANY:
set_ok_button_text(ETR("Open")); set_ok_button_text(ETR("Open"));
@ -698,14 +698,14 @@ void FileDialog::_tree_selected() {
if (!d["dir"]) { if (!d["dir"]) {
file->set_text(d["name"]); file->set_text(d["name"]);
if (mode == FILE_MODE_SAVE_FILE) { if (mode == FILE_MODE_SAVE_FILE) {
set_ok_button_text(ETR("Save")); set_internal_ok_text(ETR("Save"));
} else { } else {
set_ok_button_text(ETR("Open")); set_internal_ok_text(ETR("Open"));
} }
} else if (mode == FILE_MODE_OPEN_DIR || mode == FILE_MODE_OPEN_ANY || !dir_access->file_exists(file->get_text())) { } else if (mode == FILE_MODE_OPEN_DIR || mode == FILE_MODE_OPEN_ANY || !dir_access->file_exists(file->get_text())) {
file->set_text(""); file->set_text("");
if (mode == FILE_MODE_OPEN_DIR || mode == FILE_MODE_OPEN_ANY) { if (mode == FILE_MODE_OPEN_DIR || mode == FILE_MODE_OPEN_ANY) {
set_ok_button_text(ETR("Select This Folder")); set_internal_ok_text(ETR("Select This Folder"));
} }
} }
@ -1235,35 +1235,35 @@ void FileDialog::set_file_mode(FileMode p_mode) {
mode = p_mode; mode = p_mode;
switch (mode) { switch (mode) {
case FILE_MODE_OPEN_FILE: case FILE_MODE_OPEN_FILE:
set_ok_button_text(ETR("Open")); set_internal_ok_text(ETR("Open"));
if (mode_overrides_title) { if (mode_overrides_title) {
set_title(ETR("Open a File")); set_title(ETR("Open a File"));
} }
makedir->hide(); makedir->hide();
break; break;
case FILE_MODE_OPEN_FILES: case FILE_MODE_OPEN_FILES:
set_ok_button_text(ETR("Open")); set_internal_ok_text(ETR("Open"));
if (mode_overrides_title) { if (mode_overrides_title) {
set_title(ETR("Open File(s)")); set_title(ETR("Open File(s)"));
} }
makedir->hide(); makedir->hide();
break; break;
case FILE_MODE_OPEN_DIR: case FILE_MODE_OPEN_DIR:
set_ok_button_text(ETR("Select Current Folder")); set_internal_ok_text(ETR("Select Current Folder"));
if (mode_overrides_title) { if (mode_overrides_title) {
set_title(ETR("Open a Directory")); set_title(ETR("Open a Directory"));
} }
makedir->show(); makedir->show();
break; break;
case FILE_MODE_OPEN_ANY: case FILE_MODE_OPEN_ANY:
set_ok_button_text(ETR("Open")); set_internal_ok_text(ETR("Open"));
if (mode_overrides_title) { if (mode_overrides_title) {
set_title(ETR("Open a File or Directory")); set_title(ETR("Open a File or Directory"));
} }
makedir->show(); makedir->show();
break; break;
case FILE_MODE_SAVE_FILE: case FILE_MODE_SAVE_FILE:
set_ok_button_text(ETR("Save")); set_internal_ok_text(ETR("Save"));
if (mode_overrides_title) { if (mode_overrides_title) {
set_title(ETR("Save a File")); set_title(ETR("Save a File"));
} }
@ -1886,6 +1886,7 @@ FileDialog::FileDialog() {
set_hide_on_ok(false); set_hide_on_ok(false);
set_size(Size2(640, 360)); set_size(Size2(640, 360));
set_internal_ok_text(ETR("Save")); // Default mode text.
if (register_func) { if (register_func) {
register_func(this); register_func(this);