changeset 9859:f47f2138b166 draft

(svn r14004) -Codechange: Clean of drop down lists. Move empty item drawing to base ListItem Draw() function. Remove String() from base class. Pass correct width to Draw().
author peter1138 <peter1138@openttd.org>
date Wed, 06 Aug 2008 07:10:40 +0000
parents 72659447f872
children b376e0671c3d
files src/player_gui.cpp src/widgets/dropdown.cpp src/widgets/dropdown_type.h
diffstat 3 files changed, 34 insertions(+), 40 deletions(-) [+]
line wrap: on
line diff
--- a/src/player_gui.cpp
+++ b/src/player_gui.cpp
@@ -299,20 +299,25 @@
 
 	virtual ~DropDownListColourItem() {}
 
-	virtual StringID String() const
+	StringID String() const
 	{
 		return _colour_dropdown[this->result];
 	}
 
-	virtual uint Height(uint width) const
+	uint Height(uint width) const
 	{
 		return 14;
 	}
+	
+	bool Selectable() const
+	{
+		return true;
+	}
 
-	virtual void Draw(int x, int y, uint width, uint height, bool sel) const
+	void Draw(int x, int y, uint width, uint height, bool sel, int bg_colour) const
 	{
 		DrawSprite(SPR_VEH_BUS_SIDE_VIEW, PALETTE_RECOLOR_START + this->result, x + 16, y + 7);
-		DrawStringTruncated(x + 32, y + 3, this->String(), sel ? TC_WHITE : TC_BLACK, x + width - 30);
+		DrawStringTruncated(x + 32, y + 3, this->String(), sel ? TC_WHITE : TC_BLACK, width - 30);
 	}
 };
 
--- a/src/widgets/dropdown.cpp
+++ b/src/widgets/dropdown.cpp
@@ -17,19 +17,18 @@
 #include "../table/sprites.h"
 #include "table/strings.h"
 
-StringID DropDownListItem::String() const
+void DropDownListItem::Draw(int x, int y, uint width, uint height, bool sel, int bg_colour) const
 {
-	return STR_NULL;
+	int c1 = _colour_gradient[bg_colour][3];
+	int c2 = _colour_gradient[bg_colour][7];
+
+	GfxFillRect(x + 1, y + 3, x + width - 2, y + 3, c1);
+	GfxFillRect(x + 1, y + 4, x + width - 2, y + 4, c2);
 }
 
-uint DropDownListItem::Height(uint width) const
+void DropDownListStringItem::Draw(int x, int y, uint width, uint height, bool sel, int bg_colour) const
 {
-	return 10;
-}
-
-StringID DropDownListStringItem::String() const
-{
-	return this->string;
+	DrawStringTruncated(x + 2, y, this->String(), sel ? TC_WHITE : TC_BLACK, width);
 }
 
 StringID DropDownListParamStringItem::String() const
@@ -38,11 +37,6 @@
 	return this->string;
 }
 
-void DropDownListItem::Draw(int x, int y, uint width, uint height, bool sel) const
-{
-	DrawStringTruncated(x + 2, y, this->String(), sel ? TC_WHITE : TC_BLACK, x + width);
-}
-
 /**
  * Delete all items of a drop down list and the list itself
  * @param list List to delete.
@@ -106,7 +100,7 @@
 			int item_height = item->Height(width);
 
 			if (y < item_height) {
-				if (item->masked || item->String() == STR_NULL) return false;
+				if (item->masked || !item->Selectable()) return false;
 				value = item->result;
 				return true;
 			}
@@ -125,7 +119,7 @@
 		int y = 2;
 
 		int sel    = this->selected_index;
-		int width  = this->widget[0].right - 3;
+		int width  = this->widget[0].right - 2;
 		int height = this->widget[0].bottom;
 		int pos    = this->vscroll.pos;
 
@@ -139,22 +133,14 @@
 			if (--pos >= 0) continue;
 
 			if (y + item_height < height) {
-				if (item->String() != STR_NULL) {
-					if (sel == item->result) GfxFillRect(x + 1, y, x + width, y + item_height - 1, 0);
+				if (sel == item->result) GfxFillRect(x + 1, y, x + width - 1, y + item_height - 1, 0);
 
-					item->Draw(x, y, width, 10, sel == item->result);
+				item->Draw(x, y, width, height, sel == item->result, (TextColour)this->widget[0].color);
 
-					if (item->masked) {
-						GfxFillRect(x, y, x + width, y + item_height - 1,
-							_colour_gradient[this->widget[0].color][5], FILLRECT_CHECKER
-						);
-					}
-				} else {
-					int c1 = _colour_gradient[this->widget[0].color][3];
-					int c2 = _colour_gradient[this->widget[0].color][7];
-
-					GfxFillRect(x + 1, y + 3, x + this->width - 5, y + 3, c1);
-					GfxFillRect(x + 1, y + 4, x + this->width - 5, y + 4, c2);
+				if (item->masked) {
+					GfxFillRect(x, y, x + width - 1, y + item_height - 1,
+						_colour_gradient[this->widget[0].color][5], FILLRECT_CHECKER
+					);
 				}
 			}
 			y += item_height;
--- a/src/widgets/dropdown_type.h
+++ b/src/widgets/dropdown_type.h
@@ -19,9 +19,10 @@
 
 	DropDownListItem(int result, bool masked) : result(result), masked(masked) {}
 	virtual ~DropDownListItem() {}
-	virtual StringID String() const;
-	virtual uint Height(uint width) const;
-	virtual void Draw(int x, int y, uint width, uint height, bool sel) const;
+
+	virtual bool Selectable() const { return false; }
+	virtual uint Height(uint width) const { return 10; }
+	virtual void Draw(int x, int y, uint width, uint height, bool sel, int bg_colour) const;
 };
 
 /**
@@ -34,7 +35,9 @@
 	DropDownListStringItem(StringID string, int result, bool masked) : DropDownListItem(result, masked), string(string) {}
 	virtual ~DropDownListStringItem() {}
 
-	StringID String() const;
+	virtual bool Selectable() const { return true; }
+	virtual void Draw(int x, int y, uint width, uint height, bool sel, int bg_colour) const;
+	virtual StringID String() const { return this->string; }
 };
 
 /**
@@ -47,8 +50,8 @@
 	DropDownListParamStringItem(StringID string, int result, bool masked) : DropDownListStringItem(string, result, masked) {}
 	virtual ~DropDownListParamStringItem() {}
 
-	StringID String() const;
-	void SetParam(uint index, uint64 value) { decode_params[index] = value; }
+	virtual StringID String() const;
+	virtual void SetParam(uint index, uint64 value) { decode_params[index] = value; }
 };
 
 /**