From cf52b683c0a478b113bd25893f49554906edb32f Mon Sep 17 00:00:00 2001 From: peter1138 Date: Mon, 25 Aug 2008 16:07:10 +0000 Subject: [PATCH] (svn r14168) -Codechange: Make dropdown 'auto_width' a separate parameter, so that a minimum width can be specified. --- src/widgets/dropdown.cpp | 15 ++++++++------- src/widgets/dropdown_type.h | 5 ++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/widgets/dropdown.cpp b/src/widgets/dropdown.cpp index f04c72764a..23f87a2cf4 100644 --- a/src/widgets/dropdown.cpp +++ b/src/widgets/dropdown.cpp @@ -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); @@ -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 */ 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) { /* Find the longest item in the list */ - width = 0; for (DropDownList::const_iterator it = list->begin(); it != list->end(); ++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 */ @@ -297,10 +296,12 @@ void ShowDropDownList(Window *w, DropDownList *list, int selected, int button, u scroll = true; /* Add space for the scroll bar if we automatically determined * 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( w->left + wi->left, top, diff --git a/src/widgets/dropdown_type.h b/src/widgets/dropdown_type.h index f3a5f79761..086e5717d1 100644 --- a/src/widgets/dropdown_type.h +++ b/src/widgets/dropdown_type.h @@ -70,11 +70,10 @@ typedef std::list DropDownList; * @param button The widget within the parent window that is used to determine * the list's location. * @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 auto_width Maximum 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, 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 */