Feature: Improved Finance window

This commit is contained in:
Tyler Trahan 2022-02-23 11:03:23 -07:00 committed by Patric Stout
parent f4ca94d3f6
commit 41de69c5b7
5 changed files with 182 additions and 122 deletions

View File

@ -51,88 +51,127 @@
/** Company GUI constants. */
static const uint EXP_LINESPACE = 2; ///< Amount of vertical space for a horizontal (sub-)total line.
static const uint EXP_BLOCKSPACE = 10; ///< Amount of vertical space between two blocks of numbers.
static const int EXP_INDENT = 10; ///< Amount of horizontal space for an indented line.
static void DoSelectCompanyManagerFace(Window *parent);
static void ShowCompanyInfrastructure(CompanyID company);
/** Standard unsorted list of expenses. */
static ExpensesType _expenses_list_1[] = {
EXPENSES_CONSTRUCTION,
EXPENSES_NEW_VEHICLES,
EXPENSES_TRAIN_RUN,
EXPENSES_ROADVEH_RUN,
EXPENSES_AIRCRAFT_RUN,
EXPENSES_SHIP_RUN,
EXPENSES_PROPERTY,
EXPENSES_TRAIN_INC,
EXPENSES_ROADVEH_INC,
EXPENSES_AIRCRAFT_INC,
EXPENSES_SHIP_INC,
EXPENSES_LOAN_INT,
EXPENSES_OTHER,
/** List of revenues. */
static ExpensesType _expenses_list_revenue[] = {
EXPENSES_TRAIN_REVENUE,
EXPENSES_ROADVEH_REVENUE,
EXPENSES_AIRCRAFT_REVENUE,
EXPENSES_SHIP_REVENUE,
};
/** Grouped list of expenses. */
static ExpensesType _expenses_list_2[] = {
EXPENSES_TRAIN_INC,
EXPENSES_ROADVEH_INC,
EXPENSES_AIRCRAFT_INC,
EXPENSES_SHIP_INC,
INVALID_EXPENSES,
/** List of operating expenses. */
static ExpensesType _expenses_list_operating_costs[] = {
EXPENSES_TRAIN_RUN,
EXPENSES_ROADVEH_RUN,
EXPENSES_AIRCRAFT_RUN,
EXPENSES_SHIP_RUN,
EXPENSES_PROPERTY,
EXPENSES_LOAN_INT,
INVALID_EXPENSES,
EXPENSES_LOAN_INTEREST,
};
/** List of capital expenses. */
static ExpensesType _expenses_list_capital_costs[] = {
EXPENSES_CONSTRUCTION,
EXPENSES_NEW_VEHICLES,
EXPENSES_OTHER,
INVALID_EXPENSES,
};
/** Expense list container. */
struct ExpensesList {
const ExpensesType *et; ///< Expenses items.
const uint length; ///< Number of items in list.
const uint num_subtotals; ///< Number of sub-totals in the list.
ExpensesList(ExpensesType *et, int length, int num_subtotals) : et(et), length(length), num_subtotals(num_subtotals)
ExpensesList(ExpensesType *et, int length) : et(et), length(length)
{
}
uint GetHeight() const
{
/* heading + line + texts of expenses + sub-totals + total line + total text */
return FONT_HEIGHT_NORMAL + EXP_LINESPACE + this->length * FONT_HEIGHT_NORMAL + num_subtotals * (EXP_BLOCKSPACE + EXP_LINESPACE) + EXP_LINESPACE + FONT_HEIGHT_NORMAL;
/* Add up the height of all the lines. */
return this->length * FONT_HEIGHT_NORMAL;
}
/** Compute width of the expenses categories in pixels. */
uint GetCategoriesWidth() const
uint GetListWidth() const
{
uint width = 0;
bool invalid_expenses_measured = false; // Measure 'Total' width only once.
for (uint i = 0; i < this->length; i++) {
ExpensesType et = this->et[i];
if (et == INVALID_EXPENSES) {
if (!invalid_expenses_measured) {
width = std::max(width, GetStringBoundingBox(STR_FINANCES_TOTAL_CAPTION).width);
invalid_expenses_measured = true;
}
} else {
width = std::max(width, GetStringBoundingBox(STR_FINANCES_SECTION_CONSTRUCTION + et).width);
}
width = std::max(width, GetStringBoundingBox(STR_FINANCES_SECTION_CONSTRUCTION + et).width);
}
return width;
}
};
/** Types of expense lists */
static const ExpensesList _expenses_list_types[] = {
ExpensesList(_expenses_list_1, lengthof(_expenses_list_1), 0),
ExpensesList(_expenses_list_2, lengthof(_expenses_list_2), 3),
ExpensesList(_expenses_list_revenue, lengthof(_expenses_list_revenue)),
ExpensesList(_expenses_list_operating_costs, lengthof(_expenses_list_operating_costs)),
ExpensesList(_expenses_list_capital_costs, lengthof(_expenses_list_capital_costs)),
};
/**
* Get the total height of the "categories" column.
* @return The total height in pixels.
*/
static uint GetTotalCategoriesHeight()
{
/* There's an empty line and blockspace on the year row */
uint total_height = FONT_HEIGHT_NORMAL + EXP_BLOCKSPACE;
for (uint i = 0; i < lengthof(_expenses_list_types); i++) {
/* Title + expense list + total line + total + blockspace after category */
total_height += FONT_HEIGHT_NORMAL + _expenses_list_types[i].GetHeight() + EXP_LINESPACE + FONT_HEIGHT_NORMAL + EXP_BLOCKSPACE;
}
/* Total income */
total_height += EXP_LINESPACE + FONT_HEIGHT_NORMAL + EXP_BLOCKSPACE;
return total_height;
}
/**
* Get the required width of the "categories" column, equal to the widest element.
* @return The required width in pixels.
*/
static uint GetMaxCategoriesWidth()
{
uint max_width = 0;
/* Loop through categories to check max widths. */
for (uint i = 0; i < lengthof(_expenses_list_types); i++) {
/* Title of category */
max_width = std::max(max_width, GetStringBoundingBox(STR_FINANCES_REVENUE_TITLE + i).width);
/* Entries in category */
max_width = std::max(max_width, _expenses_list_types[i].GetListWidth());
}
return max_width;
}
/**
* Draw a category of expenses (revenue, operating expenses, capital expenses).
*/
static void DrawCategory(const Rect &r, int start_y, ExpensesList list)
{
int offs_left = _current_text_dir == TD_LTR ? EXP_INDENT : 0;
int offs_right = _current_text_dir == TD_LTR ? 0 : EXP_INDENT;
int y = start_y;
ExpensesType et;
for (uint i = 0; i < list.length; i++) {
et = list.et[i];
DrawString(r.left + offs_left, r.right - offs_right, y, STR_FINANCES_SECTION_CONSTRUCTION + et);
y += FONT_HEIGHT_NORMAL;
}
}
/**
* Draw the expenses categories.
* @param r Available space for drawing.
@ -140,25 +179,28 @@ static const ExpensesList _expenses_list_types[] = {
*/
static void DrawCategories(const Rect &r)
{
int y = r.top;
/* Start with an empty space in the year row, plus the blockspace under the year. */
int y = r.top + FONT_HEIGHT_NORMAL + EXP_BLOCKSPACE;
DrawString(r.left, r.right, y, STR_FINANCES_EXPENDITURE_INCOME_TITLE, TC_FROMSTRING, SA_HOR_CENTER, true);
y += FONT_HEIGHT_NORMAL + EXP_LINESPACE;
for (uint i = 0; i < lengthof(_expenses_list_types); i++) {
/* Draw category title and advance y */
DrawString(r.left, r.right, y, (STR_FINANCES_REVENUE_TITLE + i), TC_FROMSTRING, SA_LEFT);
y += FONT_HEIGHT_NORMAL;
int type = _settings_client.gui.expenses_layout;
for (uint i = 0; i < _expenses_list_types[type].length; i++) {
const ExpensesType et = _expenses_list_types[type].et[i];
if (et == INVALID_EXPENSES) {
y += EXP_LINESPACE;
DrawString(r.left, r.right, y, STR_FINANCES_TOTAL_CAPTION, TC_FROMSTRING, SA_RIGHT);
y += FONT_HEIGHT_NORMAL + EXP_BLOCKSPACE;
} else {
DrawString(r.left, r.right, y, STR_FINANCES_SECTION_CONSTRUCTION + et);
y += FONT_HEIGHT_NORMAL;
}
/* Draw category items and advance y */
DrawCategory(r, y, _expenses_list_types[i]);
y += _expenses_list_types[i].GetHeight();
/* Advance y by the height of the total and associated total line */
y += EXP_LINESPACE + FONT_HEIGHT_NORMAL;
/* Advance y by a blockspace after this category block */
y += EXP_BLOCKSPACE;
}
DrawString(r.left, r.right, y + EXP_LINESPACE, STR_FINANCES_TOTAL_CAPTION, TC_FROMSTRING, SA_RIGHT);
/* Draw total profit/loss */
y += EXP_LINESPACE;
DrawString(r.left, r.right, y, STR_FINANCES_NET_PROFIT, TC_FROMSTRING, SA_LEFT);
}
/**
@ -167,8 +209,9 @@ static void DrawCategories(const Rect &r)
* @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.
* @param colour The TextColour of the string.
*/
static void DrawPrice(Money amount, int left, int right, int top)
static void DrawPrice(Money amount, int left, int right, int top, TextColour colour)
{
StringID str = STR_FINANCES_NEGATIVE_INCOME;
if (amount < 0) {
@ -176,9 +219,37 @@ static void DrawPrice(Money amount, int left, int right, int top)
str++;
}
SetDParam(0, amount);
DrawString(left, right, top, str, TC_FROMSTRING, SA_RIGHT);
DrawString(left, right, top, str, colour, SA_RIGHT);
}
/**
* Draw a category of expenses/revenues in the year column.
* @return The income sum of the category.
*/
static Money DrawYearCategory (const Rect &r, int start_y, ExpensesList list, const Money(*tbl)[EXPENSES_END])
{
int y = start_y;
ExpensesType et;
Money sum = 0;
for (uint i = 0; i < list.length; i++) {
et = list.et[i];
Money cost = (*tbl)[et];
sum += cost;
if (cost != 0) DrawPrice(cost, r.left, r.right, y, TC_BLACK);
y += FONT_HEIGHT_NORMAL;
}
/* Draw the total at the bottom of the category. */
GfxFillRect(r.left, y, r.right, y, PC_BLACK);
y += EXP_LINESPACE;
if (sum != 0) DrawPrice(sum, r.left, r.right, y, TC_WHITE);
/* Return the sum for the yearly total. */
return sum;
}
/**
* Draw a column with prices.
* @param r Available space for drawing.
@ -189,35 +260,25 @@ static void DrawPrice(Money amount, int left, int right, int top)
static void DrawYearColumn(const Rect &r, int year, const Money (*tbl)[EXPENSES_END])
{
int y = r.top;
Money sum;
/* Year header */
SetDParam(0, year);
DrawString(r.left, r.right, y, STR_FINANCES_YEAR, TC_FROMSTRING, SA_RIGHT, true);
y += FONT_HEIGHT_NORMAL + EXP_LINESPACE;
y += FONT_HEIGHT_NORMAL + EXP_BLOCKSPACE;
Money sum = 0;
Money subtotal = 0;
int type = _settings_client.gui.expenses_layout;
for (uint 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, PC_BLACK);
y += EXP_LINESPACE;
DrawPrice(cost, r.left, r.right, y);
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);
y += FONT_HEIGHT_NORMAL;
}
/* Categories */
for (uint i = 0; i < lengthof(_expenses_list_types); i++) {
y += FONT_HEIGHT_NORMAL;
sum += DrawYearCategory(r, y, _expenses_list_types[i], tbl);
/* Expense list + expense category title + expense category total + blockspace after category */
y += _expenses_list_types[i].GetHeight() + EXP_LINESPACE + FONT_HEIGHT_NORMAL + EXP_BLOCKSPACE;
}
/* Total income. */
GfxFillRect(r.left, y, r.right, y, PC_BLACK);
y += EXP_LINESPACE;
DrawPrice(sum, r.left, r.right, y);
DrawPrice(sum, r.left, r.right, y, TC_WHITE);
}
static const NWidgetPart _nested_company_finances_widgets[] = {
@ -241,22 +302,24 @@ static const NWidgetPart _nested_company_finances_widgets[] = {
NWidget(WWT_PANEL, COLOUR_GREY),
NWidget(NWID_HORIZONTAL), SetPadding(WD_FRAMERECT_TOP, WD_FRAMERECT_RIGHT, WD_FRAMERECT_BOTTOM, WD_FRAMERECT_LEFT),
NWidget(NWID_VERTICAL), // Vertical column with 'bank balance', 'loan'
NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_FINANCES_BANK_BALANCE_TITLE, STR_NULL), SetFill(1, 0),
NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_FINANCES_OWN_FUNDS_TITLE, STR_NULL), SetFill(1, 0),
NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_FINANCES_LOAN_TITLE, STR_NULL), SetFill(1, 0),
NWidget(NWID_SPACER), SetMinimalSize(0, 2), SetFill(1, 0),
NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_FINANCES_BANK_BALANCE_TITLE, STR_NULL), SetFill(1, 0),
NWidget(NWID_SPACER), SetFill(0, 1),
EndContainer(),
NWidget(NWID_SPACER), SetFill(0, 0), SetMinimalSize(30, 0),
NWidget(NWID_VERTICAL), // Vertical column with bank balance amount, loan amount, and total.
NWidget(WWT_TEXT, COLOUR_GREY, WID_CF_BALANCE_VALUE), SetDataTip(STR_FINANCES_TOTAL_CURRENCY, STR_NULL), SetAlignment(SA_VERT_CENTER | SA_RIGHT),
NWidget(WWT_TEXT, COLOUR_GREY, WID_CF_OWN_VALUE), SetDataTip(STR_FINANCES_TOTAL_CURRENCY, STR_NULL), SetAlignment(SA_VERT_CENTER | SA_RIGHT),
NWidget(WWT_TEXT, COLOUR_GREY, WID_CF_LOAN_VALUE), SetDataTip(STR_FINANCES_TOTAL_CURRENCY, STR_NULL), SetAlignment(SA_VERT_CENTER | SA_RIGHT),
NWidget(WWT_EMPTY, COLOUR_GREY, WID_CF_LOAN_LINE), SetMinimalSize(0, 2), SetFill(1, 0),
NWidget(WWT_TEXT, COLOUR_GREY, WID_CF_TOTAL_VALUE), SetDataTip(STR_FINANCES_TOTAL_CURRENCY, STR_NULL), SetAlignment(SA_VERT_CENTER | SA_RIGHT),
NWidget(WWT_EMPTY, COLOUR_GREY, WID_CF_BALANCE_LINE), SetMinimalSize(0, 2), SetFill(1, 0),
NWidget(WWT_TEXT, COLOUR_GREY, WID_CF_BALANCE_VALUE), SetDataTip(STR_FINANCES_TOTAL_CURRENCY, STR_NULL), SetAlignment(SA_VERT_CENTER | SA_RIGHT),
EndContainer(),
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_CF_SEL_MAXLOAN),
NWidget(NWID_HORIZONTAL),
NWidget(NWID_SPACER), SetFill(0, 1), SetMinimalSize(25, 0),
NWidget(NWID_VERTICAL), // Max loan information
NWidget(WWT_EMPTY, COLOUR_GREY, WID_CF_MAXLOAN_GAP), SetFill(0, 0),
NWidget(WWT_TEXT, COLOUR_GREY, WID_CF_INTEREST_RATE), SetDataTip(STR_FINANCES_INTEREST_RATE, STR_NULL),
NWidget(WWT_TEXT, COLOUR_GREY, WID_CF_MAXLOAN_VALUE), SetDataTip(STR_FINANCES_MAX_LOAN, STR_NULL),
NWidget(NWID_SPACER), SetFill(0, 1),
EndContainer(),
@ -309,12 +372,16 @@ struct CompanyFinancesWindow : Window {
break;
}
case WID_CF_TOTAL_VALUE: {
case WID_CF_OWN_VALUE: {
const Company *c = Company::Get((CompanyID)this->window_number);
SetDParam(0, c->money - c->current_loan);
break;
}
case WID_CF_INTEREST_RATE:
SetDParam(0, _settings_game.difficulty.initial_interest);
break;
case WID_CF_MAXLOAN_VALUE:
SetDParam(0, _economy.max_loan);
break;
@ -328,27 +395,26 @@ struct CompanyFinancesWindow : Window {
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{
int type = _settings_client.gui.expenses_layout;
switch (widget) {
case WID_CF_EXPS_CATEGORY:
size->width = _expenses_list_types[type].GetCategoriesWidth();
size->height = _expenses_list_types[type].GetHeight();
size->width = GetMaxCategoriesWidth();
size->height = GetTotalCategoriesHeight();
break;
case WID_CF_EXPS_PRICE1:
case WID_CF_EXPS_PRICE2:
case WID_CF_EXPS_PRICE3:
size->height = _expenses_list_types[type].GetHeight();
size->height = GetTotalCategoriesHeight();
FALLTHROUGH;
case WID_CF_BALANCE_VALUE:
case WID_CF_LOAN_VALUE:
case WID_CF_TOTAL_VALUE:
case WID_CF_OWN_VALUE:
SetDParamMaxValue(0, CompanyFinancesWindow::max_money);
size->width = std::max(GetStringBoundingBox(STR_FINANCES_NEGATIVE_INCOME).width, GetStringBoundingBox(STR_FINANCES_POSITIVE_INCOME).width) + padding.width;
break;
case WID_CF_MAXLOAN_GAP:
case WID_CF_INTEREST_RATE:
size->height = FONT_HEIGHT_NORMAL;
break;
}
@ -373,7 +439,7 @@ struct CompanyFinancesWindow : Window {
break;
}
case WID_CF_LOAN_LINE:
case WID_CF_BALANCE_LINE:
GfxFillRect(r.left, r.top, r.right, r.top, PC_BLACK);
break;
}
@ -399,8 +465,7 @@ struct CompanyFinancesWindow : Window {
if (!this->IsShaded()) {
if (!this->small) {
/* Check that the expenses panel height matches the height needed for the layout. */
int type = _settings_client.gui.expenses_layout;
if (_expenses_list_types[type].GetHeight() != this->GetWidget<NWidgetBase>(WID_CF_EXPS_CATEGORY)->current_y) {
if (GetTotalCategoriesHeight() != this->GetWidget<NWidgetBase>(WID_CF_EXPS_CATEGORY)->current_y) {
this->SetupWidgets();
this->ReInit();
return;

View File

@ -1643,9 +1643,6 @@ STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Give reserved t
STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Keep building tools active after usage: {STRING2}
STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Keep the building tools for bridges, tunnels, etc. open after use
STR_CONFIG_SETTING_EXPENSES_LAYOUT :Group expenses in company finance window: {STRING2}
STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Define the layout for the company expenses window
STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automatically remove signals during rail construction: {STRING2}
STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automatically remove signals during rail construction if the signals are in the way. Note that this can potentially lead to train crashes.
@ -3618,29 +3615,36 @@ STR_EDIT_WAYPOINT_NAME :{WHITE}Edit way
# Finances window
STR_FINANCES_CAPTION :{WHITE}{COMPANY} Finances {BLACK}{COMPANY_NUM}
STR_FINANCES_EXPENDITURE_INCOME_TITLE :{WHITE}Expenditure/Income
STR_FINANCES_YEAR :{WHITE}{NUM}
###length 3
STR_FINANCES_REVENUE_TITLE :{WHITE}Revenue
STR_FINANCES_OPERATING_EXPENSES_TITLE :{WHITE}Operating Expenses
STR_FINANCES_CAPITAL_EXPENSES_TITLE :{WHITE}Capital Expenses
###length 13
STR_FINANCES_SECTION_CONSTRUCTION :{GOLD}Construction
STR_FINANCES_SECTION_NEW_VEHICLES :{GOLD}New Vehicles
STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Train Running Costs
STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Road Vehicle Running Costs
STR_FINANCES_SECTION_AIRCRAFT_RUNNING_COSTS :{GOLD}Aircraft Running Costs
STR_FINANCES_SECTION_SHIP_RUNNING_COSTS :{GOLD}Ship Running Costs
STR_FINANCES_SECTION_PROPERTY_MAINTENANCE :{GOLD}Property Maintenance
STR_FINANCES_SECTION_TRAIN_INCOME :{GOLD}Train Income
STR_FINANCES_SECTION_ROAD_VEHICLE_INCOME :{GOLD}Road Vehicle Income
STR_FINANCES_SECTION_AIRCRAFT_INCOME :{GOLD}Aircraft Income
STR_FINANCES_SECTION_SHIP_INCOME :{GOLD}Ship Income
STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Trains
STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Road Vehicles
STR_FINANCES_SECTION_AIRCRAFT_RUNNING_COSTS :{GOLD}Aircraft
STR_FINANCES_SECTION_SHIP_RUNNING_COSTS :{GOLD}Ships
STR_FINANCES_SECTION_INFRASTRUCTURE :{GOLD}Infrastructure
STR_FINANCES_SECTION_TRAIN_REVENUE :{GOLD}Trains
STR_FINANCES_SECTION_ROAD_VEHICLE_REVENUE :{GOLD}Road Vehicles
STR_FINANCES_SECTION_AIRCRAFT_REVENUE :{GOLD}Aircraft
STR_FINANCES_SECTION_SHIP_REVENUE :{GOLD}Ships
STR_FINANCES_SECTION_LOAN_INTEREST :{GOLD}Loan Interest
STR_FINANCES_SECTION_OTHER :{GOLD}Other
STR_FINANCES_NEGATIVE_INCOME :{BLACK}-{CURRENCY_LONG}
STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURRENCY_LONG}
STR_FINANCES_TOTAL_CAPTION :{WHITE}Total:
STR_FINANCES_NEGATIVE_INCOME :-{CURRENCY_LONG}
STR_FINANCES_POSITIVE_INCOME :+{CURRENCY_LONG}
STR_FINANCES_NET_PROFIT :{WHITE}Net Profit
STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Bank Balance
STR_FINANCES_OWN_FUNDS_TITLE :{WHITE}Own Funds
STR_FINANCES_LOAN_TITLE :{WHITE}Loan
STR_FINANCES_INTEREST_RATE :{WHITE}Loan Interest: {BLACK}{NUM}%
STR_FINANCES_MAX_LOAN :{WHITE}Maximum Loan: {BLACK}{CURRENCY_LONG}
STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG}
STR_FINANCES_BORROW_BUTTON :{BLACK}Borrow {CURRENCY_LONG}

View File

@ -1639,7 +1639,6 @@ static SettingsContainer &GetSettingsTree()
interface->Add(new SettingEntry("gui.advanced_vehicle_list"));
interface->Add(new SettingEntry("gui.timetable_in_ticks"));
interface->Add(new SettingEntry("gui.timetable_arrival_departure"));
interface->Add(new SettingEntry("gui.expenses_layout"));
interface->Add(new SettingEntry("gui.show_newgrf_name"));
}

View File

@ -671,14 +671,6 @@ str = STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS
strhelp = STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT
cat = SC_BASIC
[SDTC_BOOL]
var = gui.expenses_layout
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
def = true
str = STR_CONFIG_SETTING_EXPENSES_LAYOUT
strhelp = STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT
post_cb = [](auto) { MarkWholeScreenDirty(); }
[SDTC_VAR]
var = gui.station_gui_group_order
type = SLE_UINT8

View File

@ -68,9 +68,9 @@ enum CompanyFinancesWidgets {
WID_CF_SEL_MAXLOAN, ///< Selection of maxloan column.
WID_CF_BALANCE_VALUE, ///< Bank balance value.
WID_CF_LOAN_VALUE, ///< Loan.
WID_CF_LOAN_LINE, ///< Line for summing bank balance and loan.
WID_CF_TOTAL_VALUE, ///< Total.
WID_CF_MAXLOAN_GAP, ///< Gap above max loan widget.
WID_CF_BALANCE_LINE, ///< Available cash.
WID_CF_OWN_VALUE, ///< Own funds, not including loan.
WID_CF_INTEREST_RATE, ///< Loan interest rate.
WID_CF_MAXLOAN_VALUE, ///< Max loan widget.
WID_CF_SEL_BUTTONS, ///< Selection of buttons.
WID_CF_INCREASE_LOAN, ///< Increase loan.