summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralberth <alberth@openttd.org>2009-11-08 19:36:17 +0000
committeralberth <alberth@openttd.org>2009-11-08 19:36:17 +0000
commitefbdba72b34da7e5add5d91c65b7d10e5ce47621 (patch)
tree230c3801e6b1ad39c9c90f071abb138a8348fe81
parent7f1f105afaa025df17699cedb84f52ba84fe2ad2 (diff)
downloadopenttd-efbdba72b34da7e5add5d91c65b7d10e5ce47621.tar.xz
(svn r18021) -Codechange: Have a widget for every cargo-type to eliminate searching.
-rw-r--r--src/station_gui.cpp80
1 files changed, 37 insertions, 43 deletions
diff --git a/src/station_gui.cpp b/src/station_gui.cpp
index 2d12bb8c7..a81f03426 100644
--- a/src/station_gui.cpp
+++ b/src/station_gui.cpp
@@ -268,11 +268,9 @@ public:
this->owner = (Owner)this->window_number;
this->vscroll.SetCapacity((this->GetWidget<NWidgetBase>(SLW_LIST)->current_y - WD_FRAMERECT_TOP - WD_FRAMERECT_BOTTOM) / FONT_HEIGHT_NORMAL);
- uint i = 0;
- const CargoSpec *cs;
- FOR_ALL_CARGOSPECS(cs) {
- if (HasBit(this->cargo_filter, cs->Index())) this->LowerWidget(SLW_CARGOSTART + i);
- i++;
+ for (uint i = 0; i < NUM_CARGO; i++) {
+ const CargoSpec *cs = CargoSpec::Get(i);
+ if (cs->IsValid() && HasBit(this->cargo_filter, i)) this->LowerWidget(SLW_CARGOSTART + i);
}
if (this->cargo_filter == this->cargo_filter_max) this->cargo_filter = _cargo_mask;
@@ -381,18 +379,14 @@ public:
default:
if (widget >= SLW_CARGOSTART) {
- int i = 0;
- const CargoSpec *cs;
- FOR_ALL_CARGOSPECS(cs) {
- if (i + SLW_CARGOSTART == widget) {
- int cg_ofst = HasBit(this->cargo_filter, cs->Index()) ? 2 : 1;
- GfxFillRect(r.left + cg_ofst, r.top + cg_ofst, r.left + cg_ofst + 10, r.top + cg_ofst + 7, cs->rating_colour);
- DrawString(r.left + cg_ofst, r.left + 12 + cg_ofst, r.top + cg_ofst, cs->abbrev, TC_BLACK, SA_CENTER);
- break;
- }
- i++;
+ const CargoSpec *cs = CargoSpec::Get(widget - SLW_CARGOSTART);
+ if (cs->IsValid()) {
+ int cg_ofst = HasBit(this->cargo_filter, cs->Index()) ? 2 : 1;
+ GfxFillRect(r.left + cg_ofst, r.top + cg_ofst, r.left + cg_ofst + 10, r.top + cg_ofst + 7, cs->rating_colour);
+ DrawString(r.left + cg_ofst, r.left + 12 + cg_ofst, r.top + cg_ofst, cs->abbrev, TC_BLACK, SA_CENTER);
}
}
+ break;
}
}
@@ -461,11 +455,9 @@ public:
break;
case SLW_CARGOALL: {
- uint i = 0;
- const CargoSpec *cs;
- FOR_ALL_CARGOSPECS(cs) {
- this->LowerWidget(i + SLW_CARGOSTART);
- i++;
+ for (uint i = 0; i < NUM_CARGO; i++) {
+ const CargoSpec *cs = CargoSpec::Get(i);
+ if (cs->IsValid()) this->LowerWidget(SLW_CARGOSTART + i);
}
this->LowerWidget(SLW_NOCARGOWAITING);
this->LowerWidget(SLW_CARGOALL);
@@ -493,8 +485,9 @@ public:
this->include_empty = !this->include_empty;
this->ToggleWidgetLoweredState(SLW_NOCARGOWAITING);
} else {
- for (uint i = SLW_CARGOSTART; i < this->nested_array_size; i++) {
- this->RaiseWidget(i);
+ for (uint i = 0; i < NUM_CARGO; i++) {
+ const CargoSpec *cs = CargoSpec::Get(i);
+ if (cs->IsValid()) this->RaiseWidget(SLW_CARGOSTART + i);
}
this->cargo_filter = 0;
@@ -510,19 +503,16 @@ public:
default:
if (widget >= SLW_CARGOSTART) { // change cargo_filter
/* Determine the selected cargo type */
- int i = 0;
- const CargoSpec *cs;
- FOR_ALL_CARGOSPECS(cs) {
- if (widget - SLW_CARGOSTART == i) break;
- i++;
- }
+ const CargoSpec *cs = CargoSpec::Get(widget - SLW_CARGOSTART);
+ if (!cs->IsValid()) break;
if (_ctrl_pressed) {
ToggleBit(this->cargo_filter, cs->Index());
this->ToggleWidgetLoweredState(widget);
} else {
- for (uint i = SLW_CARGOSTART; i < this->nested_array_size; i++) {
- this->RaiseWidget(i);
+ for (uint i = 0; i < NUM_CARGO; i++) {
+ const CargoSpec *cs = CargoSpec::Get(i);
+ if (cs->IsValid()) this->RaiseWidget(SLW_CARGOSTART + i);
}
this->RaiseWidget(SLW_NOCARGOWAITING);
@@ -614,22 +604,26 @@ const StringID CompanyStationsWindow::sorter_names[] = {
*/
static NWidgetBase *CargoWidgets(int *biggest_index)
{
- *biggest_index = -1;
NWidgetHorizontal *container = new NWidgetHorizontal();
- uint i = 0;
- const CargoSpec *cs;
- FOR_ALL_CARGOSPECS(cs) {
- NWidgetBackground *panel = new NWidgetBackground(WWT_PANEL, COLOUR_GREY, SLW_CARGOSTART + i);
- *biggest_index = SLW_CARGOSTART + i;
-
- panel->SetMinimalSize(14, 11);
- panel->SetResize(0, 0);
- panel->SetFill(false, true);
- panel->SetDataTip(0, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE);
- container->Add(panel);
- i++;
+ for (uint i = 0; i < NUM_CARGO; i++) {
+ const CargoSpec *cs = CargoSpec::Get(i);
+ if (cs->IsValid()) {
+ NWidgetBackground *panel = new NWidgetBackground(WWT_PANEL, COLOUR_GREY, SLW_CARGOSTART + i);
+ panel->SetMinimalSize(14, 11);
+ panel->SetResize(0, 0);
+ panel->SetFill(false, true);
+ panel->SetDataTip(0, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE);
+ container->Add(panel);
+ } else {
+ NWidgetLeaf *nwi = new NWidgetLeaf(WWT_EMPTY, COLOUR_GREY, SLW_CARGOSTART + i, 0x0, STR_NULL);
+ nwi->SetMinimalSize(0, 11);
+ nwi->SetResize(0, 0);
+ nwi->SetFill(false, true);
+ container->Add(nwi);
+ }
}
+ *biggest_index = SLW_CARGOSTART + NUM_CARGO;
return container;
}