Merge remote-tracking branch 'upstream/master'
This commit is contained in:
+145
-105
@@ -8,6 +8,7 @@
|
||||
/** @file company_gui.cpp %Company related GUIs. */
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "currency.h"
|
||||
#include "error.h"
|
||||
#include "gui.h"
|
||||
#include "window_gui.h"
|
||||
@@ -112,11 +113,11 @@ struct ExpensesList {
|
||||
ExpensesType et = this->et[i];
|
||||
if (et == INVALID_EXPENSES) {
|
||||
if (!invalid_expenses_measured) {
|
||||
width = max(width, GetStringBoundingBox(STR_FINANCES_TOTAL_CAPTION).width);
|
||||
width = std::max(width, GetStringBoundingBox(STR_FINANCES_TOTAL_CAPTION).width);
|
||||
invalid_expenses_measured = true;
|
||||
}
|
||||
} else {
|
||||
width = max(width, GetStringBoundingBox(STR_FINANCES_SECTION_CONSTRUCTION + et).width);
|
||||
width = std::max(width, GetStringBoundingBox(STR_FINANCES_SECTION_CONSTRUCTION + et).width);
|
||||
}
|
||||
}
|
||||
return width;
|
||||
@@ -322,7 +323,7 @@ struct CompanyFinancesWindow : Window {
|
||||
case WID_CF_LOAN_VALUE:
|
||||
case WID_CF_TOTAL_VALUE:
|
||||
SetDParamMaxValue(0, CompanyFinancesWindow::max_money);
|
||||
size->width = max(GetStringBoundingBox(STR_FINANCES_NEGATIVE_INCOME).width, GetStringBoundingBox(STR_FINANCES_POSITIVE_INCOME).width) + padding.width;
|
||||
size->width = std::max(GetStringBoundingBox(STR_FINANCES_NEGATIVE_INCOME).width, GetStringBoundingBox(STR_FINANCES_POSITIVE_INCOME).width) + padding.width;
|
||||
break;
|
||||
|
||||
case WID_CF_MAXLOAN_GAP:
|
||||
@@ -342,7 +343,7 @@ struct CompanyFinancesWindow : Window {
|
||||
case WID_CF_EXPS_PRICE2:
|
||||
case WID_CF_EXPS_PRICE3: {
|
||||
const Company *c = Company::Get((CompanyID)this->window_number);
|
||||
int age = min(_cur_year - c->inaugurated_year, 2);
|
||||
int age = std::min(_cur_year - c->inaugurated_year, 2);
|
||||
int wid_offset = widget - WID_CF_EXPS_PRICE1;
|
||||
if (wid_offset <= age) {
|
||||
DrawYearColumn(r, _cur_year - (age - wid_offset), c->yearly_expenses + (age - wid_offset));
|
||||
@@ -455,7 +456,7 @@ struct CompanyFinancesWindow : Window {
|
||||
{
|
||||
const Company *c = Company::Get((CompanyID)this->window_number);
|
||||
if (c->money > CompanyFinancesWindow::max_money) {
|
||||
CompanyFinancesWindow::max_money = max(c->money * 2, CompanyFinancesWindow::max_money * 4);
|
||||
CompanyFinancesWindow::max_money = std::max(c->money * 2, CompanyFinancesWindow::max_money * 4);
|
||||
this->SetupWidgets();
|
||||
this->ReInit();
|
||||
}
|
||||
@@ -526,7 +527,7 @@ public:
|
||||
|
||||
uint Height(uint width) const override
|
||||
{
|
||||
return GetMinSizing(NWST_STEP, max(FONT_HEIGHT_NORMAL, ScaleGUITrad(12) + 2));
|
||||
return GetMinSizing(NWST_STEP, std::max(FONT_HEIGHT_NORMAL, ScaleGUITrad(12) + 2));
|
||||
}
|
||||
|
||||
bool Selectable() const override
|
||||
@@ -616,28 +617,6 @@ private:
|
||||
ShowDropDownList(this, std::move(list), sel, widget);
|
||||
}
|
||||
|
||||
static bool GroupNameSorter(const Group * const &a, const Group * const &b)
|
||||
{
|
||||
static const Group *last_group[2] = { nullptr, nullptr };
|
||||
static char last_name[2][64] = { "", "" };
|
||||
|
||||
if (a != last_group[0]) {
|
||||
last_group[0] = a;
|
||||
SetDParam(0, a->index);
|
||||
GetString(last_name[0], STR_GROUP_NAME, lastof(last_name[0]));
|
||||
}
|
||||
|
||||
if (b != last_group[1]) {
|
||||
last_group[1] = b;
|
||||
SetDParam(0, b->index);
|
||||
GetString(last_name[1], STR_GROUP_NAME, lastof(last_name[1]));
|
||||
}
|
||||
|
||||
int r = strnatcmp(last_name[0], last_name[1]); // Sort by name (natural sorting).
|
||||
if (r == 0) return a->index < b->index;
|
||||
return r < 0;
|
||||
}
|
||||
|
||||
void AddChildren(GUIGroupList *source, GroupID parent, int indent)
|
||||
{
|
||||
for (const Group *g : *source) {
|
||||
@@ -666,7 +645,27 @@ private:
|
||||
}
|
||||
|
||||
list.ForceResort();
|
||||
list.Sort(&GroupNameSorter);
|
||||
|
||||
/* Sort the groups by their name */
|
||||
const Group *last_group[2] = { nullptr, nullptr };
|
||||
char last_name[2][64] = { "", "" };
|
||||
list.Sort([&](const Group * const &a, const Group * const &b) -> bool {
|
||||
if (a != last_group[0]) {
|
||||
last_group[0] = a;
|
||||
SetDParam(0, a->index);
|
||||
GetString(last_name[0], STR_GROUP_NAME, lastof(last_name[0]));
|
||||
}
|
||||
|
||||
if (b != last_group[1]) {
|
||||
last_group[1] = b;
|
||||
SetDParam(0, b->index);
|
||||
GetString(last_name[1], STR_GROUP_NAME, lastof(last_name[1]));
|
||||
}
|
||||
|
||||
int r = strnatcmp(last_name[0], last_name[1]); // Sort by name (natural sorting).
|
||||
if (r == 0) return a->index < b->index;
|
||||
return r < 0;
|
||||
});
|
||||
|
||||
AddChildren(&list, INVALID_GROUP, 0);
|
||||
}
|
||||
@@ -733,7 +732,7 @@ public:
|
||||
/* Position scrollbar to selected group */
|
||||
for (uint i = 0; i < this->rows; i++) {
|
||||
if (this->groups[i]->index == sel) {
|
||||
this->vscroll->SetPosition(Clamp(i - this->vscroll->GetCapacity() / 2, 0, max(this->vscroll->GetCount() - this->vscroll->GetCapacity(), 0)));
|
||||
this->vscroll->SetPosition(Clamp(i - this->vscroll->GetCapacity() / 2, 0, std::max(this->vscroll->GetCount() - this->vscroll->GetCapacity(), 0)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -757,14 +756,14 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
size->width = max(size->width, 5 + d.width + WD_FRAMERECT_RIGHT);
|
||||
size->width = std::max(size->width, 5 + d.width + WD_FRAMERECT_RIGHT);
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_SCL_MATRIX: {
|
||||
/* 11 items in the default rail class */
|
||||
this->square = GetSpriteSize(SPR_SQUARE);
|
||||
this->line_height = max(this->square.height, (uint)FONT_HEIGHT_NORMAL) + 4;
|
||||
this->line_height = std::max(this->square.height, (uint)FONT_HEIGHT_NORMAL) + 4;
|
||||
|
||||
size->height = 11 * this->line_height;
|
||||
resize->width = 1;
|
||||
@@ -783,9 +782,9 @@ public:
|
||||
this->square = GetSpriteSize(SPR_SQUARE);
|
||||
int padding = this->square.width + NWidgetScrollbar::GetVerticalDimension().width + 10;
|
||||
for (const StringID *id = _colour_dropdown; id != endof(_colour_dropdown); id++) {
|
||||
size->width = max(size->width, GetStringBoundingBox(*id).width + padding);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(*id).width + padding);
|
||||
}
|
||||
size->width = max(size->width, GetStringBoundingBox(STR_COLOUR_DEFAULT).width + padding);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COLOUR_DEFAULT).width + padding);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -900,7 +899,7 @@ public:
|
||||
}
|
||||
}
|
||||
} else {
|
||||
uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), (uint)this->groups.size());
|
||||
uint max = static_cast<uint>(std::min<size_t>(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->groups.size()));
|
||||
for (uint i = this->vscroll->GetPosition(); i < max; ++i) {
|
||||
const Group *g = this->groups[i];
|
||||
SetDParam(0, g->index);
|
||||
@@ -1396,7 +1395,7 @@ public:
|
||||
number_dim.width += WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT + arrows_width;
|
||||
number_dim.height += WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
|
||||
/* Compute width of both buttons. */
|
||||
yesno_dim.width = max(yesno_dim.width, number_dim.width);
|
||||
yesno_dim.width = std::max(yesno_dim.width, number_dim.width);
|
||||
number_dim.width = yesno_dim.width - arrows_width;
|
||||
|
||||
this->yesno_dim = yesno_dim;
|
||||
@@ -1408,8 +1407,8 @@ public:
|
||||
switch (widget) {
|
||||
case WID_SCMF_FACE: {
|
||||
Dimension face_size = GetSpriteSize(SPR_GRADIENT);
|
||||
size->width = max(size->width, face_size.width);
|
||||
size->height = max(size->height, face_size.height);
|
||||
size->width = std::max(size->width, face_size.width);
|
||||
size->height = std::max(size->height, face_size.height);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1899,55 +1898,55 @@ struct CompanyInfrastructureWindow : Window
|
||||
|
||||
switch (widget) {
|
||||
case WID_CI_RAIL_DESC: {
|
||||
uint lines = 1;
|
||||
uint lines = 1; // Starts at 1 because a line is also required for the section title
|
||||
|
||||
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT).width);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT).width);
|
||||
|
||||
RailType rt;
|
||||
FOR_ALL_SORTED_RAILTYPES(rt) {
|
||||
if (HasBit(this->railtypes, rt)) {
|
||||
lines++;
|
||||
SetDParam(0, GetRailTypeInfo(rt)->strings.name);
|
||||
size->width = max(size->width, GetStringBoundingBox(STR_WHITE_STRING).width + WD_FRAMERECT_LEFT);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_WHITE_STRING).width + WD_FRAMERECT_LEFT);
|
||||
}
|
||||
}
|
||||
if (this->railtypes != RAILTYPES_NONE) {
|
||||
lines++;
|
||||
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS).width + WD_FRAMERECT_LEFT);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS).width + WD_FRAMERECT_LEFT);
|
||||
}
|
||||
|
||||
size->height = max(size->height, lines * FONT_HEIGHT_NORMAL);
|
||||
size->height = std::max(size->height, lines * FONT_HEIGHT_NORMAL);
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_CI_ROAD_DESC:
|
||||
case WID_CI_TRAM_DESC: {
|
||||
uint lines = 0;
|
||||
uint lines = 1; // Starts at 1 because a line is also required for the section title
|
||||
|
||||
size->width = max(size->width, GetStringBoundingBox(widget == WID_CI_ROAD_DESC ? STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT : STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT).width);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(widget == WID_CI_ROAD_DESC ? STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT : STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT).width);
|
||||
|
||||
RoadType rt;
|
||||
FOR_ALL_SORTED_ROADTYPES(rt) {
|
||||
if (HasBit(this->roadtypes, rt) && RoadTypeIsRoad(rt) == (widget == WID_CI_ROAD_DESC)) {
|
||||
lines++;
|
||||
SetDParam(0, GetRoadTypeInfo(rt)->strings.name);
|
||||
size->width = max(size->width, GetStringBoundingBox(STR_WHITE_STRING).width + WD_FRAMERECT_LEFT);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_WHITE_STRING).width + WD_FRAMERECT_LEFT);
|
||||
}
|
||||
}
|
||||
|
||||
size->height = max(size->height, lines * FONT_HEIGHT_NORMAL);
|
||||
size->height = std::max(size->height, lines * FONT_HEIGHT_NORMAL);
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_CI_WATER_DESC:
|
||||
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT).width);
|
||||
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS).width + WD_FRAMERECT_LEFT);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT).width);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS).width + WD_FRAMERECT_LEFT);
|
||||
break;
|
||||
|
||||
case WID_CI_STATION_DESC:
|
||||
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT).width);
|
||||
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS).width + WD_FRAMERECT_LEFT);
|
||||
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS).width + WD_FRAMERECT_LEFT);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT).width);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS).width + WD_FRAMERECT_LEFT);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS).width + WD_FRAMERECT_LEFT);
|
||||
break;
|
||||
|
||||
case WID_CI_RAIL_COUNT:
|
||||
@@ -1961,24 +1960,24 @@ struct CompanyInfrastructureWindow : Window
|
||||
Money max_cost = 10000; // Some random number to reserve enough space.
|
||||
uint32 rail_total = c->infrastructure.GetRailTotal();
|
||||
for (RailType rt = RAILTYPE_BEGIN; rt < RAILTYPE_END; rt++) {
|
||||
max_val = max(max_val, c->infrastructure.rail[rt]);
|
||||
max_cost = max(max_cost, RailMaintenanceCost(rt, c->infrastructure.rail[rt], rail_total));
|
||||
max_val = std::max(max_val, c->infrastructure.rail[rt]);
|
||||
max_cost = std::max(max_cost, RailMaintenanceCost(rt, c->infrastructure.rail[rt], rail_total));
|
||||
}
|
||||
max_val = max(max_val, c->infrastructure.signal);
|
||||
max_cost = max(max_cost, SignalMaintenanceCost(c->infrastructure.signal));
|
||||
max_val = std::max(max_val, c->infrastructure.signal);
|
||||
max_cost = std::max(max_cost, SignalMaintenanceCost(c->infrastructure.signal));
|
||||
uint32 road_total = c->infrastructure.GetRoadTotal();
|
||||
uint32 tram_total = c->infrastructure.GetTramTotal();
|
||||
for (RoadType rt = ROADTYPE_BEGIN; rt < ROADTYPE_END; rt++) {
|
||||
max_val = max(max_val, c->infrastructure.road[rt]);
|
||||
max_cost = max(max_cost, RoadMaintenanceCost(rt, c->infrastructure.road[rt], RoadTypeIsRoad(rt) ? road_total : tram_total));
|
||||
max_val = std::max(max_val, c->infrastructure.road[rt]);
|
||||
max_cost = std::max(max_cost, RoadMaintenanceCost(rt, c->infrastructure.road[rt], RoadTypeIsRoad(rt) ? road_total : tram_total));
|
||||
|
||||
}
|
||||
max_val = max(max_val, c->infrastructure.water);
|
||||
max_cost = max(max_cost, CanalMaintenanceCost(c->infrastructure.water));
|
||||
max_val = max(max_val, c->infrastructure.station);
|
||||
max_cost = max(max_cost, StationMaintenanceCost(c->infrastructure.station));
|
||||
max_val = max(max_val, c->infrastructure.airport);
|
||||
max_cost = max(max_cost, AirportMaintenanceCost(c->index));
|
||||
max_val = std::max(max_val, c->infrastructure.water);
|
||||
max_cost = std::max(max_cost, CanalMaintenanceCost(c->infrastructure.water));
|
||||
max_val = std::max(max_val, c->infrastructure.station);
|
||||
max_cost = std::max(max_cost, StationMaintenanceCost(c->infrastructure.station));
|
||||
max_val = std::max(max_val, c->infrastructure.airport);
|
||||
max_cost = std::max(max_cost, AirportMaintenanceCost(c->index));
|
||||
|
||||
SetDParamMaxValue(0, max_val);
|
||||
uint count_width = GetStringBoundingBox(STR_WHITE_COMMA).width + 20; // Reserve some wiggle room
|
||||
@@ -1986,17 +1985,17 @@ struct CompanyInfrastructureWindow : Window
|
||||
if (_settings_game.economy.infrastructure_maintenance) {
|
||||
SetDParamMaxValue(0, this->GetTotalMaintenanceCost() * 12); // Convert to per year
|
||||
this->total_width = GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL).width + 20;
|
||||
size->width = max(size->width, this->total_width);
|
||||
size->width = std::max(size->width, this->total_width);
|
||||
|
||||
SetDParamMaxValue(0, max_cost * 12); // Convert to per year
|
||||
count_width += max(this->total_width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL).width);
|
||||
count_width += std::max(this->total_width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL).width);
|
||||
}
|
||||
|
||||
size->width = max(size->width, count_width);
|
||||
size->width = std::max(size->width, count_width);
|
||||
|
||||
/* Set height of the total line. */
|
||||
if (widget == WID_CI_TOTAL) {
|
||||
size->height = _settings_game.economy.infrastructure_maintenance ? max(size->height, EXP_LINESPACE + FONT_HEIGHT_NORMAL) : 0;
|
||||
size->height = _settings_game.economy.infrastructure_maintenance ? std::max(size->height, EXP_LINESPACE + FONT_HEIGHT_NORMAL) : 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -2190,30 +2189,30 @@ static const NWidgetPart _nested_company_widgets[] = {
|
||||
EndContainer(),
|
||||
NWidget(NWID_VERTICAL), SetPIP(4, 2, 4),
|
||||
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_C_SELECT_VIEW_BUILD_HQ),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_VIEW_HQ), SetFill(1, 0), SetDataTip(STR_COMPANY_VIEW_VIEW_HQ_BUTTON, STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_C_BUILD_HQ), SetFill(1, 0), SetDataTip(STR_COMPANY_VIEW_BUILD_HQ_BUTTON, STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_VIEW_HQ), SetDataTip(STR_COMPANY_VIEW_VIEW_HQ_BUTTON, STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_C_BUILD_HQ), SetDataTip(STR_COMPANY_VIEW_BUILD_HQ_BUTTON, STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_C_SELECT_RELOCATE),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_C_RELOCATE_HQ), SetFill(1, 0), SetDataTip(STR_COMPANY_VIEW_RELOCATE_HQ, STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(90, 0),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_C_RELOCATE_HQ), SetDataTip(STR_COMPANY_VIEW_RELOCATE_HQ, STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS),
|
||||
NWidget(NWID_SPACER),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetFill(0, 1),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(WWT_TEXT, COLOUR_GREY, WID_C_DESC_COMPANY_VALUE), SetDataTip(STR_COMPANY_VIEW_COMPANY_VALUE, STR_NULL), SetFill(1, 0),
|
||||
NWidget(NWID_VERTICAL), SetPIP(4, 2, 4),
|
||||
NWidget(NWID_HORIZONTAL), SetPIP(0, 4, 0),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(WWT_TEXT, COLOUR_GREY, WID_C_DESC_INFRASTRUCTURE), SetDataTip(STR_COMPANY_VIEW_INFRASTRUCTURE, STR_NULL),
|
||||
NWidget(NWID_SPACER), SetFill(0, 1),
|
||||
EndContainer(),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_C_DESC_INFRASTRUCTURE_COUNTS), SetMinimalTextLines(5, 0), SetFill(1, 0),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_VIEW_INFRASTRUCTURE), SetDataTip(STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON, STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP),
|
||||
NWidget(NWID_SPACER), SetFill(0, 1), SetMinimalSize(90, 0),
|
||||
EndContainer(),
|
||||
NWidget(NWID_VERTICAL), SetPIP(4, 2, 4),
|
||||
NWidget(NWID_HORIZONTAL), SetPIP(0, 4, 0),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(WWT_TEXT, COLOUR_GREY, WID_C_DESC_INFRASTRUCTURE), SetDataTip(STR_COMPANY_VIEW_INFRASTRUCTURE, STR_NULL),
|
||||
NWidget(NWID_SPACER), SetFill(0, 1),
|
||||
EndContainer(),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_C_DESC_INFRASTRUCTURE_COUNTS), SetMinimalTextLines(5, 0), SetFill(1, 0),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_VIEW_INFRASTRUCTURE), SetDataTip(STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON, STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP),
|
||||
NWidget(NWID_SPACER),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_C_SELECT_DESC_OWNERS),
|
||||
NWidget(NWID_VERTICAL), SetPIP(5, 5, 4),
|
||||
@@ -2221,14 +2220,20 @@ static const NWidgetPart _nested_company_widgets[] = {
|
||||
NWidget(NWID_SPACER), SetFill(0, 1),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
/* Multi player buttons. */
|
||||
NWidget(NWID_VERTICAL), SetPIP(4, 2, 4),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(90, 0), SetFill(0, 1),
|
||||
/* Multi player buttons. */
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(NWID_SPACER), SetFill(0, 1),
|
||||
NWidget(NWID_HORIZONTAL), SetPIP(0, 4, 0),
|
||||
NWidget(NWID_SPACER), SetFill(1, 0),
|
||||
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_C_SELECT_GIVE_MONEY),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_GIVE_MONEY), SetDataTip(STR_COMPANY_VIEW_GIVE_MONEY_BUTTON, STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL), SetPIP(0, 4, 0),
|
||||
NWidget(WWT_EMPTY, COLOUR_GREY, WID_C_HAS_PASSWORD),
|
||||
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_C_SELECT_MULTIPLAYER),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_PASSWORD), SetFill(1, 0), SetDataTip(STR_COMPANY_VIEW_PASSWORD, STR_COMPANY_VIEW_PASSWORD_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_JOIN), SetFill(1, 0), SetDataTip(STR_COMPANY_VIEW_JOIN, STR_COMPANY_VIEW_JOIN_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_PASSWORD), SetDataTip(STR_COMPANY_VIEW_PASSWORD, STR_COMPANY_VIEW_PASSWORD_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_JOIN), SetDataTip(STR_COMPANY_VIEW_JOIN, STR_COMPANY_VIEW_JOIN_TOOLTIP),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
@@ -2311,7 +2316,7 @@ struct CompanyWindow : Window
|
||||
if (plane != wi->shown_plane) {
|
||||
wi->SetDisplayedPlane(plane);
|
||||
this->InvalidateData();
|
||||
return;
|
||||
reinit = true;
|
||||
}
|
||||
|
||||
/* Build HQ button handling. */
|
||||
@@ -2319,8 +2324,7 @@ struct CompanyWindow : Window
|
||||
wi = this->GetWidget<NWidgetStacked>(WID_C_SELECT_VIEW_BUILD_HQ);
|
||||
if (plane != wi->shown_plane) {
|
||||
wi->SetDisplayedPlane(plane);
|
||||
this->SetDirty();
|
||||
return;
|
||||
reinit = true;
|
||||
}
|
||||
|
||||
this->SetWidgetDisabledState(WID_C_VIEW_HQ, c->location_of_HQ == INVALID_TILE);
|
||||
@@ -2330,8 +2334,7 @@ struct CompanyWindow : Window
|
||||
wi = this->GetWidget<NWidgetStacked>(WID_C_SELECT_RELOCATE);
|
||||
if (plane != wi->shown_plane) {
|
||||
wi->SetDisplayedPlane(plane);
|
||||
this->SetDirty();
|
||||
return;
|
||||
reinit = true;
|
||||
}
|
||||
|
||||
/* Owners of company */
|
||||
@@ -2348,6 +2351,14 @@ struct CompanyWindow : Window
|
||||
reinit = true;
|
||||
}
|
||||
|
||||
/* Enable/disable 'Give money' button. */
|
||||
plane = ((local || _local_company == COMPANY_SPECTATOR || !_settings_game.economy.give_money) ? SZSP_NONE : 0);
|
||||
wi = this->GetWidget<NWidgetStacked>(WID_C_SELECT_GIVE_MONEY);
|
||||
if (plane != wi->shown_plane) {
|
||||
wi->SetDisplayedPlane(plane);
|
||||
reinit = true;
|
||||
}
|
||||
|
||||
/* Multiplayer buttons. */
|
||||
plane = ((!_networking) ? (int)SZSP_NONE : (int)(local ? CWP_MP_C_PWD : CWP_MP_C_JOIN));
|
||||
wi = this->GetWidget<NWidgetStacked>(WID_C_SELECT_MULTIPLAYER);
|
||||
@@ -2371,8 +2382,8 @@ struct CompanyWindow : Window
|
||||
switch (widget) {
|
||||
case WID_C_FACE: {
|
||||
Dimension face_size = GetSpriteSize(SPR_GRADIENT);
|
||||
size->width = max(size->width, face_size.width);
|
||||
size->height = max(size->height, face_size.height);
|
||||
size->width = std::max(size->width, face_size.width);
|
||||
size->height = std::max(size->height, face_size.height);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2393,18 +2404,18 @@ struct CompanyWindow : Window
|
||||
case WID_C_DESC_VEHICLE_COUNTS:
|
||||
SetDParamMaxValue(0, 5000); // Maximum number of vehicles
|
||||
for (uint i = 0; i < lengthof(_company_view_vehicle_count_strings); i++) {
|
||||
size->width = max(size->width, GetStringBoundingBox(_company_view_vehicle_count_strings[i]).width);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(_company_view_vehicle_count_strings[i]).width);
|
||||
}
|
||||
break;
|
||||
|
||||
case WID_C_DESC_INFRASTRUCTURE_COUNTS:
|
||||
SetDParamMaxValue(0, UINT_MAX);
|
||||
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL).width);
|
||||
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD).width);
|
||||
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_WATER).width);
|
||||
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_STATION).width);
|
||||
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT).width);
|
||||
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_NONE).width);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL).width);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD).width);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_WATER).width);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_STATION).width);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT).width);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_NONE).width);
|
||||
break;
|
||||
|
||||
case WID_C_DESC_OWNERS: {
|
||||
@@ -2412,11 +2423,27 @@ struct CompanyWindow : Window
|
||||
SetDParamMaxValue(0, 75);
|
||||
SetDParam(1, c2->index);
|
||||
|
||||
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_SHARES_OWNED_BY).width);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_SHARES_OWNED_BY).width);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_C_VIEW_HQ:
|
||||
case WID_C_BUILD_HQ:
|
||||
case WID_C_RELOCATE_HQ:
|
||||
case WID_C_VIEW_INFRASTRUCTURE:
|
||||
case WID_C_GIVE_MONEY:
|
||||
case WID_C_COMPANY_PASSWORD:
|
||||
case WID_C_COMPANY_JOIN:
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_VIEW_HQ_BUTTON).width);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_BUILD_HQ_BUTTON).width);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_RELOCATE_HQ).width);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON).width);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_GIVE_MONEY_BUTTON).width);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_PASSWORD).width);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_JOIN).width);
|
||||
break;
|
||||
|
||||
case WID_C_HAS_PASSWORD:
|
||||
*size = maxdim(*size, GetSpriteSize(SPR_LOCK));
|
||||
break;
|
||||
@@ -2455,7 +2482,7 @@ struct CompanyWindow : Window
|
||||
if (amounts[0] + amounts[1] + amounts[2] + amounts[3] == 0) {
|
||||
DrawString(r.left, r.right, y, STR_COMPANY_VIEW_VEHICLES_NONE);
|
||||
} else {
|
||||
assert_compile(lengthof(amounts) == lengthof(_company_view_vehicle_count_strings));
|
||||
static_assert(lengthof(amounts) == lengthof(_company_view_vehicle_count_strings));
|
||||
|
||||
for (uint i = 0; i < lengthof(amounts); i++) {
|
||||
if (amounts[i] != 0) {
|
||||
@@ -2575,7 +2602,7 @@ struct CompanyWindow : Window
|
||||
case WID_C_VIEW_HQ: {
|
||||
TileIndex tile = Company::Get((CompanyID)this->window_number)->location_of_HQ;
|
||||
if (_ctrl_pressed) {
|
||||
ShowExtraViewPortWindow(tile);
|
||||
ShowExtraViewportWindow(tile);
|
||||
} else {
|
||||
ScrollMainWindowToTile(tile);
|
||||
}
|
||||
@@ -2611,6 +2638,11 @@ struct CompanyWindow : Window
|
||||
ShowCompanyInfrastructure((CompanyID)this->window_number);
|
||||
break;
|
||||
|
||||
case WID_C_GIVE_MONEY:
|
||||
this->query_widget = WID_C_GIVE_MONEY;
|
||||
ShowQueryString(STR_EMPTY, STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION, 30, this, CS_NUMERAL, QSF_NONE);
|
||||
break;
|
||||
|
||||
case WID_C_BUY_SHARE:
|
||||
DoCommandP(0, this->window_number, 0, CMD_BUY_SHARE_IN_COMPANY | CMD_MSG(STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS));
|
||||
break;
|
||||
@@ -2667,6 +2699,14 @@ struct CompanyWindow : Window
|
||||
switch (this->query_widget) {
|
||||
default: NOT_REACHED();
|
||||
|
||||
case WID_C_GIVE_MONEY: {
|
||||
Money money = (Money)(strtoull(str, nullptr, 10) / _currency->rate);
|
||||
uint32 money_c = Clamp(ClampToI32(money), 0, 20000000); // Clamp between 20 million and 0
|
||||
|
||||
DoCommandP(0, money_c, this->window_number, CMD_GIVE_MONEY | CMD_MSG(STR_ERROR_CAN_T_GIVE_MONEY));
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_C_PRESIDENT_NAME:
|
||||
DoCommandP(0, 0, 0, CMD_RENAME_PRESIDENT | CMD_MSG(STR_ERROR_CAN_T_CHANGE_PRESIDENT), nullptr, str);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user