road_gui.c
changeset 0 29654efe3188
child 5 539c9743d999
equal deleted inserted replaced
-1:000000000000 0:29654efe3188
       
     1 #include "stdafx.h"
       
     2 #include "ttd.h"
       
     3 
       
     4 #include "window.h"
       
     5 #include "gui.h"
       
     6 #include "viewport.h"
       
     7 #include "gfx.h"
       
     8 #include "command.h"
       
     9 
       
    10 static void ShowBusStationPicker();
       
    11 static void ShowTruckStationPicker();
       
    12 static void ShowRoadDepotPicker();
       
    13 
       
    14 static bool _remove_button_clicked;
       
    15 static bool _build_road_flag;
       
    16 
       
    17 static byte _place_road_flag;
       
    18 
       
    19 static byte _road_depot_orientation;
       
    20 static byte _road_station_picker_orientation;
       
    21 
       
    22 static void CcPlaySound1D(bool success, uint tile, uint32 p1, uint32 p2)
       
    23 {
       
    24 	if (success) { SndPlayTileFx(0x1D, tile); }
       
    25 }
       
    26 
       
    27 static void PlaceRoad_NE(uint tile)
       
    28 {
       
    29 	_place_road_flag = (_tile_fract_coords.y >= 8) + 4;
       
    30 	VpStartPlaceSizing(tile, VPM_FIX_X);
       
    31 }
       
    32 
       
    33 static void PlaceRoad_NW(uint tile)
       
    34 {
       
    35 	_place_road_flag = (_tile_fract_coords.x >= 8) + 0;
       
    36 	VpStartPlaceSizing(tile, VPM_FIX_Y);
       
    37 }
       
    38 
       
    39 static void PlaceRoad_Bridge(uint tile)
       
    40 {
       
    41 	VpStartPlaceSizing(tile, VPM_X_OR_Y);
       
    42 }
       
    43 
       
    44 
       
    45 static void CcBuildTunnel(bool success, uint tile, uint32 p1, uint32 p2)
       
    46 {
       
    47 	if (success) {
       
    48 		SndPlayTileFx(0x1E, tile);
       
    49 		ResetObjectToPlace();
       
    50 	} else {
       
    51 		SetRedErrorSquare(_build_tunnel_endtile);
       
    52 	}
       
    53 }
       
    54 
       
    55 static void PlaceRoad_Tunnel(uint tile)
       
    56 {
       
    57 	DoCommandP(tile, 0x200, 0, CcBuildTunnel, CMD_BUILD_TUNNEL | CMD_AUTO | CMD_MSG(STR_5016_CAN_T_BUILD_TUNNEL_HERE));
       
    58 }
       
    59 
       
    60 static void BuildRoadOutsideStation(uint tile, int direction)
       
    61 {
       
    62 	static const byte _roadbits_by_dir[4] = {2,1,8,4};
       
    63 	tile += _tileoffs_by_dir[direction];
       
    64 	if (IS_TILETYPE(tile, MP_STREET)) {
       
    65 		DoCommandP(tile, _roadbits_by_dir[direction], 0, NULL, CMD_BUILD_ROAD);
       
    66 	}
       
    67 }
       
    68 
       
    69 static void CcDepot(bool success, uint tile, uint32 p1, uint32 p2)
       
    70 {
       
    71 	if (success) {
       
    72 		SndPlayTileFx(0x1D, tile);
       
    73 		ResetObjectToPlace();
       
    74 		BuildRoadOutsideStation(tile, (int)p1);
       
    75 	}
       
    76 }
       
    77 
       
    78 static void PlaceRoad_Depot(uint tile)
       
    79 {
       
    80 	DoCommandP(tile, _road_depot_orientation, 0, CcDepot, CMD_BUILD_ROAD_DEPOT | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1807_CAN_T_BUILD_ROAD_VEHICLE));
       
    81 }
       
    82 
       
    83 static void PlaceRoad_BusStation(uint tile)
       
    84 {
       
    85 	DoCommandP(tile, _road_station_picker_orientation, 0, CcDepot, CMD_BUILD_BUS_STATION | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1808_CAN_T_BUILD_BUS_STATION));
       
    86 }
       
    87 
       
    88 static void PlaceRoad_TruckStation(uint tile)
       
    89 {
       
    90 	DoCommandP(tile, _road_station_picker_orientation, 0, CcDepot, CMD_BUILD_TRUCK_STATION | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1809_CAN_T_BUILD_TRUCK_STATION));
       
    91 }
       
    92 
       
    93 static void PlaceRoad_DemolishArea(uint tile)
       
    94 {
       
    95 	VpStartPlaceSizing(tile, 4);
       
    96 }
       
    97 
       
    98 typedef void OnButtonClick(Window *w);
       
    99 
       
   100 static void BuildRoadClick_NE(Window *w)
       
   101 {
       
   102 	_build_road_flag = 0;
       
   103 	HandlePlacePushButton(w, 2, 0x51F, 1, PlaceRoad_NE);
       
   104 }
       
   105 
       
   106 static void BuildRoadClick_NW(Window *w)
       
   107 {
       
   108 	_build_road_flag = 0;
       
   109 	HandlePlacePushButton(w, 3, 0x520, 1, PlaceRoad_NW);
       
   110 }
       
   111 
       
   112 
       
   113 static void BuildRoadClick_Demolish(Window *w)
       
   114 {
       
   115 	HandlePlacePushButton(w, 4, ANIMCURSOR_DEMOLISH, 1, PlaceRoad_DemolishArea);
       
   116 }
       
   117 
       
   118 static void BuildRoadClick_Lower(Window *w)
       
   119 {
       
   120 	HandlePlacePushButton(w, 5, ANIMCURSOR_LOWERLAND, 2, PlaceProc_LowerLand);
       
   121 }
       
   122 
       
   123 static void BuildRoadClick_Raise(Window *w)
       
   124 {
       
   125 	HandlePlacePushButton(w, 6, ANIMCURSOR_RAISELAND, 2, PlaceProc_RaiseLand);
       
   126 }
       
   127 
       
   128 static void BuildRoadClick_Depot(Window *w)
       
   129 {
       
   130 	if (HandlePlacePushButton(w, 7, 0x511, 1, PlaceRoad_Depot)) ShowRoadDepotPicker();	
       
   131 }
       
   132 
       
   133 static void BuildRoadClick_BusStation(Window *w)
       
   134 {
       
   135 	if (HandlePlacePushButton(w, 8, 0xAA5, 1, PlaceRoad_BusStation)) ShowBusStationPicker();	
       
   136 }
       
   137 
       
   138 static void BuildRoadClick_TruckStation(Window *w)
       
   139 {
       
   140 	if (HandlePlacePushButton(w, 9, 0xAA6, 1, PlaceRoad_TruckStation)) ShowTruckStationPicker();	
       
   141 }
       
   142 
       
   143 static void BuildRoadClick_Bridge(Window *w)
       
   144 {
       
   145 	_build_road_flag = 0;
       
   146 	HandlePlacePushButton(w, 10, 0xA21, 1, PlaceRoad_Bridge);
       
   147 }
       
   148 
       
   149 static void BuildRoadClick_Tunnel(Window *w)
       
   150 {
       
   151 	_build_road_flag = 0;
       
   152 	HandlePlacePushButton(w, 11, 0x981, 3, PlaceRoad_Tunnel);
       
   153 }
       
   154 
       
   155 static void BuildRoadClick_Remove(Window *w)
       
   156 {
       
   157 	if (w->disabled_state & (1<<12))
       
   158 		return;
       
   159 	SetWindowDirty(w);
       
   160 	SndPlayFx(0x13);
       
   161 	_thd.make_square_red = !!((w->click_state ^= (1 << 12)) & (1<<12));
       
   162 }
       
   163 
       
   164 static void BuildRoadClick_Purchase(Window *w)
       
   165 {
       
   166 	HandlePlacePushButton(w, 13, 0x12B8, 1, PlaceProc_BuyLand);
       
   167 }
       
   168 
       
   169 static OnButtonClick * const _build_road_button_proc[] = {
       
   170 	BuildRoadClick_NE,
       
   171 	BuildRoadClick_NW,
       
   172 	BuildRoadClick_Demolish,
       
   173 	BuildRoadClick_Lower,
       
   174 	BuildRoadClick_Raise,
       
   175 	BuildRoadClick_Depot,
       
   176 	BuildRoadClick_BusStation,
       
   177 	BuildRoadClick_TruckStation,
       
   178 	BuildRoadClick_Bridge,
       
   179 	BuildRoadClick_Tunnel,
       
   180 	BuildRoadClick_Remove,
       
   181 	BuildRoadClick_Purchase,
       
   182 };
       
   183 
       
   184 static void BuildRoadToolbWndProc(Window *w, WindowEvent *e) {
       
   185 	switch(e->event) {
       
   186 	case WE_PAINT:
       
   187 		w->disabled_state &= ~(1 << 12);
       
   188 		if (!(w->click_state & 12)) {
       
   189 			w->disabled_state |= (1 << 12);
       
   190 			w->click_state &= ~(1<<12);
       
   191 		}
       
   192 		DrawWindowWidgets(w);
       
   193 		break;
       
   194 
       
   195 	case WE_CLICK: {
       
   196 		if (e->click.widget >= 2)
       
   197 			_build_road_button_proc[e->click.widget - 2](w);
       
   198 	}	break;
       
   199 
       
   200 	case WE_KEYPRESS:
       
   201 		switch(e->keypress.keycode) {
       
   202 		case '1': BuildRoadClick_NE(w); break;
       
   203 		case '2': BuildRoadClick_NW(w); break;
       
   204 		case '3': BuildRoadClick_Demolish(w); break;
       
   205 		case '4': BuildRoadClick_Lower(w); break;
       
   206 		case '5': BuildRoadClick_Raise(w); break;
       
   207 		case 'B': BuildRoadClick_Bridge(w); break;
       
   208 		case 'T': BuildRoadClick_Tunnel(w); break;
       
   209 		case 'R': BuildRoadClick_Remove(w); break;
       
   210 		default:
       
   211 			return;
       
   212 		}
       
   213 		e->keypress.cont = false;
       
   214 		break;
       
   215 
       
   216 	case WE_PLACE_OBJ:
       
   217 		_remove_button_clicked = (w->click_state & (1 << 12)) != 0;
       
   218 		_place_proc(e->place.tile);
       
   219 		break;
       
   220 
       
   221 	case WE_ABORT_PLACE_OBJ:
       
   222 		w->click_state = 0;
       
   223 		SetWindowDirty(w);
       
   224 
       
   225 		w = FindWindowById(WC_BUS_STATION, 0);
       
   226 		if (w != NULL) WP(w,def_d).close=true;
       
   227 		w = FindWindowById(WC_TRUCK_STATION, 0);
       
   228 		if (w != NULL) WP(w,def_d).close=true;
       
   229 		w = FindWindowById(WC_BUILD_DEPOT, 0);
       
   230 		if (w != NULL) WP(w,def_d).close=true;
       
   231 		break;
       
   232 
       
   233 	case WE_PLACE_DRAG: {
       
   234 		int sel_method;
       
   235 		if (e->place.userdata == 1) {
       
   236 			sel_method = VPM_FIX_X;
       
   237 			_place_road_flag = (_place_road_flag&~2) | ((e->place.pt.y&8)>>2);
       
   238 		} else if (e->place.userdata == 2) {
       
   239 			sel_method = VPM_FIX_Y;
       
   240 			_place_road_flag = (_place_road_flag&~2) | ((e->place.pt.x&8)>>2);
       
   241 		} else if (e->place.userdata == 4) {
       
   242 			sel_method = VPM_X_AND_Y;
       
   243 		} else {
       
   244 			sel_method = VPM_X_OR_Y;
       
   245 		}
       
   246 		
       
   247 		VpSelectTilesWithMethod(e->place.pt.x, e->place.pt.y, sel_method);
       
   248 		return;
       
   249 	}
       
   250 
       
   251 	case WE_PLACE_MOUSEUP:
       
   252 		if (e->place.pt.x != -1) {
       
   253 			uint start_tile = e->place.starttile;
       
   254 			uint end_tile = e->place.tile;
       
   255 			if (e->place.userdata == 0) {
       
   256 				ResetObjectToPlace();
       
   257 				ShowBuildBridgeWindow(start_tile, end_tile, 0x80);
       
   258 			} else if (e->place.userdata != 4) {
       
   259 				DoCommandP(end_tile, start_tile, _place_road_flag, CcPlaySound1D, 
       
   260 					_remove_button_clicked ? 
       
   261 					CMD_REMOVE_LONG_ROAD | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1805_CAN_T_REMOVE_ROAD_FROM) :
       
   262 					CMD_BUILD_LONG_ROAD | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1804_CAN_T_BUILD_ROAD_HERE));
       
   263 			} else {
       
   264 				DoCommandP(end_tile, start_tile, _place_road_flag, CcPlaySound10, CMD_CLEAR_AREA | CMD_MSG(STR_00B5_CAN_T_CLEAR_THIS_AREA));
       
   265 			}
       
   266 		}
       
   267 		break;
       
   268 
       
   269 	case WE_PLACE_PRESIZE: {
       
   270 		uint tile = e->place.tile;
       
   271 		DoCommandByTile(tile, 0x200, 0, DC_AUTO, CMD_BUILD_TUNNEL);
       
   272 		VpSetPresizeRange(tile, _build_tunnel_endtile==0?tile:_build_tunnel_endtile);
       
   273 		break;
       
   274 	}
       
   275 	}
       
   276 }
       
   277 
       
   278 static const Widget _build_road_widgets[] = {
       
   279 {   WWT_CLOSEBOX,     7,     0,    10,     0,    13, STR_00C5, STR_018B_CLOSE_WINDOW},
       
   280 {    WWT_CAPTION,     7,    11,   283,     0,    13, STR_1802_ROAD_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS},
       
   281 {      WWT_PANEL,     7,     0,    21,    14,    35, 0x51D, STR_180B_BUILD_ROAD_SECTION},
       
   282 {      WWT_PANEL,     7,    22,    43,    14,    35, 0x51E, STR_180B_BUILD_ROAD_SECTION},
       
   283 {      WWT_PANEL,     7,    44,    65,    14,    35, 0x2BF, STR_018D_DEMOLISH_BUILDINGS_ETC},
       
   284 {      WWT_PANEL,     7,    66,    87,    14,    35, 0x2B7, STR_018E_LOWER_A_CORNER_OF_LAND},
       
   285 {      WWT_PANEL,     7,    88,   109,    14,    35, 0x2B6, STR_018F_RAISE_A_CORNER_OF_LAND},
       
   286 {      WWT_PANEL,     7,   110,   131,    14,    35, 0x50F, STR_180C_BUILD_ROAD_VEHICLE_DEPOT},
       
   287 {      WWT_PANEL,     7,   132,   153,    14,    35, 0x2ED, STR_180D_BUILD_BUS_STATION},
       
   288 {      WWT_PANEL,     7,   154,   175,    14,    35, 0x2EE, STR_180E_BUILD_TRUCK_LOADING_BAY},
       
   289 {      WWT_PANEL,     7,   176,   217,    14,    35, 0xA22, STR_180F_BUILD_ROAD_BRIDGE},
       
   290 {      WWT_PANEL,     7,   218,   239,    14,    35, 0x97D, STR_1810_BUILD_ROAD_TUNNEL},
       
   291 {      WWT_PANEL,     7,   240,   261,    14,    35, 0x2CA, STR_1811_TOGGLE_BUILD_REMOVE_FOR},
       
   292 {      WWT_PANEL,     7,   262,   283,    14,    35, 0x12B7, STR_0329_PURCHASE_LAND_FOR_FUTURE},
       
   293 {      WWT_LAST},
       
   294 };
       
   295 
       
   296 static const WindowDesc _build_road_desc = {
       
   297 	356, 22, 284, 36,
       
   298 	WC_BUILD_TOOLBAR,0,
       
   299 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
       
   300 	_build_road_widgets,
       
   301 	BuildRoadToolbWndProc
       
   302 };
       
   303 
       
   304 void ShowBuildRoadToolbar()
       
   305 {
       
   306 	DeleteWindowById(WC_BUILD_TOOLBAR, 0);
       
   307 	AllocateWindowDesc(&_build_road_desc);
       
   308 }
       
   309 
       
   310 static const Widget _build_road_scen_widgets[] = {
       
   311 {    WWT_TEXTBTN,     7,     0,    10,     0,    13, STR_00C5, STR_018B_CLOSE_WINDOW},
       
   312 {    WWT_CAPTION,     7,    11,   195,     0,    13, STR_1802_ROAD_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS},
       
   313 {     WWT_IMGBTN,     7,     0,    21,    14,    35, 0x51D, STR_180B_BUILD_ROAD_SECTION},
       
   314 {     WWT_IMGBTN,     7,    22,    43,    14,    35, 0x51E, STR_180B_BUILD_ROAD_SECTION},
       
   315 {     WWT_IMGBTN,     7,    44,    65,    14,    35, 0x2BF, STR_018D_DEMOLISH_BUILDINGS_ETC},
       
   316 {     WWT_IMGBTN,     7,    66,    87,    14,    35, 0x2B7, STR_018E_LOWER_A_CORNER_OF_LAND},
       
   317 {     WWT_IMGBTN,     7,    88,   109,    14,    35, 0x2B6, STR_018F_RAISE_A_CORNER_OF_LAND},
       
   318 {      WWT_EMPTY,     0,     0,     0,     0,     0, 0x0},
       
   319 {      WWT_EMPTY,     0,     0,     0,     0,     0, 0x0},
       
   320 {      WWT_EMPTY,     0,     0,     0,     0,     0, 0x0},
       
   321 {     WWT_IMGBTN,     7,   110,   151,    14,    35, 0xA22, STR_180F_BUILD_ROAD_BRIDGE},
       
   322 {     WWT_IMGBTN,     7,   152,   173,    14,    35, 0x97D, STR_1810_BUILD_ROAD_TUNNEL},
       
   323 {     WWT_IMGBTN,     7,   174,   195,    14,    35, 0x2CA, STR_1811_TOGGLE_BUILD_REMOVE_FOR},
       
   324 {      WWT_LAST},
       
   325 };
       
   326 
       
   327 static const WindowDesc _build_road_scen_desc = {
       
   328 	-1, -1, 196, 36,
       
   329 	WC_SCEN_BUILD_ROAD,0,
       
   330 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
       
   331 	_build_road_scen_widgets,
       
   332 	BuildRoadToolbWndProc
       
   333 };
       
   334 
       
   335 void ShowBuildRoadScenToolbar()
       
   336 {
       
   337 	AllocateWindowDescFront(&_build_road_scen_desc, 0);
       
   338 }
       
   339 
       
   340 static void BuildRoadDepotWndProc(Window *w, WindowEvent *e) {
       
   341 	switch(e->event) {
       
   342 	case WE_PAINT:
       
   343 		w->click_state = (1<<3) << _road_depot_orientation;
       
   344 		DrawWindowWidgets(w);
       
   345 
       
   346 		DrawRoadDepotSprite(70, 17, 0);
       
   347 		DrawRoadDepotSprite(70, 69, 1);
       
   348 		DrawRoadDepotSprite(2, 69, 2);
       
   349 		DrawRoadDepotSprite(2, 17, 3);
       
   350 		break;
       
   351 
       
   352 	case WE_CLICK: {
       
   353 		switch(e->click.widget) {
       
   354 		case 0:
       
   355 			ResetObjectToPlace();
       
   356 			break;
       
   357 		case 3:
       
   358 		case 4:
       
   359 		case 5:
       
   360 		case 6:
       
   361 			_road_depot_orientation = e->click.widget - 3;
       
   362 			SndPlayFx(0x13);
       
   363 			SetWindowDirty(w);
       
   364 			break;
       
   365 		}	
       
   366 	}	break;
       
   367 	
       
   368 	case WE_MOUSELOOP:
       
   369 		if (WP(w,def_d).close)
       
   370 			DeleteWindow(w);
       
   371 		break;
       
   372 	}
       
   373 }
       
   374 
       
   375 static const Widget _build_road_depot_widgets[] = {
       
   376 {   WWT_CLOSEBOX,     7,     0,    10,     0,    13, STR_00C5, STR_018B_CLOSE_WINDOW},
       
   377 {    WWT_CAPTION,     7,    11,   139,     0,    13, STR_1806_ROAD_DEPOT_ORIENTATION, STR_018C_WINDOW_TITLE_DRAG_THIS},
       
   378 {      WWT_PANEL,     7,     0,   139,    14,   121, 0x0, 0},
       
   379 {      WWT_PANEL,    14,    71,   136,    17,    66, 0x0, STR_1813_SELECT_ROAD_VEHICLE_DEPOT},
       
   380 {      WWT_PANEL,    14,    71,   136,    69,   118, 0x0, STR_1813_SELECT_ROAD_VEHICLE_DEPOT},
       
   381 {      WWT_PANEL,    14,     3,    68,    69,   118, 0x0, STR_1813_SELECT_ROAD_VEHICLE_DEPOT},
       
   382 {      WWT_PANEL,    14,     3,    68,    17,    66, 0x0, STR_1813_SELECT_ROAD_VEHICLE_DEPOT},
       
   383 {      WWT_LAST},
       
   384 };
       
   385 
       
   386 static const WindowDesc _build_road_depot_desc = {
       
   387 	-1,-1, 140, 122,
       
   388 	WC_BUILD_DEPOT,WC_BUILD_TOOLBAR,
       
   389 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
       
   390 	_build_road_depot_widgets,
       
   391 	BuildRoadDepotWndProc
       
   392 };
       
   393 
       
   394 static void ShowRoadDepotPicker()
       
   395 {
       
   396 	AllocateWindowDesc(&_build_road_depot_desc);
       
   397 }
       
   398 
       
   399 static void RoadStationPickerWndProc(Window *w, WindowEvent *e) {
       
   400 	switch(e->event) {
       
   401 	case WE_PAINT: {
       
   402 		int image;
       
   403 
       
   404 		w->click_state = ((1<<3) << _road_station_picker_orientation)	|
       
   405 										 ((1<<7) << _station_show_coverage);
       
   406 		DrawWindowWidgets(w);
       
   407 
       
   408 		SetTileSelectSize(1, 1);
       
   409 		if (_station_show_coverage)
       
   410 			SetTileSelectBigSize(-4, -4, 8, 8);
       
   411 
       
   412 		image = (w->window_class == WC_BUS_STATION) ? 0x47 : 0x43;
       
   413 
       
   414 		StationPickerDrawSprite(103, 35, 0, image);
       
   415 		StationPickerDrawSprite(103, 85, 0, image+1);
       
   416 		StationPickerDrawSprite(35, 85, 0, image+2);
       
   417 		StationPickerDrawSprite(35, 35, 0, image+3);
       
   418 
       
   419 		DrawStringCentered(70, 120, STR_3066_COVERAGE_AREA_HIGHLIGHT, 0);
       
   420 		DrawStationCoverageAreaText(2, 146,
       
   421 			((w->window_class == WC_BUS_STATION) ? (1<<CT_PASSENGERS) : ~(1<<CT_PASSENGERS))
       
   422 		);
       
   423 
       
   424 	} break;
       
   425 
       
   426 	case WE_CLICK: {
       
   427 		switch(e->click.widget) {
       
   428 		case 0:
       
   429 			ResetObjectToPlace();
       
   430 			break;
       
   431 		case 3:
       
   432 		case 4:
       
   433 		case 5:
       
   434 		case 6:
       
   435 			_road_station_picker_orientation = e->click.widget - 3;
       
   436 			SndPlayFx(0x13);
       
   437 			SetWindowDirty(w);
       
   438 			break;
       
   439 		case 7:
       
   440 		case 8:
       
   441 			_station_show_coverage = e->click.widget - 7;
       
   442 			SndPlayFx(0x13);
       
   443 			SetWindowDirty(w);
       
   444 			break;
       
   445 		}
       
   446 	} break;
       
   447 	
       
   448 	case WE_MOUSELOOP: {
       
   449 		if (WP(w,def_d).close) {
       
   450 			DeleteWindow(w);
       
   451 			return;
       
   452 		}
       
   453 
       
   454 		CheckRedrawStationCoverage(w);
       
   455 	} break;
       
   456 	}		
       
   457 }
       
   458 
       
   459 static const Widget _bus_station_picker_widgets[] = {
       
   460 {   WWT_CLOSEBOX,     7,     0,    10,     0,    13, STR_00C5, STR_018B_CLOSE_WINDOW},
       
   461 {    WWT_CAPTION,     7,    11,   139,     0,    13, STR_3042_BUS_STATION_ORIENTATION, STR_018C_WINDOW_TITLE_DRAG_THIS},
       
   462 {      WWT_PANEL,     7,     0,   139,    14,   176, 0x0, 0},
       
   463 {      WWT_PANEL,    14,    71,   136,    17,    66, 0x0, STR_3051_SELECT_BUS_STATION_ORIENTATION},
       
   464 {      WWT_PANEL,    14,    71,   136,    69,   118, 0x0, STR_3051_SELECT_BUS_STATION_ORIENTATION},
       
   465 {      WWT_PANEL,    14,     3,    68,    69,   118, 0x0, STR_3051_SELECT_BUS_STATION_ORIENTATION},
       
   466 {      WWT_PANEL,    14,     3,    68,    17,    66, 0x0, STR_3051_SELECT_BUS_STATION_ORIENTATION},
       
   467 {   WWT_CLOSEBOX,    14,    10,    69,   133,   144, STR_02DB_OFF, STR_3065_DON_T_HIGHLIGHT_COVERAGE},
       
   468 {   WWT_CLOSEBOX,    14,    70,   129,   133,   144, STR_02DA_ON, STR_3064_HIGHLIGHT_COVERAGE_AREA},
       
   469 {      WWT_LAST},
       
   470 };
       
   471 
       
   472 static const WindowDesc _bus_station_picker_desc = {
       
   473 	-1,-1, 140, 177,
       
   474 	WC_BUS_STATION,WC_BUILD_TOOLBAR,
       
   475 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
       
   476 	_bus_station_picker_widgets,
       
   477 	RoadStationPickerWndProc
       
   478 };
       
   479 
       
   480 static void ShowBusStationPicker()
       
   481 {
       
   482 	AllocateWindowDesc(&_bus_station_picker_desc);
       
   483 }
       
   484 
       
   485 static const Widget _truck_station_picker_widgets[] = {
       
   486 {   WWT_CLOSEBOX,     7,     0,    10,     0,    13, STR_00C5, STR_018B_CLOSE_WINDOW},
       
   487 {    WWT_CAPTION,     7,    11,   139,     0,    13, STR_3043_TRUCK_STATION_ORIENT, STR_018C_WINDOW_TITLE_DRAG_THIS},
       
   488 {      WWT_PANEL,     7,     0,   139,    14,   176, 0x0, 0},
       
   489 {      WWT_PANEL,    14,    71,   136,    17,    66, 0x0, STR_3052_SELECT_TRUCK_LOADING_BAY},
       
   490 {      WWT_PANEL,    14,    71,   136,    69,   118, 0x0, STR_3052_SELECT_TRUCK_LOADING_BAY},
       
   491 {      WWT_PANEL,    14,     3,    68,    69,   118, 0x0, STR_3052_SELECT_TRUCK_LOADING_BAY},
       
   492 {      WWT_PANEL,    14,     3,    68,    17,    66, 0x0, STR_3052_SELECT_TRUCK_LOADING_BAY},
       
   493 {   WWT_CLOSEBOX,    14,    10,    69,   133,   144, STR_02DB_OFF, STR_3065_DON_T_HIGHLIGHT_COVERAGE},
       
   494 {   WWT_CLOSEBOX,    14,    70,   129,   133,   144, STR_02DA_ON, STR_3064_HIGHLIGHT_COVERAGE_AREA},
       
   495 {      WWT_LAST},
       
   496 };
       
   497 
       
   498 static const WindowDesc _truck_station_picker_desc = {
       
   499 	-1,-1, 140, 177,
       
   500 	WC_TRUCK_STATION,WC_BUILD_TOOLBAR,
       
   501 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
       
   502 	_truck_station_picker_widgets,
       
   503 	RoadStationPickerWndProc
       
   504 };
       
   505 
       
   506 static void ShowTruckStationPicker()
       
   507 {
       
   508 	AllocateWindowDesc(&_truck_station_picker_desc);
       
   509 }
       
   510 
       
   511 void InitializeRoadGui()
       
   512 {
       
   513 	_road_depot_orientation = 3;
       
   514 	_road_station_picker_orientation = 3;
       
   515 }