712 { |
712 { |
713 _cur_roadtype = ROADTYPE_ROAD; |
713 _cur_roadtype = ROADTYPE_ROAD; |
714 AllocateWindowDescFront<Window>(&_build_road_scen_desc, 0); |
714 AllocateWindowDescFront<Window>(&_build_road_scen_desc, 0); |
715 } |
715 } |
716 |
716 |
717 /** Enum referring to the widgets of the build road depot window */ |
717 struct BuildRoadDepotWindow : public PickerWindowBase { |
718 enum BuildRoadDepotWidgets { |
718 private: |
719 BRDW_CLOSEBOX = 0, |
719 /** Enum referring to the widgets of the build road depot window */ |
720 BRDW_CAPTION, |
720 enum BuildRoadDepotWidgets { |
721 BRDW_BACKGROUND, |
721 BRDW_CLOSEBOX = 0, |
722 BRDW_DEPOT_NE, |
722 BRDW_CAPTION, |
723 BRDW_DEPOT_SE, |
723 BRDW_BACKGROUND, |
724 BRDW_DEPOT_SW, |
724 BRDW_DEPOT_NE, |
725 BRDW_DEPOT_NW, |
725 BRDW_DEPOT_SE, |
726 }; |
726 BRDW_DEPOT_SW, |
727 |
727 BRDW_DEPOT_NW, |
728 static void BuildRoadDepotWndProc(Window *w, WindowEvent *e) |
728 }; |
729 { |
729 |
730 switch (e->event) { |
730 public: |
731 case WE_CREATE: |
731 BuildRoadDepotWindow(const WindowDesc *desc) : PickerWindowBase(desc) |
732 w->LowerWidget(_road_depot_orientation + BRDW_DEPOT_NE); |
732 { |
733 break; |
733 this->LowerWidget(_road_depot_orientation + BRDW_DEPOT_NE); |
734 |
734 if ( _cur_roadtype == ROADTYPE_TRAM) { |
735 case WE_PAINT: |
735 this->widget[BRDW_CAPTION].data = STR_TRAM_DEPOT_ORIENTATION; |
736 w->DrawWidgets(); |
736 for (int i = BRDW_DEPOT_NE; i <= BRDW_DEPOT_NW; i++) this->widget[i].tooltips = STR_SELECT_TRAM_VEHICLE_DEPOT; |
737 |
737 } |
738 DrawRoadDepotSprite(70, 17, DIAGDIR_NE, _cur_roadtype); |
738 this->FindWindowPlacementAndResize(desc); |
739 DrawRoadDepotSprite(70, 69, DIAGDIR_SE, _cur_roadtype); |
739 } |
740 DrawRoadDepotSprite( 2, 69, DIAGDIR_SW, _cur_roadtype); |
740 |
741 DrawRoadDepotSprite( 2, 17, DIAGDIR_NW, _cur_roadtype); |
741 virtual void OnPaint() |
742 break; |
742 { |
743 |
743 this->DrawWidgets(); |
744 case WE_CLICK: |
744 |
745 switch (e->we.click.widget) { |
745 DrawRoadDepotSprite(70, 17, DIAGDIR_NE, _cur_roadtype); |
746 case BRDW_DEPOT_NW: |
746 DrawRoadDepotSprite(70, 69, DIAGDIR_SE, _cur_roadtype); |
747 case BRDW_DEPOT_NE: |
747 DrawRoadDepotSprite( 2, 69, DIAGDIR_SW, _cur_roadtype); |
748 case BRDW_DEPOT_SW: |
748 DrawRoadDepotSprite( 2, 17, DIAGDIR_NW, _cur_roadtype); |
749 case BRDW_DEPOT_SE: |
749 } |
750 w->RaiseWidget(_road_depot_orientation + BRDW_DEPOT_NE); |
750 |
751 _road_depot_orientation = (DiagDirection)(e->we.click.widget - BRDW_DEPOT_NE); |
751 virtual void OnClick(Point pt, int widget) |
752 w->LowerWidget(_road_depot_orientation + BRDW_DEPOT_NE); |
752 { |
753 SndPlayFx(SND_15_BEEP); |
753 switch (widget) { |
754 w->SetDirty(); |
754 case BRDW_DEPOT_NW: |
755 break; |
755 case BRDW_DEPOT_NE: |
756 |
756 case BRDW_DEPOT_SW: |
757 default: |
757 case BRDW_DEPOT_SE: |
758 break; |
758 this->RaiseWidget(_road_depot_orientation + BRDW_DEPOT_NE); |
759 } |
759 _road_depot_orientation = (DiagDirection)(widget - BRDW_DEPOT_NE); |
760 break; |
760 this->LowerWidget(_road_depot_orientation + BRDW_DEPOT_NE); |
761 |
761 SndPlayFx(SND_15_BEEP); |
762 case WE_DESTROY: |
762 this->SetDirty(); |
763 ResetObjectToPlace(); |
763 break; |
764 break; |
764 |
765 |
765 default: |
766 default: |
766 break; |
767 break; |
767 } |
768 } |
768 } |
769 } |
769 }; |
770 |
770 |
771 /** Widget definition of the build road depot window */ |
771 /** Widget definition of the build road depot window */ |
772 static const Widget _build_road_depot_widgets[] = { |
772 static const Widget _build_road_depot_widgets[] = { |
773 { WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // BRDW_CLOSEBOX |
773 { WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // BRDW_CLOSEBOX |
774 { WWT_CAPTION, RESIZE_NONE, 7, 11, 139, 0, 13, STR_1806_ROAD_DEPOT_ORIENTATION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // BRDW_CAPTION |
774 { WWT_CAPTION, RESIZE_NONE, 7, 11, 139, 0, 13, STR_1806_ROAD_DEPOT_ORIENTATION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // BRDW_CAPTION |
778 { WWT_PANEL, RESIZE_NONE, 14, 3, 68, 69, 118, 0x0, STR_1813_SELECT_ROAD_VEHICLE_DEPOT}, // BRDW_DEPOT_SW |
778 { WWT_PANEL, RESIZE_NONE, 14, 3, 68, 69, 118, 0x0, STR_1813_SELECT_ROAD_VEHICLE_DEPOT}, // BRDW_DEPOT_SW |
779 { WWT_PANEL, RESIZE_NONE, 14, 3, 68, 17, 66, 0x0, STR_1813_SELECT_ROAD_VEHICLE_DEPOT}, // BRDW_DEPOT_NW |
779 { WWT_PANEL, RESIZE_NONE, 14, 3, 68, 17, 66, 0x0, STR_1813_SELECT_ROAD_VEHICLE_DEPOT}, // BRDW_DEPOT_NW |
780 { WIDGETS_END}, |
780 { WIDGETS_END}, |
781 }; |
781 }; |
782 |
782 |
783 /** Widget definition of the build tram depot window */ |
|
784 static const Widget _build_tram_depot_widgets[] = { |
|
785 { WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // BRDW_CLOSEBOX |
|
786 { WWT_CAPTION, RESIZE_NONE, 7, 11, 139, 0, 13, STR_TRAM_DEPOT_ORIENTATION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // BRDW_CAPTION |
|
787 { WWT_PANEL, RESIZE_NONE, 7, 0, 139, 14, 121, 0x0, STR_NULL}, // BRDW_BACKGROUND |
|
788 { WWT_PANEL, RESIZE_NONE, 14, 71, 136, 17, 66, 0x0, STR_SELECT_TRAM_VEHICLE_DEPOT}, // BRDW_DEPOT_NE |
|
789 { WWT_PANEL, RESIZE_NONE, 14, 71, 136, 69, 118, 0x0, STR_SELECT_TRAM_VEHICLE_DEPOT}, // BRDW_DEPOT_SE |
|
790 { WWT_PANEL, RESIZE_NONE, 14, 3, 68, 69, 118, 0x0, STR_SELECT_TRAM_VEHICLE_DEPOT}, // BRDW_DEPOT_SW |
|
791 { WWT_PANEL, RESIZE_NONE, 14, 3, 68, 17, 66, 0x0, STR_SELECT_TRAM_VEHICLE_DEPOT}, // BRDW_DEPOT_NW |
|
792 { WIDGETS_END}, |
|
793 }; |
|
794 |
|
795 static const WindowDesc _build_road_depot_desc = { |
783 static const WindowDesc _build_road_depot_desc = { |
796 WDP_AUTO, WDP_AUTO, 140, 122, 140, 122, |
784 WDP_AUTO, WDP_AUTO, 140, 122, 140, 122, |
797 WC_BUILD_DEPOT, WC_BUILD_TOOLBAR, |
785 WC_BUILD_DEPOT, WC_BUILD_TOOLBAR, |
798 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET, |
786 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET, |
799 _build_road_depot_widgets, |
787 _build_road_depot_widgets, |
800 BuildRoadDepotWndProc |
788 NULL |
801 }; |
|
802 |
|
803 static const WindowDesc _build_tram_depot_desc = { |
|
804 WDP_AUTO, WDP_AUTO, 140, 122, 140, 122, |
|
805 WC_BUILD_DEPOT, WC_BUILD_TOOLBAR, |
|
806 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET, |
|
807 _build_tram_depot_widgets, |
|
808 BuildRoadDepotWndProc |
|
809 }; |
789 }; |
810 |
790 |
811 static void ShowRoadDepotPicker() |
791 static void ShowRoadDepotPicker() |
812 { |
792 { |
813 new Window(_cur_roadtype == ROADTYPE_ROAD ? &_build_road_depot_desc : &_build_tram_depot_desc); |
793 new BuildRoadDepotWindow(&_build_road_depot_desc); |
814 } |
794 } |
815 |
795 |
816 /** Enum referring to the widgets of the build road station window */ |
796 struct BuildRoadStationWindow : public PickerWindowBase { |
817 enum BuildRoadStationWidgets { |
797 private: |
818 BRSW_CLOSEBOX = 0, |
798 /** Enum referring to the widgets of the build road station window */ |
819 BRSW_CAPTION, |
799 enum BuildRoadStationWidgets { |
820 BRSW_BACKGROUND, |
800 BRSW_CLOSEBOX = 0, |
821 BRSW_STATION_NE, |
801 BRSW_CAPTION, |
822 BRSW_STATION_SE, |
802 BRSW_BACKGROUND, |
823 BRSW_STATION_SW, |
803 BRSW_STATION_NE, |
824 BRSW_STATION_NW, |
804 BRSW_STATION_SE, |
825 BRSW_STATION_X, |
805 BRSW_STATION_SW, |
826 BRSW_STATION_Y, |
806 BRSW_STATION_NW, |
827 BRSW_LT_OFF, |
807 BRSW_STATION_X, |
828 BRSW_LT_ON, |
808 BRSW_STATION_Y, |
829 BRSW_INFO, |
809 BRSW_LT_OFF, |
830 }; |
810 BRSW_LT_ON, |
831 |
811 BRSW_INFO, |
832 static void RoadStationPickerWndProc(Window *w, WindowEvent *e) |
812 }; |
833 { |
813 |
834 switch (e->event) { |
814 public: |
835 case WE_CREATE: |
815 BuildRoadStationWindow(const WindowDesc *desc, RoadStopType rs) : PickerWindowBase(desc) |
836 /* Trams don't have non-drivethrough stations */ |
816 { |
837 if (_cur_roadtype == ROADTYPE_TRAM && _road_station_picker_orientation < DIAGDIR_END) { |
817 /* Trams don't have non-drivethrough stations */ |
838 _road_station_picker_orientation = DIAGDIR_END; |
818 if (_cur_roadtype == ROADTYPE_TRAM && _road_station_picker_orientation < DIAGDIR_END) { |
839 } |
819 _road_station_picker_orientation = DIAGDIR_END; |
840 w->SetWidgetsDisabledState(_cur_roadtype == ROADTYPE_TRAM, |
820 } |
841 BRSW_STATION_NE, |
821 this->SetWidgetsDisabledState(_cur_roadtype == ROADTYPE_TRAM, |
842 BRSW_STATION_SE, |
822 BRSW_STATION_NE, |
843 BRSW_STATION_SW, |
823 BRSW_STATION_SE, |
844 BRSW_STATION_NW, |
824 BRSW_STATION_SW, |
845 WIDGET_LIST_END); |
825 BRSW_STATION_NW, |
846 |
826 WIDGET_LIST_END); |
847 w->LowerWidget(_road_station_picker_orientation + BRSW_STATION_NE); |
827 |
848 w->LowerWidget(_station_show_coverage + BRSW_LT_OFF); |
828 this->window_class = (rs == ROADSTOP_BUS) ? WC_BUS_STATION : WC_TRUCK_STATION; |
849 break; |
829 this->widget[BRSW_CAPTION].data = _road_type_infos[_cur_roadtype].picker_title[rs]; |
850 |
830 for (uint i = BRSW_STATION_NE; i < BRSW_LT_OFF; i++) this->widget[i].tooltips = _road_type_infos[_cur_roadtype].picker_tooltip[rs]; |
851 case WE_PAINT: { |
831 |
852 w->DrawWidgets(); |
832 this->LowerWidget(_road_station_picker_orientation + BRSW_STATION_NE); |
853 |
833 this->LowerWidget(_station_show_coverage + BRSW_LT_OFF); |
854 if (_station_show_coverage) { |
834 this->FindWindowPlacementAndResize(desc); |
855 int rad = _patches.modified_catchment ? CA_TRUCK /* = CA_BUS */ : CA_UNMODIFIED; |
835 } |
856 SetTileSelectBigSize(-rad, -rad, 2 * rad, 2 * rad); |
836 |
857 } else { |
837 virtual void OnPaint() |
858 SetTileSelectSize(1, 1); |
838 { |
859 } |
839 this->DrawWidgets(); |
860 |
840 |
861 StationType st = (w->window_class == WC_BUS_STATION) ? STATION_BUS : STATION_TRUCK; |
841 if (_station_show_coverage) { |
862 |
842 int rad = _patches.modified_catchment ? CA_TRUCK /* = CA_BUS */ : CA_UNMODIFIED; |
863 StationPickerDrawSprite(103, 35, st, INVALID_RAILTYPE, ROADTYPE_ROAD, 0); |
843 SetTileSelectBigSize(-rad, -rad, 2 * rad, 2 * rad); |
864 StationPickerDrawSprite(103, 85, st, INVALID_RAILTYPE, ROADTYPE_ROAD, 1); |
844 } else { |
865 StationPickerDrawSprite( 35, 85, st, INVALID_RAILTYPE, ROADTYPE_ROAD, 2); |
845 SetTileSelectSize(1, 1); |
866 StationPickerDrawSprite( 35, 35, st, INVALID_RAILTYPE, ROADTYPE_ROAD, 3); |
846 } |
867 |
847 |
868 StationPickerDrawSprite(171, 35, st, INVALID_RAILTYPE, _cur_roadtype, 4); |
848 StationType st = (this->window_class == WC_BUS_STATION) ? STATION_BUS : STATION_TRUCK; |
869 StationPickerDrawSprite(171, 85, st, INVALID_RAILTYPE, _cur_roadtype, 5); |
849 |
870 |
850 StationPickerDrawSprite(103, 35, st, INVALID_RAILTYPE, ROADTYPE_ROAD, 0); |
871 int text_end = DrawStationCoverageAreaText(2, 146, |
851 StationPickerDrawSprite(103, 85, st, INVALID_RAILTYPE, ROADTYPE_ROAD, 1); |
872 (w->window_class == WC_BUS_STATION) ? SCT_PASSENGERS_ONLY : SCT_NON_PASSENGERS_ONLY, |
852 StationPickerDrawSprite( 35, 85, st, INVALID_RAILTYPE, ROADTYPE_ROAD, 2); |
873 3, false); |
853 StationPickerDrawSprite( 35, 35, st, INVALID_RAILTYPE, ROADTYPE_ROAD, 3); |
874 text_end = DrawStationCoverageAreaText(2, text_end + 4, |
854 |
875 (w->window_class == WC_BUS_STATION) ? SCT_PASSENGERS_ONLY : SCT_NON_PASSENGERS_ONLY, |
855 StationPickerDrawSprite(171, 35, st, INVALID_RAILTYPE, _cur_roadtype, 4); |
876 3, true) + 4; |
856 StationPickerDrawSprite(171, 85, st, INVALID_RAILTYPE, _cur_roadtype, 5); |
877 if (text_end > w->widget[BRSW_BACKGROUND].bottom) { |
857 |
878 w->SetDirty(); |
858 int text_end = DrawStationCoverageAreaText(2, 146, |
879 ResizeWindowForWidget(w, BRSW_BACKGROUND, 0, text_end - w->widget[BRSW_BACKGROUND].bottom); |
859 (this->window_class == WC_BUS_STATION) ? SCT_PASSENGERS_ONLY : SCT_NON_PASSENGERS_ONLY, |
880 w->SetDirty(); |
860 3, false); |
881 } |
861 text_end = DrawStationCoverageAreaText(2, text_end + 4, |
882 } break; |
862 (this->window_class == WC_BUS_STATION) ? SCT_PASSENGERS_ONLY : SCT_NON_PASSENGERS_ONLY, |
883 |
863 3, true) + 4; |
884 case WE_CLICK: |
864 if (text_end > this->widget[BRSW_BACKGROUND].bottom) { |
885 switch (e->we.click.widget) { |
865 this->SetDirty(); |
886 case BRSW_STATION_NE: |
866 ResizeWindowForWidget(this, BRSW_BACKGROUND, 0, text_end - this->widget[BRSW_BACKGROUND].bottom); |
887 case BRSW_STATION_SE: |
867 this->SetDirty(); |
888 case BRSW_STATION_SW: |
868 } |
889 case BRSW_STATION_NW: |
869 } |
890 case BRSW_STATION_X: |
870 |
891 case BRSW_STATION_Y: |
871 virtual void OnClick(Point pt, int widget) |
892 w->RaiseWidget(_road_station_picker_orientation + BRSW_STATION_NE); |
872 { |
893 _road_station_picker_orientation = (DiagDirection)(e->we.click.widget - BRSW_STATION_NE); |
873 switch (widget) { |
894 w->LowerWidget(_road_station_picker_orientation + BRSW_STATION_NE); |
874 case BRSW_STATION_NE: |
895 SndPlayFx(SND_15_BEEP); |
875 case BRSW_STATION_SE: |
896 w->SetDirty(); |
876 case BRSW_STATION_SW: |
897 break; |
877 case BRSW_STATION_NW: |
898 |
878 case BRSW_STATION_X: |
899 case BRSW_LT_OFF: |
879 case BRSW_STATION_Y: |
900 case BRSW_LT_ON: |
880 this->RaiseWidget(_road_station_picker_orientation + BRSW_STATION_NE); |
901 w->RaiseWidget(_station_show_coverage + BRSW_LT_OFF); |
881 _road_station_picker_orientation = (DiagDirection)(widget - BRSW_STATION_NE); |
902 _station_show_coverage = (e->we.click.widget != BRSW_LT_OFF); |
882 this->LowerWidget(_road_station_picker_orientation + BRSW_STATION_NE); |
903 w->LowerWidget(_station_show_coverage + BRSW_LT_OFF); |
883 SndPlayFx(SND_15_BEEP); |
904 SndPlayFx(SND_15_BEEP); |
884 this->SetDirty(); |
905 w->SetDirty(); |
885 break; |
906 break; |
886 |
907 |
887 case BRSW_LT_OFF: |
908 default: |
888 case BRSW_LT_ON: |
909 break; |
889 this->RaiseWidget(_station_show_coverage + BRSW_LT_OFF); |
910 } |
890 _station_show_coverage = (widget != BRSW_LT_OFF); |
911 break; |
891 this->LowerWidget(_station_show_coverage + BRSW_LT_OFF); |
912 |
892 SndPlayFx(SND_15_BEEP); |
913 case WE_TICK: |
893 this->SetDirty(); |
914 CheckRedrawStationCoverage(w); |
894 break; |
915 break; |
895 |
916 |
896 default: |
917 case WE_DESTROY: |
897 break; |
918 ResetObjectToPlace(); |
898 } |
919 break; |
899 } |
920 |
900 |
921 default: |
901 virtual void OnTick() |
922 break; |
902 { |
923 } |
903 CheckRedrawStationCoverage(this); |
924 } |
904 } |
|
905 }; |
925 |
906 |
926 /** Widget definition of the build raod station window */ |
907 /** Widget definition of the build raod station window */ |
927 static const Widget _rv_station_picker_widgets[] = { |
908 static const Widget _rv_station_picker_widgets[] = { |
928 { WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // BRSW_CLOSEBOX |
909 { WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // BRSW_CLOSEBOX |
929 { WWT_CAPTION, RESIZE_NONE, 7, 11, 206, 0, 13, STR_NULL, STR_018C_WINDOW_TITLE_DRAG_THIS}, // BRSW_CAPTION |
910 { WWT_CAPTION, RESIZE_NONE, 7, 11, 206, 0, 13, STR_NULL, STR_018C_WINDOW_TITLE_DRAG_THIS}, // BRSW_CAPTION |