diff options
author | peter1138 <peter1138@openttd.org> | 2008-04-12 22:19:34 +0000 |
---|---|---|
committer | peter1138 <peter1138@openttd.org> | 2008-04-12 22:19:34 +0000 |
commit | a3e2d8f577aee76079319a5722f210889684ab79 (patch) | |
tree | a2f717d926db096f0eadba9969b2c771af5251d0 | |
parent | 447a31b7027245fc416e6186c7a30ebbcacb00df (diff) | |
download | openttd-a3e2d8f577aee76079319a5722f210889684ab79.tar.xz |
(svn r12676) -Codechange: Reinstate colour selection buses, absent since r6455.
-rw-r--r-- | src/player_gui.cpp | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/src/player_gui.cpp b/src/player_gui.cpp index efcc3eabd..0aa66aeae 100644 --- a/src/player_gui.cpp +++ b/src/player_gui.cpp @@ -29,6 +29,7 @@ #include "string_func.h" #include "settings_type.h" #include "widgets/dropdown_func.h" +#include "widgets/dropdown_type.h" #include "table/sprites.h" #include "table/strings.h" @@ -283,7 +284,6 @@ static const StringID _colour_dropdown[] = { STR_00DE_BROWN, STR_00DF_GREY, STR_00E0_WHITE, - INVALID_STRING_ID }; /* Association of liveries to livery classes */ @@ -324,6 +324,29 @@ enum PlayerLiveryWindowWidgets { PLW_WIDGET_MATRIX, }; +class DropDownListColourItem : public DropDownListItem { +public: + DropDownListColourItem(int result, bool masked) : DropDownListItem(result, masked) {} + + virtual ~DropDownListColourItem() {} + + virtual StringID String() const + { + return _colour_dropdown[this->result]; + } + + virtual uint Height(uint width) const + { + return 14; + } + + virtual void Draw(int x, int y, uint width, uint height, bool sel) 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); + } +}; + static void ShowColourDropDownMenu(Window *w, uint32 widget) { uint32 used_colours = 0; @@ -345,7 +368,12 @@ static void ShowColourDropDownMenu(Window *w, uint32 widget) if (scheme == LS_END) scheme = LS_DEFAULT; livery = &GetPlayer((PlayerID)w->window_number)->livery[scheme]; - ShowDropDownMenu(w, _colour_dropdown, widget == PLW_WIDGET_PRI_COL_DROPDOWN ? livery->colour1 : livery->colour2, widget, used_colours, 0); + DropDownList *list = new DropDownList(); + for (uint i = 0; i < lengthof(_colour_dropdown); i++) { + list->push_back(new DropDownListColourItem(i, HasBit(used_colours, i))); + } + + ShowDropDownList(w, list, widget == PLW_WIDGET_PRI_COL_DROPDOWN ? livery->colour1 : livery->colour2, widget); } static void SelectPlayerLiveryWndProc(Window *w, WindowEvent *e) |