Data Structures | Functions | Variables

rail_gui.cpp File Reference

File for dealing with rail construction user interface More...

#include "stdafx.h"
#include "gui.h"
#include "window_gui.h"
#include "station_gui.h"
#include "terraform_gui.h"
#include "viewport_func.h"
#include "command_func.h"
#include "waypoint_func.h"
#include "newgrf_station.h"
#include "company_base.h"
#include "strings_func.h"
#include "window_func.h"
#include "date_func.h"
#include "sound_func.h"
#include "company_func.h"
#include "widgets/dropdown_type.h"
#include "tunnelbridge.h"
#include "tilehighlight_func.h"
#include "spritecache.h"
#include "core/geometry_func.hpp"
#include "hotkeys.h"
#include "engine_base.h"
#include "vehicle_func.h"
#include "zoom_func.h"
#include "station_map.h"
#include "tunnelbridge_map.h"
#include "widgets/rail_widget.h"

Go to the source code of this file.

Data Structures

struct  RailStationGUISettings
struct  BuildRailToolbarWindow
 Rail toolbar management class. More...
struct  BuildRailStationWindow
struct  BuildSignalWindow
struct  BuildRailDepotWindow
struct  BuildRailWaypointWindow

Functions

static void HandleStationPlacement (TileIndex start, TileIndex end)
static void ShowBuildTrainDepotPicker (Window *parent)
static void ShowBuildWaypointPicker (Window *parent)
static void ShowStationBuilder (Window *parent)
 Open station build window.
static void ShowSignalBuilder (Window *parent)
 Open the signal selection window.
static bool IsStationAvailable (const StationSpec *statspec)
 Check whether a station type can be build.
