diff options
author | glx <glx@openttd.org> | 2007-11-03 15:32:07 +0000 |
---|---|---|
committer | glx <glx@openttd.org> | 2007-11-03 15:32:07 +0000 |
commit | e3dfdaa4702a1be09b924e6c4309eca824ff4a9e (patch) | |
tree | 0cdd492d72630ab970787b7bf701124a0bd8273b | |
parent | a416f540fa37cc55894170c5685a6736a4b7900a (diff) | |
download | openttd-e3dfdaa4702a1be09b924e6c4309eca824ff4a9e.tar.xz |
(svn r11372) -Fix [FS#1394]: don't stop on first invalid cargo type when displaying industry acceptance
-rw-r--r-- | src/industry_gui.cpp | 113 |
1 files changed, 63 insertions, 50 deletions
diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 329b288eb..27d3dd291 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -138,7 +138,6 @@ static void BuildDynamicIndustryWndProc(Window *w, WindowEvent *e) case WE_PAINT: { const IndustrySpec *indsp = (WP(w, fnd_d).select == INVALID_INDUSTRYTYPE) ? NULL : GetIndustrySpec(WP(w, fnd_d).select); - StringID str = STR_4827_REQUIRES; int x_str = w->widget[DYNA_INDU_INFOPANEL].left + 3; int y_str = w->widget[DYNA_INDU_INFOPANEL].top + 3; const Widget *wi = &w->widget[DYNA_INDU_INFOPANEL]; @@ -190,34 +189,28 @@ static void BuildDynamicIndustryWndProc(Window *w, WindowEvent *e) } /* Draw the accepted cargos, if any. Otherwhise, will print "Nothing" */ - if (indsp->accepts_cargo[0] != CT_INVALID) { - SetDParam(0, GetCargo(indsp->accepts_cargo[0])->name); - if (indsp->accepts_cargo[1] != CT_INVALID) { - SetDParam(1, GetCargo(indsp->accepts_cargo[1])->name); - str = STR_4828_REQUIRES; - if (indsp->accepts_cargo[2] != CT_INVALID) { - SetDParam(2, GetCargo(indsp->accepts_cargo[2])->name); - str = STR_4829_REQUIRES; - } - } - } else { - SetDParam(0, STR_00D0_NOTHING); + StringID str = STR_4827_REQUIRES; + byte p = 0; + SetDParam(0, STR_00D0_NOTHING); + for (byte j = 0; j < lengthof(indsp->accepts_cargo); j++) { + if (indsp->accepts_cargo[j] == CT_INVALID) continue; + if (p > 0) str++; + SetDParam(p++, GetCargo(indsp->accepts_cargo[j])->name); } DrawStringTruncated(x_str, y_str, str, 0, max_width); - y_str += 11; + /* Draw the produced cargos, if any. Otherwhise, will print "Nothing" */ str = STR_4827_PRODUCES; - if (indsp->produced_cargo[0] != CT_INVALID) { - SetDParam(0, GetCargo(indsp->produced_cargo[0])->name); - if (indsp->produced_cargo[1] != CT_INVALID) { - SetDParam(1, GetCargo(indsp->produced_cargo[1])->name); - str = STR_4828_PRODUCES; - } - } else { - SetDParam(0, STR_00D0_NOTHING); + p = 0; + SetDParam(0, STR_00D0_NOTHING); + for (byte j = 0; j < lengthof(indsp->produced_cargo); j++) { + if (indsp->produced_cargo[j] == CT_INVALID) continue; + if (p > 0) str++; + SetDParam(p++, GetCargo(indsp->produced_cargo[j])->name); } DrawStringTruncated(x_str, y_str, str, 0, max_width); + y_str += 11; /* Get the additional purchase info text, if it has not already been */ if (_fund_gui.text[WP(w, fnd_d).index] == STR_NULL) { // Have i been called already? @@ -230,7 +223,6 @@ static void BuildDynamicIndustryWndProc(Window *w, WindowEvent *e) } } - y_str += 11; /* Draw the Additional purchase text, provided by newgrf callback, if any. * Otherwhise, will print Nothing */ str = _fund_gui.text[WP(w, fnd_d).index]; @@ -411,27 +403,42 @@ static void IndustryViewWndProc(Window *w, WindowEvent *e) const Industry *i = GetIndustry(w->window_number); const IndustrySpec *ind = GetIndustrySpec(i->type); int lines = -3; + bool first = true; + bool has_accept = false; if (HASBIT(ind->callback_flags, CBM_IND_PRODUCTION_CARGO_ARRIVAL) || HASBIT(ind->callback_flags, CBM_IND_PRODUCTION_256_TICKS)) { - for (uint j = 0; j < lengthof(i->accepts_cargo) && i->accepts_cargo[j] != CT_INVALID; j++) { - if (j == 0) lines++; + for (byte j = 0; j < lengthof(i->accepts_cargo); j++) { + if (i->accepts_cargo[j] == CT_INVALID) continue; + has_accept = true; + if (first) { + lines++; + first = false; + } lines++; } - } else if (i->accepts_cargo[0] != CT_INVALID) { - lines++; + } else { + for (byte j = 0; j < lengthof(i->accepts_cargo); j++) { + if (i->accepts_cargo[j] == CT_INVALID) continue; + has_accept = true; + lines++; + break; + } } - for (uint j = 0; j < lengthof(i->produced_cargo) && i->produced_cargo[j] != CT_INVALID; j++) { - if (j == 0) { - if (i->accepts_cargo[0] != CT_INVALID) lines++; + first = true; + for (byte j = 0; j < lengthof(i->produced_cargo); j++) { + if (i->produced_cargo[j] == CT_INVALID) continue; + if (first) { + if (has_accept) lines++; lines++; + first = false; } lines++; } if (HASBIT(ind->callback_flags, CBM_IND_WINDOW_MORE_TEXT)) lines += 2; - for (uint j = 5; j <= 7; j++) { + for (byte j = 5; j <= 7; j++) { if (j != 5) w->widget[j].top += lines * 10; w->widget[j].bottom += lines * 10; } @@ -442,44 +449,50 @@ static void IndustryViewWndProc(Window *w, WindowEvent *e) Industry *i = GetIndustry(w->window_number); const IndustrySpec *ind = GetIndustrySpec(i->type); int y = 111; + bool first = true; + bool has_accept = false; SetDParam(0, w->window_number); DrawWindowWidgets(w); if (HASBIT(ind->callback_flags, CBM_IND_PRODUCTION_CARGO_ARRIVAL) || HASBIT(ind->callback_flags, CBM_IND_PRODUCTION_256_TICKS)) { - for (uint j = 0; j < lengthof(i->accepts_cargo) && i->accepts_cargo[j] != CT_INVALID; j++) { - if (j == 0) { + for (byte j = 0; j < lengthof(i->accepts_cargo); j++) { + if (i->accepts_cargo[j] == CT_INVALID) continue; + has_accept = true; + if (first) { DrawString(2, y, STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING, 0); y += 10; + first = false; } SetDParam(0, i->accepts_cargo[j]); SetDParam(1, i->incoming_cargo_waiting[j]); DrawString(4, y, STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO, 0); y += 10; } - } else if (i->accepts_cargo[0] != CT_INVALID) { - StringID str; - - SetDParam(0, GetCargo(i->accepts_cargo[0])->name); - str = STR_4827_REQUIRES; - if (i->accepts_cargo[1] != CT_INVALID) { - SetDParam(1, GetCargo(i->accepts_cargo[1])->name); - str = STR_4828_REQUIRES; - if (i->accepts_cargo[2] != CT_INVALID) { - SetDParam(2, GetCargo(i->accepts_cargo[2])->name); - str = STR_4829_REQUIRES; - } + } else { + StringID str = STR_4827_REQUIRES; + byte p = 0; + for (byte j = 0; j < lengthof(i->accepts_cargo); j++) { + if (i->accepts_cargo[j] == CT_INVALID) continue; + has_accept = true; + if (p > 0) str++; + SetDParam(p++, GetCargo(i->accepts_cargo[j])->name); + } + if (has_accept) { + DrawString(2, y, str, 0); + y += 10; } - DrawString(2, y, str, 0); - y += 10; } - for (uint j = 0; j < lengthof(i->produced_cargo) && i->produced_cargo[j] != CT_INVALID; j++) { - if (j == 0) { - if (i->accepts_cargo[0] != CT_INVALID) y += 10; + first = true; + for (byte j = 0; j < lengthof(i->produced_cargo); j++) { + if (i->produced_cargo[j] == CT_INVALID) continue; + if (first) { + if (has_accept) y += 10; DrawString(2, y, STR_482A_PRODUCTION_LAST_MONTH, 0); y += 10; WP(w, indview_d).production_offset_y = y; + first = false; } SetDParam(0, i->produced_cargo[j]); |