OpenTTD Source: src/build_vehicle_gui.cpp File Reference

OpenTTD Source 14.0-beta3

Data Structures | Enumerations | Functions | Variables
build_vehicle_gui.cpp File Reference
`#include "stdafx.h"`
`#include "engine_base.h"`
`#include "engine_func.h"`
`#include "station_base.h"`
`#include "network/network.h"`
`#include "articulated_vehicles.h"`
`#include "textbuf_gui.h"`
`#include "command_func.h"`
`#include "company_func.h"`
`#include "vehicle_gui.h"`
`#include "newgrf_engine.h"`
`#include "newgrf_text.h"`
`#include "group.h"`
`#include "string_func.h"`
`#include "strings_func.h"`
`#include "window_func.h"`
`#include "timer/timer_game_calendar.h"`
`#include "vehicle_func.h"`
`#include "widgets/dropdown_func.h"`
`#include "engine_gui.h"`
`#include "cargotype.h"`
`#include "core/geometry_func.hpp"`
`#include "autoreplace_func.h"`
`#include "engine_cmd.h"`
`#include "train_cmd.h"`
`#include "vehicle_cmd.h"`
`#include "zoom_func.h"`
`#include "querystring_gui.h"`
`#include "stringfilter_type.h"`
`#include "hotkeys.h"`
`#include "widgets/build_vehicle_widget.h"`
`#include "table/strings.h"`
`#include "safeguards.h"`

Go to the source code of this file.

## Data Structures
struct | BuildVehicleWindow
| GUI for building vehicles. More...

## Enumerations
enum | BuildVehicleHotkeys { BVHK_FOCUS_FILTER_BOX }
| Enum referring to the Hotkeys in the build vehicle window. More...

## Functions
uint | GetEngineListHeight (VehicleType type)
| Get the height of a single 'entry' in the engine lists. More...
static bool | EngineNumberSorter (const GUIEngineListItem &a, const GUIEngineListItem &b)
| Determines order of engines by engineID. More...
static bool | EngineIntroDateSorter (const GUIEngineListItem &a, const GUIEngineListItem &b)
| Determines order of engines by introduction date. More...
static bool | EngineNameSorter (const GUIEngineListItem &a, const GUIEngineListItem &b)
| Determines order of engines by name. More...
static bool | EngineReliabilitySorter (const GUIEngineListItem &a, const GUIEngineListItem &b)
| Determines order of engines by reliability. More...
static bool | EngineCostSorter (const GUIEngineListItem &a, const GUIEngineListItem &b)
| Determines order of engines by purchase cost. More...
static bool | EngineSpeedSorter (const GUIEngineListItem &a, const GUIEngineListItem &b)
| Determines order of engines by speed. More...
static bool | EnginePowerSorter (const GUIEngineListItem &a, const GUIEngineListItem &b)
| Determines order of engines by power. More...
static bool | EngineTractiveEffortSorter (const GUIEngineListItem &a, const GUIEngineListItem &b)
| Determines order of engines by tractive effort. More...
static bool | EngineRunningCostSorter (const GUIEngineListItem &a, const GUIEngineListItem &b)
| Determines order of engines by running costs. More...
static bool | EnginePowerVsRunningCostSorter (const GUIEngineListItem &a, const GUIEngineListItem &b)
| Determines order of engines by running costs. More...
static bool | TrainEngineCapacitySorter (const GUIEngineListItem &a, const GUIEngineListItem &b)
| Determines order of train engines by capacity. More...
static bool | TrainEnginesThenWagonsSorter (const GUIEngineListItem &a, const GUIEngineListItem &b)
| Determines order of train engines by engine / wagon. More...
static bool | RoadVehEngineCapacitySorter (const GUIEngineListItem &a, const GUIEngineListItem &b)
| Determines order of road vehicles by capacity. More...
static bool | ShipEngineCapacitySorter (const GUIEngineListItem &a, const GUIEngineListItem &b)
| Determines order of ships by capacity. More...
static bool | AircraftEngineCargoSorter (const GUIEngineListItem &a, const GUIEngineListItem &b)
| Determines order of aircraft by cargo. More...
static bool | AircraftRangeSorter (const GUIEngineListItem &a, const GUIEngineListItem &b)
| Determines order of aircraft by range. More...
static bool CDECL | CargoAndEngineFilter (const GUIEngineListItem *item, const CargoID cid)
| Filters vehicles by cargo and engine (in case of rail vehicle).
static uint | GetCargoWeight (const CargoArray &cap, VehicleType vtype)
static int | DrawCargoCapacityInfo (int left, int right, int y, TestedEngineDetails &te, bool refittable)
static int | DrawRailWagonPurchaseInfo (int left, int right, int y, EngineID engine_number, const RailVehicleInfo *rvi, TestedEngineDetails &te)
static int | DrawRailEnginePurchaseInfo (int left, int right, int y, EngineID engine_number, const RailVehicleInfo *rvi, TestedEngineDetails &te)
static int | DrawRoadVehPurchaseInfo (int left, int right, int y, EngineID engine_number, TestedEngineDetails &te)
static int | DrawShipPurchaseInfo (int left, int right, int y, EngineID engine_number, bool refittable, TestedEngineDetails &te)
static int | DrawAircraftPurchaseInfo (int left, int right, int y, EngineID engine_number, bool refittable, TestedEngineDetails &te)
| Draw aircraft specific details in the buy window. More...
static std::optional< std::string > | GetNewGRFAdditionalText (EngineID engine)
| Try to get the NewGRF engine additional text callback as an optional std::string. More...
static uint | ShowAdditionalText (int left, int right, int y, EngineID engine)
| Display additional text from NewGRF in the purchase information window. More...
int | DrawVehiclePurchaseInfo (int left, int right, int y, EngineID engine_number, TestedEngineDetails &te)
| Draw the purchase info details of a vehicle at a given location. More...
void | DrawEngineList (VehicleType type, const Rect &r, const GUIEngineList &eng_list, uint16_t min, uint16_t max, EngineID selected_id, bool show_count, GroupID selected_group)
| Engine drawing loop. More...
void | DisplayVehicleSortDropDown (Window *w, VehicleType vehicle_type, int selected, WidgetID button)
| Display the dropdown for the vehicle sort criteria. More...
void | ShowBuildVehicleWindow (TileIndex tile, VehicleType type)