void CcPlaySound1E (const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
static void GenericPlaceRail (TileIndex tile, int cmd)
static void PlaceExtraDepotRail (TileIndex tile, DiagDirection dir, Track track)
 Try to add an additional rail-track at the entrance of a depot.
void CcRailDepot (const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
static void PlaceRail_Waypoint (TileIndex tile)
 Place a rail waypoint.
void CcStation (const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
static void PlaceRail_Station (TileIndex tile)
 Place a rail station.
static void GenericPlaceSignals (TileIndex tile)
 Build a new signal or edit/remove a present signal, use CmdBuildSingleSignal() or CmdRemoveSingleSignal() in rail_cmd.cpp.
static void PlaceRail_Bridge (TileIndex tile, Window *w)
 Start placing a rail bridge.
void CcBuildRailTunnel (const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
 Command callback for building a tunnel.
static void ToggleRailButton_Remove (Window *w)
 Toggles state of the Remove button of Build rail toolbar.
static bool RailToolbar_CtrlChanged (Window *w)
 Updates the Remove button because of Ctrl state change.
static void BuildRailClick_Remove (Window *w)
 The "remove"-button click proc of the build-rail toolbar.
static void DoRailroadTrack (int mode)
static void HandleAutodirPlacement ()
static void HandleAutoSignalPlacement ()
 Build new signals or remove signals or (if only one tile marked) edit a signal.
WindowShowBuildRailToolbar (RailType railtype)
 Open the build rail toolbar window for a specific rail type.
EventState RailToolbarGlobalHotkeys (uint16 key, uint16 keycode)
void InitializeRailGui ()
 Initialize rail building GUI settings.
void ReinitGuiAfterToggleElrail (bool disable)
 Re-initialize rail-build toolbar after toggling support for electric trains.
static void SetDefaultRailGui ()
 Set the initial (default) railtype to use.
bool ResetSignalVariant (int32 p=0)
 Updates the current signal variant used in the signal GUI to the one adequate to current year.
void InitializeRailGUI ()
 Resets the rail GUI - sets default railtype to build and resets the signal GUI.
static bool CompareRailTypes (const DropDownListItem *first, const DropDownListItem *second)
 Compare railtypes based on their sorting order.
DropDownListGetRailTypeDropDownList (bool for_replacement)
 Create a drop down list for all the rail types of the local company.

Variables

static RailType _cur_railtype
 Rail type of the current build-rail toolbar.
static bool _remove_button_clicked
 Flag whether 'remove' toggle-button is currently enabled.
static DiagDirection _build_depot_direction
 Currently selected depot direction.
static byte _waypoint_count = 1
 Number of waypoint types.
static byte _cur_waypoint_type
 Currently selected waypoint type.
static bool _convert_signal_button
 convert signal button in the signal GUI pressed
static SignalVariant _cur_signal_variant
 set the signal variant (for signal GUI)
static SignalType _cur_signal_type
 set the signal type (for signal GUI)
static const SignalType _default_signal_type [] = {SIGTYPE_NORMAL, SIGTYPE_PBS, SIGTYPE_PBS_ONEWAY}
static RailStationGUISettings _railstation
 Settings of the station builder GUI.
static const Track _place_depot_extra_track [12]
 Additional pieces of track to add at the entrance of a depot.
static const DiagDirection _place_depot_extra_dir [12]
 Direction to check for existing track pieces.
const uint16 _railtoolbar_autorail_keys [] = {'5', 'A' | WKC_GLOBAL_HOTKEY, 0}
Hotkey< BuildRailToolbarWindow > * _railtoolbar_hotkeys = BuildRailToolbarWindow::railtoolbar_hotkeys
static const NWidgetPart _nested_build_rail_widgets []
static const WindowDesc _build_rail_desc (WDP_ALIGN_TOOLBAR, 0, 0, WC_BUILD_TOOLBAR, WC_NONE, WDF_CONSTRUCTION, _nested_build_rail_widgets, lengthof(_nested_build_rail_widgets))
static const NWidgetPart _nested_station_builder_widgets []
static const WindowDesc _station_builder_desc (WDP_AUTO, 350, 0, WC_BUILD_STATION, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, _nested_station_builder_widgets, lengthof(_nested_station_builder_widgets))
 High level window description of the station-build window (default & newGRF).
static const NWidgetPart _nested_signal_builder_widgets []
 Nested widget definition of the build signal window.
static const WindowDesc _signal_builder_desc (WDP_AUTO, 0, 0, WC_BUILD_SIGNAL, WC_BUILD_TOOLBAR, WDF_UNCLICK_BUTTONS|WDF_CONSTRUCTION, _nested_signal_builder_widgets, lengthof(_nested_signal_builder_widgets))
 Signal selection window description.
static const NWidgetPart _nested_build_depot_widgets []
 Nested widget definition of the build rail depot window.
static const WindowDesc _build_depot_desc (WDP_AUTO, 0, 0, WC_BUILD_DEPOT, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, _nested_build_depot_widgets, lengthof(_nested_build_depot_widgets))
static const NWidgetPart _nested_build_waypoint_widgets []
 Nested widget definition for the build NewGRF rail waypoint window.
static const WindowDesc _build_waypoint_desc (WDP_AUTO, 0, 0, WC_BUILD_WAYPOINT, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, _nested_build_waypoint_widgets, lengthof(_nested_build_waypoint_widgets))

Detailed Description

File for dealing with rail construction user interface

Definition in file rail_gui.cpp.


Function Documentation

static void BuildRailClick_Remove ( Window w  )  [static]
static bool CompareRailTypes ( const DropDownListItem first,
const DropDownListItem second 
) [static]

Compare railtypes based on their sorting order.

Parameters:
first The railtype to compare to.
second The railtype to compare.
Returns:
True iff the first should be sorted before the second.

Definition at line 1915 of file rail_gui.cpp.

References GetRailTypeInfo(), DropDownListItem::result, and RailtypeInfo::sorting_order.

Referenced by GetRailTypeDropDownList().

static void GenericPlaceSignals ( TileIndex  tile  )  [static]
DropDownList* GetRailTypeDropDownList ( bool  for_replacement  ) 
static void HandleAutoSignalPlacement (  )  [static]
static bool IsStationAvailable ( const StationSpec statspec  )  [static]
static void PlaceExtraDepotRail ( TileIndex  tile,
DiagDirection  dir,
Track  track 
) [static]

Try to add an additional rail-track at the entrance of a depot.

Parameters:
tile Tile to use for adding the rail-track
dir Direction to check for already present tracks
track Track to add
See also:
CcRailDepot()

Definition at line 107 of file rail_gui.cpp.

References _cur_railtype, CMD_BUILD_SINGLE_RAIL, DiagdirReachesTracks(), DoCommandP(), GetRailTileType(), GetTrackBits(), and RAIL_TILE_NORMAL.

static void PlaceRail_Bridge ( TileIndex  tile,
Window w 
) [static]

Start placing a rail bridge.

Parameters:
tile Position of the first tile of the bridge.
w Rail toolbar window.

Definition at line 259 of file rail_gui.cpp.

References DDSP_BUILD_BRIDGE, GetOtherTunnelBridgeEnd(), IsBridgeTile(), Window::OnPlaceMouseUp(), VPM_X_OR_Y, and VpStartPlaceSizing().

Referenced by BuildRailToolbarWindow::OnPlaceObject().

static void PlaceRail_Station ( TileIndex  tile  )  [static]
static void PlaceRail_Waypoint ( TileIndex  tile  )  [static]
static bool RailToolbar_CtrlChanged ( Window w  )  [static]

Updates the Remove button because of Ctrl state change.

Parameters:
w window the button belongs to
Returns:
true iff the remove buton was changed

Definition at line 299 of file rail_gui.cpp.

References Window::IsWidgetDisabled(), Window::IsWidgetLowered(), ToggleRailButton_Remove(), WID_RAT_BUILD_NS, WID_RAT_BUILD_WAYPOINT, and WID_RAT_REMOVE.

Referenced by BuildRailToolbarWindow::OnClick(), and BuildRailToolbarWindow::OnCTRLStateChange().

void ReinitGuiAfterToggleElrail ( bool  disable  ) 

Re-initialize rail-build toolbar after toggling support for electric trains.

Parameters:
disable Boolean whether electric trains are disabled (removed from the game)

Definition at line 1818 of file rail_gui.cpp.

References _cur_railtype, FindWindowById(), MarkWholeScreenDirty(), BuildRailToolbarWindow::ModifyRailType(), RAILTYPE_ELECTRIC, TRANSPORT_RAIL, and WC_BUILD_TOOLBAR.

Referenced by SettingsDisableElrail().

bool ResetSignalVariant ( int32  p = 0  ) 

Updates the current signal variant used in the signal GUI to the one adequate to current year.

Parameters:
p needed to be called when a setting changes
Returns:
success, needed for settings

Definition at line 1880 of file rail_gui.cpp.

References _cur_signal_type, _cur_signal_variant, _cur_year, _settings_client, FindWindowById(), ClientSettings::gui, Window::RaiseWidget(), GUISettings::semaphore_build_before, Window::SetDirty(), SIG_ELECTRIC, SIG_SEMAPHORE, WC_BUILD_SIGNAL, WID_BS_ELECTRIC_NORM, and WID_BS_SEMAPHORE_NORM.

Referenced by ClickChangeDateCheat(), InitializeRailGUI(), and OnNewYear().

Window* ShowBuildRailToolbar ( RailType  railtype  )  [read]

Open the build rail toolbar window for a specific rail type.

If the terraform toolbar is linked to the toolbar, that window is also opened.

Parameters:
railtype Rail type to open the window for
Returns:
newly opened rail toolbar, or NULL if the toolbar could not be opened.

Definition at line 838 of file rail_gui.cpp.

References _cur_railtype, _local_company, _remove_button_clicked, DeleteWindowByClass(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::IsValidID(), ValParamRailtype(), and WC_BUILD_TOOLBAR.

Referenced by MenuClickBuildRail(), and MainToolbarWindow::OnKeyPress().

static void ToggleRailButton_Remove ( Window w  )  [static]

Toggles state of the Remove button of Build rail toolbar.

Parameters:
w window the button belongs to

Definition at line 285 of file rail_gui.cpp.

References _remove_button_clicked, DeleteWindowById(), Window::IsWidgetLowered(), Window::SetWidgetDirty(), Window::ToggleWidgetLoweredState(), WC_SELECT_STATION, and WID_RAT_REMOVE.

Referenced by BuildRailClick_Remove(), BuildSignalWindow::OnClick(), and RailToolbar_CtrlChanged().


Variable Documentation

Initial value:
 {
  NWidget(NWID_HORIZONTAL),
    NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN),
    NWidget(WWT_CAPTION, COLOUR_DARK_GREEN), SetDataTip(STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
  EndContainer(),
  NWidget(WWT_PANEL, COLOUR_DARK_GREEN),
    NWidget(NWID_SPACER), SetMinimalSize(0, 3),
    NWidget(NWID_HORIZONTAL_LTR),
      NWidget(NWID_SPACER), SetMinimalSize(3, 0), SetFill(1, 0),
      NWidget(NWID_VERTICAL),
        NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAD_DEPOT_NW), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP),
        EndContainer(),
        NWidget(NWID_SPACER), SetMinimalSize(0, 2),
        NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAD_DEPOT_SW), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP),
        EndContainer(),
      EndContainer(),
      NWidget(NWID_SPACER), SetMinimalSize(2, 0),
      NWidget(NWID_VERTICAL),
        NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAD_DEPOT_NE), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP),
        EndContainer(),
        NWidget(NWID_SPACER), SetMinimalSize(0, 2),
        NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAD_DEPOT_SE), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP),
        EndContainer(),
      EndContainer(),
      NWidget(NWID_SPACER), SetMinimalSize(3, 0), SetFill(1, 0),
    EndContainer(),
    NWidget(NWID_SPACER), SetMinimalSize(0, 3),
  EndContainer(),
}

