diff -r 5a8b295aa345 -r 4cc327ad39d5 src/road_gui.cpp --- a/src/road_gui.cpp Tue Mar 27 23:27:27 2007 +0000 +++ b/src/road_gui.cpp Sat Jun 02 19:59:29 2007 +0000 @@ -1,9 +1,9 @@ /* $Id$ */ +/** @file road_gui.cpp */ + #include "stdafx.h" #include "openttd.h" -#include "road_cmd.h" -#include "road_map.h" #include "table/sprites.h" #include "table/strings.h" #include "functions.h" @@ -16,19 +16,23 @@ #include "sound.h" #include "command.h" #include "variables.h" +#include "road.h" +#include "road_cmd.h" +#include "road_map.h" #include "station_map.h" //needed for catchments #include "station.h" -static void ShowBusStationPicker(); -static void ShowTruckStationPicker(); +static void ShowRVStationPicker(RoadStop::Type rs); static void ShowRoadDepotPicker(); static bool _remove_button_clicked; static byte _place_road_flag; +static RoadType _cur_roadtype; + static DiagDirection _road_depot_orientation; static DiagDirection _road_station_picker_orientation; @@ -40,18 +44,18 @@ static void PlaceRoad_NE(TileIndex tile) { _place_road_flag = (_tile_fract_coords.y >= 8) + 4; - VpStartPlaceSizing(tile, VPM_FIX_X); + VpStartPlaceSizing(tile, VPM_FIX_X, DDSP_PLACE_ROAD_NE); } static void PlaceRoad_NW(TileIndex tile) { _place_road_flag = (_tile_fract_coords.x >= 8) + 0; - VpStartPlaceSizing(tile, VPM_FIX_Y); + VpStartPlaceSizing(tile, VPM_FIX_Y, DDSP_PLACE_ROAD_NW); } static void PlaceRoad_Bridge(TileIndex tile) { - VpStartPlaceSizing(tile, VPM_X_OR_Y); + VpStartPlaceSizing(tile, VPM_X_OR_Y, DDSP_BUILD_BRIDGE); } @@ -65,9 +69,52 @@ } } +/** Structure holding information per roadtype for several functions */ +struct RoadTypeInfo { + StringID err_build_road; ///< Building a normal piece of road + StringID err_remove_road; ///< Removing a normal piece of road + StringID err_depot; ///< Building a depot + StringID err_build_station[2]; ///< Building a bus or truck station + StringID err_remove_station[2]; ///< Removing of a bus or truck station + + StringID picker_title[2]; ///< Title for the station picker for bus or truck stations + StringID picker_tooltip[2]; ///< Tooltip for the station picker for bus or truck stations + + SpriteID cursor_nesw; ///< Cursor for building NE and SW bits + SpriteID cursor_nwse; ///< Cursor for building NW and SE bits +}; + +/** What errors/cursors must be shown for several types of roads */ +static const RoadTypeInfo _road_type_infos[] = { + { + STR_1804_CAN_T_BUILD_ROAD_HERE, + STR_1805_CAN_T_REMOVE_ROAD_FROM, + STR_1807_CAN_T_BUILD_ROAD_VEHICLE, + { STR_1808_CAN_T_BUILD_BUS_STATION, STR_1809_CAN_T_BUILD_TRUCK_STATION }, + { STR_CAN_T_REMOVE_BUS_STATION, STR_CAN_T_REMOVE_TRUCK_STATION }, + { STR_3042_BUS_STATION_ORIENTATION, STR_3043_TRUCK_STATION_ORIENT }, + { STR_3051_SELECT_BUS_STATION_ORIENTATION, STR_3052_SELECT_TRUCK_LOADING_BAY }, + + SPR_CURSOR_ROAD_NESW, + SPR_CURSOR_ROAD_NWSE, + }, + { + STR_1804_CAN_T_BUILD_TRAMWAY_HERE, + STR_1805_CAN_T_REMOVE_TRAMWAY_FROM, + STR_1807_CAN_T_BUILD_TRAM_VEHICLE, + { STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION, STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION }, + { STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION, STR_CAN_T_REMOVE_CARGO_TRAM_STATION }, + { STR_3042_PASSENGER_TRAM_STATION_ORIENTATION, STR_3043_CARGO_TRAM_STATION_ORIENT }, + { STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION, STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION }, + + SPR_CURSOR_TRAMWAY_NESW, + SPR_CURSOR_TRAMWAY_NWSE, + }, +}; + static void PlaceRoad_Tunnel(TileIndex tile) { - DoCommandP(tile, 0x200, 0, CcBuildRoadTunnel, CMD_BUILD_TUNNEL | CMD_AUTO | CMD_MSG(STR_5016_CAN_T_BUILD_TUNNEL_HERE)); + DoCommandP(tile, 0x200 | RoadTypeToRoadTypes(_cur_roadtype), 0, CcBuildRoadTunnel, CMD_BUILD_TUNNEL | CMD_AUTO | CMD_MSG(STR_5016_CAN_T_BUILD_TUNNEL_HERE)); } static void BuildRoadOutsideStation(TileIndex tile, DiagDirection direction) @@ -75,24 +122,27 @@ tile += TileOffsByDiagDir(direction); // if there is a roadpiece just outside of the station entrance, build a connecting route if (IsTileType(tile, MP_STREET) && GetRoadTileType(tile) == ROAD_TILE_NORMAL) { - DoCommandP(tile, DiagDirToRoadBits(ReverseDiagDir(direction)), 0, NULL, CMD_BUILD_ROAD); + if (GetRoadBits(tile, _cur_roadtype) != ROAD_NONE) { + DoCommandP(tile, _cur_roadtype << 4 | DiagDirToRoadBits(ReverseDiagDir(direction)), 0, NULL, CMD_BUILD_ROAD); + } } } void CcRoadDepot(bool success, TileIndex tile, uint32 p1, uint32 p2) { if (success) { + DiagDirection dir = (DiagDirection)GB(p1, 0, 2); SndPlayTileFx(SND_1F_SPLAT, tile); ResetObjectToPlace(); - BuildRoadOutsideStation(tile, (DiagDirection)p1); + BuildRoadOutsideStation(tile, dir); /* For a drive-through road stop build connecting road for other entrance */ - if (HASBIT(p2, 1)) BuildRoadOutsideStation(tile, ReverseDiagDir((DiagDirection)p1)); + if (HASBIT(p2, 1)) BuildRoadOutsideStation(tile, ReverseDiagDir(dir)); } } static void PlaceRoad_Depot(TileIndex tile) { - DoCommandP(tile, _road_depot_orientation, 0, CcRoadDepot, CMD_BUILD_ROAD_DEPOT | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1807_CAN_T_BUILD_ROAD_VEHICLE)); + DoCommandP(tile, _cur_roadtype << 2 | _road_depot_orientation, 0, CcRoadDepot, CMD_BUILD_ROAD_DEPOT | CMD_AUTO | CMD_NO_WATER | CMD_MSG(_road_type_infos[_cur_roadtype].err_depot)); } static void PlaceRoadStop(TileIndex tile, uint32 p2, uint32 cmd) @@ -109,24 +159,24 @@ static void PlaceRoad_BusStation(TileIndex tile) { if (_remove_button_clicked) { - DoCommandP(tile, 0, RoadStop::BUS, CcPlaySound1D, CMD_REMOVE_ROAD_STOP | CMD_MSG(STR_CAN_T_REMOVE_BUS_STATION)); + DoCommandP(tile, 0, RoadStop::BUS, CcPlaySound1D, CMD_REMOVE_ROAD_STOP | CMD_MSG(_road_type_infos[_cur_roadtype].err_remove_station[RoadStop::BUS])); } else { - PlaceRoadStop(tile, RoadStop::BUS, CMD_BUILD_ROAD_STOP | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1808_CAN_T_BUILD_BUS_STATION)); + PlaceRoadStop(tile, (_ctrl_pressed << 5) | RoadTypeToRoadTypes(_cur_roadtype) << 2 | RoadStop::BUS, CMD_BUILD_ROAD_STOP | CMD_AUTO | CMD_NO_WATER | CMD_MSG(_road_type_infos[_cur_roadtype].err_build_station[RoadStop::BUS])); } } static void PlaceRoad_TruckStation(TileIndex tile) { if (_remove_button_clicked) { - DoCommandP(tile, 0, RoadStop::TRUCK, CcPlaySound1D, CMD_REMOVE_ROAD_STOP | CMD_MSG(STR_CAN_T_REMOVE_TRUCK_STATION)); + DoCommandP(tile, 0, RoadStop::TRUCK, CcPlaySound1D, CMD_REMOVE_ROAD_STOP | CMD_MSG(_road_type_infos[_cur_roadtype].err_build_station[RoadStop::TRUCK])); } else { - PlaceRoadStop(tile, RoadStop::TRUCK, CMD_BUILD_ROAD_STOP | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1809_CAN_T_BUILD_TRUCK_STATION)); + PlaceRoadStop(tile, (_ctrl_pressed << 5) | RoadTypeToRoadTypes(_cur_roadtype) << 2 | RoadStop::TRUCK, CMD_BUILD_ROAD_STOP | CMD_AUTO | CMD_NO_WATER | CMD_MSG(_road_type_infos[_cur_roadtype].err_build_station[RoadStop::TRUCK])); } } static void PlaceRoad_DemolishArea(TileIndex tile) { - VpStartPlaceSizing(tile, 4); + VpStartPlaceSizing(tile, VPM_X_AND_Y, DDSP_DEMOLISH_AREA); } @@ -147,12 +197,12 @@ static void BuildRoadClick_NE(Window *w) { - HandlePlacePushButton(w, RTW_ROAD_X, SPR_CURSOR_ROAD_NESW, 1, PlaceRoad_NE); + HandlePlacePushButton(w, RTW_ROAD_X, _road_type_infos[_cur_roadtype].cursor_nesw, 1, PlaceRoad_NE); } static void BuildRoadClick_NW(Window *w) { - HandlePlacePushButton(w, RTW_ROAD_Y, SPR_CURSOR_ROAD_NWSE, 1, PlaceRoad_NW); + HandlePlacePushButton(w, RTW_ROAD_Y, _road_type_infos[_cur_roadtype].cursor_nwse, 1, PlaceRoad_NW); } @@ -170,13 +220,13 @@ static void BuildRoadClick_BusStation(Window *w) { if (_game_mode == GM_EDITOR) return; - if (HandlePlacePushButton(w, RTW_BUS_STATION, SPR_CURSOR_BUS_STATION, 1, PlaceRoad_BusStation)) ShowBusStationPicker(); + if (HandlePlacePushButton(w, RTW_BUS_STATION, SPR_CURSOR_BUS_STATION, 1, PlaceRoad_BusStation)) ShowRVStationPicker(RoadStop::BUS); } static void BuildRoadClick_TruckStation(Window *w) { if (_game_mode == GM_EDITOR) return; - if (HandlePlacePushButton(w, RTW_TRUCK_STATION, SPR_CURSOR_TRUCK_STATION, 1, PlaceRoad_TruckStation)) ShowTruckStationPicker(); + if (HandlePlacePushButton(w, RTW_TRUCK_STATION, SPR_CURSOR_TRUCK_STATION, 1, PlaceRoad_TruckStation)) ShowRVStationPicker(RoadStop::TRUCK); } static void BuildRoadClick_Bridge(Window *w) @@ -225,7 +275,7 @@ case WE_CLICK: { if (e->we.click.widget >= 3) _build_road_button_proc[e->we.click.widget - 3](w); - } break; + } break; case WE_KEYPRESS: switch (e->we.keypress.keycode) { @@ -255,54 +305,49 @@ InvalidateWidget(w, RTW_REMOVE); w = FindWindowById(WC_BUS_STATION, 0); - if (w != NULL) WP(w,def_d).close = true; + if (w != NULL) WP(w, def_d).close = true; w = FindWindowById(WC_TRUCK_STATION, 0); - if (w != NULL) WP(w,def_d).close = true; + if (w != NULL) WP(w, def_d).close = true; w = FindWindowById(WC_BUILD_DEPOT, 0); - if (w != NULL) WP(w,def_d).close = true; + if (w != NULL) WP(w, def_d).close = true; break; - case WE_PLACE_DRAG: { - int sel_method; - switch (e->we.place.userdata) { - case 1: - sel_method = VPM_FIX_X; + case WE_PLACE_DRAG: + switch (e->we.place.select_proc) { + case DDSP_PLACE_ROAD_NE: _place_road_flag = (_place_road_flag & ~2) | ((e->we.place.pt.y & 8) >> 2); break; - case 2: - sel_method = VPM_FIX_Y; + case DDSP_PLACE_ROAD_NW: _place_road_flag = (_place_road_flag & ~2) | ((e->we.place.pt.x & 8) >> 2); break; - - case 4: - sel_method = VPM_X_AND_Y; - break; - - default: - sel_method = VPM_X_OR_Y; - break; } - VpSelectTilesWithMethod(e->we.place.pt.x, e->we.place.pt.y, sel_method); + VpSelectTilesWithMethod(e->we.place.pt.x, e->we.place.pt.y, e->we.place.select_method); return; - } case WE_PLACE_MOUSEUP: if (e->we.place.pt.x != -1) { TileIndex start_tile = e->we.place.starttile; TileIndex end_tile = e->we.place.tile; - if (e->we.place.userdata == 0) { - ResetObjectToPlace(); - ShowBuildBridgeWindow(start_tile, end_tile, 0x80); - } else if (e->we.place.userdata != 4) { - DoCommandP(end_tile, start_tile, _place_road_flag, CcPlaySound1D, - _remove_button_clicked ? - CMD_REMOVE_LONG_ROAD | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1805_CAN_T_REMOVE_ROAD_FROM) : - CMD_BUILD_LONG_ROAD | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1804_CAN_T_BUILD_ROAD_HERE)); - } else { - DoCommandP(end_tile, start_tile, 0, CcPlaySound10, CMD_CLEAR_AREA | CMD_MSG(STR_00B5_CAN_T_CLEAR_THIS_AREA)); + switch (e->we.place.select_proc) { + case DDSP_BUILD_BRIDGE: + ResetObjectToPlace(); + ShowBuildBridgeWindow(start_tile, end_tile, 0x80 | RoadTypeToRoadTypes(_cur_roadtype)); + break; + + case DDSP_DEMOLISH_AREA: + DoCommandP(end_tile, start_tile, 0, CcPlaySound10, CMD_CLEAR_AREA | CMD_MSG(STR_00B5_CAN_T_CLEAR_THIS_AREA)); + break; + + case DDSP_PLACE_ROAD_NE: + case DDSP_PLACE_ROAD_NW: + DoCommandP(end_tile, start_tile, _place_road_flag | (_cur_roadtype << 3) | _ctrl_pressed << 5, CcPlaySound1D, + _remove_button_clicked ? + CMD_REMOVE_LONG_ROAD | CMD_AUTO | CMD_NO_WATER | CMD_MSG(_road_type_infos[_cur_roadtype].err_remove_road) : + CMD_BUILD_LONG_ROAD | CMD_AUTO | CMD_NO_WATER | CMD_MSG(_road_type_infos[_cur_roadtype].err_build_road)); + break; } } break; @@ -310,7 +355,7 @@ case WE_PLACE_PRESIZE: { TileIndex tile = e->we.place.tile; - DoCommand(tile, 0x200, 0, DC_AUTO, CMD_BUILD_TUNNEL); + DoCommand(tile, 0x200 | RoadTypeToRoadTypes(_cur_roadtype), 0, DC_AUTO, CMD_BUILD_TUNNEL); VpSetPresizeRange(tile, _build_tunnel_endtile == 0 ? tile : _build_tunnel_endtile); break; } @@ -346,12 +391,39 @@ BuildRoadToolbWndProc }; -void ShowBuildRoadToolbar() +static const Widget _build_tramway_widgets[] = { +{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, +{ WWT_CAPTION, RESIZE_NONE, 7, 11, 205, 0, 13, STR_1802_TRAMWAY_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, +{ WWT_STICKYBOX, RESIZE_NONE, 7, 206, 217, 0, 13, 0x0, STR_STICKY_BUTTON}, + +{ WWT_IMGBTN, RESIZE_NONE, 7, 0, 21, 14, 35, SPR_IMG_TRAMWAY_NW, STR_180B_BUILD_TRAMWAY_SECTION}, +{ WWT_IMGBTN, RESIZE_NONE, 7, 22, 43, 14, 35, SPR_IMG_TRAMWAY_NE, STR_180B_BUILD_TRAMWAY_SECTION}, +{ WWT_IMGBTN, RESIZE_NONE, 7, 44, 65, 14, 35, SPR_IMG_DYNAMITE, STR_018D_DEMOLISH_BUILDINGS_ETC}, +{ WWT_IMGBTN, RESIZE_NONE, 7, 66, 87, 14, 35, SPR_IMG_ROAD_DEPOT, STR_180C_BUILD_TRAM_VEHICLE_DEPOT}, +{ WWT_IMGBTN, RESIZE_NONE, 7, 88, 109, 14, 35, SPR_IMG_BUS_STATION, STR_180D_BUILD_PASSENGER_TRAM_STATION}, +{ WWT_IMGBTN, RESIZE_NONE, 7, 110, 131, 14, 35, SPR_IMG_TRUCK_BAY, STR_180E_BUILD_CARGO_TRAM_STATION}, + +{ WWT_IMGBTN, RESIZE_NONE, 7, 132, 173, 14, 35, SPR_IMG_BRIDGE, STR_180F_BUILD_TRAMWAY_BRIDGE}, +{ WWT_IMGBTN, RESIZE_NONE, 7, 174, 195, 14, 35, SPR_IMG_ROAD_TUNNEL, STR_1810_BUILD_TRAMWAY_TUNNEL}, +{ WWT_IMGBTN, RESIZE_NONE, 7, 196, 217, 14, 35, SPR_IMG_REMOVE, STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS}, +{ WIDGETS_END}, +}; + +static const WindowDesc _build_tramway_desc = { + WDP_ALIGN_TBR, 22, 218, 36, + WC_BUILD_TOOLBAR, WC_NONE, + WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON, + _build_tramway_widgets, + BuildRoadToolbWndProc +}; + +void ShowBuildRoadToolbar(RoadType roadtype) { if (!IsValidPlayer(_current_player)) return; + _cur_roadtype = roadtype; DeleteWindowById(WC_BUILD_TOOLBAR, 0); - Window *w = AllocateWindowDesc(&_build_road_desc); + Window *w = AllocateWindowDesc(roadtype == ROADTYPE_ROAD ? &_build_road_desc : &_build_tramway_desc); if (_patches.link_terraform_toolbar) ShowTerraformToolbar(w); } @@ -382,6 +454,7 @@ void ShowBuildRoadScenToolbar() { + _cur_roadtype = ROADTYPE_ROAD; AllocateWindowDescFront(&_build_road_scen_desc, 0); } @@ -393,10 +466,10 @@ case WE_PAINT: DrawWindowWidgets(w); - DrawRoadDepotSprite(70, 17, DIAGDIR_NE); - DrawRoadDepotSprite(70, 69, DIAGDIR_SE); - DrawRoadDepotSprite( 2, 69, DIAGDIR_SW); - DrawRoadDepotSprite( 2, 17, DIAGDIR_NW); + DrawRoadDepotSprite(70, 17, DIAGDIR_NE, _cur_roadtype); + DrawRoadDepotSprite(70, 69, DIAGDIR_SE, _cur_roadtype); + DrawRoadDepotSprite( 2, 69, DIAGDIR_SW, _cur_roadtype); + DrawRoadDepotSprite( 2, 17, DIAGDIR_NW, _cur_roadtype); break; case WE_CLICK: { @@ -409,14 +482,14 @@ SetWindowDirty(w); break; } - } break; + } break; case WE_MOUSELOOP: - if (WP(w,def_d).close) DeleteWindow(w); + if (WP(w, def_d).close) DeleteWindow(w); break; case WE_DESTROY: - if (!WP(w,def_d).close) ResetObjectToPlace(); + if (!WP(w, def_d).close) ResetObjectToPlace(); break; } } @@ -432,6 +505,17 @@ { WIDGETS_END}, }; +static const Widget _build_tram_depot_widgets[] = { +{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, +{ WWT_CAPTION, RESIZE_NONE, 7, 11, 139, 0, 13, STR_1806_TRAM_DEPOT_ORIENTATION, STR_018C_WINDOW_TITLE_DRAG_THIS}, +{ WWT_PANEL, RESIZE_NONE, 7, 0, 139, 14, 121, 0x0, STR_NULL}, +{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 17, 66, 0x0, STR_1813_SELECT_TRAM_VEHICLE_DEPOT}, +{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 69, 118, 0x0, STR_1813_SELECT_TRAM_VEHICLE_DEPOT}, +{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 69, 118, 0x0, STR_1813_SELECT_TRAM_VEHICLE_DEPOT}, +{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 17, 66, 0x0, STR_1813_SELECT_TRAM_VEHICLE_DEPOT}, +{ WIDGETS_END}, +}; + static const WindowDesc _build_road_depot_desc = { WDP_AUTO, WDP_AUTO, 140, 122, WC_BUILD_DEPOT, WC_BUILD_TOOLBAR, @@ -440,15 +524,29 @@ BuildRoadDepotWndProc }; +static const WindowDesc _build_tram_depot_desc = { + WDP_AUTO, WDP_AUTO, 140, 122, + WC_BUILD_DEPOT, WC_BUILD_TOOLBAR, + WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET, + _build_tram_depot_widgets, + BuildRoadDepotWndProc +}; + static void ShowRoadDepotPicker() { - AllocateWindowDesc(&_build_road_depot_desc); + AllocateWindowDesc(_cur_roadtype == ROADTYPE_ROAD ? &_build_road_depot_desc : &_build_tram_depot_desc); } static void RoadStationPickerWndProc(Window *w, WindowEvent *e) { switch (e->event) { case WE_CREATE: + /* Trams don't have non-drivethrough stations */ + if (_cur_roadtype == ROADTYPE_TRAM && _road_station_picker_orientation < DIAGDIR_END) { + _road_station_picker_orientation = DIAGDIR_END; + } + SetWindowWidgetsDisabledState(w, _cur_roadtype == ROADTYPE_TRAM, 3, 4, 5, 6, WIDGET_LIST_END); + LowerWindowWidget(w, _road_station_picker_orientation + 3); LowerWindowWidget(w, _station_show_coverage + 9); break; @@ -456,7 +554,7 @@ case WE_PAINT: { int image; - if (WP(w,def_d).close) return; + if (WP(w, def_d).close) return; DrawWindowWidgets(w); @@ -471,18 +569,18 @@ image = (w->window_class == WC_BUS_STATION) ? GFX_BUS_BASE : GFX_TRUCK_BASE; - StationPickerDrawSprite(103, 35, RAILTYPE_BEGIN, image); - StationPickerDrawSprite(103, 85, RAILTYPE_BEGIN, image+1); - StationPickerDrawSprite(35, 85, RAILTYPE_BEGIN, image+2); - StationPickerDrawSprite(35, 35, RAILTYPE_BEGIN, image+3); + StationPickerDrawSprite(103, 35, RAILTYPE_BEGIN, ROADTYPE_ROAD, image); + StationPickerDrawSprite(103, 85, RAILTYPE_BEGIN, ROADTYPE_ROAD, image + 1); + StationPickerDrawSprite(35, 85, RAILTYPE_BEGIN, ROADTYPE_ROAD, image + 2); + StationPickerDrawSprite(35, 35, RAILTYPE_BEGIN, ROADTYPE_ROAD, image + 3); image = (w->window_class == WC_BUS_STATION) ? GFX_BUS_BASE_EXT : GFX_TRUCK_BASE_EXT; - StationPickerDrawSprite(171, 35, RAILTYPE_BEGIN, image); - StationPickerDrawSprite(171, 85, RAILTYPE_BEGIN, image + 1); + StationPickerDrawSprite(171, 35, RAILTYPE_BEGIN, _cur_roadtype, image); + StationPickerDrawSprite(171, 85, RAILTYPE_BEGIN, _cur_roadtype, image + 1); DrawStationCoverageAreaText(2, 146, - ((w->window_class == WC_BUS_STATION) ? (1<window_class == WC_BUS_STATION) ? (1 << CT_PASSENGERS) : ~(1 << CT_PASSENGERS)), 3); } break; @@ -507,7 +605,7 @@ } break; case WE_MOUSELOOP: { - if (WP(w,def_d).close) { + if (WP(w, def_d).close) { DeleteWindow(w); return; } @@ -516,67 +614,43 @@ } break; case WE_DESTROY: - if (!WP(w,def_d).close) ResetObjectToPlace(); + if (!WP(w, def_d).close) ResetObjectToPlace(); break; } } -static const Widget _bus_station_picker_widgets[] = { +static const Widget _rv_station_picker_widgets[] = { { WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, -{ WWT_CAPTION, RESIZE_NONE, 7, 11, 206, 0, 13, STR_3042_BUS_STATION_ORIENTATION, STR_018C_WINDOW_TITLE_DRAG_THIS}, +{ WWT_CAPTION, RESIZE_NONE, 7, 11, 206, 0, 13, STR_NULL, STR_018C_WINDOW_TITLE_DRAG_THIS}, { WWT_PANEL, RESIZE_NONE, 7, 0, 206, 14, 176, 0x0, STR_NULL}, -{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 17, 66, 0x0, STR_3051_SELECT_BUS_STATION_ORIENTATION}, -{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 69, 118, 0x0, STR_3051_SELECT_BUS_STATION_ORIENTATION}, -{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 69, 118, 0x0, STR_3051_SELECT_BUS_STATION_ORIENTATION}, -{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 17, 66, 0x0, STR_3051_SELECT_BUS_STATION_ORIENTATION}, -{ WWT_PANEL, RESIZE_NONE, 14, 139, 204, 17, 66, 0x0, STR_3051_SELECT_BUS_STATION_ORIENTATION}, -{ WWT_PANEL, RESIZE_NONE, 14, 139, 204, 69, 118, 0x0, STR_3051_SELECT_BUS_STATION_ORIENTATION}, +{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 17, 66, 0x0, STR_NULL}, +{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 69, 118, 0x0, STR_NULL}, +{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 69, 118, 0x0, STR_NULL}, +{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 17, 66, 0x0, STR_NULL}, +{ WWT_PANEL, RESIZE_NONE, 14, 139, 204, 17, 66, 0x0, STR_NULL}, +{ WWT_PANEL, RESIZE_NONE, 14, 139, 204, 69, 118, 0x0, STR_NULL}, { WWT_TEXTBTN, RESIZE_NONE, 14, 10, 69, 133, 144, STR_02DB_OFF, STR_3065_DON_T_HIGHLIGHT_COVERAGE}, { WWT_TEXTBTN, RESIZE_NONE, 14, 70, 129, 133, 144, STR_02DA_ON, STR_3064_HIGHLIGHT_COVERAGE_AREA}, { WWT_LABEL, RESIZE_NONE, 7, 0, 139, 120, 133, STR_3066_COVERAGE_AREA_HIGHLIGHT, STR_NULL}, { WIDGETS_END}, }; -static const WindowDesc _bus_station_picker_desc = { +static const WindowDesc _rv_station_picker_desc = { WDP_AUTO, WDP_AUTO, 207, 177, WC_BUS_STATION, WC_BUILD_TOOLBAR, WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET, - _bus_station_picker_widgets, + _rv_station_picker_widgets, RoadStationPickerWndProc }; -static void ShowBusStationPicker() +static void ShowRVStationPicker(RoadStop::Type rs) { - AllocateWindowDesc(&_bus_station_picker_desc); -} + Window *w = AllocateWindowDesc(&_rv_station_picker_desc); + if (w == NULL) return; -static const Widget _truck_station_picker_widgets[] = { -{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, -{ WWT_CAPTION, RESIZE_NONE, 7, 11, 206, 0, 13, STR_3043_TRUCK_STATION_ORIENT, STR_018C_WINDOW_TITLE_DRAG_THIS}, -{ WWT_PANEL, RESIZE_NONE, 7, 0, 206, 14, 176, 0x0, STR_NULL}, -{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 17, 66, 0x0, STR_3052_SELECT_TRUCK_LOADING_BAY}, -{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 69, 118, 0x0, STR_3052_SELECT_TRUCK_LOADING_BAY}, -{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 69, 118, 0x0, STR_3052_SELECT_TRUCK_LOADING_BAY}, -{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 17, 66, 0x0, STR_3052_SELECT_TRUCK_LOADING_BAY}, -{ WWT_PANEL, RESIZE_NONE, 14, 139, 204, 17, 66, 0x0, STR_3052_SELECT_TRUCK_LOADING_BAY}, -{ WWT_PANEL, RESIZE_NONE, 14, 139, 204, 69, 118, 0x0, STR_3052_SELECT_TRUCK_LOADING_BAY}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 10, 69, 133, 144, STR_02DB_OFF, STR_3065_DON_T_HIGHLIGHT_COVERAGE}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 70, 129, 133, 144, STR_02DA_ON, STR_3064_HIGHLIGHT_COVERAGE_AREA}, -{ WWT_LABEL, RESIZE_NONE, 7, 0, 139, 120, 133, STR_3066_COVERAGE_AREA_HIGHLIGHT, STR_NULL}, -{ WIDGETS_END}, -}; - -static const WindowDesc _truck_station_picker_desc = { - WDP_AUTO, WDP_AUTO, 207, 177, - WC_TRUCK_STATION, WC_BUILD_TOOLBAR, - WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET, - _truck_station_picker_widgets, - RoadStationPickerWndProc -}; - -static void ShowTruckStationPicker() -{ - AllocateWindowDesc(&_truck_station_picker_desc); + w->window_class = (rs == RoadStop::BUS) ? WC_BUS_STATION : WC_TRUCK_STATION; + w->widget[1].data = _road_type_infos[_cur_roadtype].picker_title[rs]; + for (uint i = 3; i < 9; i++) w->widget[i].tooltips = _road_type_infos[_cur_roadtype].picker_tooltip[rs]; } void InitializeRoadGui()