(svn r14168) -Codechange: Make dropdown 'auto_width' a separate parameter, so that a minimum width can be specified.

replace/41b28d7194a279bdc17475d4fbe2ea6ec885a466
peter1138 16 years ago
parent 621a9b647a
commit cf52b683c0

@ -229,7 +229,7 @@ struct DropdownWindow : Window {
} }
}; };
void ShowDropDownList(Window *w, DropDownList *list, int selected, int button, uint width, bool instant_close) void ShowDropDownList(Window *w, DropDownList *list, int selected, int button, uint width, bool auto_width, bool instant_close)
{ {
bool is_dropdown_menu_shown = w->IsWidgetLowered(button); bool is_dropdown_menu_shown = w->IsWidgetLowered(button);
@ -250,17 +250,16 @@ void ShowDropDownList(Window *w, DropDownList *list, int selected, int button, u
/* The preferred position is just below the dropdown calling widget */ /* The preferred position is just below the dropdown calling widget */
int top = w->top + wi->bottom + 1; int top = w->top + wi->bottom + 1;
bool auto_width = (width == UINT_MAX); if (width == 0) width = wi->right - wi->left + 1;
uint max_item_width = 0;
if (auto_width) { if (auto_width) {
/* Find the longest item in the list */ /* Find the longest item in the list */
width = 0;
for (DropDownList::const_iterator it = list->begin(); it != list->end(); ++it) { for (DropDownList::const_iterator it = list->begin(); it != list->end(); ++it) {
const DropDownListItem *item = *it; const DropDownListItem *item = *it;
width = max(width, item->Width() + 5); max_item_width = max(max_item_width, item->Width() + 5);
} }
} else if (width == 0) {
width = wi->right - wi->left + 1;
} }
/* Total length of list */ /* Total length of list */
@ -297,10 +296,12 @@ void ShowDropDownList(Window *w, DropDownList *list, int selected, int button, u
scroll = true; scroll = true;
/* Add space for the scroll bar if we automatically determined /* Add space for the scroll bar if we automatically determined
* the width of the list. */ * the width of the list. */
if (auto_width) width += 12; max_item_width += 12;
} }
} }
if (auto_width) width = max(width, max_item_width);
DropdownWindow *dw = new DropdownWindow( DropdownWindow *dw = new DropdownWindow(
w->left + wi->left, w->left + wi->left,
top, top,

@ -70,11 +70,10 @@ typedef std::list<DropDownListItem *> DropDownList;
* @param button The widget within the parent window that is used to determine * @param button The widget within the parent window that is used to determine
* the list's location. * the list's location.
* @param width Override the width determined by the selected widget. * @param width Override the width determined by the selected widget.
* If UINT_MAX then the width is determined by the widest item * @param auto_width Maximum width is determined by the widest item in the list.
* in the list.
* @param instant_close Set to true if releasing mouse button should close the * @param instant_close Set to true if releasing mouse button should close the
* list regardless of where the cursor is. * list regardless of where the cursor is.
*/ */
void ShowDropDownList(Window *w, DropDownList *list, int selected, int button, uint width = 0, bool instant_close = false); void ShowDropDownList(Window *w, DropDownList *list, int selected, int button, uint width = 0, bool auto_width = false, bool instant_close = false);
#endif /* WIDGETS_DROPDOWN_TYPE_H */ #endif /* WIDGETS_DROPDOWN_TYPE_H */

Loading…
Cancel
Save