408
* Update the remove button lowered state of the road toolbar
410
* @param w The toolbar window
411
* @param clicked_widget The widget which the player clicked just now
413
static void UpdateOptionWidgetStatus(Window *w, int clicked_widget)
415
/* The remove and the one way button state is driven
416
* by the other buttons so they don't act on themselfs.
417
* Both are only valid if they are able to apply as options. */
418
switch (clicked_widget) {
420
w->RaiseWidget(RTW_ONE_WAY);
421
w->InvalidateWidget(RTW_ONE_WAY);
424
w->RaiseWidget(RTW_REMOVE);
425
w->InvalidateWidget(RTW_REMOVE);
427
case RTW_BUS_STATION:
428
case RTW_TRUCK_STATION:
429
w->DisableWidget(RTW_ONE_WAY);
430
w->SetWidgetDisabledState(RTW_REMOVE, !w->IsWidgetLowered(clicked_widget));
435
w->SetWidgetsDisabledState(!w->IsWidgetLowered(clicked_widget),
441
/* When any other buttons than road/station, raise and
442
* disable the removal button */
443
w->SetWidgetsDisabledState(true,
447
w->SetWidgetsLoweredState (false,
455
static void BuildRoadToolbWndProc(Window *w, WindowEvent *e)
459
w->SetWidgetsDisabledState(true,
407
struct BuildRoadToolbarWindow : Window {
408
BuildRoadToolbarWindow(const WindowDesc *desc, WindowNumber window_number) : Window(desc, window_number)
410
this->SetWidgetsDisabledState(true,
462
413
WIDGET_LIST_END);
466
w->SetWidgetsDisabledState(!CanBuildVehicleInfrastructure(VEH_ROAD),
415
this->FindWindowPlacementAndResize(desc);
416
if (_settings_client.gui.link_terraform_toolbar) ShowTerraformToolbar(this);
419
~BuildRoadToolbarWindow()
421
if (_settings_client.gui.link_terraform_toolbar) DeleteWindowById(WC_SCEN_LAND_GEN, 0, false);
425
* Update the remove button lowered state of the road toolbar
427
* @param clicked_widget The widget which the client clicked just now
429
void UpdateOptionWidgetStatus(RoadToolbarWidgets clicked_widget)
431
/* The remove and the one way button state is driven
432
* by the other buttons so they don't act on themselfs.
433
* Both are only valid if they are able to apply as options. */
434
switch (clicked_widget) {
436
this->RaiseWidget(RTW_ONE_WAY);
437
this->InvalidateWidget(RTW_ONE_WAY);
441
this->RaiseWidget(RTW_REMOVE);
442
this->InvalidateWidget(RTW_REMOVE);
445
case RTW_BUS_STATION:
446
case RTW_TRUCK_STATION:
447
this->DisableWidget(RTW_ONE_WAY);
448
this->SetWidgetDisabledState(RTW_REMOVE, !this->IsWidgetLowered(clicked_widget));
454
this->SetWidgetsDisabledState(!this->IsWidgetLowered(clicked_widget),
461
/* When any other buttons than road/station, raise and
462
* disable the removal button */
463
this->SetWidgetsDisabledState(true,
467
this->SetWidgetsLoweredState (false,
475
virtual void OnPaint()
477
this->SetWidgetsDisabledState(!CanBuildVehicleInfrastructure(VEH_ROAD),
469
480
RTW_TRUCK_STATION,
470
481
WIDGET_LIST_END);
471
DrawWindowWidgets(w);
475
if (e->we.click.widget >= RTW_ROAD_X) {
485
virtual void OnClick(Point pt, int widget)
487
if (widget >= RTW_ROAD_X) {
476
488
_remove_button_clicked = false;
477
489
_one_way_button_clicked = false;
478
_build_road_button_proc[e->we.click.widget - RTW_ROAD_X](w);
490
_build_road_button_proc[widget - RTW_ROAD_X](this);
480
UpdateOptionWidgetStatus(w, e->we.click.widget);
481
if (_ctrl_pressed) RoadToolbar_CtrlChanged(w);
492
this->UpdateOptionWidgetStatus((RoadToolbarWidgets)widget);
493
if (_ctrl_pressed) RoadToolbar_CtrlChanged(this);
485
for (uint8 i = 0; i != lengthof(_road_keycodes); i++) {
486
if (e->we.keypress.keycode == _road_keycodes[i]) {
487
e->we.keypress.cont = false;
496
virtual EventState OnKeyPress(uint16 key, uint16 keycode)
498
EventState state = ES_NOT_HANDLED;
499
for (uint i = 0; i != lengthof(_road_keycodes); i++) {
500
if (keycode == _road_keycodes[i]) {
488
501
_remove_button_clicked = false;
489
502
_one_way_button_clicked = false;
490
_build_road_button_proc[i](w);
491
UpdateOptionWidgetStatus(w, i + RTW_ROAD_X);
492
if (_ctrl_pressed) RoadToolbar_CtrlChanged(w);
503
_build_road_button_proc[i](this);
504
this->UpdateOptionWidgetStatus((RoadToolbarWidgets)(i + RTW_ROAD_X));
505
if (_ctrl_pressed) RoadToolbar_CtrlChanged(this);
496
510
MarkTileDirty(_thd.pos.x, _thd.pos.y); // redraw tile selection
500
_remove_button_clicked = w->IsWidgetLowered(RTW_REMOVE);
501
_one_way_button_clicked = w->IsWidgetLowered(RTW_ONE_WAY);
502
_place_proc(e->we.place.tile);
505
case WE_ABORT_PLACE_OBJ:
507
w->SetWidgetsDisabledState(true,
514
virtual void OnPlaceObject(Point pt, TileIndex tile)
516
_remove_button_clicked = this->IsWidgetLowered(RTW_REMOVE);
517
_one_way_button_clicked = this->IsWidgetLowered(RTW_ONE_WAY);
521
virtual void OnPlaceObjectAbort()
523
this->RaiseButtons();
524
this->SetWidgetsDisabledState(true,
510
527
WIDGET_LIST_END);
511
w->InvalidateWidget(RTW_REMOVE);
512
w->InvalidateWidget(RTW_ONE_WAY);
514
w = FindWindowById(WC_BUS_STATION, 0);
515
if (w != NULL) WP(w, def_d).close = true;
516
w = FindWindowById(WC_TRUCK_STATION, 0);
517
if (w != NULL) WP(w, def_d).close = true;
518
w = FindWindowById(WC_BUILD_DEPOT, 0);
519
if (w != NULL) WP(w, def_d).close = true;
528
this->InvalidateWidget(RTW_REMOVE);
529
this->InvalidateWidget(RTW_ONE_WAY);
531
DeleteWindowById(WC_BUS_STATION, 0);
532
DeleteWindowById(WC_TRUCK_STATION, 0);
533
DeleteWindowById(WC_BUILD_DEPOT, 0);
534
DeleteWindowById(WC_SELECT_STATION, 0);
535
DeleteWindowById(WC_BUILD_BRIDGE, 0);
538
virtual void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt)
523
540
/* Here we update the end tile flags
524
541
* of the road placement actions.
525
542
* At first we reset the end halfroad
526
543
* bits and if needed we set them again. */
527
switch (e->we.place.select_proc) {
544
switch (select_proc) {
528
545
case DDSP_PLACE_ROAD_X_DIR:
529
546
_place_road_flag &= ~RF_END_HALFROAD_X;
530
if (e->we.place.pt.x & 8) _place_road_flag |= RF_END_HALFROAD_X;
547
if (pt.x & 8) _place_road_flag |= RF_END_HALFROAD_X;
533
550
case DDSP_PLACE_ROAD_Y_DIR:
534
551
_place_road_flag &= ~RF_END_HALFROAD_Y;
535
if (e->we.place.pt.y & 8) _place_road_flag |= RF_END_HALFROAD_Y;
552
if (pt.y & 8) _place_road_flag |= RF_END_HALFROAD_Y;
538
555
case DDSP_PLACE_AUTOROAD:
539
556
_place_road_flag &= ~(RF_END_HALFROAD_Y | RF_END_HALFROAD_X);
540
if (e->we.place.pt.y & 8) _place_road_flag |= RF_END_HALFROAD_Y;
541
if (e->we.place.pt.x & 8) _place_road_flag |= RF_END_HALFROAD_X;
557
if (pt.y & 8) _place_road_flag |= RF_END_HALFROAD_Y;
558
if (pt.x & 8) _place_road_flag |= RF_END_HALFROAD_X;
543
560
/* For autoroad we need to update the
544
561
* direction of the road */
545
562
if (_thd.size.x > _thd.size.y || (_thd.size.x == _thd.size.y &&
546
563
( (_tile_fract_coords.x < _tile_fract_coords.y && (_tile_fract_coords.x + _tile_fract_coords.y) < 16) ||
547
(_tile_fract_coords.x > _tile_fract_coords.y && (_tile_fract_coords.x + _tile_fract_coords.y) > 16) ))) {
564
(_tile_fract_coords.x > _tile_fract_coords.y && (_tile_fract_coords.x + _tile_fract_coords.y) > 16) ))) {
548
565
/* Set dir = X */
549
566
_place_road_flag &= ~RF_DIR_Y;
582
601
* not the 3rd bit set) */
583
602
_place_road_flag = (RoadFlags)((_place_road_flag & RF_DIR_Y) ? (_place_road_flag & 0x07) : (_place_road_flag >> 3));
585
DoCommandP(end_tile, start_tile, _place_road_flag | (_cur_roadtype << 3) | (_one_way_button_clicked << 5), CcPlaySound1D,
604
DoCommandP(end_tile, start_tile, _place_road_flag | (_cur_roadtype << 3) | (_one_way_button_clicked << 5),
586
605
(_ctrl_pressed || _remove_button_clicked) ?
587
CMD_REMOVE_LONG_ROAD | CMD_NO_WATER | CMD_MSG(_road_type_infos[_cur_roadtype].err_remove_road) :
588
CMD_BUILD_LONG_ROAD | CMD_NO_WATER | CMD_MSG(_road_type_infos[_cur_roadtype].err_build_road));
606
CMD_REMOVE_LONG_ROAD | CMD_MSG(_road_type_infos[_cur_roadtype].err_remove_road) :
607
CMD_BUILD_LONG_ROAD | CMD_MSG(_road_type_infos[_cur_roadtype].err_build_road), CcPlaySound1D);
594
case WE_PLACE_PRESIZE: {
595
TileIndex tile = e->we.place.tile;
613
virtual void OnPlacePresize(Point pt, TileIndex tile)
597
615
DoCommand(tile, 0x200 | RoadTypeToRoadTypes(_cur_roadtype), 0, DC_AUTO, CMD_BUILD_TUNNEL);
598
616
VpSetPresizeRange(tile, _build_tunnel_endtile == 0 ? tile : _build_tunnel_endtile);
603
if (_patches.link_terraform_toolbar) DeleteWindowById(WC_SCEN_LAND_GEN, 0);
606
case WE_CTRL_CHANGED:
607
if (RoadToolbar_CtrlChanged(w)) e->we.ctrl.cont = false;
619
virtual EventState OnCTRLStateChange()
621
if (RoadToolbar_CtrlChanged(this)) return ES_HANDLED;
622
return ES_NOT_HANDLED;
612
626
/** Widget definition of the build road toolbar */
613
627
static const Widget _build_road_widgets[] = {
614
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // RTW_CLOSEBOX
615
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 250, 0, 13, STR_1802_ROAD_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // RTW_CAPTION
616
{ WWT_STICKYBOX, RESIZE_NONE, 7, 251, 262, 0, 13, 0x0, STR_STICKY_BUTTON}, // RTW_STICKY
628
{ WWT_CLOSEBOX, RESIZE_NONE, COLOUR_DARK_GREEN, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // RTW_CLOSEBOX
629
{ WWT_CAPTION, RESIZE_NONE, COLOUR_DARK_GREEN, 11, 250, 0, 13, STR_1802_ROAD_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // RTW_CAPTION
630
{ WWT_STICKYBOX, RESIZE_NONE, COLOUR_DARK_GREEN, 251, 262, 0, 13, 0x0, STR_STICKY_BUTTON}, // RTW_STICKY
618
{ WWT_IMGBTN, RESIZE_NONE, 7, 0, 21, 14, 35, SPR_IMG_ROAD_X_DIR, STR_180B_BUILD_ROAD_SECTION}, // RTW_ROAD_X
619
{ WWT_IMGBTN, RESIZE_NONE, 7, 22, 43, 14, 35, SPR_IMG_ROAD_Y_DIR, STR_180B_BUILD_ROAD_SECTION}, // RTW_ROAD_Y
620
{ WWT_IMGBTN, RESIZE_NONE, 7, 44, 65, 14, 35, SPR_IMG_AUTOROAD, STR_BUILD_AUTOROAD_TIP}, // RTW_AUTOROAD
621
{ WWT_IMGBTN, RESIZE_NONE, 7, 66, 87, 14, 35, SPR_IMG_DYNAMITE, STR_018D_DEMOLISH_BUILDINGS_ETC}, // RTW_DEMOLISH
622
{ WWT_IMGBTN, RESIZE_NONE, 7, 88, 109, 14, 35, SPR_IMG_ROAD_DEPOT, STR_180C_BUILD_ROAD_VEHICLE_DEPOT}, // RTW_DEPOT
623
{ WWT_IMGBTN, RESIZE_NONE, 7, 110, 131, 14, 35, SPR_IMG_BUS_STATION, STR_180D_BUILD_BUS_STATION}, // RTW_BUS_STATION
624
{ WWT_IMGBTN, RESIZE_NONE, 7, 132, 153, 14, 35, SPR_IMG_TRUCK_BAY, STR_180E_BUILD_TRUCK_LOADING_BAY}, // RTW_TRUCK_STATION
625
{ WWT_IMGBTN, RESIZE_NONE, 7, 154, 175, 14, 35, SPR_IMG_ROAD_ONE_WAY, STR_TOGGLE_ONE_WAY_ROAD}, // RTW_ONE_WAY
626
{ WWT_IMGBTN, RESIZE_NONE, 7, 176, 218, 14, 35, SPR_IMG_BRIDGE, STR_180F_BUILD_ROAD_BRIDGE}, // RTW_BUILD_BRIDGE
627
{ WWT_IMGBTN, RESIZE_NONE, 7, 219, 240, 14, 35, SPR_IMG_ROAD_TUNNEL, STR_1810_BUILD_ROAD_TUNNEL}, // RTW_BUILD_TUNNEL
628
{ WWT_IMGBTN, RESIZE_NONE, 7, 241, 262, 14, 35, SPR_IMG_REMOVE, STR_1811_TOGGLE_BUILD_REMOVE_FOR}, // RTW_REMOVE
632
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 0, 21, 14, 35, SPR_IMG_ROAD_X_DIR, STR_180B_BUILD_ROAD_SECTION}, // RTW_ROAD_X
633
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 22, 43, 14, 35, SPR_IMG_ROAD_Y_DIR, STR_180B_BUILD_ROAD_SECTION}, // RTW_ROAD_Y
634
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 44, 65, 14, 35, SPR_IMG_AUTOROAD, STR_BUILD_AUTOROAD_TIP}, // RTW_AUTOROAD
635
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 66, 87, 14, 35, SPR_IMG_DYNAMITE, STR_018D_DEMOLISH_BUILDINGS_ETC}, // RTW_DEMOLISH
636
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 88, 109, 14, 35, SPR_IMG_ROAD_DEPOT, STR_180C_BUILD_ROAD_VEHICLE_DEPOT}, // RTW_DEPOT
637
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 110, 131, 14, 35, SPR_IMG_BUS_STATION, STR_180D_BUILD_BUS_STATION}, // RTW_BUS_STATION
638
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 132, 153, 14, 35, SPR_IMG_TRUCK_BAY, STR_180E_BUILD_TRUCK_LOADING_BAY}, // RTW_TRUCK_STATION
639
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 154, 175, 14, 35, SPR_IMG_ROAD_ONE_WAY, STR_TOGGLE_ONE_WAY_ROAD}, // RTW_ONE_WAY
640
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 176, 218, 14, 35, SPR_IMG_BRIDGE, STR_180F_BUILD_ROAD_BRIDGE}, // RTW_BUILD_BRIDGE
641
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 219, 240, 14, 35, SPR_IMG_ROAD_TUNNEL, STR_1810_BUILD_ROAD_TUNNEL}, // RTW_BUILD_TUNNEL
642
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 241, 262, 14, 35, SPR_IMG_REMOVE, STR_1811_TOGGLE_BUILD_REMOVE_FOR}, // RTW_REMOVE
633
static const WindowDesc _build_road_desc = {
647
static const WindowDesc _build_road_desc(
634
648
WDP_ALIGN_TBR, 22, 263, 36, 263, 36,
635
649
WC_BUILD_TOOLBAR, WC_NONE,
636
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
638
BuildRoadToolbWndProc
650
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON | WDF_CONSTRUCTION,
641
654
/** Widget definition of the build tram toolbar */
642
655
static const Widget _build_tramway_widgets[] = {
643
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // RTW_CLOSEBOX
644
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 228, 0, 13, STR_WHITE_TRAMWAY_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // RTW_CAPTION
645
{ WWT_STICKYBOX, RESIZE_NONE, 7, 229, 240, 0, 13, 0x0, STR_STICKY_BUTTON}, // RTW_STICKY
656
{ WWT_CLOSEBOX, RESIZE_NONE, COLOUR_DARK_GREEN, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // RTW_CLOSEBOX
657
{ WWT_CAPTION, RESIZE_NONE, COLOUR_DARK_GREEN, 11, 228, 0, 13, STR_WHITE_TRAMWAY_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // RTW_CAPTION
658
{ WWT_STICKYBOX, RESIZE_NONE, COLOUR_DARK_GREEN, 229, 240, 0, 13, 0x0, STR_STICKY_BUTTON}, // RTW_STICKY
647
{ WWT_IMGBTN, RESIZE_NONE, 7, 0, 21, 14, 35, SPR_IMG_TRAMWAY_X_DIR, STR_BUILD_TRAMWAY_SECTION}, // RTW_ROAD_X
648
{ WWT_IMGBTN, RESIZE_NONE, 7, 22, 43, 14, 35, SPR_IMG_TRAMWAY_Y_DIR, STR_BUILD_TRAMWAY_SECTION}, // RTW_ROAD_Y
649
{ WWT_IMGBTN, RESIZE_NONE, 7, 44, 65, 14, 35, SPR_IMG_AUTOTRAM, STR_BUILD_AUTOTRAM_TIP}, // RTW_AUTOROAD
650
{ WWT_IMGBTN, RESIZE_NONE, 7, 66, 87, 14, 35, SPR_IMG_DYNAMITE, STR_018D_DEMOLISH_BUILDINGS_ETC}, // RTW_DEMOLISH
651
{ WWT_IMGBTN, RESIZE_NONE, 7, 88, 109, 14, 35, SPR_IMG_ROAD_DEPOT, STR_BUILD_TRAM_VEHICLE_DEPOT}, // RTW_DEPOT
652
{ WWT_IMGBTN, RESIZE_NONE, 7, 110, 131, 14, 35, SPR_IMG_BUS_STATION, STR_BUILD_PASSENGER_TRAM_STATION}, // RTW_BUS_STATION
653
{ WWT_IMGBTN, RESIZE_NONE, 7, 132, 153, 14, 35, SPR_IMG_TRUCK_BAY, STR_BUILD_CARGO_TRAM_STATION}, // RTW_TRUCK_STATION
654
{ WWT_EMPTY, RESIZE_NONE, 0, 0, 0, 0, 0, 0x0, STR_NULL}, // RTW_ONE_WAY
655
{ WWT_IMGBTN, RESIZE_NONE, 7, 154, 196, 14, 35, SPR_IMG_BRIDGE, STR_BUILD_TRAMWAY_BRIDGE}, // RTW_BUILD_BRIDGE
656
{ WWT_IMGBTN, RESIZE_NONE, 7, 197, 218, 14, 35, SPR_IMG_ROAD_TUNNEL, STR_BUILD_TRAMWAY_TUNNEL}, // RTW_BUILD_TUNNEL
657
{ WWT_IMGBTN, RESIZE_NONE, 7, 219, 240, 14, 35, SPR_IMG_REMOVE, STR_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS}, // RTW_REMOVE
660
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 0, 21, 14, 35, SPR_IMG_TRAMWAY_X_DIR, STR_BUILD_TRAMWAY_SECTION}, // RTW_ROAD_X
661
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 22, 43, 14, 35, SPR_IMG_TRAMWAY_Y_DIR, STR_BUILD_TRAMWAY_SECTION}, // RTW_ROAD_Y
662
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 44, 65, 14, 35, SPR_IMG_AUTOTRAM, STR_BUILD_AUTOTRAM_TIP}, // RTW_AUTOROAD
663
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 66, 87, 14, 35, SPR_IMG_DYNAMITE, STR_018D_DEMOLISH_BUILDINGS_ETC}, // RTW_DEMOLISH
664
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 88, 109, 14, 35, SPR_IMG_ROAD_DEPOT, STR_BUILD_TRAM_VEHICLE_DEPOT}, // RTW_DEPOT
665
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 110, 131, 14, 35, SPR_IMG_BUS_STATION, STR_BUILD_PASSENGER_TRAM_STATION}, // RTW_BUS_STATION
666
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 132, 153, 14, 35, SPR_IMG_TRUCK_BAY, STR_BUILD_CARGO_TRAM_STATION}, // RTW_TRUCK_STATION
667
{ WWT_EMPTY, RESIZE_NONE, COLOUR_DARK_GREEN, 0, 0, 0, 0, 0x0, STR_NULL}, // RTW_ONE_WAY
668
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 154, 196, 14, 35, SPR_IMG_BRIDGE, STR_BUILD_TRAMWAY_BRIDGE}, // RTW_BUILD_BRIDGE
669
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 197, 218, 14, 35, SPR_IMG_ROAD_TUNNEL, STR_BUILD_TRAMWAY_TUNNEL}, // RTW_BUILD_TUNNEL
670
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 219, 240, 14, 35, SPR_IMG_REMOVE, STR_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS}, // RTW_REMOVE
662
static const WindowDesc _build_tramway_desc = {
675
static const WindowDesc _build_tramway_desc(
663
676
WDP_ALIGN_TBR, 22, 241, 36, 241, 36,
664
677
WC_BUILD_TOOLBAR, WC_NONE,
665
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
666
_build_tramway_widgets,
667
BuildRoadToolbWndProc
678
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON | WDF_CONSTRUCTION,
679
_build_tramway_widgets
670
682
void ShowBuildRoadToolbar(RoadType roadtype)
672
if (!IsValidPlayer(_current_player)) return;
684
if (!IsValidCompanyID(_local_company)) return;
673
685
_cur_roadtype = roadtype;
675
DeleteWindowById(WC_BUILD_TOOLBAR, 0);
676
Window *w = AllocateWindowDesc(roadtype == ROADTYPE_ROAD ? &_build_road_desc : &_build_tramway_desc);
677
if (_patches.link_terraform_toolbar) ShowTerraformToolbar(w);
687
DeleteWindowByClass(WC_BUILD_TOOLBAR);
688
AllocateWindowDescFront<BuildRoadToolbarWindow>(roadtype == ROADTYPE_ROAD ? &_build_road_desc : &_build_tramway_desc, TRANSPORT_ROAD);
680
691
/** Widget definition of the build road toolbar in the scenario editor */
681
692
static const Widget _build_road_scen_widgets[] = {
682
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // RTW_CLOSEBOX
683
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 184, 0, 13, STR_1802_ROAD_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // RTW_CAPTION
684
{ WWT_STICKYBOX, RESIZE_NONE, 7, 185, 196, 0, 13, 0x0, STR_STICKY_BUTTON}, // RTW_STICKY
693
{ WWT_CLOSEBOX, RESIZE_NONE, COLOUR_DARK_GREEN, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // RTW_CLOSEBOX
694
{ WWT_CAPTION, RESIZE_NONE, COLOUR_DARK_GREEN, 11, 184, 0, 13, STR_1802_ROAD_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // RTW_CAPTION
695
{ WWT_STICKYBOX, RESIZE_NONE, COLOUR_DARK_GREEN, 185, 196, 0, 13, 0x0, STR_STICKY_BUTTON}, // RTW_STICKY
686
{ WWT_IMGBTN, RESIZE_NONE, 7, 0, 21, 14, 35, SPR_IMG_ROAD_X_DIR, STR_180B_BUILD_ROAD_SECTION}, // RTW_ROAD_X
687
{ WWT_IMGBTN, RESIZE_NONE, 7, 22, 43, 14, 35, SPR_IMG_ROAD_Y_DIR, STR_180B_BUILD_ROAD_SECTION}, // RTW_ROAD_Y
688
{ WWT_IMGBTN, RESIZE_NONE, 7, 44, 65, 14, 35, SPR_IMG_AUTOROAD, STR_BUILD_AUTOROAD_TIP}, // RTW_AUTOROAD
689
{ WWT_IMGBTN, RESIZE_NONE, 7, 66, 87, 14, 35, SPR_IMG_DYNAMITE, STR_018D_DEMOLISH_BUILDINGS_ETC}, // RTW_DEMOLISH
690
{ WWT_EMPTY, RESIZE_NONE, 0, 0, 0, 0, 0, 0x0, STR_NULL}, // RTW_DEPOT
691
{ WWT_EMPTY, RESIZE_NONE, 0, 0, 0, 0, 0, 0x0, STR_NULL}, // RTW_BUS_STATION
692
{ WWT_EMPTY, RESIZE_NONE, 0, 0, 0, 0, 0, 0x0, STR_NULL}, // RTW_TRUCK_STATION
693
{ WWT_IMGBTN, RESIZE_NONE, 7, 88, 109, 14, 35, SPR_IMG_ROAD_ONE_WAY, STR_TOGGLE_ONE_WAY_ROAD}, // RTW_ONE_WAY
694
{ WWT_IMGBTN, RESIZE_NONE, 7, 110, 152, 14, 35, SPR_IMG_BRIDGE, STR_180F_BUILD_ROAD_BRIDGE}, // RTW_BUILD_BRIDGE
695
{ WWT_IMGBTN, RESIZE_NONE, 7, 153, 174, 14, 35, SPR_IMG_ROAD_TUNNEL, STR_1810_BUILD_ROAD_TUNNEL}, // RTW_BUILD_TUNNEL
696
{ WWT_IMGBTN, RESIZE_NONE, 7, 175, 196, 14, 35, SPR_IMG_REMOVE, STR_1811_TOGGLE_BUILD_REMOVE_FOR}, // RTW_REMOVE
697
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 0, 21, 14, 35, SPR_IMG_ROAD_X_DIR, STR_180B_BUILD_ROAD_SECTION}, // RTW_ROAD_X
698
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 22, 43, 14, 35, SPR_IMG_ROAD_Y_DIR, STR_180B_BUILD_ROAD_SECTION}, // RTW_ROAD_Y
699
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 44, 65, 14, 35, SPR_IMG_AUTOROAD, STR_BUILD_AUTOROAD_TIP}, // RTW_AUTOROAD
700
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 66, 87, 14, 35, SPR_IMG_DYNAMITE, STR_018D_DEMOLISH_BUILDINGS_ETC}, // RTW_DEMOLISH
701
{ WWT_EMPTY, RESIZE_NONE, COLOUR_DARK_GREEN, 0, 0, 0, 0, 0x0, STR_NULL}, // RTW_DEPOT
702
{ WWT_EMPTY, RESIZE_NONE, COLOUR_DARK_GREEN, 0, 0, 0, 0, 0x0, STR_NULL}, // RTW_BUS_STATION
703
{ WWT_EMPTY, RESIZE_NONE, COLOUR_DARK_GREEN, 0, 0, 0, 0, 0x0, STR_NULL}, // RTW_TRUCK_STATION
704
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 88, 109, 14, 35, SPR_IMG_ROAD_ONE_WAY, STR_TOGGLE_ONE_WAY_ROAD}, // RTW_ONE_WAY
705
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 110, 152, 14, 35, SPR_IMG_BRIDGE, STR_180F_BUILD_ROAD_BRIDGE}, // RTW_BUILD_BRIDGE
706
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 153, 174, 14, 35, SPR_IMG_ROAD_TUNNEL, STR_1810_BUILD_ROAD_TUNNEL}, // RTW_BUILD_TUNNEL
707
{ WWT_IMGBTN, RESIZE_NONE, COLOUR_DARK_GREEN, 175, 196, 14, 35, SPR_IMG_REMOVE, STR_1811_TOGGLE_BUILD_REMOVE_FOR}, // RTW_REMOVE
700
static const WindowDesc _build_road_scen_desc = {
711
static const WindowDesc _build_road_scen_desc(
701
712
WDP_AUTO, WDP_AUTO, 197, 36, 197, 36,
702
WC_SCEN_BUILD_ROAD, WC_NONE,
703
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
704
_build_road_scen_widgets,
705
BuildRoadToolbWndProc
713
WC_SCEN_BUILD_TOOLBAR, WC_NONE,
714
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON | WDF_CONSTRUCTION,
715
_build_road_scen_widgets
708
718
void ShowBuildRoadScenToolbar()
710
720
_cur_roadtype = ROADTYPE_ROAD;
711
AllocateWindowDescFront(&_build_road_scen_desc, 0);
721
AllocateWindowDescFront<BuildRoadToolbarWindow>(&_build_road_scen_desc, 0);
714
/** Enum referring to the widgets of the build road depot window */
715
enum BuildRoadDepotWidgets {
725
static void BuildRoadDepotWndProc(Window *w, WindowEvent *e)
728
case WE_CREATE: w->LowerWidget(_road_depot_orientation + BRDW_DEPOT_NE); break;
731
DrawWindowWidgets(w);
724
struct BuildRoadDepotWindow : public PickerWindowBase {
726
/** Enum referring to the widgets of the build road depot window */
727
enum BuildRoadDepotWidgets {
738
BuildRoadDepotWindow(const WindowDesc *desc, Window *parent) : PickerWindowBase(desc, parent)
740
this->LowerWidget(_road_depot_orientation + BRDW_DEPOT_NE);
741
if ( _cur_roadtype == ROADTYPE_TRAM) {
742
this->widget[BRDW_CAPTION].data = STR_TRAM_DEPOT_ORIENTATION;
743
for (int i = BRDW_DEPOT_NE; i <= BRDW_DEPOT_NW; i++) this->widget[i].tooltips = STR_SELECT_TRAM_VEHICLE_DEPOT;
745
this->FindWindowPlacementAndResize(desc);
748
virtual void OnPaint()
733
752
DrawRoadDepotSprite(70, 17, DIAGDIR_NE, _cur_roadtype);
734
753
DrawRoadDepotSprite(70, 69, DIAGDIR_SE, _cur_roadtype);
735
754
DrawRoadDepotSprite( 2, 69, DIAGDIR_SW, _cur_roadtype);
736
755
DrawRoadDepotSprite( 2, 17, DIAGDIR_NW, _cur_roadtype);
740
switch (e->we.click.widget) {
758
virtual void OnClick(Point pt, int widget)
741
761
case BRDW_DEPOT_NW:
742
762
case BRDW_DEPOT_NE:
743
763
case BRDW_DEPOT_SW:
744
764
case BRDW_DEPOT_SE:
745
w->RaiseWidget(_road_depot_orientation + BRDW_DEPOT_NE);
746
_road_depot_orientation = (DiagDirection)(e->we.click.widget - BRDW_DEPOT_NE);
747
w->LowerWidget(_road_depot_orientation + BRDW_DEPOT_NE);
765
this->RaiseWidget(_road_depot_orientation + BRDW_DEPOT_NE);
766
_road_depot_orientation = (DiagDirection)(widget - BRDW_DEPOT_NE);
767
this->LowerWidget(_road_depot_orientation + BRDW_DEPOT_NE);
748
768
SndPlayFx(SND_15_BEEP);
755
if (WP(w, def_d).close) DeleteWindow(w);
759
if (!WP(w, def_d).close) ResetObjectToPlace();
764
778
/** Widget definition of the build road depot window */
765
779
static const Widget _build_road_depot_widgets[] = {
766
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // BRDW_CLOSEBOX
767
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 139, 0, 13, STR_1806_ROAD_DEPOT_ORIENTATION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // BRDW_CAPTION
768
{ WWT_PANEL, RESIZE_NONE, 7, 0, 139, 14, 121, 0x0, STR_NULL}, // BRDW_BACKGROUND
769
{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 17, 66, 0x0, STR_1813_SELECT_ROAD_VEHICLE_DEPOT}, // BRDW_DEPOT_NE
770
{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 69, 118, 0x0, STR_1813_SELECT_ROAD_VEHICLE_DEPOT}, // BRDW_DEPOT_SE
771
{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 69, 118, 0x0, STR_1813_SELECT_ROAD_VEHICLE_DEPOT}, // BRDW_DEPOT_SW
772
{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 17, 66, 0x0, STR_1813_SELECT_ROAD_VEHICLE_DEPOT}, // BRDW_DEPOT_NW
776
/** Widget definition of the build tram depot window */
777
static const Widget _build_tram_depot_widgets[] = {
778
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // BRDW_CLOSEBOX
779
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 139, 0, 13, STR_TRAM_DEPOT_ORIENTATION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // BRDW_CAPTION
780
{ WWT_PANEL, RESIZE_NONE, 7, 0, 139, 14, 121, 0x0, STR_NULL}, // BRDW_BACKGROUND
781
{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 17, 66, 0x0, STR_SELECT_TRAM_VEHICLE_DEPOT}, // BRDW_DEPOT_NE
782
{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 69, 118, 0x0, STR_SELECT_TRAM_VEHICLE_DEPOT}, // BRDW_DEPOT_SE
783
{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 69, 118, 0x0, STR_SELECT_TRAM_VEHICLE_DEPOT}, // BRDW_DEPOT_SW
784
{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 17, 66, 0x0, STR_SELECT_TRAM_VEHICLE_DEPOT}, // BRDW_DEPOT_NW
788
static const WindowDesc _build_road_depot_desc = {
789
WDP_AUTO, WDP_AUTO, 140, 122, 140, 122,
790
WC_BUILD_DEPOT, WC_BUILD_TOOLBAR,
791
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
792
_build_road_depot_widgets,
793
BuildRoadDepotWndProc
796
static const WindowDesc _build_tram_depot_desc = {
797
WDP_AUTO, WDP_AUTO, 140, 122, 140, 122,
798
WC_BUILD_DEPOT, WC_BUILD_TOOLBAR,
799
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
800
_build_tram_depot_widgets,
801
BuildRoadDepotWndProc
804
static void ShowRoadDepotPicker()
780
{ WWT_CLOSEBOX, RESIZE_NONE, COLOUR_DARK_GREEN, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // BRDW_CLOSEBOX
781
{ WWT_CAPTION, RESIZE_NONE, COLOUR_DARK_GREEN, 11, 139, 0, 13, STR_1806_ROAD_DEPOT_ORIENTATION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // BRDW_CAPTION
782
{ WWT_PANEL, RESIZE_NONE, COLOUR_DARK_GREEN, 0, 139, 14, 121, 0x0, STR_NULL}, // BRDW_BACKGROUND
783
{ WWT_PANEL, RESIZE_NONE, COLOUR_GREY, 71, 136, 17, 66, 0x0, STR_1813_SELECT_ROAD_VEHICLE_DEPOT}, // BRDW_DEPOT_NE
784
{ WWT_PANEL, RESIZE_NONE, COLOUR_GREY, 71, 136, 69, 118, 0x0, STR_1813_SELECT_ROAD_VEHICLE_DEPOT}, // BRDW_DEPOT_SE
785
{ WWT_PANEL, RESIZE_NONE, COLOUR_GREY, 3, 68, 69, 118, 0x0, STR_1813_SELECT_ROAD_VEHICLE_DEPOT}, // BRDW_DEPOT_SW
786
{ WWT_PANEL, RESIZE_NONE, COLOUR_GREY, 3, 68, 17, 66, 0x0, STR_1813_SELECT_ROAD_VEHICLE_DEPOT}, // BRDW_DEPOT_NW
790
static const WindowDesc _build_road_depot_desc(
791
WDP_AUTO, WDP_AUTO, 140, 122, 140, 122,
792
WC_BUILD_DEPOT, WC_BUILD_TOOLBAR,
793
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_CONSTRUCTION,
794
_build_road_depot_widgets
797
static void ShowRoadDepotPicker(Window *parent)
806
AllocateWindowDesc(_cur_roadtype == ROADTYPE_ROAD ? &_build_road_depot_desc : &_build_tram_depot_desc);
799
new BuildRoadDepotWindow(&_build_road_depot_desc, parent);
809
/** Enum referring to the widgets of the build road station window */
810
enum BuildRoadStationWidgets {
802
struct BuildRoadStationWindow : public PickerWindowBase {
804
/** Enum referring to the widgets of the build road station window */
805
enum BuildRoadStationWidgets {
825
static void RoadStationPickerWndProc(Window *w, WindowEvent *e)
821
BuildRoadStationWindow(const WindowDesc *desc, Window *parent, RoadStopType rs) : PickerWindowBase(desc, parent)
829
823
/* Trams don't have non-drivethrough stations */
830
824
if (_cur_roadtype == ROADTYPE_TRAM && _road_station_picker_orientation < DIAGDIR_END) {
831
825
_road_station_picker_orientation = DIAGDIR_END;
833
w->SetWidgetsDisabledState(_cur_roadtype == ROADTYPE_TRAM,
827
this->SetWidgetsDisabledState(_cur_roadtype == ROADTYPE_TRAM,
838
832
WIDGET_LIST_END);
840
w->LowerWidget(_road_station_picker_orientation + BRSW_STATION_NE);
841
w->LowerWidget(_station_show_coverage + BRSW_LT_OFF);
845
if (WP(w, def_d).close) return;
847
DrawWindowWidgets(w);
849
if (_station_show_coverage) {
850
int rad = _patches.modified_catchment ? CA_TRUCK /* = CA_BUS */ : CA_UNMODIFIED;
834
this->window_class = (rs == ROADSTOP_BUS) ? WC_BUS_STATION : WC_TRUCK_STATION;
835
this->widget[BRSW_CAPTION].data = _road_type_infos[_cur_roadtype].picker_title[rs];
836
for (uint i = BRSW_STATION_NE; i < BRSW_LT_OFF; i++) this->widget[i].tooltips = _road_type_infos[_cur_roadtype].picker_tooltip[rs];
838
this->LowerWidget(_road_station_picker_orientation + BRSW_STATION_NE);
839
this->LowerWidget(_settings_client.gui.station_show_coverage + BRSW_LT_OFF);
840
this->FindWindowPlacementAndResize(desc);
843
virtual ~BuildRoadStationWindow()
845
DeleteWindowById(WC_SELECT_STATION, 0);
848
virtual void OnPaint()
852
if (_settings_client.gui.station_show_coverage) {
853
int rad = _settings_game.station.modified_catchment ? CA_TRUCK /* = CA_BUS */ : CA_UNMODIFIED;
851
854
SetTileSelectBigSize(-rad, -rad, 2 * rad, 2 * rad);
853
856
SetTileSelectSize(1, 1);
856
StationType st = (w->window_class == WC_BUS_STATION) ? STATION_BUS : STATION_TRUCK;
859
StationType st = (this->window_class == WC_BUS_STATION) ? STATION_BUS : STATION_TRUCK;
858
861
StationPickerDrawSprite(103, 35, st, INVALID_RAILTYPE, ROADTYPE_ROAD, 0);
859
862
StationPickerDrawSprite(103, 85, st, INVALID_RAILTYPE, ROADTYPE_ROAD, 1);
864
867
StationPickerDrawSprite(171, 85, st, INVALID_RAILTYPE, _cur_roadtype, 5);
866
869
int text_end = DrawStationCoverageAreaText(2, 146,
867
(w->window_class == WC_BUS_STATION) ? SCT_PASSENGERS_ONLY : SCT_NON_PASSENGERS_ONLY,
869
if (text_end > w->widget[BRSW_BACKGROUND].bottom) {
871
ResizeWindowForWidget(w, BRSW_BACKGROUND, 0, text_end - w->widget[BRSW_BACKGROUND].bottom);
870
(this->window_class == WC_BUS_STATION) ? SCT_PASSENGERS_ONLY : SCT_NON_PASSENGERS_ONLY,
872
text_end = DrawStationCoverageAreaText(2, text_end + 4,
873
(this->window_class == WC_BUS_STATION) ? SCT_PASSENGERS_ONLY : SCT_NON_PASSENGERS_ONLY,
875
if (text_end > this->widget[BRSW_BACKGROUND].bottom) {
877
ResizeWindowForWidget(this, BRSW_BACKGROUND, 0, text_end - this->widget[BRSW_BACKGROUND].bottom);
878
switch (e->we.click.widget) {
882
virtual void OnClick(Point pt, int widget)
879
885
case BRSW_STATION_NE:
880
886
case BRSW_STATION_SE:
881
887
case BRSW_STATION_SW:
882
888
case BRSW_STATION_NW:
883
889
case BRSW_STATION_X:
884
890
case BRSW_STATION_Y:
885
w->RaiseWidget(_road_station_picker_orientation + BRSW_STATION_NE);
886
_road_station_picker_orientation = (DiagDirection)(e->we.click.widget - BRSW_STATION_NE);
887
w->LowerWidget(_road_station_picker_orientation + BRSW_STATION_NE);
891
this->RaiseWidget(_road_station_picker_orientation + BRSW_STATION_NE);
892
_road_station_picker_orientation = (DiagDirection)(widget - BRSW_STATION_NE);
893
this->LowerWidget(_road_station_picker_orientation + BRSW_STATION_NE);
888
894
SndPlayFx(SND_15_BEEP);
896
DeleteWindowById(WC_SELECT_STATION, 0);
892
899
case BRSW_LT_OFF:
894
w->RaiseWidget(_station_show_coverage + BRSW_LT_OFF);
895
_station_show_coverage = (e->we.click.widget != BRSW_LT_OFF);
896
w->LowerWidget(_station_show_coverage + BRSW_LT_OFF);
901
this->RaiseWidget(_settings_client.gui.station_show_coverage + BRSW_LT_OFF);
902
_settings_client.gui.station_show_coverage = (widget != BRSW_LT_OFF);
903
this->LowerWidget(_settings_client.gui.station_show_coverage + BRSW_LT_OFF);
897
904
SndPlayFx(SND_15_BEEP);
904
if (WP(w, def_d).close) {
909
CheckRedrawStationCoverage(w);
913
if (!WP(w, def_d).close) ResetObjectToPlace();
913
virtual void OnTick()
915
CheckRedrawStationCoverage(this);
918
919
/** Widget definition of the build raod station window */
919
920
static const Widget _rv_station_picker_widgets[] = {
920
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // BRSW_CLOSEBOX
921
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 206, 0, 13, STR_NULL, STR_018C_WINDOW_TITLE_DRAG_THIS}, // BRSW_CAPTION
922
{ WWT_PANEL, RESIZE_NONE, 7, 0, 206, 14, 176, 0x0, STR_NULL}, // BRSW_BACKGROUND
924
{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 17, 66, 0x0, STR_NULL}, // BRSW_STATION_NE
925
{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 69, 118, 0x0, STR_NULL}, // BRSW_STATION_SE
926
{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 69, 118, 0x0, STR_NULL}, // BRSW_STATION_SW
927
{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 17, 66, 0x0, STR_NULL}, // BRSW_STATION_NW
928
{ WWT_PANEL, RESIZE_NONE, 14, 139, 204, 17, 66, 0x0, STR_NULL}, // BRSW_STATION_X
929
{ WWT_PANEL, RESIZE_NONE, 14, 139, 204, 69, 118, 0x0, STR_NULL}, // BRSW_STATION_Y
931
{ WWT_TEXTBTN, RESIZE_NONE, 14, 10, 69, 133, 144, STR_02DB_OFF, STR_3065_DON_T_HIGHLIGHT_COVERAGE}, // BRSW_LT_OFF
932
{ WWT_TEXTBTN, RESIZE_NONE, 14, 70, 129, 133, 144, STR_02DA_ON, STR_3064_HIGHLIGHT_COVERAGE_AREA}, // BRSW_LT_ON
933
{ WWT_LABEL, RESIZE_NONE, 7, 0, 139, 120, 133, STR_3066_COVERAGE_AREA_HIGHLIGHT, STR_NULL}, // BRSW_INFO
921
{ WWT_CLOSEBOX, RESIZE_NONE, COLOUR_DARK_GREEN, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // BRSW_CLOSEBOX
922
{ WWT_CAPTION, RESIZE_NONE, COLOUR_DARK_GREEN, 11, 206, 0, 13, STR_NULL, STR_018C_WINDOW_TITLE_DRAG_THIS}, // BRSW_CAPTION
923
{ WWT_PANEL, RESIZE_NONE, COLOUR_DARK_GREEN, 0, 206, 14, 176, 0x0, STR_NULL}, // BRSW_BACKGROUND
925
{ WWT_PANEL, RESIZE_NONE, COLOUR_GREY, 71, 136, 17, 66, 0x0, STR_NULL}, // BRSW_STATION_NE
926
{ WWT_PANEL, RESIZE_NONE, COLOUR_GREY, 71, 136, 69, 118, 0x0, STR_NULL}, // BRSW_STATION_SE
927
{ WWT_PANEL, RESIZE_NONE, COLOUR_GREY, 3, 68, 69, 118, 0x0, STR_NULL}, // BRSW_STATION_SW
928
{ WWT_PANEL, RESIZE_NONE, COLOUR_GREY, 3, 68, 17, 66, 0x0, STR_NULL}, // BRSW_STATION_NW
929
{ WWT_PANEL, RESIZE_NONE, COLOUR_GREY, 139, 204, 17, 66, 0x0, STR_NULL}, // BRSW_STATION_X
930
{ WWT_PANEL, RESIZE_NONE, COLOUR_GREY, 139, 204, 69, 118, 0x0, STR_NULL}, // BRSW_STATION_Y
932
{ WWT_TEXTBTN, RESIZE_NONE, COLOUR_GREY, 10, 69, 133, 144, STR_02DB_OFF, STR_3065_DON_T_HIGHLIGHT_COVERAGE}, // BRSW_LT_OFF
933
{ WWT_TEXTBTN, RESIZE_NONE, COLOUR_GREY, 70, 129, 133, 144, STR_02DA_ON, STR_3064_HIGHLIGHT_COVERAGE_AREA}, // BRSW_LT_ON
934
{ WWT_LABEL, RESIZE_NONE, COLOUR_DARK_GREEN, 0, 139, 120, 133, STR_3066_COVERAGE_AREA_HIGHLIGHT, STR_NULL}, // BRSW_INFO
937
static const WindowDesc _rv_station_picker_desc = {
938
static const WindowDesc _rv_station_picker_desc(
938
939
WDP_AUTO, WDP_AUTO, 207, 177, 207, 177,
939
940
WC_BUS_STATION, WC_BUILD_TOOLBAR,
940
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
941
_rv_station_picker_widgets,
942
RoadStationPickerWndProc
941
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_CONSTRUCTION,
942
_rv_station_picker_widgets
945
static void ShowRVStationPicker(RoadStop::Type rs)
945
static void ShowRVStationPicker(Window *parent, RoadStopType rs)
947
Window *w = AllocateWindowDesc(&_rv_station_picker_desc);
948
if (w == NULL) return;
950
w->window_class = (rs == RoadStop::BUS) ? WC_BUS_STATION : WC_TRUCK_STATION;
951
w->widget[BRSW_CAPTION].data = _road_type_infos[_cur_roadtype].picker_title[rs];
952
for (uint i = BRSW_STATION_NE; i < BRSW_LT_OFF; i++) w->widget[i].tooltips = _road_type_infos[_cur_roadtype].picker_tooltip[rs];
947
new BuildRoadStationWindow(&_rv_station_picker_desc, parent, rs);
955
950
void InitializeRoadGui()