(svn r15864) -Codechange: add some 'invisible' widgets on company finances window, and use them to determine where to draw strings instead using some magic values

This commit is contained in:
glx 2009-03-27 01:55:25 +00:00
parent 47036cb49e
commit 7229d7d114
1 changed files with 61 additions and 39 deletions

View File

@ -83,42 +83,62 @@ static const ExpensesList _expenses_list_types[] = {
{ _expenses_list_2, lengthof(_expenses_list_2), lengthof(_expenses_list_2) * 10 + 3 * 12 },
};
static void DrawCompanyEconomyStats(const Company *c, bool small)
/** Widgets of the company finances windows */
enum CompanyFinancesWindowWidgets {
CFW_CLOSEBOX = 0, ///< Close the window
CFW_CAPTION, ///< Caption of the window
CFW_TOGGLE_SIZE, ///< Toggle windows size
CFW_STICKY, ///< Sticky button
CFW_EXPS_PANEL, ///< Panel for expenses
CFW_EXPS_CATEGORY, ///< Column for expenses category strings
CFW_EXPS_PRICE1, ///< Column for year Y-2 expenses
CFW_EXPS_PRICE2, ///< Column for year Y-1 expenses
CFW_EXPS_PRICE3, ///< Column for year Y expenses
CFW_TOTAL_PANEL, ///< Panel for totals
CFW_TOTAL_LABELS, ///< Column for totals labels
CFW_TOTAL_VALUES, ///< Column for totals values
CFW_TOTAL_MAXLOAN, ///< Column for max loan string
CFW_INCREASE_LOAN, ///< Increase loan
CFW_REPAY_LOAN, ///< Decrease loan
};
static void DrawCompanyEconomyStats(const Company *c, bool small, const Widget *widget)
{
int type = _settings_client.gui.expenses_layout;
int x, y, i, j, year;
int y;
const Money (*tbl)[EXPENSES_END];
StringID str;
if (!small) { // normal sized economics window
const Widget *w = &widget[CFW_EXPS_CATEGORY];
/* draw categories */
DrawString(0, 122, 15, STR_700F_EXPENDITURE_INCOME, TC_FROMSTRING, SA_CENTER, true);
DrawString(w->left, w->right, 15, STR_700F_EXPENDITURE_INCOME, TC_FROMSTRING, SA_CENTER, true);
y = 27;
for (i = 0; i < _expenses_list_types[type].length; i++) {
for (int i = 0; i < _expenses_list_types[type].length; i++) {
ExpensesType et = _expenses_list_types[type].et[i];
if (et == INVALID_EXPENSES) {
y += 2;
DrawString(2, 111, y, STR_7020_TOTAL, TC_FROMSTRING, SA_RIGHT);
DrawString(w->left + 2, w->right - 2, y, STR_7020_TOTAL, TC_FROMSTRING, SA_RIGHT);
y += 20;
} else {
DrawString(2, 111, y, STR_7011_CONSTRUCTION + et, TC_FROMSTRING);
DrawString(w->left + 2, w->right - 2, y, STR_7011_CONSTRUCTION + et, TC_FROMSTRING);
y += 10;
}
}
DrawString(0, 111, y + 2, STR_7020_TOTAL, TC_FROMSTRING, SA_RIGHT);
DrawString(w->left + 2, w->right - 2, y + 2, STR_7020_TOTAL, TC_FROMSTRING, SA_RIGHT);
/* draw the price columns */
year = _cur_year - 2;
j = 3;
x = 215;
int year = _cur_year - 2;
int j = 3;
w++;
tbl = c->yearly_expenses + 2;
do {
if (year >= c->inaugurated_year) {
SetDParam(0, year);
DrawString(x - 75, x, 15, STR_7010, TC_FROMSTRING, SA_RIGHT, true);
DrawString(w->left, w->right, 15, STR_7010, TC_FROMSTRING, SA_RIGHT, true);
Money sum = 0;
Money subtotal = 0;
@ -130,7 +150,7 @@ static void DrawCompanyEconomyStats(const Company *c, bool small)
Money cost;
if (et == INVALID_EXPENSES) {
GfxFillRect(x - 75, y, x, y, 215);
GfxFillRect(w->left, y, w->right, y, 215);
cost = subtotal;
subtotal = 0;
y += 2;
@ -144,7 +164,7 @@ static void DrawCompanyEconomyStats(const Company *c, bool small)
str = STR_701E;
if (cost < 0) { cost = -cost; str++; }
SetDParam(0, cost);
DrawString(x - 75, x, y, str, TC_FROMSTRING, SA_RIGHT);
DrawString(w->left, w->right, y, str, TC_FROMSTRING, SA_RIGHT);
}
y += (et == INVALID_EXPENSES) ? 20 : 10;
}
@ -152,10 +172,10 @@ static void DrawCompanyEconomyStats(const Company *c, bool small)
str = STR_701E;
if (sum < 0) { sum = -sum; str++; }
SetDParam(0, sum);
DrawString(x - 75, x, y + 2, str, TC_FROMSTRING, SA_RIGHT);
DrawString(w->left, w->right, y + 2, str, TC_FROMSTRING, SA_RIGHT);
GfxFillRect(x - 75, y, x, y, 215);
x += 95;
GfxFillRect(w->left, y, w->right, y, 215);
w++;
}
year++;
tbl--;
@ -165,48 +185,43 @@ static void DrawCompanyEconomyStats(const Company *c, bool small)
/* draw max loan aligned to loan below (y += 10) */
SetDParam(0, _economy.max_loan);
DrawString(202, 406, y + 10, STR_MAX_LOAN, TC_FROMSTRING);
DrawString(widget[CFW_TOTAL_MAXLOAN].left, widget[CFW_TOTAL_MAXLOAN].right, y + 10, STR_MAX_LOAN, TC_FROMSTRING);
} else {
y = 15;
}
DrawString(2, 182, y, STR_7026_BANK_BALANCE, TC_FROMSTRING);
DrawString(widget[CFW_TOTAL_LABELS].left, widget[CFW_TOTAL_LABELS].right, y, STR_7026_BANK_BALANCE, TC_FROMSTRING);
SetDParam(0, c->money);
DrawString(182 - 75, 182, y, STR_7028, TC_FROMSTRING, SA_RIGHT);
DrawString(widget[CFW_TOTAL_VALUES].left, widget[CFW_TOTAL_VALUES].right, y, STR_7028, TC_FROMSTRING, SA_RIGHT);
y += 10;
DrawString(2, 182, y, STR_7027_LOAN, TC_FROMSTRING);
DrawString(widget[CFW_TOTAL_LABELS].left, widget[CFW_TOTAL_LABELS].right, y, STR_7027_LOAN, TC_FROMSTRING);
SetDParam(0, c->current_loan);
DrawString(182 - 75, 182, y, STR_7028, TC_FROMSTRING, SA_RIGHT);
DrawString(widget[CFW_TOTAL_VALUES].left, widget[CFW_TOTAL_VALUES].right, y, STR_7028, TC_FROMSTRING, SA_RIGHT);
y += 12;
GfxFillRect(182 - 75, y - 2, 182, y - 2, 215);
GfxFillRect(widget[CFW_TOTAL_VALUES].left, y - 2, widget[CFW_TOTAL_VALUES].right, y - 2, 215);
SetDParam(0, c->money - c->current_loan);
DrawString(182 - 75, 182, y, STR_7028, TC_FROMSTRING, SA_RIGHT);
DrawString(widget[CFW_TOTAL_VALUES].left, widget[CFW_TOTAL_VALUES].right, y, STR_7028, TC_FROMSTRING, SA_RIGHT);
}
/** Widgets of the company finances windows */
enum CompanyFinancesWindowWidgets {
CFW_CLOSEBOX = 0, ///< Close the window
CFW_CAPTION, ///< Caption of the window
CFW_TOGGLE_SIZE, ///< Toggle windows size
CFW_STICKY, ///< Sticky button
CFW_EXPS_PANEL, ///< Panel for expenses
CFW_TOTAL_PANEL, ///< Panel for totals
CFW_INCREASE_LOAN, ///< Increase loan
CFW_REPAY_LOAN, ///< Decrease loan
};
static const Widget _company_finances_widgets[] = {
{ WWT_CLOSEBOX, RESIZE_NONE, COLOUR_GREY, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // CFW_CLOSEBOX
{ WWT_CAPTION, RESIZE_NONE, COLOUR_GREY, 11, 379, 0, 13, STR_700E_FINANCES, STR_018C_WINDOW_TITLE_DRAG_THIS}, // CFW_CAPTION
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_GREY, 380, 394, 0, 13, SPR_LARGE_SMALL_WINDOW, STR_7075_TOGGLE_LARGE_SMALL_WINDOW}, // CFW_TOGGLE_SIZE
{ WWT_CAPTION, RESIZE_NONE, COLOUR_GREY, 11, 380, 0, 13, STR_700E_FINANCES, STR_018C_WINDOW_TITLE_DRAG_THIS}, // CFW_CAPTION
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_GREY, 381, 394, 0, 13, SPR_LARGE_SMALL_WINDOW, STR_7075_TOGGLE_LARGE_SMALL_WINDOW}, // CFW_TOGGLE_SIZE
{ WWT_STICKYBOX, RESIZE_NONE, COLOUR_GREY, 395, 406, 0, 13, 0x0, STR_STICKY_BUTTON}, // CFW_STICKY
{ WWT_PANEL, RESIZE_NONE, COLOUR_GREY, 0, 406, 14, 14, 0x0, STR_NULL}, // CFW_EXPS_PANEL
{ WWT_EMPTY, RESIZE_NONE, COLOUR_GREY, 0, 122, 14, 14, 0x0, STR_NULL}, // CFW_EXPS_CATEGORY
{ WWT_EMPTY, RESIZE_NONE, COLOUR_GREY, 130, 215, 14, 14, 0x0, STR_NULL}, // CFW_EXPS_PRICE1
{ WWT_EMPTY, RESIZE_NONE, COLOUR_GREY, 225, 310, 14, 14, 0x0, STR_NULL}, // CFW_EXPS_PRICE2
{ WWT_EMPTY, RESIZE_NONE, COLOUR_GREY, 320, 405, 14, 14, 0x0, STR_NULL}, // CFW_EXPS_PRICE3
{ WWT_PANEL, RESIZE_NONE, COLOUR_GREY, 0, 406, 14, 47, 0x0, STR_NULL}, // CFW_TOTAL_PANEL
{ WWT_EMPTY, RESIZE_NONE, COLOUR_GREY, 2, 96, 14, 47, 0x0, STR_NULL}, // CFW_TOTAL_LABELS
{ WWT_EMPTY, RESIZE_NONE, COLOUR_GREY, 97, 182, 14, 47, 0x0, STR_NULL}, // CFW_TOTAL_VALUES
{ WWT_EMPTY, RESIZE_NONE, COLOUR_GREY, 202, 406, 14, 47, 0x0, STR_NULL}, // CFW_TOTAL_MAXLOAN
{ WWT_PUSHTXTBTN, RESIZE_NONE, COLOUR_GREY, 0, 202, 48, 59, STR_7029_BORROW, STR_7035_INCREASE_SIZE_OF_LOAN}, // CFW_INCREASE_LOAN
{ WWT_PUSHTXTBTN, RESIZE_NONE, COLOUR_GREY, 203, 406, 48, 59, STR_702A_REPAY, STR_7036_REPAY_PART_OF_LOAN}, // CFW_REPAY_LOAN
{ WIDGETS_END},
@ -218,7 +233,14 @@ static const Widget _company_finances_small_widgets[] = {
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_GREY, 254, 267, 0, 13, SPR_LARGE_SMALL_WINDOW, STR_7075_TOGGLE_LARGE_SMALL_WINDOW}, // CFW_TOGGLE_SIZE
{ WWT_STICKYBOX, RESIZE_NONE, COLOUR_GREY, 268, 279, 0, 13, 0x0, STR_STICKY_BUTTON}, // CFW_STICKY
{ WWT_EMPTY, RESIZE_NONE, COLOUR_GREY, 0, 0, 0, 0, 0x0, STR_NULL}, // CFW_EXPS_PANEL
{ WWT_PANEL, RESIZE_NONE, COLOUR_GREY, 0, 279, 14, 47, STR_NULL, STR_NULL}, // CFW_TOTAL_PANEL
{ WWT_EMPTY, RESIZE_NONE, COLOUR_GREY, 0, 0, 0, 0, 0x0, STR_NULL}, // CFW_EXPS_CATEGORY
{ WWT_EMPTY, RESIZE_NONE, COLOUR_GREY, 0, 0, 0, 0, 0x0, STR_NULL}, // CFW_EXPS_PRICE1
{ WWT_EMPTY, RESIZE_NONE, COLOUR_GREY, 0, 0, 0, 0, 0x0, STR_NULL}, // CFW_EXPS_PRICE2
{ WWT_EMPTY, RESIZE_NONE, COLOUR_GREY, 0, 0, 0, 0, 0x0, STR_NULL}, // CFW_EXPS_PRICE3
{ WWT_PANEL, RESIZE_NONE, COLOUR_GREY, 0, 279, 14, 47, 0x0, STR_NULL}, // CFW_TOTAL_PANEL
{ WWT_EMPTY, RESIZE_NONE, COLOUR_GREY, 2, 96, 14, 47, 0x0, STR_NULL}, // CFW_TOTAL_LABELS
{ WWT_EMPTY, RESIZE_NONE, COLOUR_GREY, 97, 182, 14, 47, 0x0, STR_NULL}, // CFW_TOTAL_VALUES
{ WWT_EMPTY, RESIZE_NONE, COLOUR_GREY, 0, 0, 0, 0, 0x0, STR_NULL}, // CFW_TOTAL_MAXLOAN
{ WWT_PUSHTXTBTN, RESIZE_NONE, COLOUR_GREY, 0, 139, 48, 59, STR_7029_BORROW, STR_7035_INCREASE_SIZE_OF_LOAN}, // CFW_INCREASE_LOAN
{ WWT_PUSHTXTBTN, RESIZE_NONE, COLOUR_GREY, 140, 279, 48, 59, STR_702A_REPAY, STR_7036_REPAY_PART_OF_LOAN}, // CFW_REPAY_LOAN
{ WIDGETS_END},
@ -284,7 +306,7 @@ struct CompanyFinancesWindow : Window {
SetDParam(2, LOAN_INTERVAL);
this->DrawWidgets();
DrawCompanyEconomyStats(c, this->small);
DrawCompanyEconomyStats(c, this->small, this->widget);
}
virtual void OnClick(Point pt, int widget)