OpenTTD Source  20240915-master-g3784a3d3d6
station_gui.cpp File Reference
#include "stdafx.h"
#include "debug.h"
#include "gui.h"
#include "textbuf_gui.h"
#include "company_func.h"
#include "command_func.h"
#include "vehicle_gui.h"
#include "cargotype.h"
#include "station_gui.h"
#include "strings_func.h"
#include "string_func.h"
#include "window_func.h"
#include "viewport_func.h"
#include "dropdown_type.h"
#include "dropdown_common_type.h"
#include "dropdown_func.h"
#include "station_base.h"
#include "waypoint_base.h"
#include "tilehighlight_func.h"
#include "company_base.h"
#include "sortlist_type.h"
#include "core/geometry_func.hpp"
#include "vehiclelist.h"
#include "town.h"
#include "linkgraph/linkgraph.h"
#include "zoom_func.h"
#include "station_cmd.h"
#include "widgets/station_widget.h"
#include "table/strings.h"
#include "safeguards.h"

Go to the source code of this file.

Data Structures

struct  StationTypeFilter
 
struct  GenericWaypointTypeFilter< ROAD, TILE_TYPE >
 
class  CompanyStationsWindow
 The list of stations per company. More...
 
struct  CompanyStationsWindow::FilterState
 
class  CargoSorter
 
class  CargoDataEntry
 A cargo data entry representing one possible row in the station view window's top part. More...
 
struct  StationViewWindow
 The StationView window. More...
 
struct  StationViewWindow::RowDisplay
 A row being displayed in the cargo view (as opposed to being "hidden" behind a plus sign). More...
 
struct  TileAndStation
 Struct containing TileIndex and StationID. More...
 
struct  SelectStationWindow< T >
 Window for selecting stations/waypoints to (distant) join to. More...
 

Typedefs

using RailWaypointTypeFilter = GenericWaypointTypeFilter< false, MP_RAILWAY >
 
using RoadWaypointTypeFilter = GenericWaypointTypeFilter< true, MP_ROAD >
 
typedef GUIList< const Station *, const CargoTypes & > GUIStationList
 
typedef std::set< CargoDataEntry *, CargoSorterCargoDataSet
 

Enumerations

enum  SortOrder { SO_DESCENDING, SO_ASCENDING }
 
enum  CargoSortType : uint8_t {
  CargoSortType::AsGrouping, CargoSortType::Count, CargoSortType::StationString, CargoSortType::StationID,
  CargoSortType::CargoID
}
 

Functions

int DrawStationCoverageAreaText (int left, int right, int top, StationCoverageType sct, int rad, bool supplies)
 Calculates and draws the accepted or supplied cargo around the selected tile(s) More...
 
template<typename T >
void FindStationsAroundSelection ()
 Find stations adjacent to the current tile highlight area, so that existing coverage area can be drawn.
 
void CheckRedrawStationCoverage (const Window *w)
 Check whether we need to redraw the station coverage text. More...
 
template<typename T >
void CheckRedrawWaypointCoverage ()
 
void CheckRedrawRailWaypointCoverage (const Window *)
 
void CheckRedrawRoadWaypointCoverage (const Window *)
 
static void StationsWndShowStationRating (int left, int right, int y, CargoID type, uint amount, uint8_t rating)
 Draw small boxes of cargo amount and ratings data at the given coordinates. More...
 
void ShowCompanyStations (CompanyID company)
 Opens window with list of company's stations. More...
 
static void DrawCargoIcons (CargoID i, uint waiting, int left, int right, int y)
 Draws icons of waiting cargo in the StationView window. More...
 
void ShowStationViewWindow (StationID station)
 Opens StationViewWindow for given station. More...
 
template<class T >
static bool AddNearbyStation (TileIndex tile, void *user_data)
 Add station on this tile to _stations_nearby_list if it's fully within the station spread. More...
 
template<class T >
static const BaseStationFindStationsNearby (TileArea ta, bool distant_join)
 Circulate around the to-be-built station to find stations we could join. More...
 
template<class T >
static bool StationJoinerNeeded (TileArea ta, const StationPickerCmdProc &proc)
 Check whether we need to show the station selection window. More...
 
template<class T >
void ShowSelectBaseStationIfNeeded (TileArea ta, StationPickerCmdProc &&proc)
 Show the station selection window when needed. More...
 
void ShowSelectStationIfNeeded (TileArea ta, StationPickerCmdProc proc)
 Show the station selection window when needed. More...
 
void ShowSelectRailWaypointIfNeeded (TileArea ta, StationPickerCmdProc proc)
 Show the rail waypoint selection window when needed. More...
 
void ShowSelectRoadWaypointIfNeeded (TileArea ta, StationPickerCmdProc proc)
 Show the road waypoint selection window when needed. More...
 

Variables

static constexpr NWidgetPart _nested_company_stations_widgets []
 
