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.
Window * | ShowBuildRailToolbar (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.
DropDownList * | GetRailTypeDropDownList (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_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]`

The "remove"-button click proc of the build-rail toolbar.

Parameters:

  | w | Build-rail toolbar window

See also:
  BuildRailToolbarWindow::OnClick()

Definition at line 320 of file rail_gui.cpp.

References _remove_button_clicked, _settings_client, _settings_game, SoundSettings::click_beep, ClientSettings::gui, Window::IsWidgetDisabled(), Window::IsWidgetLowered(), RailStationGUISettings::orientation, SetTileSelectSize(), ClientSettings::sound, GameSettings::station, GUISettings::station_dragdrop, GUISettings::station_numtracks, GUISettings::station_platlength, StationSettings::station_spread, Swap(), ToggleRailButton_Remove(), WID_RAT_BUILD_STATION, and WID_RAT_REMOVE.

Referenced by BuildRailToolbarWindow::OnClick().

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 1908 of file rail_gui.cpp.

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

Referenced by GetRailTypeDropDownList().

static void GenericPlaceSignals | ( | TileIndex | tile | ) | `[static]`

Build a new signal or edit/remove a present signal, use CmdBuildSingleSignal() or CmdRemoveSingleSignal() in rail_cmd.cpp.

Parameters:

  | tile | The tile where the signal will build or edit

Definition at line 208 of file rail_gui.cpp.

References _convert_signal_button, _ctrl_pressed, _cur_signal_type, _cur_signal_variant, _cur_year, _remove_button_clicked, _settings_client, CMD_BUILD_SIGNALS, CMD_MSG, CMD_REMOVE_SIGNALS, GUISettings::cycle_signal_types, GUISettings::default_signal_type, DoCommandP(), FindFirstTrack(), FindWindowById(), GetTileTrackStatus(), ClientSettings::gui, SB(), GUISettings::semaphore_build_before, SIG_ELECTRIC, SIG_SEMAPHORE, SIGTYPE_NORMAL, SIGTYPE_PBS, TRACK_BIT_HORZ, TRACK_BIT_LEFT, TRACK_BIT_LOWER, TRACK_BIT_RIGHT, TRACK_BIT_UPPER, TRACK_BIT_VERT, TrackStatusToTrackBits(), TRANSPORT_RAIL, and WC_BUILD_SIGNAL.

Referenced by HandleAutoSignalPlacement().

DropDownList* GetRailTypeDropDownList | ( | bool | for_replacement | ) |

Create a drop down list for all the rail types of the local company.

Parameters:

  | for_replacement | Whether this list is for the replacement window.

Returns:
  The populated and sorted DropDownList.

Definition at line 1918 of file rail_gui.cpp.

References _local_company, _settings_game, AddDateIntroducedRailTypes(), CompanyProperties::avail_railtypes, EngineInfo::climates, CompareRailTypes(), GameSettings::game_creation, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), GetRailTypeInfo(), HasBit(), RailtypeInfo::introduces_railtypes, RailtypeInfo::label, GameCreationSettings::landscape, MAX_DAY, RailtypeInfo::max_speed, RAILTYPE_BEGIN, and VEH_TRAIN.

Referenced by ReplaceVehicleWindow::OnClick().

static void HandleAutoSignalPlacement | ( |  | ) | `[static]`

Build new signals or remove signals or (if only one tile marked) edit a signal.

If one tile marked abort and use GenericPlaceSignals() else use CmdBuildSingleSignal() or CmdRemoveSingleSignal() in rail_cmd.cpp to build many signals

Definition at line 375 of file rail_gui.cpp.

References _ctrl_pressed, _cur_signal_type, _cur_signal_variant, _cur_year, _remove_button_clicked, _settings_client, CMD_BUILD_SIGNAL_TRACK, CMD_MSG, CMD_REMOVE_SIGNAL_TRACK, GUISettings::default_signal_type, DoCommandP(), GUISettings::drag_signals_density, GUISettings::drag_signals_fixed_distance, TileHighlightData::drawstyle, FindWindowById(), GB(), GenericPlaceSignals(), ClientSettings::gui, HT_DRAG_MASK, HT_RECT, SB(), TileHighlightData::selend, TileHighlightData::selstart, GUISettings::semaphore_build_before, SIG_ELECTRIC, SIG_SEMAPHORE, TileVirtXY(), and WC_BUILD_SIGNAL.

Referenced by BuildRailToolbarWindow::OnPlaceMouseUp().

static bool IsStationAvailable | ( | const StationSpec * | statspec | ) | `[static]`

Check whether a station type can be build.

Returns:
  true if building is allowed.

Definition at line 76 of file rail_gui.cpp.

References CALLBACK_FAILED, StationSpec::callback_mask, CBID_STATION_AVAILABILITY, CBM_STATION_AVAIL, Convert8bitBooleanCallback(), StationSpec::grf_prop, GRFFilePropsBase< Tcnt >::grffile, HasBit(), and INVALID_TILE.

Referenced by BuildRailWaypointWindow::DrawWidget(), BuildRailStationWindow::DrawWidget(), BuildRailWaypointWindow::OnClick(), and BuildRailStationWindow::OnClick().

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]`

Place a rail station.

Parameters:

  | tile | Position to place or start dragging a station.

Definition at line 182 of file rail_gui.cpp.

References _ctrl_pressed, _cur_railtype, _remove_button_clicked, _settings_client, _settings_game, CMD_BUILD_RAIL_STATION, CMD_MSG, DDSP_BUILD_STATION, DDSP_REMOVE_STATION, ClientSettings::gui, RailStationGUISettings::orientation, ShowSelectStationIfNeeded(), GameSettings::station, RailStationGUISettings::station_class, GUISettings::station_dragdrop, GUISettings::station_numtracks, GUISettings::station_platlength, StationSettings::station_spread, RailStationGUISettings::station_type, Swap(), VPM_X_AND_Y_LIMITED, and VpStartPlaceSizing().

Referenced by BuildRailToolbarWindow::OnPlaceObject().

static void PlaceRail_Waypoint | ( | TileIndex | tile | ) | `[static]`

Place a rail waypoint.

Parameters:

  | tile | Position to start dragging a waypoint.

Definition at line 151 of file rail_gui.cpp.

References _remove_button_clicked, AXIS_X, CMD_BUILD_RAIL_WAYPOINT, CMD_MSG, DDSP_BUILD_STATION, DDSP_REMOVE_STATION, DoCommandP(), GetAxisForNewWaypoint(), IsValidAxis(), STAT_CLASS_WAYP, VPM_FIX_X, VPM_FIX_Y, VPM_X_AND_Y, and VpStartPlaceSizing().

Referenced by BuildRailToolbarWindow::OnPlaceObject().

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 button 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 1811 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 1873 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

const NWidgetPart _nested_build_depot_widgets[]`[static]`

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 1664 of file rail_gui.cpp.

const NWidgetPart _nested_build_waypoint_widgets[]`[static]`

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), SetScrollbar(WID_BRW_SCROLL), 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 1771 of file rail_gui.cpp.

const DiagDirection _place_depot_extra_dir[12]`[static]`

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.