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

Go to the source code of this file.

## Data Structures
class | CompanyStationsWindow
| The list of stations per company. 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
## 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 (CommandContainer cmd, TileArea ta)
| Check whether we need to show the station selection window.
template<class T >
void | ShowSelectBaseStationIfNeeded (CommandContainer cmd, TileArea ta)
| Show the station selection window when needed.
void | ShowSelectStationIfNeeded (CommandContainer cmd, TileArea ta)
| Show the station selection window when needed.
void | ShowSelectWaypointIfNeeded (CommandContainer cmd, TileArea ta)
| Show the waypoint selection window when needed.
## Variables
static const NWidgetPart | _nested_company_stations_widgets []
static const WindowDesc | _company_stations_desc (WDP_AUTO, 358, 162, WC_STATION_LIST, WC_NONE, WDF_UNCLICK_BUTTONS, _nested_company_stations_widgets, lengthof(_nested_company_stations_widgets))
static const NWidgetPart | _nested_station_view_widgets []
static const WindowDesc | _station_view_desc (WDP_AUTO, 249, 117, WC_STATION_VIEW, WC_NONE, WDF_UNCLICK_BUTTONS, _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 const WindowDesc | _select_station_desc (WDP_AUTO, 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.

## 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 1890 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(), TileArea::h, IsTileType(), SmallVector< T, S >::Length(), MP_STATION, TileArea::tile, TileAndStation::tile, and TileArea::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 677 of file station_gui.cpp.

References NWidgetContainer::Add(), CargoSpec::Get(), CargoSpec::IsValid(), NWidgetCore::SetDataTip(), NWidgetResizeBase::SetFill(), NWidgetResizeBase::SetMinimalSize(), NWidgetResizeBase::SetResize(), WID_STL_CARGOSTART, WWT_EMPTY, 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 81 of file station_gui.cpp.

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

Referenced by BuildRoadStationWindow::OnTick(), BuildRailStationWindow::OnTick(), BuildDocksStationWindow::OnTick(), and BuildAirportWindow::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 800 of file station_gui.cpp.

References _current_text_dir, DrawSprite(), CargoSpec::Get(), CargoSpec::GetCargoIcon(), min(), 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 49 of file station_gui.cpp.

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

Referenced by BuildRoadStationWindow::OnPaint(), BuildRailStationWindow::OnPaint(), BuildDocksStationWindow::OnPaint(), and BuildAirportWindow::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 1932 of file station_gui.cpp.

References _local_company, _settings_game, SmallVector< T, S >::Append(), CircularTileSearch(), SmallVector< T, S >::Clear(), DIR_N, DistanceMax(), GetStationIndex(), TileArea::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, TileAndStation::station, GameSettings::station, StationSettings::station_spread, TileAndStation::tile, TileArea::tile, TILE_ADD, TILE_ADDXY, TILE_AREA_LOOP, TileOffsByDir(), TileX(), TileY(), TileArea::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 748 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::OnKeyPress().

template<class T >

void ShowSelectBaseStationIfNeeded | ( | 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 2150 of file station_gui.cpp.

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

void ShowSelectStationIfNeeded | ( | 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 2165 of file station_gui.cpp.

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

void ShowSelectWaypointIfNeeded | ( | 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 2175 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 1868 of file station_gui.cpp.

template<class T >

static bool StationJoinerNeeded | ( | 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 2116 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 104 of file station_gui.cpp.

References CargoSpec::abbrev, DrawString(), FS_SMALL, CargoSpec::Get(), GetCharacterHeight(), 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),
      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 1975 of file station_gui.cpp.