From 76b0ffd342c50798d27e85dcdf9a1e573defb8f0 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Wed, 6 Aug 2008 07:10:40 +0000 Subject: [PATCH] (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(). --- src/player_gui.cpp | 13 ++++++---- src/widgets/dropdown.cpp | 48 +++++++++++++------------------------ src/widgets/dropdown_type.h | 15 +++++++----- 3 files changed, 35 insertions(+), 41 deletions(-) diff --git a/src/player_gui.cpp b/src/player_gui.cpp index 16d3debdbd..50177686f8 100644 --- a/src/player_gui.cpp +++ b/src/player_gui.cpp @@ -299,20 +299,25 @@ public: 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); } }; diff --git a/src/widgets/dropdown.cpp b/src/widgets/dropdown.cpp index ecdba6a64d..41975a59fe 100644 --- 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]; -uint DropDownListItem::Height(uint width) const -{ - return 10; + GfxFillRect(x + 1, y + 3, x + width - 2, y + 3, c1); + GfxFillRect(x + 1, y + 4, x + width - 2, y + 4, c2); } -StringID DropDownListStringItem::String() const +void DropDownListStringItem::Draw(int x, int y, uint width, uint height, bool sel, int bg_colour) const { - return this->string; + DrawStringTruncated(x + 2, y, this->String(), sel ? TC_WHITE : TC_BLACK, width); } StringID DropDownListParamStringItem::String() const @@ -38,11 +37,6 @@ StringID DropDownListParamStringItem::String() const 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 @@ struct DropdownWindow : Window { 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 @@ struct DropdownWindow : Window { 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 @@ struct DropdownWindow : Window { 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); - - item->Draw(x, y, width, 10, sel == item->result); - - 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 (sel == item->result) GfxFillRect(x + 1, y, x + width - 1, y + item_height - 1, 0); + + item->Draw(x, y, width, height, sel == item->result, (TextColour)this->widget[0].color); + + 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; diff --git a/src/widgets/dropdown_type.h b/src/widgets/dropdown_type.h index 3cdb48f87b..aa4baafe1f 100644 --- a/src/widgets/dropdown_type.h +++ b/src/widgets/dropdown_type.h @@ -19,9 +19,10 @@ public: 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 @@ public: 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 @@ public: 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; } }; /**