changeset 13241:d2c79a7bd44f draft

(svn r17750) -Codechange: Financial expenses panel handles different font size, replaced magic numbers by constants.
author alberth <alberth@openttd.org>
date Fri, 09 Oct 2009 19:10:05 +0000
parents 0ab0c926d89e
children 34d1c05e72ff
files src/company_gui.cpp
diffstat 1 files changed, 31 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/src/company_gui.cpp
+++ b/src/company_gui.cpp
@@ -32,8 +32,12 @@
 
 #include "table/strings.h"
 
+/** Company GUI constants. */
 enum {
 	FIRST_GUI_CALL = INT_MAX,  ///< default value to specify this is the first call of the resizable gui
+
+	EXP_LINESPACE  = 2,        ///< Amount of vertical space for a horizontal (sub-)total line.
+	EXP_BLOCKSPACE = 10,       ///< Amount of vertical space between two blocks of numbers.
 };
 
 static void DoShowCompanyFinances(CompanyID company, bool show_small, bool show_stickied, int top = FIRST_GUI_CALL, int left = FIRST_GUI_CALL);
@@ -78,21 +82,25 @@
 
 /** Expense list container. */
 struct ExpensesList {
-	const ExpensesType *et; ///< Expenses items.
-	const int length;       ///< Number of items in list.
-	const int height;       ///< Height of list, 10 pixels per item, plus an additional 12 pixels per subtotal. */
+	const ExpensesType *et;  ///< Expenses items.
+	const int length;        ///< Number of items in list.
+	const int num_subtotals; ///< Number of sub-totals in the list.
 
-	ExpensesList(ExpensesType *et, int length, int height) :
-		et(et),
-		length(length),
-		height(height)
+	ExpensesList(ExpensesType *et, int length, int num_subtotals) : et(et), length(length), num_subtotals(num_subtotals)
 	{
 	}
+
+	int GetHeight() const
+	{
+		/* top spacing + heading + line + texts of expenses + sub-totals + total line + total text + bottom spacing. */
+		return WD_FRAMERECT_TOP + FONT_HEIGHT_NORMAL + EXP_LINESPACE +
+			this->length * FONT_HEIGHT_NORMAL + num_subtotals * (EXP_BLOCKSPACE + EXP_LINESPACE) + EXP_LINESPACE + FONT_HEIGHT_NORMAL + WD_FRAMERECT_BOTTOM;
+	}
 };
 
 static const ExpensesList _expenses_list_types[] = {
-	ExpensesList(_expenses_list_1, lengthof(_expenses_list_1), lengthof(_expenses_list_1) * 10 + 26),
-	ExpensesList(_expenses_list_2, lengthof(_expenses_list_2), lengthof(_expenses_list_2) * 10 + 3 * 12 + 26),
+	ExpensesList(_expenses_list_1, lengthof(_expenses_list_1), 0),
+	ExpensesList(_expenses_list_2, lengthof(_expenses_list_2), 3),
 };
 
 /** Widgets of the company finances windows. */
@@ -123,22 +131,22 @@
 	int y = r.top + WD_FRAMERECT_TOP;
 
 	DrawString(r.left, r.right, y, STR_FINANCES_EXPENDITURE_INCOME_TITLE, TC_FROMSTRING, SA_CENTER, true);
-	y += 10 + 2;
+	y += FONT_HEIGHT_NORMAL + EXP_LINESPACE;
 
 	int type = _settings_client.gui.expenses_layout;
 	for (int i = 0; i < _expenses_list_types[type].length; i++) {
 		const ExpensesType et = _expenses_list_types[type].et[i];
 		if (et == INVALID_EXPENSES) {
-			y += 2;
+			y += EXP_LINESPACE;
 			DrawString(r.left, r.right, y, STR_FINANCES_TOTAL_CAPTION, TC_FROMSTRING, SA_RIGHT);
-			y += 20;
+			y += FONT_HEIGHT_NORMAL + EXP_BLOCKSPACE;
 		} else {
 			DrawString(r.left, r.right, y, STR_FINANCES_SECTION_CONSTRUCTION + et);
-			y += 10;
+			y += FONT_HEIGHT_NORMAL;
 		}
 	}
 
-	DrawString(r.left, r.right, y + 2, STR_FINANCES_TOTAL_CAPTION, TC_FROMSTRING, SA_RIGHT);
+	DrawString(r.left, r.right, y + EXP_LINESPACE, STR_FINANCES_TOTAL_CAPTION, TC_FROMSTRING, SA_RIGHT);
 	return y;
 }
 
@@ -171,7 +179,7 @@
 
 	SetDParam(0, year);
 	DrawString(r.left, r.right, y, STR_FINANCES_YEAR, TC_FROMSTRING, SA_RIGHT, true);
-	y += 10 + 2;
+	y += FONT_HEIGHT_NORMAL + EXP_LINESPACE;
 
 	Money sum = 0;
 	Money subtotal = 0;
@@ -182,20 +190,20 @@
 			Money cost = subtotal;
 			subtotal = 0;
 			GfxFillRect(r.left, y, r.right, y, 215);
-			y += 2;
-			DrawPrice(cost, r.left, r.right, y + 2);
-			y += 20;
+			y += EXP_LINESPACE;
+			DrawPrice(cost, r.left, r.right, y + EXP_LINESPACE);
+			y += FONT_HEIGHT_NORMAL + EXP_BLOCKSPACE;
 		} else {
 			Money cost = (*tbl)[et];
 			subtotal += cost;
 			sum += cost;
-			if (cost != 0) DrawPrice(cost, r.left, r.right, y + 2);
-			y += 10;
+			if (cost != 0) DrawPrice(cost, r.left, r.right, y + EXP_LINESPACE);
+			y += FONT_HEIGHT_NORMAL;
 		}
 	}
 
 	GfxFillRect(r.left, y, r.right, y, 215);
-	y += 2;
+	y += EXP_LINESPACE;
 	DrawPrice(sum, r.left, r.right, y);
 }
 
@@ -380,9 +388,9 @@
 				this->widget[CFW_EXPS_PANEL].bottom = this->widget[CFW_EXPS_PANEL].top;
 			}
 			int height = this->widget[CFW_EXPS_PANEL].bottom - this->widget[CFW_EXPS_PANEL].top + 1;
-			if (_expenses_list_types[type].height != height) {
+			if (_expenses_list_types[type].GetHeight() != height) {
 				this->SetDirty();
-				ResizeWindowForWidget(this, CFW_EXPS_PANEL, 0, _expenses_list_types[type].height - height);
+				ResizeWindowForWidget(this, CFW_EXPS_PANEL, 0, _expenses_list_types[type].GetHeight() - height);
 				this->SetDirty();
 				return;
 			}