(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().
pull/155/head
peter1138 16 years ago
parent 6532897b5a
commit 76b0ffd342

@ -299,20 +299,25 @@ public:
virtual ~DropDownListColourItem() {} virtual ~DropDownListColourItem() {}
virtual StringID String() const StringID String() const
{ {
return _colour_dropdown[this->result]; return _colour_dropdown[this->result];
} }
virtual uint Height(uint width) const uint Height(uint width) const
{ {
return 14; 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); 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);
} }
}; };

@ -17,19 +17,18 @@
#include "../table/sprites.h" #include "../table/sprites.h"
#include "table/strings.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 GfxFillRect(x + 1, y + 3, x + width - 2, y + 3, c1);
{ GfxFillRect(x + 1, y + 4, x + width - 2, y + 4, c2);
return 10;
} }
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 StringID DropDownListParamStringItem::String() const
@ -38,11 +37,6 @@ StringID DropDownListParamStringItem::String() const
return this->string; 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 * Delete all items of a drop down list and the list itself
* @param list List to delete. * @param list List to delete.
@ -106,7 +100,7 @@ struct DropdownWindow : Window {
int item_height = item->Height(width); int item_height = item->Height(width);
if (y < item_height) { if (y < item_height) {
if (item->masked || item->String() == STR_NULL) return false; if (item->masked || !item->Selectable()) return false;
value = item->result; value = item->result;
return true; return true;
} }
@ -125,7 +119,7 @@ struct DropdownWindow : Window {
int y = 2; int y = 2;
int sel = this->selected_index; 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 height = this->widget[0].bottom;
int pos = this->vscroll.pos; int pos = this->vscroll.pos;
@ -139,22 +133,14 @@ struct DropdownWindow : Window {
if (--pos >= 0) continue; if (--pos >= 0) continue;
if (y + item_height < height) { if (y + item_height < height) {
if (item->String() != STR_NULL) { if (sel == item->result) GfxFillRect(x + 1, y, x + width - 1, y + item_height - 1, 0);
if (sel == item->result) GfxFillRect(x + 1, y, x + width, y + item_height - 1, 0);
item->Draw(x, y, width, height, sel == item->result, (TextColour)this->widget[0].color);
item->Draw(x, y, width, 10, sel == item->result);
if (item->masked) {
if (item->masked) { GfxFillRect(x, y, x + width - 1, y + item_height - 1,
GfxFillRect(x, y, x + width, y + item_height - 1, _colour_gradient[this->widget[0].color][5], FILLRECT_CHECKER
_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);
} }
} }
y += item_height; y += item_height;

@ -19,9 +19,10 @@ public:
DropDownListItem(int result, bool masked) : result(result), masked(masked) {} DropDownListItem(int result, bool masked) : result(result), masked(masked) {}
virtual ~DropDownListItem() {} virtual ~DropDownListItem() {}
virtual StringID String() const;
virtual uint Height(uint width) const; virtual bool Selectable() const { return false; }
virtual void Draw(int x, int y, uint width, uint height, bool sel) const; 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) {} DropDownListStringItem(StringID string, int result, bool masked) : DropDownListItem(result, masked), string(string) {}
virtual ~DropDownListStringItem() {} 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) {} DropDownListParamStringItem(StringID string, int result, bool masked) : DropDownListStringItem(string, result, masked) {}
virtual ~DropDownListParamStringItem() {} virtual ~DropDownListParamStringItem() {}
StringID String() const; virtual StringID String() const;
void SetParam(uint index, uint64 value) { decode_params[index] = value; } virtual void SetParam(uint index, uint64 value) { decode_params[index] = value; }
}; };
/** /**

Loading…
Cancel
Save