diff options
Diffstat (limited to 'src/town_gui.cpp')
-rw-r--r-- | src/town_gui.cpp | 45 |
1 files changed, 28 insertions, 17 deletions
diff --git a/src/town_gui.cpp b/src/town_gui.cpp index 9731d35cd..84ca240c7 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -613,29 +613,40 @@ public: SetVScrollCount(this, this->towns.Length()); this->DrawWidgets(); - this->DrawSortButtonState(this->towns.SortType() == 0 ? TDW_SORTNAME : TDW_SORTPOPULATION, this->towns.IsDescSortOrder() ? SBS_DOWN : SBS_UP); + } - { - int n = 0; - uint16 i = this->vscroll.pos; - int y = this->nested_array[TDW_CENTERTOWN]->pos_y + 2; + virtual void DrawWidget(const Rect &r, int widget) const + { + switch(widget) { + case TDW_SORTNAME: + if (this->towns.SortType() == 0) this->DrawSortButtonState(widget, this->towns.IsDescSortOrder() ? SBS_DOWN : SBS_UP); + break; - while (i < this->towns.Length()) { - const Town *t = this->towns[i]; + case TDW_SORTPOPULATION: + if (this->towns.SortType() != 0) this->DrawSortButtonState(widget, this->towns.IsDescSortOrder() ? SBS_DOWN : SBS_UP); + break; - assert(t->xy != INVALID_TILE); + case TDW_CENTERTOWN: { + int n = 0; + int y = r.top + 2; + for (uint i = this->vscroll.pos; i < this->towns.Length(); i++) { + const Town *t = this->towns[i]; - SetDParam(0, t->index); - SetDParam(1, t->population); - DrawString(2, this->width - 2, y, STR_TOWN_DIRECTORY_TOWN); + assert(t->xy != INVALID_TILE); - y += this->townline_height; - i++; - if (++n == this->vscroll.cap) break; // max number of towns in 1 window - } + SetDParam(0, t->index); + SetDParam(1, t->population); + DrawString(r.left + 2, r.right - 2, y, STR_TOWN_DIRECTORY_TOWN); - SetDParam(0, GetWorldPopulation()); - DrawString(3, this->width - 3, this->height - 12 + 2, STR_TOWN_POPULATION); + y += this->townline_height; + if (++n == this->vscroll.cap) break; // max number of towns in 1 window + } + } break; + + case TDW_EMPTYBOTTOM: + SetDParam(0, GetWorldPopulation()); + DrawString(r.left + 3, r.right - 3, r.top + 2, STR_TOWN_POPULATION); + break; } } |