(svn r13152) -Codechange: make a class of the subsidy window.
authorrubidium
Sun, 18 May 2008 08:12:29 +0000
changeset 10608 ae56d50fbee4
parent 10607 1ab30cead125
child 10609 b6ebc6c30a83
(svn r13152) -Codechange: make a class of the subsidy window.
src/subsidy_gui.cpp
--- a/src/subsidy_gui.cpp	Sat May 17 23:11:06 2008 +0000
+++ b/src/subsidy_gui.cpp	Sun May 18 08:12:29 2008 +0000
@@ -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) {
+		int y = pt.y - 25;
+
+		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++;
+			}
+		}
+
+		if (num == 0) {
 			y -= 10;
-			if (y < 0) goto handle_click;
-			num++;
+			if (y < 0) return;
+		}
+
+		y -= 11;
+		if (y < 0) return;
+
+		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 (num == 0) {
-		y -= 10;
-		if (y < 0) return;
-	}
-
-	y -= 11;
-	if (y < 0) return;
-
-	for (s = _subsidies; s != endof(_subsidies); s++) {
-		if (s->cargo_type != CT_INVALID && s->age >= 12) {
-			y -= 10;
-			if (y < 0) goto handle_click;
-		}
-	}
-	return;
+	void HandleClick(const Subsidy *s)
+	{
+		TownEffect te = GetCargo(s->cargo_type)->town_effect;
+		TileIndex xy;
 
-handle_click:
-
-	TownEffect te = GetCargo(s->cargo_type)->town_effect;
-
-	/* 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;
-	}
-
-	if (_ctrl_pressed || !ScrollMainWindowToTile(xy)) {
-		if (_ctrl_pressed) ShowExtraViewPortWindow(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);
-		}
-	}
-}
-
-static void DrawSubsidiesWindow(const Window *w)
-{
-	YearMonthDay ymd;
-	const Subsidy *s;
-	uint num;
-	int x;
-	int y;
-
-	w->DrawWidgets();
-
-	ConvertDateToYMD(_date, &ymd);
+		if (_ctrl_pressed || !ScrollMainWindowToTile(xy)) {
+			if (_ctrl_pressed) ShowExtraViewPortWindow(xy);
 
-	int width = w->width - 13;  // scroll bar = 11 + pixel each side
-	y = 15;
-	x = 1;
-
-	/* Section for drawing the offered subisidies */
-	DrawStringTruncated(x, y, STR_2026_SUBSIDIES_ON_OFFER_FOR, TC_FROMSTRING, width);
-	y += 10;
-	num = 0;
+			/* 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;
+			}
 
-	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 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 (_ctrl_pressed) {
+				ShowExtraViewPortWindow(xy);
+			} else {
+				ScrollMainWindowToTile(xy);
+			}
 		}
 	}
 
-	if (num == 0) {
-		DrawStringTruncated(x + 2, y, STR_202A_NONE, TC_FROMSTRING, width - 2);
-		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;
-
-	for (s = _subsidies; s != endof(_subsidies); s++) {
-		if (s->cargo_type != CT_INVALID && s->age >= 12) {
-			int xt;
-
-			SetupSubsidyDecodeParam(s, 1);
-
-			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);
+	virtual void OnPaint()
+	{
+		YearMonthDay ymd;
+		const Subsidy *s;
 
-			/* 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++;
-		}
-	}
-
-	if (num == 0) DrawStringTruncated(x + 2, y, STR_202A_NONE, TC_FROMSTRING, width - 2);
-}
+		this->DrawWidgets();
 
-static void SubsidiesListWndProc(Window *w, WindowEvent *e)
-{
-	switch (e->event) {
-		case WE_PAINT: DrawSubsidiesWindow(w); break;
+		ConvertDateToYMD(_date, &ymd);
 
-		case WE_CLICK:
-			switch (e->we.click.widget) {
-				case 3:
-					HandleSubsidyClick(e->we.click.pt.y - 25);
-					break;
+		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;
+		uint num = 0;
+
+		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 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++;
 			}
-		break;
+		}
+
+		if (num == 0) {
+			DrawStringTruncated(x + 2, y, STR_202A_NONE, TC_FROMSTRING, width - 2);
+			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;
+
+		for (s = _subsidies; s != endof(_subsidies); s++) {
+			if (s->cargo_type != CT_INVALID && s->age >= 12) {
+				int xt;
+
+				SetupSubsidyDecodeParam(s, 1);
+
+				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 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++;
+			}
+		}
+
+		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 @@
 	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);
 }