From 11bf8e22d78c4d5888508935be27bccd82d4dbdc Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Mon, 17 Jul 2023 18:42:46 +0100 Subject: [PATCH] Add setting to show order number in vehicle view window --- src/lang/extra/english.txt | 5 +++++ src/settings_gui.cpp | 1 + src/settings_type.h | 1 + src/table/settings/settings.ini | 8 ++++++++ src/vehicle_gui.cpp | 29 ++++++++++++++++++++++------- 5 files changed, 37 insertions(+), 7 deletions(-) diff --git a/src/lang/extra/english.txt b/src/lang/extra/english.txt index 4b78a9593d..68b1c05d97 100644 --- a/src/lang/extra/english.txt +++ b/src/lang/extra/english.txt @@ -325,6 +325,9 @@ STR_CONFIG_SETTING_SHOW_GROUP_HIERARCHY_NAME_HELPTEXT :When enabled, g STR_CONFIG_SETTING_SHOW_VEHICLE_GROUP_HIERARCHY_NAME :Show group hierarchy in vehicle names: {STRING2} STR_CONFIG_SETTING_SHOW_VEHICLE_GROUP_HIERARCHY_NAME_HELPTEXT :When enabled, and show group hierarchy in name is enabled, vehicle names which include a group name use the full group name with hierarchy +STR_CONFIG_SETTING_SHOW_ORDER_NUMBER_IN_VEHICLE_VIEW :Show order number in vehicle view window: {STRING2} +STR_CONFIG_SETTING_SHOW_ORDER_NUMBER_IN_VEHICLE_VIEW_HELPTEXT :When enabled, the current vehicle order is shown in the vehicle view window start/stop bar + 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. @@ -1489,6 +1492,8 @@ STR_VEHICLE_VIEW_SEND_TO_DEPOT_MENU :{BLACK}Cancel s STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP_EXTRA :{STRING}{BLACK}{}Shift+Click to toggle showing route overlay even when window is not focused +STR_VEHICLE_VIEW_ORDER_NUMBER :{COMMA}: {STRING} + STR_VEHICLE_STATUS_LOADING_UNLOADING_ADVANCE :{STRING}, {VELOCITY} STR_VEHICLE_STATUS_BROKEN_DOWN_VEL :{RED}Broken down - {STRING2}, {LTBLUE} {VELOCITY} STR_VEHICLE_STATUS_BROKEN_DOWN_VEL_SHORT :{RED}Broken down - {STRING2} diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 504f2f3deb..1266029c4e 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -2079,6 +2079,7 @@ static SettingsContainer &GetSettingsTree() vehicle_windows->Add(new SettingEntry("gui.show_group_hierarchy_name")); vehicle_windows->Add(new ConditionallyHiddenSettingEntry("gui.show_vehicle_group_hierarchy_name", []() -> bool { return !_settings_client.gui.show_group_hierarchy_name; })); vehicle_windows->Add(new SettingEntry("gui.enable_single_veh_shared_order_gui")); + vehicle_windows->Add(new SettingEntry("gui.show_order_number_vehicle_view")); } SettingsPage *departureboards = interface->Add(new SettingsPage(STR_CONFIG_SETTING_INTERFACE_DEPARTUREBOARDS)); diff --git a/src/settings_type.h b/src/settings_type.h index 9abac748d5..bedfc3f1bd 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -277,6 +277,7 @@ struct GUISettings : public TimeSettings { bool show_order_management_button; ///< Show order management button in vehicle order window bool show_group_hierarchy_name; ///< Show the full hierarchy in group names bool show_vehicle_group_hierarchy_name;///< Show the full group hierarchy in vehicle names + bool show_order_number_vehicle_view; ///< Show order number in vehicle view window 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. diff --git a/src/table/settings/settings.ini b/src/table/settings/settings.ini index 0a19e972e3..12f0896596 100644 --- a/src/table/settings/settings.ini +++ b/src/table/settings/settings.ini @@ -5919,6 +5919,14 @@ strhelp = STR_CONFIG_SETTING_SHOW_VEHICLE_GROUP_HIERARCHY_NAME_HELPTEXT post_cb = [](auto) { MarkWholeScreenDirty(); } cat = SC_ADVANCED +[SDTC_BOOL] +var = gui.show_order_number_vehicle_view +flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC +def = false +str = STR_CONFIG_SETTING_SHOW_ORDER_NUMBER_IN_VEHICLE_VIEW +strhelp = STR_CONFIG_SETTING_SHOW_ORDER_NUMBER_IN_VEHICLE_VIEW_HELPTEXT +post_cb = [](auto) { SetWindowClassesDirty(WC_VEHICLE_VIEW); } + ; For the dedicated build we'll enable dates in logs by default. [SDTC_BOOL] ifdef = DEDICATED diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 1629303cac..87ade00e58 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -3774,6 +3774,7 @@ public: if (widget != WID_VV_START_STOP) return; const Vehicle *v = Vehicle::Get(this->window_number); + bool show_order_number = false; StringID str; TextColour text_colour = TC_FROMSTRING; if (v->vehstatus & VS_CRASHED) { @@ -3845,15 +3846,10 @@ public: } else if (v->type == VEH_AIRCRAFT && HasBit(Aircraft::From(v)->flags, VAF_DEST_TOO_FAR) && !v->current_order.IsType(OT_LOADING)) { str = STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR; } else { // vehicle is in a "normal" state, show current order - if (mouse_over_start_stop) { - if (v->vehstatus & VS_STOPPED || (v->breakdown_ctr == 1 || (v->type == VEH_TRAIN && Train::From(v)->flags & VRF_IS_BROKEN))) { - text_colour = TC_RED | TC_FORCED; - } else if (v->type == VEH_TRAIN && HasBit(Train::From(v)->flags, VRF_TRAIN_STUCK) && !v->current_order.IsType(OT_LOADING)) { - text_colour = TC_ORANGE | TC_FORCED; - } - } switch (v->current_order.GetType()) { case OT_GOTO_STATION: { + show_order_number = true; + text_colour = TC_LIGHT_BLUE; SetDParam(0, v->current_order.GetDestination()); SetDParam(1, PackVelocity(v->GetDisplaySpeed(), v->type)); str = HasBit(v->vehicle_flags, VF_PATHFINDER_LOST) ? STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL : STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL; @@ -3861,6 +3857,8 @@ public: } case OT_GOTO_DEPOT: { + show_order_number = true; + text_colour = TC_ORANGE; SetDParam(0, v->type); SetDParam(1, v->current_order.GetDestination()); SetDParam(2, PackVelocity(v->GetDisplaySpeed(), v->type)); @@ -3893,6 +3891,8 @@ public: break; case OT_GOTO_WAYPOINT: { + show_order_number = true; + text_colour = TC_LIGHT_BLUE; assert(v->type == VEH_TRAIN || v->type == VEH_ROAD || v->type == VEH_SHIP); SetDParam(0, v->current_order.GetDestination()); str = HasBit(v->vehicle_flags, VF_PATHFINDER_LOST) ? STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL : STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL; @@ -3920,6 +3920,21 @@ public: } break; } + + if (mouse_over_start_stop) { + if (v->vehstatus & VS_STOPPED || (v->breakdown_ctr == 1 || (v->type == VEH_TRAIN && Train::From(v)->flags & VRF_IS_BROKEN))) { + text_colour = TC_RED | TC_FORCED; + } else if (v->type == VEH_TRAIN && HasBit(Train::From(v)->flags, VRF_TRAIN_STUCK) && !v->current_order.IsType(OT_LOADING)) { + text_colour = TC_ORANGE | TC_FORCED; + } + } + } + + if (_settings_client.gui.show_order_number_vehicle_view && show_order_number && v->cur_implicit_order_index < v->GetNumOrders()) { + _temp_special_strings[0] = GetString(str); + SetDParam(0, v->cur_implicit_order_index + 1); + SetDParam(1, SPECSTR_TEMP_START); + str = STR_VEHICLE_VIEW_ORDER_NUMBER; } /* Draw the flag plus orders. */