static WindowDesc _company_stations_desc (WDP_AUTO, "list_stations", 358, 162, WC_STATION_LIST, WC_NONE, 0, _nested_company_stations_widgets)
 
static constexpr NWidgetPart _nested_station_view_widgets []
 
static WindowDesc _station_view_desc (WDP_AUTO, "view_station", 249, 117, WC_STATION_VIEW, WC_NONE, 0, _nested_station_view_widgets)
 
static std::vector< TileAndStation_deleted_stations_nearby
 
static std::vector< StationID > _stations_nearby_list
 
static constexpr NWidgetPart _nested_select_station_widgets []
 
static WindowDesc _select_station_desc (WDP_AUTO, "build_station_join", 200, 180, WC_SELECT_STATION, WC_NONE, WDF_CONSTRUCTION, _nested_select_station_widgets)
 

Detailed Description

The GUI for stations.

Definition in file station_gui.cpp.

Enumeration Type Documentation

◆ CargoSortType

enum CargoSortType : uint8_t
strong
Enumerator
AsGrouping 

by the same principle the entries are being grouped

Count 

by amount of cargo

StationString 

by station name

StationID 

by station id

CargoID 

by cargo id

Definition at line 889 of file station_gui.cpp.

Function Documentation

◆ AddNearbyStation()

template<class T >
static bool AddNearbyStation ( TileIndex  tile,
void *  user_data 
)
static

Add station on this tile to _stations_nearby_list if it's fully within the station spread.

Parameters
tileTile just being checked
user_dataPointer to TileArea context
Template Parameters
Tthe station filter type

Definition at line 2200 of file station_gui.cpp.

◆ CheckRedrawStationCoverage()

void CheckRedrawStationCoverage ( const Window w)

Check whether we need to redraw the station coverage text.

If it is needed actually make the window for redrawing.

Parameters
wthe window to check.

Definition at line 160 of file station_gui.cpp.

References _ctrl_pressed.

Referenced by BuildDocksStationWindow::OnRealtimeTick(), BuildAirportWindow::OnRealtimeTick(), BuildRailStationWindow::OnRealtimeTick(), and BuildRoadStationWindow::OnRealtimeTick().

◆ DrawCargoIcons()

static void DrawCargoIcons ( CargoID  i,
uint  waiting,
int  left,
int  right,
int  y 
)
static

Draws icons of waiting cargo in the StationView window.

Parameters
itype of cargo
waitingnumber of waiting units
leftleft most coordinate to draw on
rightright most coordinate to draw on
yy coordinate

Definition at line 867 of file station_gui.cpp.

◆ DrawStationCoverageAreaText()

int DrawStationCoverageAreaText ( int  left,
int  right,
int  top,
StationCoverageType  sct,
int  rad,
bool  supplies 
)

Calculates and draws the accepted or supplied cargo around the selected tile(s)

Parameters
leftx position where the string is to be drawn
rightthe right most position to draw on
topy position where the string is to be drawn
sctwhich type of cargo is to be displayed (passengers/non-passengers)
radradius around selected tile(s) to be searched
suppliesif supplied cargoes should be drawn, else accepted cargoes
Returns
Returns the y value below the string that was drawn

Definition at line 77 of file station_gui.cpp.

References TileVirtXY().

◆ FindStationsNearby()

template<class T >
static const BaseStation* FindStationsNearby ( TileArea  ta,
bool  distant_join 
)
static

Circulate around the to-be-built station to find stations we could join.

Make sure that only stations are returned where joining wouldn't exceed station spread and are our own station.

Parameters
taBase tile area of the to-be-built station
distant_joinSearch for adjacent stations (false) or stations fully within station spread
Template Parameters
Tthe station filter type, for stations to look for

Definition at line 2242 of file station_gui.cpp.

◆ ShowCompanyStations()

void ShowCompanyStations ( CompanyID  company)

Opens window with list of company's stations.

Parameters
companywhose stations' list show

Definition at line 814 of file station_gui.cpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::IsValidID().

Referenced by MenuClickStations().

◆ ShowSelectBaseStationIfNeeded()

template<class T >
void ShowSelectBaseStationIfNeeded ( TileArea  ta,
StationPickerCmdProc &&  proc 
)

Show the station selection window when needed.

If not, build the station.

Parameters
cmdCommand to build the station.
taArea to build the station in
Template Parameters
theclass to find stations for

Definition at line 2474 of file station_gui.cpp.

References _settings_client, ClientSettings::gui, GUISettings::persistent_buildingtools, and ResetObjectToPlace().

◆ ShowSelectRailWaypointIfNeeded()

void ShowSelectRailWaypointIfNeeded ( TileArea  ta,
StationPickerCmdProc  proc 
)

Show the rail waypoint selection window when needed.

If not, build the waypoint.

Parameters
taArea to build the waypoint in
procFunction called to execute the build command.

Definition at line 2499 of file station_gui.cpp.

◆ ShowSelectRoadWaypointIfNeeded()