## Variables
static constexpr NWidgetPart | _nested_build_vehicle_widgets []
bool | _engine_sort_direction
| `false` = descending, `true` = ascending.
byte | _engine_sort_last_criteria [] = {0, 0, 0, 0}
| Last set sort criteria, for each vehicle type.
bool | _engine_sort_last_order [] = {false, false, false, false}
| Last set direction of the sort order, for each vehicle type.
bool | _engine_sort_show_hidden_engines [] = {false, false, false, false}
| Last set 'show hidden engines' setting for each vehicle type.
static CargoID | _engine_sort_last_cargo_criteria [] = {CargoFilterCriteria::CF_ANY, CargoFilterCriteria::CF_ANY, CargoFilterCriteria::CF_ANY, CargoFilterCriteria::CF_ANY}
| Last set filter criteria, for each vehicle type.
static EngineID | _last_engine [2] = { INVALID_ENGINE, INVALID_ENGINE }
EngList_SortTypeFunction *const | _engine_sort_functions [][11]
| Sort functions for the vehicle sort criteria, for each vehicle type.
const StringID | _engine_sort_listing [][12]
| Dropdown menu strings for the vehicle sort criteria.
static GUIEngineList::FilterFunction *const | _filter_funcs []
static WindowDesc | _build_vehicle_desc (__FILE__, __LINE__, WDP_AUTO, "build_vehicle", 240, 268, WC_BUILD_VEHICLE, WC_NONE, WDF_CONSTRUCTION, std::begin(_nested_build_vehicle_widgets), std::end(_nested_build_vehicle_widgets), &BuildVehicleWindow::hotkeys)

## Detailed Description

GUI for building vehicles.

Definition in file build_vehicle_gui.cpp.

## Enumeration Type Documentation

## ◆ BuildVehicleHotkeys

enum BuildVehicleHotkeys

Enum referring to the Hotkeys in the build vehicle window.

Enumerator
BVHK_FOCUS_FILTER_BOX | Focus the edit box for editing the filter string.

Definition at line 1119 of file build_vehicle_gui.cpp.

## Function Documentation

## ◆ AircraftEngineCargoSorter()

static bool AircraftEngineCargoSorter | ( | const GUIEngineListItem & | a,
|  | const GUIEngineListItem & | b
| ) |  |
| static

Determines order of aircraft by cargo.

