# road_gui.cpp File Reference

GUI for building roads. 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 "road_cmd.h"`
`#include "station_func.h"`
`#include "window_func.h"`
`#include "vehicle_func.h"`
`#include "sound_func.h"`
`#include "company_func.h"`
`#include "tunnelbridge.h"`
`#include "tunnelbridge_map.h"`
`#include "tilehighlight_func.h"`
`#include "company_base.h"`
`#include "hotkeys.h"`
`#include "road_gui.h"`
`#include "table/strings.h"`

Go to the source code of this file.

## Data Structures
struct | RoadTypeInfo
| Structure holding information per roadtype for several functions. More...
struct | BuildRoadToolbarWindow
| Road toolbar window handler. More...
struct | BuildRoadDepotWindow
struct | BuildRoadStationWindow
## Typedefs
typedef void | OnButtonClick (Window *w)
## Enumerations
enum | RoadFlags { RF_NONE = 0x00, RF_START_HALFROAD_Y = 0x01, RF_END_HALFROAD_Y = 0x02, RF_DIR_Y = 0x04, RF_DIR_X = RF_NONE, RF_START_HALFROAD_X = 0x08, RF_END_HALFROAD_X = 0x10 }
| Define the values of the RoadFlags. More...
enum | RoadToolbarWidgets { RTW_ROAD_X, RTW_ROAD_Y, RTW_AUTOROAD, RTW_DEMOLISH, RTW_DEPOT, RTW_BUS_STATION, RTW_TRUCK_STATION, RTW_ONE_WAY, RTW_BUILD_BRIDGE, RTW_BUILD_TUNNEL, RTW_REMOVE }
| Enum referring to the widgets of the build road toolbar.
enum | BuildRoadDepotWidgets { BRDW_CAPTION, BRDW_DEPOT_NE, BRDW_DEPOT_SE, BRDW_DEPOT_SW, BRDW_DEPOT_NW }
| Enum referring to the widgets of the build road depot window.
enum | BuildRoadStationWidgets { BRSW_CAPTION, BRSW_BACKGROUND, BRSW_STATION_NE, BRSW_STATION_SE, BRSW_STATION_SW, BRSW_STATION_NW, BRSW_STATION_X, BRSW_STATION_Y, BRSW_LT_OFF, BRSW_LT_ON, BRSW_INFO }
| Enum referring to the widgets of the build road station window.
## Functions
static void | ShowRVStationPicker (Window *parent, RoadStopType rs)
static void | ShowRoadDepotPicker (Window *parent)
void | CcPlaySound1D (const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
static void | PlaceRoad_Bridge (TileIndex tile, Window *w)
| Callback to start placing a bridge.
void | CcBuildRoadTunnel (const CommandCost &result, TileIndex start_tile, uint32 p1, uint32 p2)
| Callback executed after a build road tunnel command has been called.
void | ConnectRoadToStructure (TileIndex tile, DiagDirection direction)
| If required, connects a new structure to an existing road or tram by building the missing roadbit.
void | CcRoadDepot (const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
void | CcRoadStop (const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
| Command callback for building road stops.
static void | PlaceRoadStop (TileIndex start_tile, TileIndex end_tile, uint32 p2, uint32 cmd)
| Place a new road stop.
static void | PlaceRoad_BusStation (TileIndex tile)
| Callback for placing a bus station.
static void | PlaceRoad_TruckStation (TileIndex tile)
| Callback for placing a truck station.
static void | ToggleRoadButton_Remove (Window *w)
| Toogles state of the Remove button of Build road toolbar.
static bool | RoadToolbar_CtrlChanged (Window *w)
| Updates the Remove button because of Ctrl state change.
Window * | ShowBuildRoadToolbar (RoadType roadtype)
| Open the build road toolbar window.
EventState | RoadToolbarGlobalHotkeys (uint16 key, uint16 keycode)
Window * | ShowBuildRoadScenToolbar ()
EventState | RoadToolbarEditorGlobalHotkeys (uint16 key, uint16 keycode)
void | InitializeRoadGui ()
## Variables
static bool | _remove_button_clicked
static bool | _one_way_button_clicked
static RoadFlags | _place_road_flag
static RoadType | _cur_roadtype
static DiagDirection | _road_depot_orientation
static DiagDirection | _road_station_picker_orientation
static const RoadTypeInfo | _road_type_infos []
| What errors/cursors must be shown for several types of roads.
Hotkey< BuildRoadToolbarWindow > * | _roadtoolbar_hotkeys = BuildRoadToolbarWindow::roadtoolbar_hotkeys
static const NWidgetPart | _nested_build_road_widgets []
static const WindowDesc | _build_road_desc (WDP_ALIGN_TOOLBAR, 0, 0, WC_BUILD_TOOLBAR, WC_NONE, WDF_CONSTRUCTION, _nested_build_road_widgets, lengthof(_nested_build_road_widgets))
static const NWidgetPart | _nested_build_tramway_widgets []
static const WindowDesc | _build_tramway_desc (WDP_ALIGN_TOOLBAR, 0, 0, WC_BUILD_TOOLBAR, WC_NONE, WDF_CONSTRUCTION, _nested_build_tramway_widgets, lengthof(_nested_build_tramway_widgets))
static const NWidgetPart | _nested_build_road_scen_widgets []
static const WindowDesc | _build_road_scen_desc (WDP_AUTO, 0, 0, WC_SCEN_BUILD_TOOLBAR, WC_NONE, WDF_CONSTRUCTION, _nested_build_road_scen_widgets, lengthof(_nested_build_road_scen_widgets))
static const NWidgetPart | _nested_build_road_depot_widgets []
static const WindowDesc | _build_road_depot_desc (WDP_AUTO, 0, 0, WC_BUILD_DEPOT, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, _nested_build_road_depot_widgets, lengthof(_nested_build_road_depot_widgets))
static const NWidgetPart | _nested_rv_station_picker_widgets []
| Widget definition of the build road station window.
static const WindowDesc | _rv_station_picker_desc (WDP_AUTO, 0, 0, WC_BUS_STATION, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, _nested_rv_station_picker_widgets, lengthof(_nested_rv_station_picker_widgets))

## Detailed Description

GUI for building roads.

Definition in file road_gui.cpp.

## Enumeration Type Documentation

enum RoadFlags

Define the values of the RoadFlags.

See also:
  CmdBuildLongRoad

Definition at line 44 of file road_gui.cpp.

## Function Documentation

void CcBuildRoadTunnel | ( | const CommandCost & | result,
|  | TileIndex | start_tile,
|  | uint32 | p1,
|  | uint32 | p2 |
| ) |  |  |

Callback executed after a build road tunnel command has been called.

Parameters:

  | result | Whether the build succeeded.
  | start_tile | Starting tile of the tunnel.
  | p1 | bit 0-3 railtype or roadtypes bit 8-9 transport type
  | p2 | unused

Definition at line 91 of file road_gui.cpp.

References _settings_client, ConnectRoadToStructure(), GetOtherTunnelBridgeEnd(), GetTunnelBridgeDirection(), ClientSettings::gui, GUISettings::persistent_buildingtools, ReverseDiagDir(), SetRedErrorSquare(), and CommandCost::Succeeded().

Referenced by BuildRoadToolbarWindow::OnPlaceObject().

void CcRoadStop | ( | const CommandCost & | result,
|  | TileIndex | tile,
|  | uint32 | p1,
|  | uint32 | p2 |
| ) |  |  |

Command callback for building road stops.

Parameters:

  | result | Result of the build road stop command.
  | tile | Start tile.
  | p1 | bit 0..7: Width of the road stop. bit 8..15: Length of the road stop.
  | p2 | bit 0: 0 For bus stops, 1 for truck stops. bit 1: 0 For normal stops, 1 for drive-through. bit 2..3: The roadtypes. bit 5: Allow stations directly adjacent to other stations. bit 6..7: Entrance direction (DiagDirection). bit 16..31: Station ID to join (NEW_STATION if build new one).

See also:
  CmdBuildRoadStop

Definition at line 194 of file road_gui.cpp.

References _settings_client, ConnectRoadToStructure(), CommandCost::Failed(), GB(), ClientSettings::gui, HasBit(), GUISettings::persistent_buildingtools, ReverseDiagDir(), and TILE_AREA_LOOP.

Referenced by PlaceRoadStop().

void ConnectRoadToStructure | ( | TileIndex | tile,
|  | DiagDirection | direction |
| ) |  |  |

If required, connects a new structure to an existing road or tram by building the missing roadbit.

Parameters:

  | tile | Tile containing the structure to connect.
  | direction | Direction to check.

Definition at line 159 of file road_gui.cpp.

References CMD_BUILD_ROAD, DiagDirToRoadBits(), DoCommandP(), GetRoadBits(), IsNormalRoadTile(), ReverseDiagDir(), ROAD_NONE, and TileOffsByDiagDir().

Referenced by CcBuildBridge(), CcBuildRoadTunnel(), and CcRoadStop().

static void PlaceRoad_Bridge | ( | TileIndex | tile,
|  | Window * | w |
| ) |  |  | `[static]`

Callback to start placing a bridge.

Parameters:

  | tile | Start tile of the bridge.

Definition at line 71 of file road_gui.cpp.

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

Referenced by BuildRoadToolbarWindow::OnPlaceObject().

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

Callback for placing a bus station.

Parameters:

  | tile | Position to place the station.

Definition at line 239 of file road_gui.cpp.

References _remove_button_clicked, _settings_game, AXIS_X, DDSP_BUILD_BUSSTOP, DDSP_REMOVE_BUSSTOP, DIAGDIR_END, DiagDirToAxis(), GameSettings::station, StationSettings::station_spread, VPM_X_AND_Y, VPM_X_AND_Y_LIMITED, VPM_X_LIMITED, VPM_Y_LIMITED, and VpStartPlaceSizing().

Referenced by BuildRoadToolbarWindow::OnPlaceObject().

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

Callback for placing a truck station.

Parameters:

  | tile | Position to place the station.

Definition at line 257 of file road_gui.cpp.

References _remove_button_clicked, _settings_game, AXIS_X, DDSP_BUILD_TRUCKSTOP, DDSP_REMOVE_TRUCKSTOP, DIAGDIR_END, DiagDirToAxis(), GameSettings::station, StationSettings::station_spread, VPM_X_AND_Y, VPM_X_AND_Y_LIMITED, VPM_X_LIMITED, VPM_Y_LIMITED, and VpStartPlaceSizing().

Referenced by BuildRoadToolbarWindow::OnPlaceObject().

static void PlaceRoadStop | ( | TileIndex | start_tile,
|  | TileIndex | end_tile,
|  | uint32 | p2,
|  | uint32 | cmd |
| ) |  |  | `[static]`

Place a new road stop.

Parameters:

  | start_tile | First tile of the area.
  | end_tile | Last tile of the area.
  | p2 | bit 0: 0 For bus stops, 1 for truck stops. bit 2..3: The roadtypes. bit 5: Allow stations directly adjacent to other stations.
  | cmd | Command to use.

See also:
  CcRoadStop()

Definition at line 219 of file road_gui.cpp.

References CcRoadStop(), DIAGDIR_END, TileArea::h, SB(), SetBit(), ShowSelectStationIfNeeded(), TileArea::tile, and TileArea::w.

Referenced by BuildRoadToolbarWindow::OnPlaceMouseUp().

static bool RoadToolbar_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 306 of file road_gui.cpp.

References Window::IsWidgetDisabled(), Window::IsWidgetLowered(), and ToggleRoadButton_Remove().

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

Window* ShowBuildRoadToolbar | ( | RoadType | roadtype | ) | `[read]`

Open the build road toolbar window.

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

Returns:
  newly opened road toolbar, or NULL if the toolbar could not be opened.

Definition at line 783 of file road_gui.cpp.

References _local_company, DeleteWindowByClass(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tcache, Tzero >::PoolItem<&_company_pool >::IsValidID(), ROADTYPE_ROAD, and TRANSPORT_ROAD.

Referenced by MainToolbarWindow::OnKeyPress().

static void ToggleRoadButton_Remove | ( | Window * | w | ) | `[static]`

Toogles state of the Remove button of Build road toolbar.

Parameters:

  | w | window the button belongs to

Definition at line 293 of file road_gui.cpp.

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

Referenced by BuildRoadToolbarWindow::OnClick(), and RoadToolbar_CtrlChanged().

## Variable Documentation

const NWidgetPart _nested_build_road_depot_widgets[]`[static]`

Initial value:

     {
      NWidget(NWID_HORIZONTAL),
        NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN),
        NWidget(WWT_CAPTION, COLOUR_DARK_GREEN, BRDW_CAPTION), SetDataTip(STR_BUILD_DEPOT_ROAD_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, BRDW_DEPOT_NW), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP),
            EndContainer(),
            NWidget(NWID_SPACER), SetMinimalSize(0, 2),
            NWidget(WWT_PANEL, COLOUR_GREY, BRDW_DEPOT_SW), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP),
            EndContainer(),
          EndContainer(),
          NWidget(NWID_SPACER), SetMinimalSize(2, 0),
          NWidget(NWID_VERTICAL),
            NWidget(WWT_PANEL, COLOUR_GREY, BRDW_DEPOT_NE), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP),
            EndContainer(),
            NWidget(NWID_SPACER), SetMinimalSize(0, 2),
            NWidget(WWT_PANEL, COLOUR_GREY, BRDW_DEPOT_SE), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP),
            EndContainer(),
          EndContainer(),
          NWidget(NWID_SPACER), SetMinimalSize(3, 0), SetFill(1, 0),
        EndContainer(),
        NWidget(NWID_SPACER), SetMinimalSize(0, 3),
      EndContainer(),
    }

