diff options
author | alberth <alberth@openttd.org> | 2009-11-08 19:36:17 +0000 |
---|---|---|
committer | alberth <alberth@openttd.org> | 2009-11-08 19:36:17 +0000 |
commit | efbdba72b34da7e5add5d91c65b7d10e5ce47621 (patch) | |
tree | 230c3801e6b1ad39c9c90f071abb138a8348fe81 | |
parent | 7f1f105afaa025df17699cedb84f52ba84fe2ad2 (diff) | |
download | openttd-efbdba72b34da7e5add5d91c65b7d10e5ce47621.tar.xz |
(svn r18021) -Codechange: Have a widget for every cargo-type to eliminate searching.
-rw-r--r-- | src/station_gui.cpp | 80 |
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; } |