changeset 13499:af87abe88f16 draft

(svn r18018) -Codechange: make the 'buy company' window nested
author rubidium <rubidium@openttd.org>
date Sun, 08 Nov 2009 19:21:18 +0000
parents 407f7be2bda9
children 44a0e6577f04
files src/company_gui.cpp
diffstat 1 files changed, 55 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- a/src/company_gui.cpp
+++ b/src/company_gui.cpp
@@ -1803,28 +1803,64 @@
 	BCW_CLOSEBOX,
 	BCW_CAPTION,
 	BCW_BACKGROUND,
+	BCW_FACE,
+	BCW_QUESTION,
 	BCW_NO,
 	BCW_YES,
 };
 
 struct BuyCompanyWindow : Window {
-	BuyCompanyWindow(const WindowDesc *desc, WindowNumber window_number) : Window(desc, window_number)
+	BuyCompanyWindow(const WindowDesc *desc, WindowNumber window_number) : Window()
 	{
-		this->FindWindowPlacementAndResize(desc);
+		this->InitNested(desc, window_number);
 	}
 
 	virtual void OnPaint()
 	{
-		Company *c = Company::Get((CompanyID)this->window_number);
-		SetDParam(0, STR_COMPANY_NAME);
-		SetDParam(1, c->index);
 		this->DrawWidgets();
+	}
+
+	virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *resize)
+	{
+		switch (widget) {
+			case BCW_FACE:
+				*size = GetSpriteSize(SPR_GRADIENT);
+				break;
+
+			case BCW_QUESTION:
+				const Company *c = Company::Get((CompanyID)this->window_number);
+				SetDParam(0, c->index);
+				SetDParam(1, c->bankrupt_value);
+				size->height = GetStringHeight(STR_BUY_COMPANY_MESSAGE, size->width);
+				break;
+		}
+	}
 
-		DrawCompanyManagerFace(c->face, c->colour, 2, 16);
+	virtual void SetStringParameters(int widget) const
+	{
+		switch (widget) {
+			case BCW_CAPTION:
+				SetDParam(0, STR_COMPANY_NAME);
+				SetDParam(1, Company::Get((CompanyID)this->window_number)->index);
+				break;
+		}
+	}
 
-		SetDParam(0, c->index);
-		SetDParam(1, c->bankrupt_value);
-		DrawStringMultiLine(95, 333, 26, 116, STR_BUY_COMPANY_MESSAGE, TC_FROMSTRING, SA_CENTER);
+	virtual void DrawWidget(const Rect &r, int widget) const
+	{
+		switch (widget) {
+			case BCW_FACE: {
+				const Company *c = Company::Get((CompanyID)this->window_number);
+				DrawCompanyManagerFace(c->face, c->colour, r.left, r.top);
+			} break;
+
+			case BCW_QUESTION: {
+				const Company *c = Company::Get((CompanyID)this->window_number);
+				SetDParam(0, c->index);
+				SetDParam(1, c->bankrupt_value);
+				DrawStringMultiLine(r.left, r.right, r.top, r.bottom, STR_BUY_COMPANY_MESSAGE, TC_FROMSTRING, SA_CENTER);
+			} break;
+		}
 	}
 
 	virtual void OnClick(Point pt, int widget)
@@ -1841,30 +1877,22 @@
 	}
 };
 
-static const Widget _buy_company_widgets[] = {
-{   WWT_CLOSEBOX,   RESIZE_NONE,  COLOUR_LIGHT_BLUE,     0,    10,     0,    13, STR_BLACK_CROSS,                         STR_TOOLTIP_CLOSE_WINDOW},
-{    WWT_CAPTION,   RESIZE_NONE,  COLOUR_LIGHT_BLUE,    11,   333,     0,    13, STR_ERROR_MESSAGE_CAPTION_OTHER_COMPANY, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS},
-{      WWT_PANEL,   RESIZE_NONE,  COLOUR_LIGHT_BLUE,     0,   333,    14,   136, 0x0,                                     STR_NULL},
-{    WWT_TEXTBTN,   RESIZE_NONE,  COLOUR_LIGHT_BLUE,   148,   207,   117,   128, STR_QUIT_NO,                                  STR_NULL},
-{    WWT_TEXTBTN,   RESIZE_NONE,  COLOUR_LIGHT_BLUE,   218,   277,   117,   128, STR_QUIT_YES,                                 STR_NULL},
-{   WIDGETS_END},
-};
-
 static const NWidgetPart _nested_buy_company_widgets[] = {
 	NWidget(NWID_HORIZONTAL),
 		NWidget(WWT_CLOSEBOX, COLOUR_LIGHT_BLUE, BCW_CLOSEBOX),
 		NWidget(WWT_CAPTION, COLOUR_LIGHT_BLUE, BCW_CAPTION), SetDataTip(STR_ERROR_MESSAGE_CAPTION_OTHER_COMPANY, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
 	EndContainer(),
 	NWidget(WWT_PANEL, COLOUR_LIGHT_BLUE, BCW_BACKGROUND),
-		NWidget(NWID_SPACER), SetMinimalSize(334, 103), SetFill(true, false),
-		NWidget(NWID_HORIZONTAL),
-			NWidget(NWID_SPACER), SetMinimalSize(148, 0), SetFill(true, false),
-			NWidget(WWT_TEXTBTN, COLOUR_LIGHT_BLUE, BCW_NO), SetMinimalSize(60, 12), SetDataTip(STR_QUIT_NO, STR_NULL),
-			NWidget(NWID_SPACER), SetMinimalSize(10, 0), SetFill(true, false),
-			NWidget(WWT_TEXTBTN, COLOUR_LIGHT_BLUE, BCW_YES), SetMinimalSize(60, 12), SetDataTip(STR_QUIT_YES, STR_NULL),
-			NWidget(NWID_SPACER), SetMinimalSize(56, 0), SetFill(true, false),
+		NWidget(NWID_VERTICAL), SetPIP(8, 8, 8),
+			NWidget(NWID_HORIZONTAL), SetPIP(8, 10, 8),
+				NWidget(WWT_EMPTY, INVALID_COLOUR, BCW_FACE), SetFill(false, true),
+				NWidget(WWT_EMPTY, INVALID_COLOUR, BCW_QUESTION), SetMinimalSize(240, 0), SetFill(true, true),
+			EndContainer(),
+			NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(100, 10, 100),
+				NWidget(WWT_TEXTBTN, COLOUR_LIGHT_BLUE, BCW_NO), SetMinimalSize(60, 12), SetDataTip(STR_QUIT_NO, STR_NULL), SetFill(true, false),
+				NWidget(WWT_TEXTBTN, COLOUR_LIGHT_BLUE, BCW_YES), SetMinimalSize(60, 12), SetDataTip(STR_QUIT_YES, STR_NULL), SetFill(true, false),
+			EndContainer(),
 		EndContainer(),
-		NWidget(NWID_SPACER), SetMinimalSize(0, 8), SetFill(true, false),
 	EndContainer(),
 };
 
@@ -1872,7 +1900,7 @@
 	153, 171, 334, 137, 334, 137,
 	WC_BUY_COMPANY, WC_NONE,
 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_CONSTRUCTION,
-	_buy_company_widgets, _nested_buy_company_widgets, lengthof(_nested_buy_company_widgets)
+	NULL, _nested_buy_company_widgets, lengthof(_nested_buy_company_widgets)
 );