Add setting to allow hiding viewport labels of inidivudal waypoints

pull/363/head
Jonathan G Rennison 2 years ago
parent c65901fef2
commit d81cbc25b8

@ -68,6 +68,7 @@ CommandProc CmdBuildTunnel;
CommandProc CmdBuildTrainDepot; CommandProc CmdBuildTrainDepot;
CommandProcEx CmdBuildRailWaypoint; CommandProcEx CmdBuildRailWaypoint;
CommandProc CmdRenameWaypoint; CommandProc CmdRenameWaypoint;
CommandProc CmdSetWaypointLabelHidden;
CommandProc CmdRemoveFromRailWaypoint; CommandProc CmdRemoveFromRailWaypoint;
CommandProc CmdBuildRoadStop; CommandProc CmdBuildRoadStop;
@ -316,6 +317,7 @@ static const Command _command_proc_table[] = {
DEF_CMD(CmdConvertRail, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_CONVERT_RAIL DEF_CMD(CmdConvertRail, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_CONVERT_RAIL
DEF_CMD(CmdBuildRailWaypoint, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_RAIL_WAYPOINT DEF_CMD(CmdBuildRailWaypoint, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_RAIL_WAYPOINT
DEF_CMD(CmdRenameWaypoint, 0, CMDT_OTHER_MANAGEMENT ), // CMD_RENAME_WAYPOINT DEF_CMD(CmdRenameWaypoint, 0, CMDT_OTHER_MANAGEMENT ), // CMD_RENAME_WAYPOINT
DEF_CMD(CmdSetWaypointLabelHidden, 0, CMDT_OTHER_MANAGEMENT ), // CMD_SET_WAYPOINT_LABEL_HIDDEN
DEF_CMD(CmdRemoveFromRailWaypoint, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_FROM_RAIL_WAYPOINT DEF_CMD(CmdRemoveFromRailWaypoint, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_FROM_RAIL_WAYPOINT
DEF_CMD(CmdBuildRoadStop, CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_ROAD_STOP DEF_CMD(CmdBuildRoadStop, CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_ROAD_STOP

@ -252,6 +252,7 @@ enum Commands {
CMD_BUILD_RAIL_WAYPOINT, ///< build a waypoint CMD_BUILD_RAIL_WAYPOINT, ///< build a waypoint
CMD_RENAME_WAYPOINT, ///< rename a waypoint CMD_RENAME_WAYPOINT, ///< rename a waypoint
CMD_SET_WAYPOINT_LABEL_HIDDEN, ///< set whether waypoint label is hidden
CMD_REMOVE_FROM_RAIL_WAYPOINT, ///< remove a (rectangle of) tiles from a rail waypoint CMD_REMOVE_FROM_RAIL_WAYPOINT, ///< remove a (rectangle of) tiles from a rail waypoint
CMD_BUILD_ROAD_STOP, ///< build a road stop CMD_BUILD_ROAD_STOP, ///< build a road stop

@ -420,9 +420,11 @@ STR_SETTINGS_MENU_FULL_ANIMATION :Full animation
STR_SETTINGS_MENU_FULL_DETAIL :Full detail STR_SETTINGS_MENU_FULL_DETAIL :Full detail
STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Transparent buildings STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Transparent buildings
STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Transparent signs STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Transparent signs
STR_SETTINGS_MENU_MONEY_TEXT_EFFECTS :Income/cost texts displayed
############ range ends here ############ range ends here
STR_SETTINGS_MENU_MONEY_TEXT_EFFECTS :Income/cost texts displayed
STR_SETTINGS_MENU_SHOW_HIDDEN_SIGNS :Hidden signs and names displayed
# File menu # File menu
###length 5 ###length 5
STR_FILE_MENU_SAVE_GAME :Save game STR_FILE_MENU_SAVE_GAME :Save game
@ -1611,6 +1613,9 @@ STR_CONFIG_SETTING_DEMOLISH_CONFIRM_MODE_ALL :Industries and
STR_CONFIG_SETTING_DUAL_PANE_TRAIN_PURCHASE_WINDOW :Separate locomotives and wagons in train purchase window: {STRING2} STR_CONFIG_SETTING_DUAL_PANE_TRAIN_PURCHASE_WINDOW :Separate locomotives and wagons in train purchase window: {STRING2}
STR_CONFIG_SETTING_DUAL_PANE_TRAIN_PURCHASE_WINDOW_HELPTEXT :When enabled, the train purchase window shows locomotives and wagons in separate side-by-side lists. STR_CONFIG_SETTING_DUAL_PANE_TRAIN_PURCHASE_WINDOW_HELPTEXT :When enabled, the train purchase window shows locomotives and wagons in separate side-by-side lists.
STR_CONFIG_SETTING_ALLOW_HIDE_WAYPOINT_LABEL :Allow hiding waypoint viewport labels: {STRING2}
STR_CONFIG_SETTING_ALLOW_HIDE_WAYPOINT_LABEL_HELPTEXT :When enabled, waypoints can have their viewport labels individually hidden.{}This is useful when waypoints are used decoratively or when minor waypoints do not require a label.
STR_CONFIG_SETTING_ADV_SIG_BRIDGE_TUN_MODES :Enable signals on bridges/tunnels advanced modes: {STRING2} STR_CONFIG_SETTING_ADV_SIG_BRIDGE_TUN_MODES :Enable signals on bridges/tunnels advanced modes: {STRING2}
STR_CONFIG_SETTING_ADV_SIG_BRIDGE_TUN_MODES_HELPTEXT :Enables use of advanced modes of signal simulation on bridges and tunnels. When disabled, bridges/tunnels which are not already in an advanced mode cannot be changed to an advanced mode, however other players may choose to enable this setting and use an advanced mode. STR_CONFIG_SETTING_ADV_SIG_BRIDGE_TUN_MODES_HELPTEXT :Enables use of advanced modes of signal simulation on bridges and tunnels. When disabled, bridges/tunnels which are not already in an advanced mode cannot be changed to an advanced mode, however other players may choose to enable this setting and use an advanced mode.
@ -4611,6 +4616,8 @@ STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Change b
STR_EDIT_WAYPOINT_NAME :{WHITE}Edit waypoint name STR_EDIT_WAYPOINT_NAME :{WHITE}Edit waypoint name
STR_WAYPOINT_VIEW_HIDE_VIEWPORT_LABEL :{BLACK}Hide the name label for this waypoint
# Finances window # Finances window
STR_FINANCES_CAPTION :{WHITE}{COMPANY} Finances {BLACK}{COMPANY_NUM} STR_FINANCES_CAPTION :{WHITE}{COMPANY} Finances {BLACK}{COMPANY_NUM}
STR_FINANCES_EXPENDITURE_INCOME_TITLE :{WHITE}Expenditure/Income STR_FINANCES_EXPENDITURE_INCOME_TITLE :{WHITE}Expenditure/Income

@ -54,6 +54,7 @@ enum DisplayOptions {
/** Extra Display Options */ /** Extra Display Options */
enum ExtraDisplayOptions { enum ExtraDisplayOptions {
XDO_SHOW_MONEY_TEXT_EFFECTS = 0, ///< Display money text effects. XDO_SHOW_MONEY_TEXT_EFFECTS = 0, ///< Display money text effects.
XDO_SHOW_HIDDEN_SIGNS = 1, ///< Show hidden signs
}; };
extern GameMode _game_mode; extern GameMode _game_mode;

@ -165,6 +165,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = {
{ XSLFI_COMPANY_PW, XSCF_IGNORABLE_ALL, 1, 1, "company_password", nullptr, nullptr, "PLYP" }, { XSLFI_COMPANY_PW, XSCF_IGNORABLE_ALL, 1, 1, "company_password", nullptr, nullptr, "PLYP" },
{ XSLFI_ST_INDUSTRY_CARGO_MODE, XSCF_IGNORABLE_UNKNOWN, 1, 1, "st_industry_cargo_mode", nullptr, nullptr, nullptr }, { XSLFI_ST_INDUSTRY_CARGO_MODE, XSCF_IGNORABLE_UNKNOWN, 1, 1, "st_industry_cargo_mode", nullptr, nullptr, nullptr },
{ XSLFI_TL_SPEED_LIMIT, XSCF_IGNORABLE_UNKNOWN, 1, 1, "tl_speed_limit", nullptr, nullptr, nullptr }, { XSLFI_TL_SPEED_LIMIT, XSCF_IGNORABLE_UNKNOWN, 1, 1, "tl_speed_limit", nullptr, nullptr, nullptr },
{ XSLFI_WAYPOINT_FLAGS, XSCF_NULL, 1, 1, "waypoint_flags", nullptr, nullptr, nullptr },
{ XSLFI_SCRIPT_INT64, XSCF_NULL, 1, 1, "script_int64", nullptr, nullptr, nullptr }, { XSLFI_SCRIPT_INT64, XSCF_NULL, 1, 1, "script_int64", nullptr, nullptr, nullptr },
{ XSLFI_NULL, XSCF_NULL, 0, 0, nullptr, nullptr, nullptr, nullptr },// This is the end marker { XSLFI_NULL, XSCF_NULL, 0, 0, nullptr, nullptr, nullptr, nullptr },// This is the end marker
}; };

@ -119,6 +119,7 @@ enum SlXvFeatureIndex {
XSLFI_COMPANY_PW, ///< Company passwords XSLFI_COMPANY_PW, ///< Company passwords
XSLFI_ST_INDUSTRY_CARGO_MODE, ///< Station industry cargo mode setting XSLFI_ST_INDUSTRY_CARGO_MODE, ///< Station industry cargo mode setting
XSLFI_TL_SPEED_LIMIT, ///< Through load maximum speed setting XSLFI_TL_SPEED_LIMIT, ///< Through load maximum speed setting
XSLFI_WAYPOINT_FLAGS, ///< Waypoint flags
XSLFI_SCRIPT_INT64, ///< See: SLV_SCRIPT_INT64 XSLFI_SCRIPT_INT64, ///< See: SLV_SCRIPT_INT64

@ -461,6 +461,7 @@ static const SaveLoad _waypoint_desc[] = {
SLE_CONDVAR(Waypoint, train_station.tile, SLE_UINT32, SLV_124, SL_MAX_VERSION), SLE_CONDVAR(Waypoint, train_station.tile, SLE_UINT32, SLV_124, SL_MAX_VERSION),
SLE_CONDVAR(Waypoint, train_station.w, SLE_FILE_U8 | SLE_VAR_U16, SLV_124, SL_MAX_VERSION), SLE_CONDVAR(Waypoint, train_station.w, SLE_FILE_U8 | SLE_VAR_U16, SLV_124, SL_MAX_VERSION),
SLE_CONDVAR(Waypoint, train_station.h, SLE_FILE_U8 | SLE_VAR_U16, SLV_124, SL_MAX_VERSION), SLE_CONDVAR(Waypoint, train_station.h, SLE_FILE_U8 | SLE_VAR_U16, SLV_124, SL_MAX_VERSION),
SLE_CONDVAR_X(Waypoint, waypoint_flags, SLE_UINT16, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_WAYPOINT_FLAGS)),
}; };
/** /**

@ -1923,6 +1923,7 @@ static SettingsContainer &GetSettingsTree()
interface->Add(new SettingEntry("gui.vehicle_names")); interface->Add(new SettingEntry("gui.vehicle_names"));
interface->Add(new SettingEntry("gui.station_rating_tooltip_mode")); interface->Add(new SettingEntry("gui.station_rating_tooltip_mode"));
interface->Add(new SettingEntry("gui.dual_pane_train_purchase_window")); interface->Add(new SettingEntry("gui.dual_pane_train_purchase_window"));
interface->Add(new SettingEntry("gui.allow_hiding_waypoint_labels"));
} }
SettingsPage *advisors = main->Add(new SettingsPage(STR_CONFIG_SETTING_ADVISORS)); SettingsPage *advisors = main->Add(new SettingsPage(STR_CONFIG_SETTING_ADVISORS));

@ -246,6 +246,7 @@ struct GUISettings : public TimeSettings {
uint8 station_rating_tooltip_mode; ///< Station rating tooltip mode uint8 station_rating_tooltip_mode; ///< Station rating tooltip mode
uint8 demolish_confirm_mode; ///< Demolition confirmation mode uint8 demolish_confirm_mode; ///< Demolition confirmation mode
bool dual_pane_train_purchase_window; ///< Dual pane train purchase window bool dual_pane_train_purchase_window; ///< Dual pane train purchase window
bool allow_hiding_waypoint_labels; ///< Allow hiding waypoint viewport labels
uint16 console_backlog_timeout; ///< the minimum amount of time items should be in the console backlog before they will be removed in ~3 seconds granularity. uint16 console_backlog_timeout; ///< the minimum amount of time items should be in the console backlog before they will be removed in ~3 seconds granularity.
uint16 console_backlog_length; ///< the minimum amount of items in the console backlog before items will be removed. uint16 console_backlog_length; ///< the minimum amount of items in the console backlog before items will be removed.

@ -66,11 +66,6 @@ BaseStation::~BaseStation()
DeleteWindowById(WC_AIRCRAFT_LIST, VehicleListIdentifier(VL_STATION_LIST, VEH_AIRCRAFT, this->owner, this->index).Pack()); DeleteWindowById(WC_AIRCRAFT_LIST, VehicleListIdentifier(VL_STATION_LIST, VEH_AIRCRAFT, this->owner, this->index).Pack());
DeleteWindowById(WC_DEPARTURES_BOARD, this->index); DeleteWindowById(WC_DEPARTURES_BOARD, this->index);
DeleteWindowById(WC_STATION_CARGO, this->index); DeleteWindowById(WC_STATION_CARGO, this->index);
if (HasBit(_display_opt, Station::IsExpected(this) ? DO_SHOW_STATION_NAMES : DO_SHOW_WAYPOINT_NAMES) &&
!(_local_company != this->owner && this->owner != OWNER_NONE && !HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS))) {
this->sign.MarkDirty(ZOOM_LVL_DRAW_SPR);
}
} }
Station::Station(TileIndex tile) : Station::Station(TileIndex tile) :
@ -174,6 +169,8 @@ Station::~Station()
_station_kdtree.Remove(this->index); _station_kdtree.Remove(this->index);
if (_viewport_sign_kdtree_valid && this->sign.kdtree_valid) _viewport_sign_kdtree.Remove(ViewportSignKdtreeItem::MakeStation(this->index)); if (_viewport_sign_kdtree_valid && this->sign.kdtree_valid) _viewport_sign_kdtree.Remove(ViewportSignKdtreeItem::MakeStation(this->index));
if (ShouldShowBaseStationViewportLabel(this)) this->sign.MarkDirty(ZOOM_LVL_DRAW_SPR);
} }

@ -478,8 +478,7 @@ void Station::UpdateVirtCoord()
SetDParam(0, this->index); SetDParam(0, this->index);
SetDParam(1, this->facilities); SetDParam(1, this->facilities);
bool shown = HasBit(_display_opt, DO_SHOW_STATION_NAMES) && !(_local_company != this->owner && this->owner != OWNER_NONE && !HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS)); this->sign.UpdatePosition(ShouldShowBaseStationViewportLabel(this) ? ZOOM_LVL_DRAW_SPR : ZOOM_LVL_END, pt.x, pt.y, STR_VIEWPORT_STATION);
this->sign.UpdatePosition(shown ? ZOOM_LVL_DRAW_SPR : ZOOM_LVL_END, pt.x, pt.y, STR_VIEWPORT_STATION);
if (_viewport_sign_kdtree_valid) _viewport_sign_kdtree.Insert(ViewportSignKdtreeItem::MakeStation(this->index)); if (_viewport_sign_kdtree_valid) _viewport_sign_kdtree.Insert(ViewportSignKdtreeItem::MakeStation(this->index));

@ -69,4 +69,6 @@ static inline Money StationMaintenanceCost(uint32 num)
Money AirportMaintenanceCost(Owner owner); Money AirportMaintenanceCost(Owner owner);
bool ShouldShowBaseStationViewportLabel(const BaseStation *bst);
#endif /* STATION_FUNC_H */ #endif /* STATION_FUNC_H */

@ -3018,3 +3018,12 @@ void GuiShowStationRatingTooltip(Window *parent, const Station *st, const CargoS
DeleteWindowById(WC_STATION_RATING_TOOLTIP, 0); DeleteWindowById(WC_STATION_RATING_TOOLTIP, 0);
new StationRatingTooltipWindow(parent, st, cs); new StationRatingTooltipWindow(parent, st, cs);
} }
bool ShouldShowBaseStationViewportLabel(const BaseStation *bst)
{
if (!HasBit(_display_opt, Station::IsExpected(bst) ? DO_SHOW_STATION_NAMES : DO_SHOW_WAYPOINT_NAMES)) return false;
if (HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS) && (_local_company != bst->owner && bst->owner != OWNER_NONE)) return false;
if (Waypoint::IsExpected(bst) && HasBit(Waypoint::From(bst)->waypoint_flags, WPF_HIDE_LABEL) && _settings_client.gui.allow_hiding_waypoint_labels &&
!HasBit(_extra_display_opt, XDO_SHOW_HIDDEN_SIGNS)) return false;
return true;
}

@ -12,7 +12,7 @@ extern std::string _config_language_file;
static std::initializer_list<const char*> _support8bppmodes{"no", "system" , "hardware"}; static std::initializer_list<const char*> _support8bppmodes{"no", "system" , "hardware"};
static std::initializer_list<const char*> _display_opt_modes{"SHOW_TOWN_NAMES", "SHOW_STATION_NAMES", "SHOW_SIGNS", "FULL_ANIMATION", "", "FULL_DETAIL", "WAYPOINTS", "SHOW_COMPETITOR_SIGNS"}; static std::initializer_list<const char*> _display_opt_modes{"SHOW_TOWN_NAMES", "SHOW_STATION_NAMES", "SHOW_SIGNS", "FULL_ANIMATION", "", "FULL_DETAIL", "WAYPOINTS", "SHOW_COMPETITOR_SIGNS"};
static std::initializer_list<const char*> _extra_display_opt_modes{"SHOW_MONEY_TEXT_EFFECTS"}; static std::initializer_list<const char*> _extra_display_opt_modes{"SHOW_MONEY_TEXT_EFFECTS", "SHOW_HIDDEN_SIGNS"};
#ifdef WITH_COCOA #ifdef WITH_COCOA
extern bool _allow_hidpi_window; extern bool _allow_hidpi_window;

@ -5428,6 +5428,14 @@ def = true
str = STR_CONFIG_SETTING_DUAL_PANE_TRAIN_PURCHASE_WINDOW str = STR_CONFIG_SETTING_DUAL_PANE_TRAIN_PURCHASE_WINDOW
strhelp = STR_CONFIG_SETTING_DUAL_PANE_TRAIN_PURCHASE_WINDOW_HELPTEXT strhelp = STR_CONFIG_SETTING_DUAL_PANE_TRAIN_PURCHASE_WINDOW_HELPTEXT
[SDTC_BOOL]
var = gui.allow_hiding_waypoint_labels
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
def = false
str = STR_CONFIG_SETTING_ALLOW_HIDE_WAYPOINT_LABEL
strhelp = STR_CONFIG_SETTING_ALLOW_HIDE_WAYPOINT_LABEL_HELPTEXT
post_cb = [](auto) { MarkWholeScreenDirty(); InvalidateWindowClassesData(WC_WAYPOINT_VIEW, 0); }
; For the dedicated build we'll enable dates in logs by default. ; For the dedicated build we'll enable dates in logs by default.
[SDTC_BOOL] [SDTC_BOOL]
ifdef = DEDICATED ifdef = DEDICATED

@ -312,6 +312,7 @@ enum OptionMenuEntries {
OME_TRANSPARENTBUILDINGS, OME_TRANSPARENTBUILDINGS,
OME_SHOW_STATIONSIGNS, OME_SHOW_STATIONSIGNS,
OME_SHOW_MONEYTEXT, OME_SHOW_MONEYTEXT,
OME_SHOW_HIDDEN_SIGNS,
}; };
/** /**
@ -338,6 +339,9 @@ static CallBackFunction ToolbarOptionsClick(Window *w)
list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED, OME_SHOW_WAYPOINTNAMES, false, HasBit(_display_opt, DO_SHOW_WAYPOINT_NAMES))); list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED, OME_SHOW_WAYPOINTNAMES, false, HasBit(_display_opt, DO_SHOW_WAYPOINT_NAMES)));
list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_SIGNS_DISPLAYED, OME_SHOW_SIGNS, false, HasBit(_display_opt, DO_SHOW_SIGNS))); list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_SIGNS_DISPLAYED, OME_SHOW_SIGNS, false, HasBit(_display_opt, DO_SHOW_SIGNS)));
list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS, OME_SHOW_COMPETITOR_SIGNS, false, HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS))); list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS, OME_SHOW_COMPETITOR_SIGNS, false, HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS)));
if (_settings_client.gui.allow_hiding_waypoint_labels) {
list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_SHOW_HIDDEN_SIGNS, OME_SHOW_HIDDEN_SIGNS, false, HasBit(_extra_display_opt, XDO_SHOW_HIDDEN_SIGNS)));
}
list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_FULL_ANIMATION, OME_FULL_ANIMATION, false, HasBit(_display_opt, DO_FULL_ANIMATION))); list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_FULL_ANIMATION, OME_FULL_ANIMATION, false, HasBit(_display_opt, DO_FULL_ANIMATION)));
list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_FULL_DETAIL, OME_FULL_DETAILS, false, HasBit(_display_opt, DO_FULL_DETAIL))); list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_FULL_DETAIL, OME_FULL_DETAILS, false, HasBit(_display_opt, DO_FULL_DETAIL)));
list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS, OME_TRANSPARENTBUILDINGS, false, IsTransparencySet(TO_HOUSES))); list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS, OME_TRANSPARENTBUILDINGS, false, IsTransparencySet(TO_HOUSES)));
@ -378,6 +382,7 @@ static CallBackFunction MenuClickSettings(int index)
case OME_TRANSPARENTBUILDINGS: ToggleTransparency(TO_HOUSES); break; case OME_TRANSPARENTBUILDINGS: ToggleTransparency(TO_HOUSES); break;
case OME_SHOW_STATIONSIGNS: ToggleTransparency(TO_SIGNS); break; case OME_SHOW_STATIONSIGNS: ToggleTransparency(TO_SIGNS); break;
case OME_SHOW_MONEYTEXT: ToggleBit(_extra_display_opt, XDO_SHOW_MONEY_TEXT_EFFECTS); break; case OME_SHOW_MONEYTEXT: ToggleBit(_extra_display_opt, XDO_SHOW_MONEY_TEXT_EFFECTS); break;
case OME_SHOW_HIDDEN_SIGNS: ToggleBit(_extra_display_opt, XDO_SHOW_HIDDEN_SIGNS); break;
} }
MarkWholeScreenDirty(); MarkWholeScreenDirty();
return CBF_NONE; return CBF_NONE;

@ -1748,6 +1748,7 @@ static void ViewportAddKdtreeSigns(DrawPixelInfo *dpi, bool towns_only)
bool show_towns = HasBit(_display_opt, DO_SHOW_TOWN_NAMES) && _game_mode != GM_MENU; bool show_towns = HasBit(_display_opt, DO_SHOW_TOWN_NAMES) && _game_mode != GM_MENU;
bool show_signs = HasBit(_display_opt, DO_SHOW_SIGNS) && !IsInvisibilitySet(TO_SIGNS) && !towns_only; bool show_signs = HasBit(_display_opt, DO_SHOW_SIGNS) && !IsInvisibilitySet(TO_SIGNS) && !towns_only;
bool show_competitors = HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS) && !towns_only; bool show_competitors = HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS) && !towns_only;
bool hide_hidden_waypoints = _settings_client.gui.allow_hiding_waypoint_labels && !HasBit(_extra_display_opt, XDO_SHOW_HIDDEN_SIGNS);
const BaseStation *st; const BaseStation *st;
const Sign *si; const Sign *si;
@ -1775,6 +1776,7 @@ static void ViewportAddKdtreeSigns(DrawPixelInfo *dpi, bool towns_only)
/* Don't draw if station is owned by another company and competitor station names are hidden. Stations owned by none are never ignored. */ /* Don't draw if station is owned by another company and competitor station names are hidden. Stations owned by none are never ignored. */
if (!show_competitors && _local_company != st->owner && st->owner != OWNER_NONE) break; if (!show_competitors && _local_company != st->owner && st->owner != OWNER_NONE) break;
if (hide_hidden_waypoints && HasBit(Waypoint::From(st)->waypoint_flags, WPF_HIDE_LABEL)) break;
stations.push_back(st); stations.push_back(st);
break; break;
@ -4056,6 +4058,7 @@ static bool CheckClickOnViewportSign(const Viewport *vp, int x, int y)
bool show_towns = HasBit(_display_opt, DO_SHOW_TOWN_NAMES); bool show_towns = HasBit(_display_opt, DO_SHOW_TOWN_NAMES);
bool show_signs = HasBit(_display_opt, DO_SHOW_SIGNS) && !IsInvisibilitySet(TO_SIGNS); bool show_signs = HasBit(_display_opt, DO_SHOW_SIGNS) && !IsInvisibilitySet(TO_SIGNS);
bool show_competitors = HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS); bool show_competitors = HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS);
bool hide_hidden_waypoints = _settings_client.gui.allow_hiding_waypoint_labels && !HasBit(_extra_display_opt, XDO_SHOW_HIDDEN_SIGNS);
/* Topmost of each type that was hit */ /* Topmost of each type that was hit */
BaseStation *st = nullptr, *last_st = nullptr; BaseStation *st = nullptr, *last_st = nullptr;
@ -4076,6 +4079,7 @@ static bool CheckClickOnViewportSign(const Viewport *vp, int x, int y)
if (!show_waypoints) break; if (!show_waypoints) break;
st = BaseStation::Get(item.id.station); st = BaseStation::Get(item.id.station);
if (!show_competitors && _local_company != st->owner && st->owner != OWNER_NONE) break; if (!show_competitors && _local_company != st->owner && st->owner != OWNER_NONE) break;
if (hide_hidden_waypoints && HasBit(Waypoint::From(st)->waypoint_flags, WPF_HIDE_LABEL)) break;
if (CheckClickOnViewportSign(vp, x, y, &st->sign)) last_st = st; if (CheckClickOnViewportSign(vp, x, y, &st->sign)) last_st = st;
break; break;

@ -62,4 +62,6 @@ Waypoint::~Waypoint()
/* Remove all news items */ /* Remove all news items */
DeleteStationNews(this->index); DeleteStationNews(this->index);
if (ShouldShowBaseStationViewportLabel(this)) this->sign.MarkDirty(ZOOM_LVL_DRAW_SPR);
} }

@ -12,15 +12,23 @@
#include "base_station_base.h" #include "base_station_base.h"
/**
* Enum to handle waypoint flags.
*/
enum WaypointFlags {
WPF_HIDE_LABEL = 0, ///< Hide waypoint label
};
/** Representation of a waypoint. */ /** Representation of a waypoint. */
struct Waypoint FINAL : SpecializedStation<Waypoint, true> { struct Waypoint FINAL : SpecializedStation<Waypoint, true> {
uint16 town_cn; ///< The N-1th waypoint for this town (consecutive number) uint16 town_cn; ///< The N-1th waypoint for this town (consecutive number)
uint16 waypoint_flags; ///< Waypoint flags, see WaypointFlags
/** /**
* Create a waypoint at the given tile. * Create a waypoint at the given tile.
* @param tile The location of the waypoint. * @param tile The location of the waypoint.
*/ */
Waypoint(TileIndex tile = INVALID_TILE) : SpecializedStation<Waypoint, true>(tile) { } Waypoint(TileIndex tile = INVALID_TILE) : SpecializedStation<Waypoint, true>(tile), waypoint_flags(0) { }
~Waypoint(); ~Waypoint();
void UpdateVirtCoord() override; void UpdateVirtCoord() override;

@ -42,8 +42,7 @@ void Waypoint::UpdateVirtCoord()
if (_viewport_sign_kdtree_valid && this->sign.kdtree_valid) _viewport_sign_kdtree.Remove(ViewportSignKdtreeItem::MakeWaypoint(this->index)); if (_viewport_sign_kdtree_valid && this->sign.kdtree_valid) _viewport_sign_kdtree.Remove(ViewportSignKdtreeItem::MakeWaypoint(this->index));
SetDParam(0, this->index); SetDParam(0, this->index);
bool shown = HasBit(_display_opt, DO_SHOW_WAYPOINT_NAMES) && !(_local_company != this->owner && this->owner != OWNER_NONE && !HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS)); this->sign.UpdatePosition(ShouldShowBaseStationViewportLabel(this) ? ZOOM_LVL_DRAW_SPR : ZOOM_LVL_END, pt.x, pt.y - 32 * ZOOM_LVL_BASE, STR_VIEWPORT_WAYPOINT);
this->sign.UpdatePosition(shown ? ZOOM_LVL_DRAW_SPR : ZOOM_LVL_END, pt.x, pt.y - 32 * ZOOM_LVL_BASE, STR_VIEWPORT_WAYPOINT);
if (_viewport_sign_kdtree_valid) _viewport_sign_kdtree.Insert(ViewportSignKdtreeItem::MakeWaypoint(this->index)); if (_viewport_sign_kdtree_valid) _viewport_sign_kdtree.Insert(ViewportSignKdtreeItem::MakeWaypoint(this->index));
@ -450,3 +449,35 @@ CommandCost CmdRenameWaypoint(TileIndex tile, DoCommandFlag flags, uint32 p1, ui
} }
return CommandCost(); return CommandCost();
} }
/**
* Set whether waypoint label is hidden
* @param tile unused
* @param flags type of operation
* @param p1 id of waypoint
* @param p2 hidden state
* @param text the new name or an empty string when resetting to the default
* @return the cost of this operation or an error
*/
CommandCost CmdSetWaypointLabelHidden(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
{
Waypoint *wp = Waypoint::GetIfValid(p1);
if (wp == nullptr) return CMD_ERROR;
if (wp->owner != OWNER_NONE) {
CommandCost ret = CheckOwnership(wp->owner);
if (ret.Failed()) return ret;
}
if (flags & DC_EXEC) {
SB(wp->waypoint_flags, WPF_HIDE_LABEL, 1, p2 != 0 ? 1 : 0);
if (HasBit(_display_opt, DO_SHOW_WAYPOINT_NAMES) &&
!(_local_company != wp->owner && wp->owner != OWNER_NONE && !HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS))) {
wp->sign.MarkDirty(ZOOM_LVL_DRAW_SPR);
}
InvalidateWindowData(WC_WAYPOINT_VIEW, wp->index);
}
return CommandCost();
}

