changeset 19810:c6b37b66f220 draft

(svn r24743) -Change: Unify the behaviour of ESC in filter editboxes.
author frosch <frosch@openttd.org>
date Wed, 14 Nov 2012 22:50:39 +0000 (2012-11-14)
parents 4df2993a99a6
children db165b9880ca
files src/network/network_content_gui.cpp src/newgrf_gui.cpp src/querystring_gui.h src/settings_gui.cpp src/signs_gui.cpp src/window.cpp
diffstat 6 files changed, 30 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/network/network_content_gui.cpp
+++ b/src/network/network_content_gui.cpp
@@ -418,6 +418,7 @@
 		this->GetWidget<NWidgetStacked>(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);
 
--- a/src/newgrf_gui.cpp
+++ b/src/newgrf_gui.cpp
@@ -639,6 +639,7 @@
 		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);
--- a/src/querystring_gui.h
+++ b/src/querystring_gui.h
@@ -31,6 +31,11 @@
  * 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 @@
 	 * @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)
 	{
 	}
 
--- a/src/settings_gui.cpp
+++ b/src/settings_gui.cpp
@@ -2004,6 +2004,7 @@
 		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();
--- a/src/signs_gui.cpp
+++ b/src/signs_gui.cpp
@@ -159,7 +159,7 @@
 		/* 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 */
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -2265,6 +2265,8 @@
 	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 @@
 		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 @@
 			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;
 }