OpenTTD: src/station_gui.cpp File Reference

OpenTTD

- Main Page
- Related Pages
- Modules
- Namespaces
- Data Structures
- Files

- File List
- Globals

Data Structures | Typedefs | Enumerations | Functions | Variables
station_gui.cpp File Reference

The GUI for stations. More...

`#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 "widgets/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 "widgets/station_widget.h"`
`#include "table/strings.h"`
`#include <set>`
`#include <vector>`
`#include "safeguards.h"`

Go to the source code of this file.

## Data Structures
class | CompanyStationsWindow
| The list of stations per company. More...
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
typedef GUIList< const Station * > | GUIStationList
typedef std::set < CargoDataEntry *, CargoSorter > | CargoDataSet

## Enumerations
enum | SortOrder { SO_DESCENDING, SO_ASCENDING }
enum | CargoSortType { ST_AS_GROUPING, ST_COUNT, ST_STATION_STRING, ST_STATION_ID, ST_CARGO_ID }

## 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)
void | CheckRedrawStationCoverage (const Window *w)
| Check whether we need to redraw the station coverage text.
static void | StationsWndShowStationRating (int left, int right, int y, CargoID type, uint amount, byte rating)
| Draw small boxes of cargo amount and ratings data at the given coordinates.
static NWidgetBase * | CargoWidgets (int *biggest_index)
| Make a horizontal row of cargo buttons, starting at widget WID_STL_CARGOSTART.
void | ShowCompanyStations (CompanyID company)
| Opens window with list of company's stations.
static void | DrawCargoIcons (CargoID i, uint waiting, int left, int right, int y)
| Draws icons of waiting cargo in the StationView window.
void | ShowStationViewWindow (StationID station)
| Opens StationViewWindow for given station.
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.
template<class T >
static const T * | FindStationsNearby (TileArea ta, bool distant_join)
| Circulate around the to-be-built station to find stations we could join.
template<class T >
static bool | StationJoinerNeeded (const CommandContainer &cmd, TileArea ta)
| Check whether we need to show the station selection window.
template<class T >
void | ShowSelectBaseStationIfNeeded (const CommandContainer &cmd, TileArea ta)
| Show the station selection window when needed.
void | ShowSelectStationIfNeeded (const CommandContainer &cmd, TileArea ta)
| Show the station selection window when needed.
void | ShowSelectWaypointIfNeeded (const CommandContainer &cmd, TileArea ta)
| Show the waypoint selection window when needed.

## Variables
static const 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, lengthof(_nested_company_stations_widgets))
static const 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, lengthof(_nested_station_view_widgets))
static SmallVector < TileAndStation, 8 > | _deleted_stations_nearby
static SmallVector< StationID, 8 > | _stations_nearby_list
static const 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, lengthof(_nested_select_station_widgets))

## Detailed Description

The GUI for stations.

Definition in file station_gui.cpp.

## Enumeration Type Documentation

enum CargoSortType

Enumerator:

  ST_AS_GROUPING | by the same principle the entries are being grouped
  ST_COUNT | by amount of cargo
  ST_STATION_STRING | by station name
  ST_STATION_ID | by station id
  ST_CARGO_ID | by cargo id

Definition at line 829 of file station_gui.cpp.

## Function Documentation

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

  tile | Tile just being checked
  user_data | Pointer to TileArea context

Template Parameters

  T | the type of station to look for

Definition at line 2132 of file station_gui.cpp.

References _local_company, SmallVector< T, S >::Append(), SmallVector< T, S >::Contains(), SmallVector< T, S >::Erase(), SmallVector< T, S >::Get(), GetStationIndex(), OrthogonalTileArea::h, IsTileType(), SmallVector< T, S >::Length(), MP_STATION, OrthogonalTileArea::tile, TileAndStation::tile, and OrthogonalTileArea::w.

static NWidgetBase* CargoWidgets | ( | int * | biggest_index | ) |
| static

Make a horizontal row of cargo buttons, starting at widget WID_STL_CARGOSTART.

Parameters

  biggest_index | Pointer to store biggest used widget number of the buttons.

Returns
  Horizontal row.

Definition at line 687 of file station_gui.cpp.

References _sorted_standard_cargo_specs_size, NWidgetContainer::Add(), NWidgetCore::SetDataTip(), NWidgetResizeBase::SetFill(), NWidgetResizeBase::SetMinimalSize(), NWidgetResizeBase::SetResize(), WID_STL_CARGOSTART, and WWT_PANEL.

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

  w | the window to check.

Definition at line 88 of file station_gui.cpp.

References TileHighlightData::dirty, and Window::SetDirty().

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

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

Draws icons of waiting cargo in the StationView window.

Parameters

  i | type of cargo
  waiting | number of waiting units
  left | left most coordinate to draw on
  right | right most coordinate to draw on
  y | y coordinate
  width | the width of the view

Definition at line 807 of file station_gui.cpp.

References _current_text_dir, DrawSprite(), CargoSpec::Get(), CargoSpec::GetCargoIcon(), min(), ScaleGUITrad(), and TD_RTL.

Referenced by StationViewWindow::DrawEntries().

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

  left | x position where the string is to be drawn
  right | the right most position to draw on
  top | y position where the string is to be drawn
  sct | which type of cargo is to be displayed (passengers/non-passengers)
  rad | radius around selected tile(s) to be searched
  supplies | if supplied cargoes should be drawn, else accepted cargoes

Returns
  Returns the y value below the string that was drawn

Definition at line 56 of file station_gui.cpp.