@ -34,6 +34,7 @@ struct WaypointWindow : Window {
private: private:
VehicleType vt; ///< Vehicle type using the waypoint. VehicleType vt; ///< Vehicle type using the waypoint.
Waypoint *wp; ///< Waypoint displayed by the window. Waypoint *wp; ///< Waypoint displayed by the window.
bool show_hide_label; ///< Show hide label button
/** /**
* Get the center tile of the waypoint. * Get the center tile of the waypoint.
@ -65,6 +66,8 @@ public:
this->GetWidget<NWidgetCore>(WID_W_CENTER_VIEW)->tool_tip = STR_WAYPOINT_VIEW_CENTER_TOOLTIP; this->GetWidget<NWidgetCore>(WID_W_CENTER_VIEW)->tool_tip = STR_WAYPOINT_VIEW_CENTER_TOOLTIP;
this->GetWidget<NWidgetCore>(WID_W_RENAME)->tool_tip = STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME; this->GetWidget<NWidgetCore>(WID_W_RENAME)->tool_tip = STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME;
} }
this->show_hide_label = (this->vt == VEH_TRAIN && _settings_client.gui.allow_hiding_waypoint_labels);
this->GetWidget<NWidgetStacked>(WID_W_TOGGLE_HIDDEN_SEL)->SetDisplayedPlane(this->show_hide_label ? 0 : SZSP_NONE);
this->FinishInitNested(window_number); this->FinishInitNested(window_number);
this->owner = this->wp->owner; this->owner = this->wp->owner;
@ -109,6 +112,10 @@ public:
case WID_W_DEPARTURES: // show departure times of vehicles case WID_W_DEPARTURES: // show departure times of vehicles
ShowWaypointDepartures((StationID)this->wp->index); ShowWaypointDepartures((StationID)this->wp->index);
break; break;
case WID_W_TOGGLE_HIDDEN:
DoCommandP(0, this->window_number, HasBit(this->wp->waypoint_flags, WPF_HIDE_LABEL) ? 0 : 1, CMD_SET_WAYPOINT_LABEL_HIDDEN | CMD_MSG(STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME));
break;
} }
} }
@ -122,9 +129,19 @@ public:
if (!gui_scope) return; if (!gui_scope) return;
/* You can only change your own waypoints */ /* You can only change your own waypoints */
this->SetWidgetDisabledState(WID_W_RENAME, !this->wp->IsInUse() || (this->wp->owner != _local_company && this->wp->owner != OWNER_NONE)); this->SetWidgetDisabledState(WID_W_RENAME, !this->wp->IsInUse() || (this->wp->owner != _local_company && this->wp->owner != OWNER_NONE));
this->SetWidgetDisabledState(WID_W_TOGGLE_HIDDEN, !this->wp->IsInUse() || this->wp->owner != _local_company);
/* Disable the widget for waypoints with no use */ /* Disable the widget for waypoints with no use */
this->SetWidgetDisabledState(WID_W_SHOW_VEHICLES, !this->wp->IsInUse()); this->SetWidgetDisabledState(WID_W_SHOW_VEHICLES, !this->wp->IsInUse());
this->SetWidgetLoweredState(WID_W_TOGGLE_HIDDEN, HasBit(this->wp->waypoint_flags, WPF_HIDE_LABEL));
bool show_hide_label = (this->vt == VEH_TRAIN && _settings_client.gui.allow_hiding_waypoint_labels);
if (show_hide_label != this->show_hide_label) {
this->show_hide_label = show_hide_label;
this->GetWidget<NWidgetStacked>(WID_W_TOGGLE_HIDDEN_SEL)->SetDisplayedPlane(this->show_hide_label ? 0 : SZSP_NONE);
this->ReInit();
}
ScrollWindowToTile(this->GetCenterTile(), this, true); ScrollWindowToTile(this->GetCenterTile(), this, true);
} }
@ -176,6 +193,9 @@ static const NWidgetPart _nested_waypoint_view_widgets[] = {
EndContainer(), EndContainer(),
NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_W_DEPARTURES), SetMinimalSize(100, 12), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_STATION_VIEW_DEPARTURES_BUTTON, STR_STATION_VIEW_DEPARTURES_TOOLTIP), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_W_DEPARTURES), SetMinimalSize(100, 12), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_STATION_VIEW_DEPARTURES_BUTTON, STR_STATION_VIEW_DEPARTURES_TOOLTIP),
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_W_TOGGLE_HIDDEN_SEL),
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_W_TOGGLE_HIDDEN), SetMinimalSize(15, 12), SetDataTip(SPR_MISC_GUI_BASE, STR_WAYPOINT_VIEW_HIDE_VIEWPORT_LABEL),
EndContainer(),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_W_SHOW_VEHICLES), SetMinimalSize(15, 12), SetDataTip(STR_SHIP, STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_W_SHOW_VEHICLES), SetMinimalSize(15, 12), SetDataTip(STR_SHIP, STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP),
NWidget(WWT_RESIZEBOX, COLOUR_GREY), NWidget(WWT_RESIZEBOX, COLOUR_GREY),
EndContainer(), EndContainer(),

@ -18,6 +18,8 @@ enum WaypointWidgets {
WID_W_RENAME, ///< Rename this waypoint. WID_W_RENAME, ///< Rename this waypoint.
WID_W_SHOW_VEHICLES, ///< Show the vehicles visiting this waypoint. WID_W_SHOW_VEHICLES, ///< Show the vehicles visiting this waypoint.
WID_W_DEPARTURES, ///< Departures button. WID_W_DEPARTURES, ///< Departures button.
WID_W_TOGGLE_HIDDEN, ///< Toggle label hidden.
WID_W_TOGGLE_HIDDEN_SEL, ///< Toggle label hidden selector.
}; };
#endif /* WIDGETS_WAYPOINT_WIDGET_H */ #endif /* WIDGETS_WAYPOINT_WIDGET_H */

Loading…
Cancel
Save