(svn r17740) -Codechange: Extract financial expenses drawing routines.

pull/155/head
alberth 15 years ago
parent 79a0aca3bc
commit 2145e02fde

@ -114,84 +114,114 @@ enum CompanyFinancesWindowWidgets {
CFW_REPAY_LOAN, ///< Decrease loan
};
static void DrawCompanyEconomyStats(const Company *c, bool small, const Widget *widget)
/** Draw the expenses categories.
* @param r Available space for drawing.
* @note The environment must provide padding at the left and right of \a r.
*/
static int DrawCategories(const Rect &r)
{
int type = _settings_client.gui.expenses_layout;
int y;
const Money (*tbl)[EXPENSES_END];
StringID str;
int y = r.top + WD_FRAMERECT_TOP;
if (!small) { // normal sized economics window
const Widget *w = &widget[CFW_EXPS_CATEGORY];
/* draw categories */
DrawString(w->left, w->right, 15, STR_FINANCES_EXPENDITURE_INCOME_TITLE, TC_FROMSTRING, SA_CENTER, true);
y = 27;
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(w->left + 2, w->right - 2, y, STR_FINANCES_TOTAL_CAPTION, TC_FROMSTRING, SA_RIGHT);
y += 20;
} else {
DrawString(w->left + 2, w->right - 2, y, STR_FINANCES_SECTION_CONSTRUCTION + et);
y += 10;
}
DrawString(r.left, r.right, y, STR_FINANCES_EXPENDITURE_INCOME_TITLE, TC_FROMSTRING, SA_CENTER, true);
y += 10 + 2;
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;
DrawString(r.left, r.right, y, STR_FINANCES_TOTAL_CAPTION, TC_FROMSTRING, SA_RIGHT);
y += 20;
} else {
DrawString(r.left, r.right, y, STR_FINANCES_SECTION_CONSTRUCTION + et);
y += 10;
}
}
DrawString(w->left + 2, w->right - 2, y + 2, STR_FINANCES_TOTAL_CAPTION, TC_FROMSTRING, SA_RIGHT);
DrawString(r.left, r.right, y + 2, STR_FINANCES_TOTAL_CAPTION, TC_FROMSTRING, SA_RIGHT);
return y;
}
/* draw the price columns */
int year = _cur_year - 2;
int j = 3;
w++;
tbl = c->yearly_expenses + 2;
/** Draw an amount of money.
* @param amount Amount of money to draw,
* @param left Left coordinate of the space to draw in.
* @param right Right coordinate of the space to draw in.
* @param top Top coordinate of the space to draw in.
*/
static void DrawPrice(Money amount, int left, int right, int top)
{
StringID str = STR_FINANCES_NEGATIVE_INCOME;
if (amount < 0) {
amount = -amount;
str++;
}
SetDParam(0, amount);
DrawString(left, right, top, str, TC_FROMSTRING, SA_RIGHT);
}
do {
if (year >= c->inaugurated_year) {
SetDParam(0, year);
DrawString(w->left, w->right, 15, STR_FINANCES_YEAR, TC_FROMSTRING, SA_RIGHT, true);
/** Draw a column with prices.
* @param r Available space for drawing.
* @param year Year being drawn.
* @param tbl Pointer to table of amounts for \a year.
* @note The environment must provide padding at the left and right of \a r.
*/
static void DrawYearColumn(const Rect &r, int year, const Money (*tbl)[EXPENSES_END])
{
int y = r.top + WD_FRAMERECT_TOP;
Money sum = 0;
Money subtotal = 0;
SetDParam(0, year);
DrawString(r.left, r.right, y, STR_FINANCES_YEAR, TC_FROMSTRING, SA_RIGHT, true);
y += 10 + 2;
int y = 27;
Money sum = 0;
Money subtotal = 0;
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) {
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;
} else {
Money cost = (*tbl)[et];
subtotal += cost;
sum += cost;
if (cost != 0) DrawPrice(cost, r.left, r.right, y + 2);
y += 10;
}
}
for (int i = 0; i < _expenses_list_types[type].length; i++) {
ExpensesType et = _expenses_list_types[type].et[i];
Money cost;
GfxFillRect(r.left, y, r.right, y, 215);
y += 2;
DrawPrice(sum, r.left, r.right, y);
}
if (et == INVALID_EXPENSES) {
GfxFillRect(w->left, y, w->right, y, 215);
cost = subtotal;
subtotal = 0;
y += 2;
} else {
cost = (*tbl)[et];
subtotal += cost;
sum += cost;
}
static void DrawCompanyEconomyStats(const Company *c, bool small, const Widget *widget)
{
int y;
if (cost != 0 || et == INVALID_EXPENSES) {
str = STR_FINANCES_NEGATIVE_INCOME;
if (cost < 0) { cost = -cost; str++; }
SetDParam(0, cost);
DrawString(w->left, w->right, y, str, TC_FROMSTRING, SA_RIGHT);
}
y += (et == INVALID_EXPENSES) ? 20 : 10;
}
if (!small) { // normal sized economics window
const Widget *w = &widget[CFW_EXPS_CATEGORY];
const Rect r = {w->left + WD_FRAMERECT_LEFT, 14, w->right - WD_FRAMERECT_RIGHT, w->bottom};
y = DrawCategories(r);
str = STR_FINANCES_NEGATIVE_INCOME;
if (sum < 0) { sum = -sum; str++; }
SetDParam(0, sum);
DrawString(w->left, w->right, y + 2, str, TC_FROMSTRING, SA_RIGHT);
/* draw the price columns */
int year = _cur_year - 2;
w++;
const Money (*tbl)[EXPENSES_END] = c->yearly_expenses + 2;
GfxFillRect(w->left, y, w->right, y, 215);
for (int j = 0; j < 3; j++) {
if (year >= c->inaugurated_year) {
const Rect r = {w->left, 14, w->right, w->bottom};
DrawYearColumn(r, year, tbl);
w++;
}
year++;
tbl--;
} while (--j != 0);
}
y += 14;

Loading…
Cancel
Save