Parameters

  a | first engine to compare
  b | second engine to compare

Returns
  for descending order: returns true if a < b. Vice versa for ascending order

Definition at line 395 of file build_vehicle_gui.cpp.

References GUIEngineListItem::engine_id, and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get().

## ◆ AircraftRangeSorter()

static bool AircraftRangeSorter | ( | const GUIEngineListItem & | a,
|  | const GUIEngineListItem & | b
| ) |  |
| static

Determines order of aircraft by range.

Parameters

  a | first engine to compare
  b | second engine to compare

Returns
  for descending order: returns true if a < b. Vice versa for ascending order

Definition at line 423 of file build_vehicle_gui.cpp.

## ◆ DisplayVehicleSortDropDown()

void DisplayVehicleSortDropDown | ( | Window * | w,
|  | VehicleType | vehicle_type,
|  | int | selected,
|  | WidgetID | button
| ) |  |

Display the dropdown for the vehicle sort criteria.

Parameters

  w | Parent window (holds the dropdown button).
  vehicle_type | Vehicle type being sorted.
  selected | Currently selected sort criterium.
  button | Widget button.

Definition at line 1102 of file build_vehicle_gui.cpp.

References _settings_game, VehicleSettings::roadveh_acceleration_model, VEH_ROAD, and GameSettings::vehicle.

## ◆ DrawAircraftPurchaseInfo()

static int DrawAircraftPurchaseInfo | ( | int | left,
|  | int | right,
|  | int | y,
|  | EngineID | engine_number,
|  | bool | refittable,
|  | TestedEngineDetails & | te
| ) |  |
| static

Draw aircraft specific details in the buy window.

Parameters

  left | Left edge of the window to draw in.
  right | Right edge of the window to draw in.
  y | Top of the area to draw in.
  engine_number | Engine to display.
  refittable | If set, the aircraft can be refitted.

Returns
  Bottom of the used area.

Definition at line 802 of file build_vehicle_gui.cpp.

## ◆ DrawEngineList()

void DrawEngineList | ( | VehicleType | type,
|  | const Rect & | r,
|  | const GUIEngineList & | eng_list,
|  | uint16_t | min,
|  | uint16_t | max,
|  | EngineID | selected_id,
|  | bool | show_count,
|  | GroupID | selected_group
| ) |  |

Engine drawing loop.

Parameters

  type | Type of vehicle (VEH_*)
  r | The Rect of the list
  eng_list | What engines to draw
  min | where to start in the list
  max | where in the list to end
  selected_id | what engine to highlight as selected, if any
  show_count | Whether to show the amount of engines or not
  selected_group | the group to list the engines of

Definition at line 1007 of file build_vehicle_gui.cpp.

## ◆ DrawVehiclePurchaseInfo()

int DrawVehiclePurchaseInfo | ( | int | left,
|  | int | right,
|  | int | y,
|  | EngineID | engine_number,
|  | TestedEngineDetails & | te
| ) |  |

Draw the purchase info details of a vehicle at a given location.

Parameters

  left,right,y | location where to draw the info
  engine_number | the engine of which to draw the info of

Returns
  y after drawing all the text

Definition at line 920 of file build_vehicle_gui.cpp.

Referenced by ReplaceVehicleWindow::OnPaint(), and BuildVehicleWindow::OnPaint().

## ◆ EngineCostSorter()

static bool EngineCostSorter | ( | const GUIEngineListItem & | a,
|  | const GUIEngineListItem & | b
| ) |  |
| static

Determines order of engines by purchase cost.

Parameters

  a | first engine to compare
  b | second engine to compare

Returns
  for descending order: returns true if a < b. Vice versa for ascending order

Definition at line 188 of file build_vehicle_gui.cpp.

References _engine_sort_direction, GUIEngineListItem::engine_id, EngineNumberSorter(), and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get().

## ◆ EngineIntroDateSorter()

static bool EngineIntroDateSorter | ( | const GUIEngineListItem & | a,
|  | const GUIEngineListItem & | b
| ) |  |
| static

Determines order of engines by introduction date.

Parameters

  a | first engine to compare
  b | second engine to compare

Returns
  for descending order: returns true if a < b. Vice versa for ascending order

Definition at line 122 of file build_vehicle_gui.cpp.

References _engine_sort_direction, GUIEngineListItem::engine_id, EngineNumberSorter(), and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get().

