|
|
|
@ -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);
|
|
|
|
|
DrawString(r.left, r.right, y, STR_FINANCES_EXPENDITURE_INCOME_TITLE, TC_FROMSTRING, SA_CENTER, true);
|
|
|
|
|
y += 10 + 2;
|
|
|
|
|
|
|
|
|
|
y = 27;
|
|
|
|
|
int type = _settings_client.gui.expenses_layout;
|
|
|
|
|
for (int i = 0; i < _expenses_list_types[type].length; i++) {
|
|
|
|
|
ExpensesType et = _expenses_list_types[type].et[i];
|
|
|
|
|
const 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);
|
|
|
|
|
DrawString(r.left, r.right, 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);
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** 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;
|
|
|
|
|
|
|
|
|
|
do {
|
|
|
|
|
if (year >= c->inaugurated_year) {
|
|
|
|
|
SetDParam(0, year);
|
|
|
|
|
DrawString(w->left, w->right, 15, STR_FINANCES_YEAR, TC_FROMSTRING, SA_RIGHT, true);
|
|
|
|
|
DrawString(r.left, r.right, y, STR_FINANCES_YEAR, TC_FROMSTRING, SA_RIGHT, true);
|
|
|
|
|
y += 10 + 2;
|
|
|
|
|
|
|
|
|
|
Money sum = 0;
|
|
|
|
|
Money subtotal = 0;
|
|
|
|
|
|
|
|
|
|
int y = 27;
|
|
|
|
|
|
|
|
|
|
int type = _settings_client.gui.expenses_layout;
|
|
|
|
|
for (int i = 0; i < _expenses_list_types[type].length; i++) {
|
|
|
|
|
ExpensesType et = _expenses_list_types[type].et[i];
|
|
|
|
|
Money cost;
|
|
|
|
|
|
|
|
|
|
const ExpensesType et = _expenses_list_types[type].et[i];
|
|
|
|
|
if (et == INVALID_EXPENSES) {
|
|
|
|
|
GfxFillRect(w->left, y, w->right, y, 215);
|
|
|
|
|
cost = subtotal;
|
|
|
|
|
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 {
|
|
|
|
|
cost = (*tbl)[et];
|
|
|
|
|
Money cost = (*tbl)[et];
|
|
|
|
|
subtotal += cost;
|
|
|
|
|
sum += cost;
|
|
|
|
|
if (cost != 0) DrawPrice(cost, r.left, r.right, y + 2);
|
|
|
|
|
y += 10;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
|
|
|
|
|
GfxFillRect(r.left, y, r.right, y, 215);
|
|
|
|
|
y += 2;
|
|
|
|
|
DrawPrice(sum, r.left, r.right, y);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
static void DrawCompanyEconomyStats(const Company *c, bool small, const Widget *widget)
|
|
|
|
|
{
|
|
|
|
|
int y;
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
/* 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;
|
|
|
|
|
|
|
|
|
|