From fc2b12acca38964ed91d35e3d5c4aae20d992e7f Mon Sep 17 00:00:00 2001 From: frosch Date: Tue, 13 Nov 2012 21:47:13 +0000 Subject: [PATCH] (svn r24735) -Codechange: Move HandleEditBoxKey to Window class. --- src/misc_gui.cpp | 27 --------------------------- src/querystring_gui.h | 2 -- src/window.cpp | 43 +++++++++++++++++++++++++++++++++++++++++-- src/window_gui.h | 2 ++ 4 files changed, 43 insertions(+), 31 deletions(-) diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index fbd3345e25..1391dbada5 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -811,33 +811,6 @@ void QueryString::DrawEditBox(const Window *w, int wid) const _cur_dpi = old_dpi; } -EventState QueryStringBaseWindow::HandleEditBoxKey(int wid, uint16 key, uint16 keycode) -{ - EventState state = ES_NOT_HANDLED; - switch (this->QueryString::HandleEditBoxKey(this, wid, key, keycode, state)) { - case HEBR_EDITING: - this->OnEditboxChanged(wid); - break; - - case HEBR_CONFIRM: - if (this->ok_button >= 0) { - this->OnClick(Point(), this->ok_button, 1); - } - break; - - case HEBR_CANCEL: - if (this->cancel_button >= 0) { - this->OnClick(Point(), this->cancel_button, 1); - } else { - this->UnfocusFocusedWidget(); - } - break; - - default: break; - } - return state; -} - /** Class for the string query window. */ struct QueryStringWindow : public QueryStringBaseWindow { diff --git a/src/querystring_gui.h b/src/querystring_gui.h index 9e9c236813..0eebd62068 100644 --- a/src/querystring_gui.h +++ b/src/querystring_gui.h @@ -77,8 +77,6 @@ struct QueryStringBaseWindow : public Window, public QueryString { { free(this->edit_str_buf); } - - EventState HandleEditBoxKey(int wid, uint16 key, uint16 keycode); }; void ShowOnScreenKeyboard(QueryStringBaseWindow *parent, int button); diff --git a/src/window.cpp b/src/window.cpp index 23db475f40..8aa932859c 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -2233,6 +2233,46 @@ static bool MaybeBringWindowToFront(Window *w) return true; } +/** + * Process keypress for editbox widget. + * @param wid Editbox widget. + * @param key the Unicode value of the key. + * @param keycode the untranslated key code including shift state. + * @return #ES_HANDLED if the key press has been handled and no other + * window should receive the event. + */ +EventState Window::HandleEditBoxKey(int wid, uint16 key, uint16 keycode) +{ + EventState state = ES_NOT_HANDLED; + + QueryString *query = dynamic_cast(this); + if (query == NULL) return state; + + switch (query->HandleEditBoxKey(this, wid, key, keycode, state)) { + case HEBR_EDITING: + this->OnEditboxChanged(wid); + break; + + case HEBR_CONFIRM: + if (query->ok_button >= 0) { + this->OnClick(Point(), query->ok_button, 1); + } + break; + + case HEBR_CANCEL: + if (query->cancel_button >= 0) { + this->OnClick(Point(), query->cancel_button, 1); + } else { + this->UnfocusFocusedWidget(); + } + break; + + default: break; + } + + return state; +} + /** * Handle keyboard input. * @param raw_key Lower 8 bits contain the ASCII character, the higher 16 bits the keycode @@ -2267,8 +2307,7 @@ void HandleKeypress(uint32 raw_key) if (_focused_window->window_class == WC_CONSOLE) { if (_focused_window->OnKeyPress(key, keycode) == ES_HANDLED) return; } else { - QueryStringBaseWindow *query = dynamic_cast(_focused_window); - if (query != NULL && query->HandleEditBoxKey(_focused_window->nested_focus->index, key, keycode) == ES_HANDLED) return; + if (_focused_window->HandleEditBoxKey(_focused_window->nested_focus->index, key, keycode) == ES_HANDLED) return; } } diff --git a/src/window_gui.h b/src/window_gui.h index da88369935..ca93ee091f 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -458,6 +458,8 @@ public: void UnfocusFocusedWidget(); bool SetFocusedWidget(byte widget_index); + EventState HandleEditBoxKey(int wid, uint16 key, uint16 keycode); + void HandleButtonClick(byte widget); int GetRowFromWidget(int clickpos, int widget, int padding, int line_height = -1) const;