Nested widget definition of the build rail depot window.

Definition at line 1671 of file rail_gui.cpp.

Initial value:
 {
  NWidget(NWID_HORIZONTAL),
    NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN),
    NWidget(WWT_CAPTION, COLOUR_DARK_GREEN), SetDataTip(STR_WAYPOINT_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
  EndContainer(),
  NWidget(NWID_HORIZONTAL),
    NWidget(NWID_MATRIX, COLOUR_DARK_GREEN, WID_BRW_WAYPOINT_MATRIX), SetPIP(3, 2, 3), SetScrollbar(WID_BRW_SCROLL),
      NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BRW_WAYPOINT), SetMinimalSize(66, 60), SetDataTip(0x0, STR_WAYPOINT_GRAPHICS_TOOLTIP), EndContainer(),
    EndContainer(),
    NWidget(NWID_VERTICAL),
      NWidget(NWID_VSCROLLBAR, COLOUR_DARK_GREEN, WID_BRW_SCROLL),
      NWidget(WWT_RESIZEBOX, COLOUR_DARK_GREEN),
    EndContainer(),
  EndContainer(),
}

Nested widget definition for the build NewGRF rail waypoint window.

Definition at line 1778 of file rail_gui.cpp.

Initial value:
 {
  DIAGDIR_SE, DIAGDIR_SW, DIAGDIR_SE, DIAGDIR_SW,
  DIAGDIR_SW, DIAGDIR_NW, DIAGDIR_NE, DIAGDIR_SE,
  DIAGDIR_NW, DIAGDIR_NE, DIAGDIR_NW, DIAGDIR_NE,
}

Direction to check for existing track pieces.

Definition at line 123 of file rail_gui.cpp.

const Track _place_depot_extra_track[12] [static]
Initial value:
 {
  TRACK_LEFT,  TRACK_UPPER, TRACK_UPPER, TRACK_RIGHT, 
  TRACK_X,     TRACK_Y,     TRACK_X,     TRACK_Y,     
  TRACK_LOWER, TRACK_LEFT,  TRACK_RIGHT, TRACK_LOWER, 
}

Additional pieces of track to add at the entrance of a depot.

Definition at line 116 of file rail_gui.cpp.