## ◆ EngineNameSorter()

static bool EngineNameSorter | ( | const GUIEngineListItem & | a,
|  | const GUIEngineListItem & | b
| ) |  |
| static

Determines order of engines by name.

Parameters

  a | first engine to compare
  b | second engine to compare

Returns
  for descending order: returns true if a < b. Vice versa for ascending order

Definition at line 142 of file build_vehicle_gui.cpp.

References GUIEngineListItem::engine_id.

## ◆ EngineNumberSorter()

static bool EngineNumberSorter | ( | const GUIEngineListItem & | a,
|  | const GUIEngineListItem & | b
| ) |  |
| static

Determines order of engines by engineID.

Parameters

  a | first engine to compare
  b | second engine to compare

Returns
  for descending order: returns true if a < b. Vice versa for ascending order

Definition at line 109 of file build_vehicle_gui.cpp.

References _engine_sort_direction, GUIEngineListItem::engine_id, and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get().

Referenced by EngineCostSorter(), EngineIntroDateSorter(), EnginePowerSorter(), EnginePowerVsRunningCostSorter(), EngineReliabilitySorter(), EngineRunningCostSorter(), EngineSpeedSorter(), EngineTractiveEffortSorter(), ReplaceVehicleWindow::GenerateReplaceVehList(), RoadVehEngineCapacitySorter(), and ShipEngineCapacitySorter().

## ◆ EnginePowerSorter()

static bool EnginePowerSorter | ( | const GUIEngineListItem & | a,
|  | const GUIEngineListItem & | b
| ) |  |
| static

Determines order of engines by power.

Parameters

  a | first engine to compare
  b | second engine to compare

Returns
  for descending order: returns true if a < b. Vice versa for ascending order

Definition at line 222 of file build_vehicle_gui.cpp.

References _engine_sort_direction, GUIEngineListItem::engine_id, EngineNumberSorter(), and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get().

## ◆ EnginePowerVsRunningCostSorter()

static bool EnginePowerVsRunningCostSorter | ( | const GUIEngineListItem & | a,
|  | const GUIEngineListItem & | b
| ) |  |
| static

Determines order of engines by running costs.

Parameters

  a | first engine to compare
  b | second engine to compare

Returns
  for descending order: returns true if a < b. Vice versa for ascending order

Definition at line 273 of file build_vehicle_gui.cpp.

