changeset 17547:01aee9a39e6e draft

(svn r22311) -Add: DropDownListStringItem::NatSortFunc() which can be used as comparator function in DropDownList::sort().
author frosch <frosch@openttd.org>
date Sun, 10 Apr 2011 15:01:14 +0000
parents e7d0a4f1e433
children c0fce44f4000
files src/widgets/dropdown.cpp src/widgets/dropdown_type.h
diffstat 2 files changed, 17 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/widgets/dropdown.cpp
+++ b/src/widgets/dropdown.cpp
@@ -38,6 +38,21 @@
 	DrawString(left + WD_FRAMERECT_LEFT, right - WD_FRAMERECT_RIGHT, top, this->String(), sel ? TC_WHITE : TC_BLACK);
 }
 
+/**
+ * Natural sorting comparator function for DropDownList::sort().
+ * @param first Left side of comparison.
+ * @param second Right side of comparison.
+ * @return true if \a first precedes \a second.
+ * @warning All items in the list need to be derivates of DropDownListStringItem.
+ */
+/* static */ bool DropDownListStringItem::NatSortFunc(const DropDownListItem *first, const DropDownListItem *second)
+{
+	char buffer1[512], buffer2[512];
+	GetString(buffer1, static_cast<const DropDownListStringItem*>(first)->String(), lastof(buffer1));
+	GetString(buffer2, static_cast<const DropDownListStringItem*>(second)->String(), lastof(buffer2));
+	return strnatcmp(buffer1, buffer2) < 0;
+}
+
 StringID DropDownListParamStringItem::String() const
 {
 	for (uint i = 0; i < lengthof(this->decode_params); i++) SetDParam(i, this->decode_params[i]);
--- a/src/widgets/dropdown_type.h
+++ b/src/widgets/dropdown_type.h
@@ -49,6 +49,8 @@
 	virtual uint Width() const;
 	virtual void Draw(int left, int right, int top, int bottom, bool sel, int bg_colour) const;
 	virtual StringID String() const { return this->string; }
+
+	static bool NatSortFunc(const DropDownListItem *first, const DropDownListItem *second);
 };
 
 /**