diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/subsidy_gui.cpp | 216 |
1 files changed, 102 insertions, 114 deletions
diff --git a/src/subsidy_gui.cpp b/src/subsidy_gui.cpp index bf1a67181..d4b41bedb 100644 --- a/src/subsidy_gui.cpp +++ b/src/subsidy_gui.cpp @@ -19,161 +19,149 @@ #include "table/strings.h" -static void HandleSubsidyClick(int y) -{ - const Subsidy *s; - uint num; - int offs; - TileIndex xy; +struct SubsidyListWindow : Window { + SubsidyListWindow(const WindowDesc *desc, WindowNumber window_number) : Window(desc, window_number) + { + } - if (y < 0) return; + virtual void OnClick(Point pt, int widget) + { + if (widget != 3) return; - num = 0; - for (s = _subsidies; s != endof(_subsidies); s++) { - if (s->cargo_type != CT_INVALID && s->age < 12) { - y -= 10; - if (y < 0) goto handle_click; - num++; - } - } + int y = pt.y - 25; - if (num == 0) { - y -= 10; if (y < 0) return; - } - y -= 11; - if (y < 0) return; + uint num = 0; + for (const Subsidy *s = _subsidies; s != endof(_subsidies); s++) { + if (s->cargo_type != CT_INVALID && s->age < 12) { + y -= 10; + if (y < 0) this->HandleClick(s); + num++; + } + } - for (s = _subsidies; s != endof(_subsidies); s++) { - if (s->cargo_type != CT_INVALID && s->age >= 12) { + if (num == 0) { y -= 10; - if (y < 0) goto handle_click; + if (y < 0) return; } - } - return; -handle_click: - - TownEffect te = GetCargo(s->cargo_type)->town_effect; + y -= 11; + if (y < 0) return; - /* determine from coordinate for subsidy and try to scroll to it */ - offs = s->from; - if (s->age >= 12) { - xy = GetStation(offs)->xy; - } else if (te == TE_PASSENGERS || te == TE_MAIL) { - xy = GetTown(offs)->xy; - } else { - xy = GetIndustry(offs)->xy; + for (const Subsidy *s = _subsidies; s != endof(_subsidies); s++) { + if (s->cargo_type != CT_INVALID && s->age >= 12) { + y -= 10; + if (y < 0) this->HandleClick(s); + } + } } - if (_ctrl_pressed || !ScrollMainWindowToTile(xy)) { - if (_ctrl_pressed) ShowExtraViewPortWindow(xy); + void HandleClick(const Subsidy *s) + { + TownEffect te = GetCargo(s->cargo_type)->town_effect; + TileIndex xy; - /* otherwise determine to coordinate for subsidy and scroll to it */ - offs = s->to; + /* determine from coordinate for subsidy and try to scroll to it */ + uint offs = s->from; if (s->age >= 12) { xy = GetStation(offs)->xy; - } else if (te == TE_PASSENGERS || te == TE_MAIL || te == TE_GOODS || te == TE_FOOD) { + } else if (te == TE_PASSENGERS || te == TE_MAIL) { xy = GetTown(offs)->xy; } else { xy = GetIndustry(offs)->xy; } - if (_ctrl_pressed) { - ShowExtraViewPortWindow(xy); - } else { - ScrollMainWindowToTile(xy); + if (_ctrl_pressed || !ScrollMainWindowToTile(xy)) { + if (_ctrl_pressed) ShowExtraViewPortWindow(xy); + + /* otherwise determine to coordinate for subsidy and scroll to it */ + offs = s->to; + if (s->age >= 12) { + xy = GetStation(offs)->xy; + } else if (te == TE_PASSENGERS || te == TE_MAIL || te == TE_GOODS || te == TE_FOOD) { + xy = GetTown(offs)->xy; + } else { + xy = GetIndustry(offs)->xy; + } + + if (_ctrl_pressed) { + ShowExtraViewPortWindow(xy); + } else { + ScrollMainWindowToTile(xy); + } } } -} -static void DrawSubsidiesWindow(const Window *w) -{ - YearMonthDay ymd; - const Subsidy *s; - uint num; - int x; - int y; + virtual void OnPaint() + { + YearMonthDay ymd; + const Subsidy *s; - w->DrawWidgets(); + this->DrawWidgets(); - ConvertDateToYMD(_date, &ymd); + ConvertDateToYMD(_date, &ymd); - int width = w->width - 13; // scroll bar = 11 + pixel each side - y = 15; - x = 1; + int width = this->width - 13; // scroll bar = 11 + pixel each side + int y = 15; + int x = 1; - /* Section for drawing the offered subisidies */ - DrawStringTruncated(x, y, STR_2026_SUBSIDIES_ON_OFFER_FOR, TC_FROMSTRING, width); - y += 10; - num = 0; + /* Section for drawing the offered subisidies */ + DrawStringTruncated(x, y, STR_2026_SUBSIDIES_ON_OFFER_FOR, TC_FROMSTRING, width); + y += 10; + uint num = 0; - for (s = _subsidies; s != endof(_subsidies); s++) { - if (s->cargo_type != CT_INVALID && s->age < 12) { - int x2; + for (s = _subsidies; s != endof(_subsidies); s++) { + if (s->cargo_type != CT_INVALID && s->age < 12) { + int x2; - /* Displays the two offered towns */ - SetupSubsidyDecodeParam(s, 1); - x2 = DrawStringTruncated(x + 2, y, STR_2027_FROM_TO, TC_FROMSTRING, width); + /* Displays the two offered towns */ + SetupSubsidyDecodeParam(s, 1); + x2 = DrawStringTruncated(x + 2, y, STR_2027_FROM_TO, TC_FROMSTRING, width); - /* Displays the deadline before voiding the proposal */ - SetDParam(0, _date - ymd.day + 384 - s->age * 32); - DrawStringTruncated(x2, y, STR_2028_BY, TC_FROMSTRING, width - x2); + /* Displays the deadline before voiding the proposal */ + SetDParam(0, _date - ymd.day + 384 - s->age * 32); + DrawStringTruncated(x2, y, STR_2028_BY, TC_FROMSTRING, width - x2); + y += 10; + num++; + } + } + + if (num == 0) { + DrawStringTruncated(x + 2, y, STR_202A_NONE, TC_FROMSTRING, width - 2); y += 10; - num++; } - } - if (num == 0) { - DrawStringTruncated(x + 2, y, STR_202A_NONE, TC_FROMSTRING, width - 2); + /* Section for drawing the already granted subisidies */ + DrawStringTruncated(x, y + 1, STR_202B_SERVICES_ALREADY_SUBSIDISED, TC_FROMSTRING, width); y += 10; - } - - /* Section for drawing the already granted subisidies */ - DrawStringTruncated(x, y + 1, STR_202B_SERVICES_ALREADY_SUBSIDISED, TC_FROMSTRING, width); - y += 10; - num = 0; + num = 0; - for (s = _subsidies; s != endof(_subsidies); s++) { - if (s->cargo_type != CT_INVALID && s->age >= 12) { - int xt; + for (s = _subsidies; s != endof(_subsidies); s++) { + if (s->cargo_type != CT_INVALID && s->age >= 12) { + int xt; - SetupSubsidyDecodeParam(s, 1); + SetupSubsidyDecodeParam(s, 1); - PlayerID player = GetStation(s->to)->owner; - SetDParam(3, player); + PlayerID player = GetStation(s->to)->owner; + SetDParam(3, player); - /* Displays the two connected stations */ - xt = DrawStringTruncated(x + 2, y, STR_202C_FROM_TO, TC_FROMSTRING, width - 2); + /* Displays the two connected stations */ + xt = DrawStringTruncated(x + 2, y, STR_202C_FROM_TO, TC_FROMSTRING, width - 2); - /* Displays the date where the granted subsidy will end */ - if ((xt > 3) && (width - xt) > 9 ) { // do not draw if previous drawing failed or if it will overlap on scrollbar - SetDParam(0, _date - ymd.day + 768 - s->age * 32); - DrawStringTruncated(xt, y, STR_202D_UNTIL, TC_FROMSTRING, width - xt); + /* Displays the date where the granted subsidy will end */ + if ((xt > 3) && (width - xt) > 9 ) { // do not draw if previous drawing failed or if it will overlap on scrollbar + SetDParam(0, _date - ymd.day + 768 - s->age * 32); + DrawStringTruncated(xt, y, STR_202D_UNTIL, TC_FROMSTRING, width - xt); + } + y += 10; + num++; } - y += 10; - num++; } - } - - if (num == 0) DrawStringTruncated(x + 2, y, STR_202A_NONE, TC_FROMSTRING, width - 2); -} -static void SubsidiesListWndProc(Window *w, WindowEvent *e) -{ - switch (e->event) { - case WE_PAINT: DrawSubsidiesWindow(w); break; - - case WE_CLICK: - switch (e->we.click.widget) { - case 3: - HandleSubsidyClick(e->we.click.pt.y - 25); - break; - } - break; + if (num == 0) DrawStringTruncated(x + 2, y, STR_202A_NONE, TC_FROMSTRING, width - 2); } -} +}; static const Widget _subsidies_list_widgets[] = { { WWT_CLOSEBOX, RESIZE_NONE, 13, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, @@ -191,11 +179,11 @@ static const WindowDesc _subsidies_list_desc = { WC_SUBSIDIES_LIST, WC_NONE, WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON | WDF_RESIZABLE, _subsidies_list_widgets, - SubsidiesListWndProc + NULL }; void ShowSubsidiesList() { - AllocateWindowDescFront<Window>(&_subsidies_list_desc, 0); + AllocateWindowDescFront<SubsidyListWindow>(&_subsidies_list_desc, 0); } |