summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpeter1138 <peter1138@openttd.org>2008-08-25 16:07:10 +0000
committerpeter1138 <peter1138@openttd.org>2008-08-25 16:07:10 +0000
commitcf52b683c0a478b113bd25893f49554906edb32f (patch)
tree1c9cac48ba290d508e4fe24d4954bff973041075
parent621a9b647afce6a9d8172bea6c8f781f5151bb29 (diff)
downloadopenttd-cf52b683c0a478b113bd25893f49554906edb32f.tar.xz
(svn r14168) -Codechange: Make dropdown 'auto_width' a separate parameter, so that a minimum width can be specified.
-rw-r--r--src/widgets/dropdown.cpp15
-rw-r--r--src/widgets/dropdown_type.h5
2 files changed, 10 insertions, 10 deletions
diff --git a/src/widgets/dropdown.cpp b/src/widgets/dropdown.cpp
index f04c72764..23f87a2cf 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 f3a5f7976..086e5717d 100644
--- a/src/widgets/dropdown_type.h
+++ b/src/widgets/dropdown_type.h
@@ -70,11 +70,10 @@ typedef std::list<DropDownListItem *> 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 */