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.
WindowShowBuildRoadToolbar (RoadType roadtype)
 Open the build road toolbar window.
EventState RoadToolbarGlobalHotkeys (uint16 key, uint16 keycode)
WindowShowBuildRoadScenToolbar ()
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]
static void PlaceRoad_TruckStation ( TileIndex  tile  )  [static]
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.


Generated on Sun May 15 19:20:26 2011 for OpenTTD by  doxygen 1.6.1