void ShowSelectRoadWaypointIfNeeded ( TileArea  ta,
StationPickerCmdProc  proc 
)

Show the road waypoint selection window when needed.

If not, build the waypoint.

Parameters
taArea to build the waypoint in
procFunction called to execute the build command.

Definition at line 2509 of file station_gui.cpp.

◆ ShowSelectStationIfNeeded()

void ShowSelectStationIfNeeded ( TileArea  ta,
StationPickerCmdProc  proc 
)

Show the station selection window when needed.

If not, build the station.

Parameters
taArea to build the station in
procFunction called to execute the build command.

Definition at line 2489 of file station_gui.cpp.

◆ ShowStationViewWindow()

void ShowStationViewWindow ( StationID  station)

Opens StationViewWindow for given station.

Parameters
stationstation which window should be opened

Definition at line 2178 of file station_gui.cpp.

◆ StationJoinerNeeded()

template<class T >
static bool StationJoinerNeeded ( TileArea  ta,
const StationPickerCmdProc &  proc 
)
static

Check whether we need to show the station selection window.

Parameters
cmdCommand to build the station.
taTile area of the to-be-built station
Template Parameters
Tthe station filter type
Returns
whether we need to show the station selection window.

Definition at line 2440 of file station_gui.cpp.

References _ctrl_pressed, _settings_game, Window::Close(), StationSettings::distant_join_stations, FindWindowById(), GameSettings::station, UpdateTileSelection(), and WC_SELECT_STATION.

◆ StationsWndShowStationRating()

static void StationsWndShowStationRating ( int  left,
int  right,
int  y,
CargoID  type,
uint  amount,
uint8_t  rating 
)
static

Draw small boxes of cargo amount and ratings data at the given coordinates.

If amount exceeds 576 units, it is shown 'full', same goes for the rating: at above 90% orso (224) it is also 'full'

Parameters
leftleft most coordinate to draw the box at
rightright most coordinate to draw the box at
ycoordinate to draw the box at
typeCargo type
amountCargo amount
ratingratings data for that particular cargo

< number of units to show station as 'full'

< rating needed so it is shown as 'full'

Definition at line 220 of file station_gui.cpp.

Variable Documentation

◆ _nested_select_station_widgets

constexpr NWidgetPart _nested_select_station_widgets[]
staticconstexpr
Initial value:
= {
NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN),
NWidget(WWT_CAPTION, COLOUR_DARK_GREEN, WID_JS_CAPTION), SetDataTip(STR_JOIN_STATION_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
NWidget(WWT_DEFSIZEBOX, COLOUR_DARK_GREEN),
NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_JS_PANEL), SetResize(1, 0), SetScrollbar(WID_JS_SCROLLBAR), EndContainer(),
NWidget(NWID_VSCROLLBAR, COLOUR_DARK_GREEN, WID_JS_SCROLLBAR),
NWidget(WWT_RESIZEBOX, COLOUR_DARK_GREEN),
}

Definition at line 2283 of file station_gui.cpp.

WWT_CAPTION
@ WWT_CAPTION
Window caption (window title between closebox and stickybox)
Definition: widget_type.h:63
WWT_DEFSIZEBOX
@ WWT_DEFSIZEBOX
Default window size box (at top-right of a window, between WWT_SHADEBOX and WWT_STICKYBOX)
Definition: widget_type.h:67
NWID_HORIZONTAL
@ NWID_HORIZONTAL
Horizontal container.
Definition: widget_type.h:77
EndContainer
constexpr NWidgetPart EndContainer()
Widget part function for denoting the end of a container (horizontal, vertical, WWT_FRAME,...
Definition: widget_type.h:1193
SetResize
constexpr NWidgetPart SetResize(int16_t dx, int16_t dy)
Widget part function for setting the resize step.
Definition: widget_type.h:1128
SetScrollbar
constexpr NWidgetPart SetScrollbar(WidgetID index)
Attach a scrollbar to a widget.
Definition: widget_type.h:1286
NWidget
constexpr NWidgetPart NWidget(WidgetType tp, Colours col, WidgetID idx=-1)
Widget part function for starting a new 'real' widget.
Definition: widget_type.h:1311
NWID_VERTICAL
@ NWID_VERTICAL
Vertical container.
Definition: widget_type.h:79
WWT_CLOSEBOX
@ WWT_CLOSEBOX
Close box (at top-left of a window)
Definition: widget_type.h:71
WWT_RESIZEBOX
@ WWT_RESIZEBOX
Resize box (normally at bottom-right of a window)
Definition: widget_type.h:70
NWID_VSCROLLBAR
@ NWID_VSCROLLBAR
Vertical scrollbar.
Definition: widget_type.h:86
WWT_PANEL
@ WWT_PANEL
Simple depressed panel.
Definition: widget_type.h:52
SetDataTip
constexpr NWidgetPart SetDataTip(uint32_t data, StringID tip)
Widget part function for setting the data and tooltip.
Definition: widget_type.h:1204