References _engine_sort_direction, GUIEngineListItem::engine_id, EngineNumberSorter(), EngineRunningCostSorter(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get(), Engine::GetPower(), and Engine::GetRunningCost().

## ◆ EngineReliabilitySorter()

static bool EngineReliabilitySorter | ( | const GUIEngineListItem & | a,
|  | const GUIEngineListItem & | b
| ) |  |
| static

Determines order of engines by reliability.

Parameters

  a | first engine to compare
  b | second engine to compare

Returns
  for descending order: returns true if a < b. Vice versa for ascending order

Definition at line 171 of file build_vehicle_gui.cpp.

References _engine_sort_direction, GUIEngineListItem::engine_id, EngineNumberSorter(), and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get().

## ◆ EngineRunningCostSorter()

static bool EngineRunningCostSorter | ( | const GUIEngineListItem & | a,
|  | const GUIEngineListItem & | b
| ) |  |
| static

Determines order of engines by running costs.

Parameters

  a | first engine to compare
  b | second engine to compare

Returns
  for descending order: returns true if a < b. Vice versa for ascending order

Definition at line 256 of file build_vehicle_gui.cpp.

References _engine_sort_direction, GUIEngineListItem::engine_id, EngineNumberSorter(), and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get().

Referenced by EnginePowerVsRunningCostSorter().

## ◆ EngineSpeedSorter()

static bool EngineSpeedSorter | ( | const GUIEngineListItem & | a,
|  | const GUIEngineListItem & | b
| ) |  |
| static

Determines order of engines by speed.

Parameters

  a | first engine to compare
  b | second engine to compare

Returns
  for descending order: returns true if a < b. Vice versa for ascending order

Definition at line 205 of file build_vehicle_gui.cpp.

References _engine_sort_direction, GUIEngineListItem::engine_id, EngineNumberSorter(), and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get().

## ◆ EngineTractiveEffortSorter()

static bool EngineTractiveEffortSorter | ( | const GUIEngineListItem & | a,
|  | const GUIEngineListItem & | b
| ) |  |
| static

Determines order of engines by tractive effort.

Parameters

  a | first engine to compare
  b | second engine to compare

Returns
  for descending order: returns true if a < b. Vice versa for ascending order

Definition at line 239 of file build_vehicle_gui.cpp.

References _engine_sort_direction, GUIEngineListItem::engine_id, EngineNumberSorter(), and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get().

## ◆ GetEngineListHeight()

uint GetEngineListHeight | ( | VehicleType | type | ) |

Get the height of a single 'entry' in the engine lists.

Parameters

  type | the vehicle type to get the height of

Returns
  the height for the entry

Definition at line 52 of file build_vehicle_gui.cpp.

References EIT_PURCHASE, FS_NORMAL, GetCharacterHeight(), GetVehicleImageCellSize(), and WidgetDimensions::scaled.

## ◆ GetNewGRFAdditionalText()

static std::optional<std::string> GetNewGRFAdditionalText | ( | EngineID | engine | ) |
| static

Try to get the NewGRF engine additional text callback as an optional std::string.

Parameters

  engine | The engine whose additional text to get.

Returns
  The std::string if present, otherwise std::nullopt.

Definition at line 863 of file build_vehicle_gui.cpp.

Referenced by BuildVehicleWindow::FilterByText().

## ◆ RoadVehEngineCapacitySorter()

static bool RoadVehEngineCapacitySorter | ( | const GUIEngineListItem & | a,
|  | const GUIEngineListItem & | b
| ) |  |
| static

Determines order of road vehicles by capacity.

Parameters

  a | first engine to compare
  b | second engine to compare

Returns
  for descending order: returns true if a < b. Vice versa for ascending order

Definition at line 354 of file build_vehicle_gui.cpp.

References _engine_sort_direction, GUIEngineListItem::engine_id, EngineNumberSorter(), and GetTotalCapacityOfArticulatedParts().

## ◆ ShipEngineCapacitySorter()

static bool ShipEngineCapacitySorter | ( | const GUIEngineListItem & | a,
|  | const GUIEngineListItem & | b
| ) |  |
| static

Determines order of ships by capacity.

Parameters

  a | first engine to compare
  b | second engine to compare

Returns
  for descending order: returns true if a < b. Vice versa for ascending order

Definition at line 373 of file build_vehicle_gui.cpp.

References _engine_sort_direction, GUIEngineListItem::engine_id, EngineNumberSorter(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get(), and Engine::GetDisplayDefaultCapacity().

## ◆ ShowAdditionalText()

static uint ShowAdditionalText | ( | int | left,
|  | int | right,
|  | int | y,
|  | EngineID | engine
| ) |  |
| static

Display additional text from NewGRF in the purchase information window.

Parameters

  left | Left border of text bounding box
  right | Right border of text bounding box
  y | Top border of text bounding box
  engine | Engine to query the additional purchase information for

Returns
  Bottom border of text bounding box

Definition at line 888 of file build_vehicle_gui.cpp.

## ◆ TrainEngineCapacitySorter()

static bool TrainEngineCapacitySorter | ( | const GUIEngineListItem & | a,
|  | const GUIEngineListItem & | b
| ) |  |
| static

Determines order of train engines by capacity.

Parameters

  a | first engine to compare
  b | second engine to compare

Returns
  for descending order: returns true if a < b. Vice versa for ascending order

Definition at line 315 of file build_vehicle_gui.cpp.

## ◆ TrainEnginesThenWagonsSorter()

static bool TrainEnginesThenWagonsSorter | ( | const GUIEngineListItem & | a,
|  | const GUIEngineListItem & | b
| ) |  |
| static

Determines order of train engines by engine / wagon.

Parameters

  a | first engine to compare
  b | second engine to compare

Returns
  for descending order: returns true if a < b. Vice versa for ascending order

Definition at line 335 of file build_vehicle_gui.cpp.

## Variable Documentation

## ◆ _filter_funcs

GUIEngineList::FilterFunction* const _filter_funcs[]
| static

Initial value:
= {
&CargoAndEngineFilter,
}

Definition at line 552 of file build_vehicle_gui.cpp.

CargoAndEngineFilter
static bool CDECL CargoAndEngineFilter(const GUIEngineListItem *item, const CargoID cid)
Filters vehicles by cargo and engine (in case of rail vehicle).
Definition: build_vehicle_gui.cpp:540