From c283a412485700ab8e81a374f080c1ef94fbf64d Mon Sep 17 00:00:00 2001 From: frosch Date: Wed, 14 Nov 2012 22:50:39 +0000 Subject: [PATCH] (svn r24743) -Change: Unify the behaviour of ESC in filter editboxes. --- src/network/network_content_gui.cpp | 1 + src/newgrf_gui.cpp | 1 + src/querystring_gui.h | 7 ++++++- src/settings_gui.cpp | 1 + src/signs_gui.cpp | 2 +- src/window.cpp | 21 ++++++++++++++++++++- 6 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 21476c65fd..9f8ee75c65 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -418,6 +418,7 @@ public: this->GetWidget(WID_NCL_SEL_ALL_UPDATE)->SetDisplayedPlane(select_all); this->querystrings[WID_NCL_FILTER] = &this->filter_editbox; + this->filter_editbox.cancel_button = QueryString::ACTION_CLEAR; this->filter_editbox.afilter = CS_ALPHANUMERAL; this->SetFocusedWidget(WID_NCL_FILTER); diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index bf6487d10d..c5abe1198b 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -639,6 +639,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { this->FinishInitNested(desc, WN_GAME_OPTIONS_NEWGRF_STATE); this->querystrings[WID_NS_FILTER] = &this->filter_editbox; + this->filter_editbox.cancel_button = QueryString::ACTION_CLEAR; this->SetFocusedWidget(WID_NS_FILTER); this->avails.SetListing(this->last_sorting); diff --git a/src/querystring_gui.h b/src/querystring_gui.h index 5c46ced846..a84e167461 100644 --- a/src/querystring_gui.h +++ b/src/querystring_gui.h @@ -31,6 +31,11 @@ enum HandleEditBoxResult * Data stored about a string that can be modified in the GUI */ struct QueryString { + /* Special actions when hitting ENTER or ESC. (only keyboard, not OSK) */ + static const int ACTION_NOTHING = -1; ///< Nothing. + static const int ACTION_DESELECT = -2; ///< Deselect editbox. + static const int ACTION_CLEAR = -3; ///< Clear editbox. + StringID caption; int ok_button; ///< Widget button of parent window to simulate when pressing OK in OSK. int cancel_button; ///< Widget button of parent window to simulate when pressing CANCEL in OSK. @@ -44,7 +49,7 @@ struct QueryString { * @param size Maximum size in bytes. * @param chars Maximum size in chars. */ - QueryString(uint16 size, uint16 chars = UINT16_MAX) : ok_button(-1), cancel_button(-1), text(size, chars), orig(NULL) + QueryString(uint16 size, uint16 chars = UINT16_MAX) : ok_button(ACTION_NOTHING), cancel_button(ACTION_DESELECT), text(size, chars), orig(NULL) { } diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 8cef170d42..85a53f4bf4 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -2004,6 +2004,7 @@ struct GameSettingsWindow : Window { this->FinishInitNested(desc, WN_GAME_OPTIONS_GAME_SETTINGS); this->querystrings[WID_GS_FILTER] = &this->filter_editbox; + this->filter_editbox.cancel_button = QueryString::ACTION_CLEAR; this->SetFocusedWidget(WID_GS_FILTER); this->InvalidateData(); diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index c3b1d490ec..d982fe5ec5 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -159,7 +159,7 @@ struct SignListWindow : Window, SignList { /* Initialize the text edit widget */ this->querystrings[WID_SIL_FILTER_TEXT] = &this->filter_editbox; this->filter_editbox.ok_button = WID_SIL_FILTER_ENTER_BTN; - this->filter_editbox.cancel_button = WID_SIL_FILTER_CLEAR_BTN; + this->filter_editbox.cancel_button = QueryString::ACTION_CLEAR; this->filter_editbox.afilter = CS_ALPHANUMERAL; /* Initialize the filtering variables */ diff --git a/src/window.cpp b/src/window.cpp index 665fabcf82..088233fc04 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -2265,6 +2265,8 @@ EventState Window::HandleEditBoxKey(int wid, uint16 key, uint16 keycode) QueryString *query = this->GetQueryString(wid); if (query == NULL) return state; + int action = QueryString::ACTION_NOTHING; + switch (query->HandleEditBoxKey(this, wid, key, keycode, state)) { case HEBR_EDITING: this->OnEditboxChanged(wid); @@ -2273,6 +2275,8 @@ EventState Window::HandleEditBoxKey(int wid, uint16 key, uint16 keycode) case HEBR_CONFIRM: if (query->ok_button >= 0) { this->OnClick(Point(), query->ok_button, 1); + } else { + action = query->ok_button; } break; @@ -2280,13 +2284,28 @@ EventState Window::HandleEditBoxKey(int wid, uint16 key, uint16 keycode) if (query->cancel_button >= 0) { this->OnClick(Point(), query->cancel_button, 1); } else { - this->UnfocusFocusedWidget(); + action = query->cancel_button; } break; default: break; } + switch (action) { + case QueryString::ACTION_DESELECT: + this->UnfocusFocusedWidget(); + break; + + case QueryString::ACTION_CLEAR: + query->text.DeleteAll(); + this->SetWidgetDirty(wid); + this->OnEditboxChanged(wid); + break; + + default: + break; + } + return state; }