Definition at line 901 of file road_gui.cpp.

const NWidgetPart _nested_build_road_scen_widgets[]`[static]`

Initial value:

     {
      NWidget(NWID_HORIZONTAL),
        NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN),
        NWidget(WWT_CAPTION, COLOUR_DARK_GREEN), SetDataTip(STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
        NWidget(WWT_STICKYBOX, COLOUR_DARK_GREEN),
      EndContainer(),
      NWidget(NWID_HORIZONTAL),
        NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, RTW_ROAD_X),
                SetFill(0, 1), SetMinimalSize(22, 22), SetDataTip(SPR_IMG_ROAD_X_DIR, STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION),
        NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, RTW_ROAD_Y),
                SetFill(0, 1), SetMinimalSize(22, 22), SetDataTip(SPR_IMG_ROAD_Y_DIR, STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION),
        NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, RTW_AUTOROAD),
                SetFill(0, 1), SetMinimalSize(22, 22), SetDataTip(SPR_IMG_AUTOROAD, STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD),
        NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, RTW_DEMOLISH),
                SetFill(0, 1), SetMinimalSize(22, 22), SetDataTip(SPR_IMG_DYNAMITE, STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC),
        NWidget(WWT_PANEL, COLOUR_DARK_GREEN, -1), SetMinimalSize(0, 22), SetFill(1, 1), EndContainer(),
        NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, RTW_ONE_WAY),
                SetFill(0, 1), SetMinimalSize(22, 22), SetDataTip(SPR_IMG_ROAD_ONE_WAY, STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD),
        NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, RTW_BUILD_BRIDGE),
                SetFill(0, 1), SetMinimalSize(43, 22), SetDataTip(SPR_IMG_BRIDGE, STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE),
        NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, RTW_BUILD_TUNNEL),
                SetFill(0, 1), SetMinimalSize(22, 22), SetDataTip(SPR_IMG_ROAD_TUNNEL, STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL),
        NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, RTW_REMOVE),
                SetFill(0, 1), SetMinimalSize(22, 22), SetDataTip(SPR_IMG_REMOVE, STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD),
      EndContainer(),
    }

