mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-09 15:41:15 +00:00
Add: Ability to toggle visibility of station signs by facility. (#13207)
This commit is contained in:
parent
74bd064d10
commit
4c8f1b0f81
@ -47,9 +47,9 @@ std::unique_ptr<DropDownListItem> MakeDropDownListIconItem(const Dimension &dim,
|
|||||||
return std::make_unique<DropDownListIconItem>(dim, sprite, palette, str, value, masked, shaded);
|
return std::make_unique<DropDownListIconItem>(dim, sprite, palette, str, value, masked, shaded);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<DropDownListItem> MakeDropDownListCheckedItem(bool checked, StringID str, int value, bool masked, bool shaded)
|
std::unique_ptr<DropDownListItem> MakeDropDownListCheckedItem(bool checked, StringID str, int value, bool masked, bool shaded, uint indent)
|
||||||
{
|
{
|
||||||
return std::make_unique<DropDownListCheckedItem>(checked, str, value, masked, shaded);
|
return std::make_unique<DropDownListCheckedItem>(indent, checked, str, value, masked, shaded);
|
||||||
}
|
}
|
||||||
|
|
||||||
static constexpr NWidgetPart _nested_dropdown_menu_widgets[] = {
|
static constexpr NWidgetPart _nested_dropdown_menu_widgets[] = {
|
||||||
|
@ -169,10 +169,31 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Drop down indent component.
|
||||||
|
* @tparam TBase Base component.
|
||||||
|
* @tparam TEnd Position checkmark at end if true, or start if false.
|
||||||
|
*/
|
||||||
|
template <class TBase, bool TEnd = false>
|
||||||
|
class DropDownIndent : public TBase {
|
||||||
|
uint indent;
|
||||||
|
public:
|
||||||
|
template <typename... Args>
|
||||||
|
explicit DropDownIndent(uint indent, Args&&... args) : TBase(std::forward<Args>(args)...), indent(indent) {}
|
||||||
|
|
||||||
|
uint Width() const override { return this->indent * WidgetDimensions::scaled.hsep_indent + this->TBase::Width(); }
|
||||||
|
|
||||||
|
void Draw(const Rect &full, const Rect &r, bool sel, Colours bg_colour) const override
|
||||||
|
{
|
||||||
|
bool rtl = TEnd ^ (_current_text_dir == TD_RTL);
|
||||||
|
this->TBase::Draw(full, r.Indent(this->indent * WidgetDimensions::scaled.hsep_indent, rtl), sel, bg_colour);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/* Commonly used drop down list items. */
|
/* Commonly used drop down list items. */
|
||||||
using DropDownListDividerItem = DropDownDivider<DropDownListItem>;
|
using DropDownListDividerItem = DropDownDivider<DropDownListItem>;
|
||||||
using DropDownListStringItem = DropDownString<DropDownListItem>;
|
using DropDownListStringItem = DropDownString<DropDownListItem>;
|
||||||
using DropDownListIconItem = DropDownIcon<DropDownString<DropDownListItem>>;
|
using DropDownListIconItem = DropDownIcon<DropDownString<DropDownListItem>>;
|
||||||
using DropDownListCheckedItem = DropDownCheck<DropDownString<DropDownListItem>>;
|
using DropDownListCheckedItem = DropDownIndent<DropDownCheck<DropDownString<DropDownListItem>>>;
|
||||||
|
|
||||||
#endif /* DROPDOWN_COMMON_TYPE_H */
|
#endif /* DROPDOWN_COMMON_TYPE_H */
|
||||||
|
@ -21,6 +21,6 @@ std::unique_ptr<DropDownListItem> MakeDropDownListStringItem(StringID str, int v
|
|||||||
std::unique_ptr<DropDownListItem> MakeDropDownListStringItem(const std::string &str, int value, bool masked = false, bool shaded = false);
|
std::unique_ptr<DropDownListItem> MakeDropDownListStringItem(const std::string &str, int value, bool masked = false, bool shaded = false);
|
||||||
std::unique_ptr<DropDownListItem> MakeDropDownListIconItem(SpriteID sprite, PaletteID palette, StringID str, int value, bool masked = false, bool shaded = false);
|
std::unique_ptr<DropDownListItem> MakeDropDownListIconItem(SpriteID sprite, PaletteID palette, StringID str, int value, bool masked = false, bool shaded = false);
|
||||||
std::unique_ptr<DropDownListItem> MakeDropDownListIconItem(const Dimension &dim, SpriteID sprite, PaletteID palette, StringID str, int value, bool masked = false, bool shaded = false);
|
std::unique_ptr<DropDownListItem> MakeDropDownListIconItem(const Dimension &dim, SpriteID sprite, PaletteID palette, StringID str, int value, bool masked = false, bool shaded = false);
|
||||||
std::unique_ptr<DropDownListItem> MakeDropDownListCheckedItem(bool checked, StringID str, int value, bool masked = false, bool shaded = false);
|
std::unique_ptr<DropDownListItem> MakeDropDownListCheckedItem(bool checked, StringID str, int value, bool masked = false, bool shaded = false, uint indent = 0);
|
||||||
|
|
||||||
#endif /* DROPDOWN_FUNC_H */
|
#endif /* DROPDOWN_FUNC_H */
|
||||||
|
@ -443,7 +443,6 @@ STR_SCENEDIT_TOWN_MENU_BUILD_TOWN :Generate towns
|
|||||||
STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Place houses
|
STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Place houses
|
||||||
|
|
||||||
# Settings menu
|
# Settings menu
|
||||||
###length 16
|
|
||||||
STR_SETTINGS_MENU_GAME_OPTIONS :Game options
|
STR_SETTINGS_MENU_GAME_OPTIONS :Game options
|
||||||
STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Settings
|
STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Settings
|
||||||
STR_SETTINGS_MENU_AI_SETTINGS :AI settings
|
STR_SETTINGS_MENU_AI_SETTINGS :AI settings
|
||||||
@ -453,6 +452,11 @@ STR_SETTINGS_MENU_SANDBOX_OPTIONS :Sandbox options
|
|||||||
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Transparency options
|
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Transparency options
|
||||||
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Town names displayed
|
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Town names displayed
|
||||||
STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Station names displayed
|
STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Station names displayed
|
||||||
|
STR_SETTINGS_MENU_STATION_NAMES_TRAIN :{TRAIN} Train stations
|
||||||
|
STR_SETTINGS_MENU_STATION_NAMES_LORRY :{LORRY} Lorry stops
|
||||||
|
STR_SETTINGS_MENU_STATION_NAMES_BUS :{BUS} Bus stops
|
||||||
|
STR_SETTINGS_MENU_STATION_NAMES_SHIP :{SHIP} Docks
|
||||||
|
STR_SETTINGS_MENU_STATION_NAMES_PLANE :{PLANE} Airports
|
||||||
STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Waypoint names displayed
|
STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Waypoint names displayed
|
||||||
STR_SETTINGS_MENU_SIGNS_DISPLAYED :Signs displayed
|
STR_SETTINGS_MENU_SIGNS_DISPLAYED :Signs displayed
|
||||||
STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Competitor signs and names displayed
|
STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Competitor signs and names displayed
|
||||||
|
@ -12,6 +12,7 @@ extern std::string _config_language_file;
|
|||||||
|
|
||||||
static constexpr std::initializer_list<const char*> _support8bppmodes{"no", "system", "hardware"};
|
static constexpr std::initializer_list<const char*> _support8bppmodes{"no", "system", "hardware"};
|
||||||
static constexpr 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 constexpr 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 constexpr std::initializer_list<const char*> _facility_display_opt_modes{"TRAIN", "TRUCK_STOP", "BUS_STOP", "AIRPORT", "DOCK"};
|
||||||
|
|
||||||
#ifdef WITH_COCOA
|
#ifdef WITH_COCOA
|
||||||
extern bool _allow_hidpi_window;
|
extern bool _allow_hidpi_window;
|
||||||
@ -64,6 +65,13 @@ var = _display_opt
|
|||||||
def = (1 << DO_SHOW_TOWN_NAMES | 1 << DO_SHOW_STATION_NAMES | 1 << DO_SHOW_SIGNS | 1 << DO_FULL_ANIMATION | 1 << DO_FULL_DETAIL | 1 << DO_SHOW_WAYPOINT_NAMES | 1 << DO_SHOW_COMPETITOR_SIGNS)
|
def = (1 << DO_SHOW_TOWN_NAMES | 1 << DO_SHOW_STATION_NAMES | 1 << DO_SHOW_SIGNS | 1 << DO_FULL_ANIMATION | 1 << DO_FULL_DETAIL | 1 << DO_SHOW_WAYPOINT_NAMES | 1 << DO_SHOW_COMPETITOR_SIGNS)
|
||||||
full = _display_opt_modes
|
full = _display_opt_modes
|
||||||
|
|
||||||
|
[SDTG_MMANY]
|
||||||
|
name = ""facility_display_opt""
|
||||||
|
type = SLE_UINT8
|
||||||
|
var = _facility_display_opt
|
||||||
|
def = (1 << FACIL_TRAIN | 1 << FACIL_TRUCK_STOP | 1 << FACIL_BUS_STOP | 1 << FACIL_AIRPORT | 1 << FACIL_DOCK)
|
||||||
|
full = _facility_display_opt_modes
|
||||||
|
|
||||||
[SDTG_BOOL]
|
[SDTG_BOOL]
|
||||||
name = ""fullscreen""
|
name = ""fullscreen""
|
||||||
var = _fullscreen
|
var = _fullscreen
|
||||||
|
@ -236,6 +236,11 @@ enum OptionMenuEntries {
|
|||||||
OME_TRANSPARENCIES,
|
OME_TRANSPARENCIES,
|
||||||
OME_SHOW_TOWNNAMES,
|
OME_SHOW_TOWNNAMES,
|
||||||
OME_SHOW_STATIONNAMES,
|
OME_SHOW_STATIONNAMES,
|
||||||
|
OME_SHOW_STATIONNAMES_TRAIN,
|
||||||
|
OME_SHOW_STATIONNAMES_LORRY,
|
||||||
|
OME_SHOW_STATIONNAMES_BUS,
|
||||||
|
OME_SHOW_STATIONNAMES_SHIP,
|
||||||
|
OME_SHOW_STATIONNAMES_PLANE,
|
||||||
OME_SHOW_WAYPOINTNAMES,
|
OME_SHOW_WAYPOINTNAMES,
|
||||||
OME_SHOW_SIGNS,
|
OME_SHOW_SIGNS,
|
||||||
OME_SHOW_COMPETITOR_SIGNS,
|
OME_SHOW_COMPETITOR_SIGNS,
|
||||||
@ -271,6 +276,11 @@ static CallBackFunction ToolbarOptionsClick(Window *w)
|
|||||||
list.push_back(MakeDropDownListDividerItem());
|
list.push_back(MakeDropDownListDividerItem());
|
||||||
list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_TOWN_NAMES), STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED, OME_SHOW_TOWNNAMES));
|
list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_TOWN_NAMES), STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED, OME_SHOW_TOWNNAMES));
|
||||||
list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_STATION_NAMES), STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED, OME_SHOW_STATIONNAMES));
|
list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_STATION_NAMES), STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED, OME_SHOW_STATIONNAMES));
|
||||||
|
list.push_back(MakeDropDownListCheckedItem((_facility_display_opt & FACIL_TRAIN) != 0, STR_SETTINGS_MENU_STATION_NAMES_TRAIN, OME_SHOW_STATIONNAMES_TRAIN, false, false, 1));
|
||||||
|
list.push_back(MakeDropDownListCheckedItem((_facility_display_opt & FACIL_TRUCK_STOP) != 0, STR_SETTINGS_MENU_STATION_NAMES_LORRY, OME_SHOW_STATIONNAMES_LORRY, false, false, 1));
|
||||||
|
list.push_back(MakeDropDownListCheckedItem((_facility_display_opt & FACIL_BUS_STOP) != 0, STR_SETTINGS_MENU_STATION_NAMES_BUS, OME_SHOW_STATIONNAMES_BUS, false, false, 1));
|
||||||
|
list.push_back(MakeDropDownListCheckedItem((_facility_display_opt & FACIL_DOCK) != 0, STR_SETTINGS_MENU_STATION_NAMES_SHIP, OME_SHOW_STATIONNAMES_SHIP, false, false, 1));
|
||||||
|
list.push_back(MakeDropDownListCheckedItem((_facility_display_opt & FACIL_AIRPORT) != 0, STR_SETTINGS_MENU_STATION_NAMES_PLANE, OME_SHOW_STATIONNAMES_PLANE, false, false, 1));
|
||||||
list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_WAYPOINT_NAMES), STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED, OME_SHOW_WAYPOINTNAMES));
|
list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_WAYPOINT_NAMES), STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED, OME_SHOW_WAYPOINTNAMES));
|
||||||
list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_SIGNS), STR_SETTINGS_MENU_SIGNS_DISPLAYED, OME_SHOW_SIGNS));
|
list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_SIGNS), STR_SETTINGS_MENU_SIGNS_DISPLAYED, OME_SHOW_SIGNS));
|
||||||
list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS), STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS, OME_SHOW_COMPETITOR_SIGNS));
|
list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS), STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS, OME_SHOW_COMPETITOR_SIGNS));
|
||||||
@ -284,6 +294,19 @@ static CallBackFunction ToolbarOptionsClick(Window *w)
|
|||||||
return CBF_NONE;
|
return CBF_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Toggle display station names for a facility.
|
||||||
|
* @param facility Facility to toggle.
|
||||||
|
*/
|
||||||
|
static void ToggleFacilityDisplay(const uint8_t facility)
|
||||||
|
{
|
||||||
|
if ((_facility_display_opt & facility) == 0) {
|
||||||
|
SETBITS(_facility_display_opt, facility);
|
||||||
|
} else {
|
||||||
|
CLRBITS(_facility_display_opt, facility);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle click on one of the entries in the Options button menu.
|
* Handle click on one of the entries in the Options button menu.
|
||||||
*
|
*
|
||||||
@ -303,6 +326,11 @@ static CallBackFunction MenuClickSettings(int index)
|
|||||||
|
|
||||||
case OME_SHOW_TOWNNAMES: ToggleBit(_display_opt, DO_SHOW_TOWN_NAMES); break;
|
case OME_SHOW_TOWNNAMES: ToggleBit(_display_opt, DO_SHOW_TOWN_NAMES); break;
|
||||||
case OME_SHOW_STATIONNAMES: ToggleBit(_display_opt, DO_SHOW_STATION_NAMES); break;
|
case OME_SHOW_STATIONNAMES: ToggleBit(_display_opt, DO_SHOW_STATION_NAMES); break;
|
||||||
|
case OME_SHOW_STATIONNAMES_TRAIN: ToggleFacilityDisplay(FACIL_TRAIN); break;
|
||||||
|
case OME_SHOW_STATIONNAMES_LORRY: ToggleFacilityDisplay(FACIL_TRUCK_STOP); break;
|
||||||
|
case OME_SHOW_STATIONNAMES_BUS: ToggleFacilityDisplay(FACIL_BUS_STOP); break;
|
||||||
|
case OME_SHOW_STATIONNAMES_SHIP: ToggleFacilityDisplay(FACIL_DOCK); break;
|
||||||
|
case OME_SHOW_STATIONNAMES_PLANE: ToggleFacilityDisplay(FACIL_AIRPORT); break;
|
||||||
case OME_SHOW_WAYPOINTNAMES: ToggleBit(_display_opt, DO_SHOW_WAYPOINT_NAMES); break;
|
case OME_SHOW_WAYPOINTNAMES: ToggleBit(_display_opt, DO_SHOW_WAYPOINT_NAMES); break;
|
||||||
case OME_SHOW_SIGNS: ToggleBit(_display_opt, DO_SHOW_SIGNS); break;
|
case OME_SHOW_SIGNS: ToggleBit(_display_opt, DO_SHOW_SIGNS); break;
|
||||||
case OME_SHOW_COMPETITOR_SIGNS:
|
case OME_SHOW_COMPETITOR_SIGNS:
|
||||||
|
@ -38,6 +38,7 @@ extern TransparencyOptionBits _transparency_opt;
|
|||||||
extern TransparencyOptionBits _transparency_lock;
|
extern TransparencyOptionBits _transparency_lock;
|
||||||
extern TransparencyOptionBits _invisibility_opt;
|
extern TransparencyOptionBits _invisibility_opt;
|
||||||
extern uint8_t _display_opt;
|
extern uint8_t _display_opt;
|
||||||
|
extern uint8_t _facility_display_opt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if the transparency option bit is set
|
* Check if the transparency option bit is set
|
||||||
|
@ -24,6 +24,7 @@ TransparencyOptionBits _transparency_opt; ///< The bits that should be transpar
|
|||||||
TransparencyOptionBits _transparency_lock; ///< Prevent these bits from flipping with X.
|
TransparencyOptionBits _transparency_lock; ///< Prevent these bits from flipping with X.
|
||||||
TransparencyOptionBits _invisibility_opt; ///< The bits that should be invisible.
|
TransparencyOptionBits _invisibility_opt; ///< The bits that should be invisible.
|
||||||
uint8_t _display_opt; ///< What do we want to draw/do?
|
uint8_t _display_opt; ///< What do we want to draw/do?
|
||||||
|
uint8_t _facility_display_opt; ///< What station facilities to draw.
|
||||||
|
|
||||||
class TransparenciesWindow : public Window
|
class TransparenciesWindow : public Window
|
||||||
{
|
{
|
||||||
|
@ -1448,6 +1448,7 @@ static void ViewportAddKdtreeSigns(DrawPixelInfo *dpi)
|
|||||||
case ViewportSignKdtreeItem::VKI_STATION: {
|
case ViewportSignKdtreeItem::VKI_STATION: {
|
||||||
if (!show_stations) break;
|
if (!show_stations) break;
|
||||||
const BaseStation *st = BaseStation::Get(item.id.station);
|
const BaseStation *st = BaseStation::Get(item.id.station);
|
||||||
|
if ((_facility_display_opt & st->facilities) == 0) break;
|
||||||
|
|
||||||
/* 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;
|
||||||
|
Loading…
Reference in New Issue
Block a user