mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-02-01 11:59:26 +00:00
(svn r20849) -Change: Only display liveries in the liverywindow if they are used by some vehicle somewhen (not considering date or such).
This commit is contained in:
parent
a54b711dc1
commit
717fcd09c6
@ -613,19 +613,11 @@ public:
|
||||
this->InitNested(desc, company);
|
||||
this->owner = company;
|
||||
this->LowerWidget(SCLW_WIDGET_CLASS_GENERAL);
|
||||
this->InvalidateData(1);
|
||||
}
|
||||
|
||||
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
|
||||
{
|
||||
/* Number of liveries in each class, used to determine the height of the livery matrix widget. */
|
||||
static const byte livery_height[] = {
|
||||
1,
|
||||
13,
|
||||
4,
|
||||
2,
|
||||
3,
|
||||
};
|
||||
|
||||
switch (widget) {
|
||||
case SCLW_WIDGET_SPACER_DROPDOWN: {
|
||||
/* The matrix widget below needs enough room to print all the schemes. */
|
||||
@ -637,10 +629,17 @@ public:
|
||||
break;
|
||||
}
|
||||
|
||||
case SCLW_WIDGET_MATRIX:
|
||||
size->height = livery_height[this->livery_class] * (4 + FONT_HEIGHT_NORMAL);
|
||||
this->GetWidget<NWidgetCore>(SCLW_WIDGET_MATRIX)->widget_data = (livery_height[this->livery_class] << MAT_ROW_START) | (1 << MAT_COL_START);
|
||||
case SCLW_WIDGET_MATRIX: {
|
||||
uint livery_height = 0;
|
||||
for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) {
|
||||
if (_livery_class[scheme] == this->livery_class && HasBit(_loaded_newgrf_features.used_liveries, scheme)) {
|
||||
livery_height++;
|
||||
}
|
||||
}
|
||||
size->height = livery_height * (4 + FONT_HEIGHT_NORMAL);
|
||||
this->GetWidget<NWidgetCore>(SCLW_WIDGET_MATRIX)->widget_data = (livery_height << MAT_ROW_START) | (1 << MAT_COL_START);
|
||||
break;
|
||||
}
|
||||
|
||||
case SCLW_WIDGET_SEC_COL_DROPDOWN:
|
||||
if (!_loaded_newgrf_features.has_2CC) {
|
||||
@ -711,7 +710,7 @@ public:
|
||||
int y = r.top + 3;
|
||||
const Company *c = Company::Get((CompanyID)this->window_number);
|
||||
for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) {
|
||||
if (_livery_class[scheme] == this->livery_class) {
|
||||
if (_livery_class[scheme] == this->livery_class && HasBit(_loaded_newgrf_features.used_liveries, scheme)) {
|
||||
bool sel = HasBit(this->sel, scheme) != 0;
|
||||
|
||||
/* Optional check box + scheme name. */
|
||||
@ -751,7 +750,7 @@ public:
|
||||
/* Select the first item in the list */
|
||||
this->sel = 0;
|
||||
for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) {
|
||||
if (_livery_class[scheme] == this->livery_class) {
|
||||
if (_livery_class[scheme] == this->livery_class && HasBit(_loaded_newgrf_features.used_liveries, scheme)) {
|
||||
this->sel = 1 << scheme;
|
||||
break;
|
||||
}
|
||||
@ -773,7 +772,7 @@ public:
|
||||
LiveryScheme j = (LiveryScheme)((pt.y - wid->pos_y) / (4 + FONT_HEIGHT_NORMAL));
|
||||
|
||||
for (LiveryScheme scheme = LS_BEGIN; scheme <= j; scheme++) {
|
||||
if (_livery_class[scheme] != this->livery_class) j++;
|
||||
if (_livery_class[scheme] != this->livery_class || !HasBit(_loaded_newgrf_features.used_liveries, scheme)) j++;
|
||||
if (scheme >= LS_END) return;
|
||||
}
|
||||
if (j >= LS_END) return;
|
||||
@ -805,7 +804,26 @@ public:
|
||||
|
||||
virtual void OnInvalidateData(int data = 0)
|
||||
{
|
||||
this->ReInit();
|
||||
this->SetWidgetsDisabledState(true, SCLW_WIDGET_CLASS_RAIL, SCLW_WIDGET_CLASS_ROAD, SCLW_WIDGET_CLASS_SHIP, SCLW_WIDGET_CLASS_AIRCRAFT, WIDGET_LIST_END);
|
||||
|
||||
bool current_class_valid = this->livery_class == LC_OTHER;
|
||||
if (_settings_client.gui.liveries == LIT_ALL || (_settings_client.gui.liveries == LIT_COMPANY && this->window_number == _local_company)) {
|
||||
for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) {
|
||||
if (HasBit(_loaded_newgrf_features.used_liveries, scheme)) {
|
||||
if (_livery_class[scheme] == this->livery_class) current_class_valid = true;
|
||||
this->EnableWidget(SCLW_WIDGET_CLASS_GENERAL + _livery_class[scheme]);
|
||||
} else {
|
||||
ClrBit(this->sel, scheme);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!current_class_valid) {
|
||||
Point pt = {0, 0};
|
||||
this->OnClick(pt, SCLW_WIDGET_CLASS_GENERAL, 1);
|
||||
} else if (data == 0) {
|
||||
this->ReInit();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -890,6 +890,12 @@ static bool InvalidateVehTimetableWindow(int32 p1)
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool InvalidateCompanyLiveryWindow(int32 p1)
|
||||
{
|
||||
InvalidateWindowClassesData(WC_COMPANY_COLOUR);
|
||||
return RedrawScreen(p1);
|
||||
}
|
||||
|
||||
/*
|
||||
* A: competitors
|
||||
* B: competitor start time. Deprecated since savegame version 110.
|
||||
|
@ -39,6 +39,7 @@ static bool CheckFreeformEdges(int32 p1);
|
||||
static bool ChangeDynamicEngines(int32 p1);
|
||||
static bool StationCatchmentChanged(int32 p1);
|
||||
static bool InvalidateVehTimetableWindow(int32 p1);
|
||||
static bool InvalidateCompanyLiveryWindow(int32 p1);
|
||||
|
||||
#ifdef ENABLE_NETWORK
|
||||
static bool UpdateClientName(int32 p1);
|
||||
@ -569,7 +570,7 @@ const SettingDesc _settings[] = {
|
||||
SDTC_BOOL(gui.population_in_label, S, 0, true, STR_CONFIG_SETTING_POPULATION_IN_LABEL, PopulationInLabelActive),
|
||||
SDTC_BOOL(gui.link_terraform_toolbar, S, 0, false, STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR, NULL),
|
||||
SDTC_VAR(gui.smallmap_land_colour, SLE_UINT8, S, MS, 0, 0, 2, 0, STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR, RedrawSmallmap),
|
||||
SDTC_VAR(gui.liveries, SLE_UINT8, S, MS, 2, 0, 2, 0, STR_CONFIG_SETTING_LIVERIES, RedrawScreen),
|
||||
SDTC_VAR(gui.liveries, SLE_UINT8, S, MS, 2, 0, 2, 0, STR_CONFIG_SETTING_LIVERIES, InvalidateCompanyLiveryWindow),
|
||||
SDTC_BOOL(gui.prefer_teamchat, S, 0, false, STR_CONFIG_SETTING_PREFER_TEAMCHAT, NULL),
|
||||
SDTC_VAR(gui.scrollwheel_scrolling, SLE_UINT8, S, MS, 0, 0, 2, 0, STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING, NULL),
|
||||
SDTC_VAR(gui.scrollwheel_multiplier, SLE_UINT8, S, 0, 5, 1, 15, 1, STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER, NULL),
|
||||
|
Loading…
Reference in New Issue
Block a user