Definition at line 802 of file road_gui.cpp.

const RoadTypeInfo _road_type_infos[]`[static]`

Initial value:

     {
      {
        STR_ERROR_CAN_T_BUILD_ROAD_HERE,
        STR_ERROR_CAN_T_REMOVE_ROAD_FROM,
        STR_ERROR_CAN_T_BUILD_ROAD_DEPOT,
        { STR_ERROR_CAN_T_BUILD_BUS_STATION,         STR_ERROR_CAN_T_BUILD_TRUCK_STATION          },
        { STR_ERROR_CAN_T_REMOVE_BUS_STATION,        STR_ERROR_CAN_T_REMOVE_TRUCK_STATION         },
        { STR_STATION_BUILD_BUS_ORIENTATION,         STR_STATION_BUILD_TRUCK_ORIENTATION          },
        { STR_STATION_BUILD_BUS_ORIENTATION_TOOLTIP, STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP  },

        SPR_CURSOR_ROAD_NESW,
        SPR_CURSOR_ROAD_NWSE,
        SPR_CURSOR_AUTOROAD,
      },
      {
        STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE,
        STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM,
        STR_ERROR_CAN_T_BUILD_TRAM_DEPOT,
        { STR_ERROR_CAN_T_BUILD_PASSENGER_TRAM_STATION,         STR_ERROR_CAN_T_BUILD_CARGO_TRAM_STATION         },
        { STR_ERROR_CAN_T_REMOVE_PASSENGER_TRAM_STATION,        STR_ERROR_CAN_T_REMOVE_CARGO_TRAM_STATION        },
        { STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION,         STR_STATION_BUILD_CARGO_TRAM_ORIENTATION         },
        { STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP, STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP },

        SPR_CURSOR_TRAMWAY_NESW,
        SPR_CURSOR_TRAMWAY_NWSE,
        SPR_CURSOR_AUTOTRAM,
      },
    }

What errors/cursors must be shown for several types of roads.

Definition at line 125 of file road_gui.cpp.