References CC_PASSENGERS, DrawStringMultiLine(), TileHighlightData::drawstyle, GetAcceptanceAroundTiles(), GetProductionAroundTiles(), HT_RECT, IsCargoInClass(), MapSize(), NUM_CARGO, TileHighlightData::pos, SCT_ALL, SCT_NON_PASSENGERS_ONLY, SCT_PASSENGERS_ONLY, SetBit(), SetDParam(), TileHighlightData::size, TILE_SIZE, and TileVirtXY().

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

template<class T >

static const T* 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

  ta | Base tile area of the to-be-built station
  distant_join | Search for adjacent stations (false) or stations fully within station spread

Template Parameters

  T | the type of station to look for

Definition at line 2174 of file station_gui.cpp.

References _local_company, _settings_game, SmallVector< T, S >::Append(), CircularTileSearch(), SmallVector< T, S >::Clear(), DIR_N, DistanceMax(), GetStationIndex(), OrthogonalTileArea::h, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, IsInsideBS(), BaseStation::IsInUse(), IsTileType(), MapSize(), max(), min(), MP_STATION, BaseStation::owner, GameSettings::station, TileAndStation::station, StationSettings::station_spread, OrthogonalTileArea::tile, TileAndStation::tile, TILE_ADD, TILE_ADDXY, TILE_AREA_LOOP, TileOffsByDir(), TileX(), TileY(), OrthogonalTileArea::w, and BaseStation::xy.

void ShowCompanyStations | ( | CompanyID | company | ) |

Opens window with list of company's stations.

Parameters

  company | whose stations' list show

Definition at line 750 of file station_gui.cpp.

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

Referenced by MenuClickStations(), and MainToolbarWindow::OnHotkey().

template<class T >

void ShowSelectBaseStationIfNeeded | ( | const CommandContainer & | cmd,
|  | TileArea | ta
| ) |  |

Show the station selection window when needed.

If not, build the station.

Parameters

  cmd | Command to build the station.
  ta | Area to build the station in

Template Parameters

  the | class to find stations for

Definition at line 2393 of file station_gui.cpp.

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

void ShowSelectStationIfNeeded | ( | const CommandContainer & | cmd,
|  | TileArea | ta
| ) |  |

Show the station selection window when needed.

If not, build the station.

Parameters

  cmd | Command to build the station.
  ta | Area to build the station in

Definition at line 2408 of file station_gui.cpp.

Referenced by BuildDocksToolbarWindow::OnPlaceObject(), PlaceAirport(), PlaceRail_Station(), and PlaceRoadStop().

void ShowSelectWaypointIfNeeded | ( | const CommandContainer & | cmd,
|  | TileArea | ta
| ) |  |

Show the waypoint selection window when needed.

If not, build the waypoint.

Parameters

  cmd | Command to build the waypoint.
  ta | Area to build the waypoint in

Definition at line 2418 of file station_gui.cpp.

Referenced by BuildRailToolbarWindow::OnPlaceMouseUp().

void ShowStationViewWindow | ( | StationID | station | ) |

Opens StationViewWindow for given station.

Parameters

  station | station which window should be opened

Definition at line 2110 of file station_gui.cpp.

template<class T >

static bool StationJoinerNeeded | ( | const CommandContainer & | cmd,
|  | TileArea | ta
| ) |  |
| static

Check whether we need to show the station selection window.

Parameters

  cmd | Command to build the station.
  ta | Tile area of the to-be-built station

Template Parameters

  T | the type of station

Returns
  whether we need to show the station selection window.

Definition at line 2359 of file station_gui.cpp.

References _ctrl_pressed, _settings_game, StationSettings::adjacent_stations, CommandContainer::cmd, CommandFlagsToDCFlags(), StationSettings::distant_join_stations, DoCommand(), CommandCost::Failed(), FindWindowById(), GetCommandFlags(), SmallVector< T, S >::Length(), GameSettings::station, UpdateTileSelection(), and WC_SELECT_STATION.

static void StationsWndShowStationRating | ( | int | left,
|  | int | right,
|  | int | y,
|  | CargoID | type,
|  | uint | amount,
|  | byte | 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

  left | left most coordinate to draw the box at
  right | right most coordinate to draw the box at
  y | coordinate to draw the box at
  type | Cargo type
  amount | Cargo amount
  rating | ratings data for that particular cargo

Note
  Each cargo-bar is 16 pixels wide and 6 pixels high
  Each rating 14 pixels wide and 1 pixel high and is 1 pixel below the cargo-bar

< number of units to show station as 'full'

< rating needed so it is shown as 'full'

Definition at line 111 of file station_gui.cpp.

References CargoSpec::abbrev, DrawString(), FS_SMALL, CargoSpec::Get(), GetCharacterHeight(), GetContrastColour(), GfxFillRect(), CargoSpec::IsValid(), minu(), PC_GREEN, and PC_RED.

Referenced by CompanyStationsWindow::DrawWidget().

## Variable Documentation

const NWidgetPart _nested_select_station_widgets[]
| static

Initial value:
{
NWidget(NWID_HORIZONTAL),
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),
EndContainer(),
NWidget(NWID_HORIZONTAL),
NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_JS_PANEL), SetResize(1, 0), SetScrollbar(WID_JS_SCROLLBAR), EndContainer(),
NWidget(NWID_VERTICAL),
NWidget(NWID_VSCROLLBAR, COLOUR_DARK_GREEN, WID_JS_SCROLLBAR),
NWidget(WWT_RESIZEBOX, COLOUR_DARK_GREEN),
EndContainer(),
EndContainer(),
}

Definition at line 2217 of file station_gui.cpp.