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 NWidgetBaseCargoWidgets (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 1914 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 804 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 1956 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 2174 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 2189 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 2199 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 1892 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 2140 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 1999 of file station_gui.cpp.