Mercurial > hg > openttd
changeset 9869:3cc11b73fa26 draft
(svn r14015) -Codechange: Add facility for a drop down list to always close (if requested) when the mouse button is released.
author | peter1138 <peter1138@openttd.org> |
---|---|
date | Thu, 07 Aug 2008 18:26:13 +0000 |
parents | d06bace3c21c |
children | 3f5460dfb6ea |
files | src/widgets/dropdown.cpp src/widgets/dropdown_type.h |
diffstat | 2 files changed, 17 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/widgets/dropdown.cpp +++ b/src/widgets/dropdown.cpp @@ -71,6 +71,7 @@ int selected_index; byte click_delay; bool drag_mode; + bool instant_close; int scrolling; DropdownWindow(int x, int y, int width, int height, const Widget *widget) : Window(x, y, width, height, WC_DROPDOWN_MENU, widget) @@ -196,7 +197,17 @@ if (!_left_button_clicked) { this->drag_mode = false; - if (!this->GetDropDownItem(item)) return; + if (!this->GetDropDownItem(item)) { + if (this->instant_close) { + if (GetWidgetFromPos(w2, _cursor.pos.x - w2->left, _cursor.pos.y - w2->top) == this->parent_button) { + /* Send event for selected option if we're still + * on the parent button of the list. */ + w2->OnDropdownSelect(this->parent_button, this->selected_index); + } + delete this; + } + return; + } this->click_delay = 2; } else { if (_cursor.pos.y <= this->top + 2) { @@ -218,7 +229,7 @@ } }; -void ShowDropDownList(Window *w, DropDownList *list, int selected, int button, uint width) +void ShowDropDownList(Window *w, DropDownList *list, int selected, int button, uint width, bool instant_close) { bool is_dropdown_menu_shown = w->IsWidgetLowered(button); @@ -327,6 +338,7 @@ dw->selected_index = selected; dw->click_delay = 0; dw->drag_mode = true; + dw->instant_close = instant_close; } void ShowDropDownMenu(Window *w, const StringID *strings, int selected, int button, uint32 disabled_mask, uint32 hidden_mask, uint width)
--- a/src/widgets/dropdown_type.h +++ b/src/widgets/dropdown_type.h @@ -72,7 +72,9 @@ * @param width Override the width determined by the selected widget. * If UINT_MAX then the width is determined by the widest item * in the list. + * @param instant_close Set to true if releasing mouse button should close the + * list regardless of where the cursor is. */ -void ShowDropDownList(Window *w, DropDownList *list, int selected, int button, uint width = 0); +void ShowDropDownList(Window *w, DropDownList *list, int selected, int button, uint width = 0, bool instant_close = false); #endif /* WIDGETS_DROPDOWN_TYPE_H */