641 for (bits = _patches.station_spread; bits < 7; bits++) { |
653 for (bits = _patches.station_spread; bits < 7; bits++) { |
642 SETBIT(w->disabled_state, bits + 5); |
654 SETBIT(w->disabled_state, bits + 5); |
643 SETBIT(w->disabled_state, bits + 12); |
655 SETBIT(w->disabled_state, bits + 12); |
644 } |
656 } |
645 |
657 |
|
658 if (newstations) { |
|
659 const StationSpec *statspec = GetCustomStationSpec(_railstation.station_class, _railstation.station_type); |
|
660 |
|
661 if (statspec != NULL) { |
|
662 for (bits = 0; bits < 7; bits++) { |
|
663 if (HASBIT(statspec->disallowed_platforms, bits)) SETBIT(w->disabled_state, bits + 5); |
|
664 if (HASBIT(statspec->disallowed_lengths, bits)) SETBIT(w->disabled_state, bits + 12); |
|
665 } |
|
666 } |
|
667 } |
|
668 |
|
669 SetDParam(0, GetStationClassName(_railstation.station_class)); |
646 DrawWindowWidgets(w); |
670 DrawWindowWidgets(w); |
647 |
671 |
648 StationPickerDrawSprite(39, 42, _cur_railtype, 2); |
672 y_offset = newstations ? 90 : 0; |
649 StationPickerDrawSprite(107, 42, _cur_railtype, 3); |
673 |
650 |
674 if (!DrawStationTile(39, 42 + y_offset, _cur_railtype, AXIS_X, _railstation.station_class, _railstation.station_type)) { |
651 DrawStringCentered(74, 15, STR_3002_ORIENTATION, 0); |
675 StationPickerDrawSprite(39, 42 + y_offset, _cur_railtype, 2); |
652 DrawStringCentered(74, 76, STR_3003_NUMBER_OF_TRACKS, 0); |
676 } |
653 DrawStringCentered(74, 101, STR_3004_PLATFORM_LENGTH, 0); |
677 if (!DrawStationTile(107, 42 + y_offset, _cur_railtype, AXIS_Y, _railstation.station_class, _railstation.station_type)) { |
654 DrawStringCentered(74, 141, STR_3066_COVERAGE_AREA_HIGHLIGHT, 0); |
678 StationPickerDrawSprite(107, 42 + y_offset, _cur_railtype, 3); |
655 |
679 } |
656 DrawStationCoverageAreaText(2, 166, (uint)-1, rad); |
680 |
|
681 DrawStringCentered(74, 15 + y_offset, STR_3002_ORIENTATION, 0); |
|
682 DrawStringCentered(74, 76 + y_offset, STR_3003_NUMBER_OF_TRACKS, 0); |
|
683 DrawStringCentered(74, 101 + y_offset, STR_3004_PLATFORM_LENGTH, 0); |
|
684 DrawStringCentered(74, 141 + y_offset, STR_3066_COVERAGE_AREA_HIGHLIGHT, 0); |
|
685 |
|
686 DrawStationCoverageAreaText(2, 166 + y_offset, (uint)-1, rad); |
|
687 |
|
688 if (newstations) { |
|
689 uint i; |
|
690 uint y = 35; |
|
691 |
|
692 for (i = w->vscroll.pos; i < _railstation.station_count && i < w->vscroll.pos + w->vscroll.cap; i++) { |
|
693 const StationSpec *statspec = GetCustomStationSpec(_railstation.station_class, i); |
|
694 |
|
695 if (statspec != NULL && statspec->name != 0) { |
|
696 if (HASBIT(statspec->callbackmask, CBM_STATION_AVAIL) && GetStationCallback(CBID_STATION_AVAILABILITY, 0, 0, statspec, NULL, INVALID_TILE) == 0) { |
|
697 GfxFillRect(8, y - 2, 127, y + 10, PALETTE_MODIFIER_GREYOUT); |
|
698 } |
|
699 |
|
700 DrawStringTruncated(9, y, statspec->name, i == _railstation.station_type ? 12 : 16, 118); |
|
701 } else { |
|
702 DrawStringTruncated(9, y, STR_STAT_CLASS_DFLT, i == _railstation.station_type ? 12 : 16, 118); |
|
703 } |
|
704 |
|
705 y += 14; |
|
706 } |
|
707 } |
657 } break; |
708 } break; |
658 |
709 |
659 case WE_CLICK: { |
710 case WE_CLICK: { |
660 switch (e->click.widget) { |
711 switch (e->click.widget) { |
661 case 3: |
712 case 3: |
747 { WWT_TEXTBTN, RESIZE_NONE, 14, 14, 73, 152, 163, STR_02DB_OFF, STR_3065_DON_T_HIGHLIGHT_COVERAGE}, |
836 { WWT_TEXTBTN, RESIZE_NONE, 14, 14, 73, 152, 163, STR_02DB_OFF, STR_3065_DON_T_HIGHLIGHT_COVERAGE}, |
748 { WWT_TEXTBTN, RESIZE_NONE, 14, 74, 133, 152, 163, STR_02DA_ON, STR_3064_HIGHLIGHT_COVERAGE_AREA}, |
837 { WWT_TEXTBTN, RESIZE_NONE, 14, 74, 133, 152, 163, STR_02DA_ON, STR_3064_HIGHLIGHT_COVERAGE_AREA}, |
749 { WIDGETS_END}, |
838 { WIDGETS_END}, |
750 }; |
839 }; |
751 |
840 |
|
841 static const Widget _newstation_builder_widgets[] = { |
|
842 { WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, |
|
843 { WWT_CAPTION, RESIZE_NONE, 7, 11, 147, 0, 13, STR_3000_RAIL_STATION_SELECTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, |
|
844 { WWT_PANEL, RESIZE_NONE, 7, 0, 147, 14, 289, 0x0, STR_NULL}, |
|
845 { WWT_PANEL, RESIZE_NONE, 14, 7, 72, 116, 163, 0x0, STR_304E_SELECT_RAILROAD_STATION}, |
|
846 { WWT_PANEL, RESIZE_NONE, 14, 75, 140, 116, 163, 0x0, STR_304E_SELECT_RAILROAD_STATION}, |
|
847 |
|
848 { WWT_TEXTBTN, RESIZE_NONE, 14, 22, 36, 177, 188, STR_00CB_1, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, |
|
849 { WWT_TEXTBTN, RESIZE_NONE, 14, 37, 51, 177, 188, STR_00CC_2, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, |
|
850 { WWT_TEXTBTN, RESIZE_NONE, 14, 52, 66, 177, 188, STR_00CD_3, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, |
|
851 { WWT_TEXTBTN, RESIZE_NONE, 14, 67, 81, 177, 188, STR_00CE_4, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, |
|
852 { WWT_TEXTBTN, RESIZE_NONE, 14, 82, 96, 177, 188, STR_00CF_5, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, |
|
853 { WWT_TEXTBTN, RESIZE_NONE, 14, 97, 111, 177, 188, STR_0335_6, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, |
|
854 { WWT_TEXTBTN, RESIZE_NONE, 14, 112, 126, 177, 188, STR_0336_7, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, |
|
855 |
|
856 { WWT_TEXTBTN, RESIZE_NONE, 14, 22, 36, 202, 213, STR_00CB_1, STR_3050_SELECT_LENGTH_OF_RAILROAD}, |
|
857 { WWT_TEXTBTN, RESIZE_NONE, 14, 37, 51, 202, 213, STR_00CC_2, STR_3050_SELECT_LENGTH_OF_RAILROAD}, |
|
858 { WWT_TEXTBTN, RESIZE_NONE, 14, 52, 66, 202, 213, STR_00CD_3, STR_3050_SELECT_LENGTH_OF_RAILROAD}, |
|
859 { WWT_TEXTBTN, RESIZE_NONE, 14, 67, 81, 202, 213, STR_00CE_4, STR_3050_SELECT_LENGTH_OF_RAILROAD}, |
|
860 { WWT_TEXTBTN, RESIZE_NONE, 14, 82, 96, 202, 213, STR_00CF_5, STR_3050_SELECT_LENGTH_OF_RAILROAD}, |
|
861 { WWT_TEXTBTN, RESIZE_NONE, 14, 97, 111, 202, 213, STR_0335_6, STR_3050_SELECT_LENGTH_OF_RAILROAD}, |
|
862 { WWT_TEXTBTN, RESIZE_NONE, 14, 112, 126, 202, 213, STR_0336_7, STR_3050_SELECT_LENGTH_OF_RAILROAD}, |
|
863 |
|
864 { WWT_TEXTBTN, RESIZE_NONE, 14, 37, 111, 216, 227, STR_DRAG_DROP, STR_STATION_DRAG_DROP}, |
|
865 { WWT_TEXTBTN, RESIZE_NONE, 14, 14, 73, 242, 253, STR_02DB_OFF, STR_3065_DON_T_HIGHLIGHT_COVERAGE}, |
|
866 { WWT_TEXTBTN, RESIZE_NONE, 14, 74, 133, 242, 253, STR_02DA_ON, STR_3064_HIGHLIGHT_COVERAGE_AREA}, |
|
867 |
|
868 /* newstations gui additions */ |
|
869 { WWT_6, RESIZE_NONE, 14, 7, 140, 17, 28, STR_02BD, STR_WAYPOINT_GRAPHICS_TIP}, |
|
870 { WWT_TEXTBTN, RESIZE_NONE, 14, 129, 139, 18, 27, STR_0225, STR_WAYPOINT_GRAPHICS_TIP}, |
|
871 { WWT_MATRIX, RESIZE_NONE, 14, 7, 128, 32, 102, 0x501, STR_WAYPOINT_GRAPHICS_TIP}, |
|
872 { WWT_SCROLLBAR, RESIZE_NONE, 14, 129, 140, 32, 102, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
|
873 { WIDGETS_END}, |
|
874 }; |
|
875 |
752 static const WindowDesc _station_builder_desc = { |
876 static const WindowDesc _station_builder_desc = { |
753 -1, -1, 148, 200, |
877 -1, -1, 148, 200, |
754 WC_BUILD_STATION,WC_BUILD_TOOLBAR, |
878 WC_BUILD_STATION,WC_BUILD_TOOLBAR, |
755 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET, |
879 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET, |
756 _station_builder_widgets, |
880 _station_builder_widgets, |
757 StationBuildWndProc |
881 StationBuildWndProc |
758 }; |
882 }; |
759 |
883 |
|
884 static const WindowDesc _newstation_builder_desc = { |
|
885 -1, -1, 148, 290, |
|
886 WC_BUILD_STATION,WC_BUILD_TOOLBAR, |
|
887 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET, |
|
888 _newstation_builder_widgets, |
|
889 StationBuildWndProc |
|
890 }; |
|
891 |
760 static void ShowStationBuilder(void) |
892 static void ShowStationBuilder(void) |
761 { |
893 { |
762 AllocateWindowDesc(&_station_builder_desc); |
894 Window *w; |
|
895 if (GetNumStationClasses() <= 2 && GetNumCustomStations(STAT_CLASS_DFLT) == 1) { |
|
896 w = AllocateWindowDesc(&_station_builder_desc); |
|
897 _railstation.newstations = false; |
|
898 } else { |
|
899 w = AllocateWindowDesc(&_newstation_builder_desc); |
|
900 _railstation.newstations = true; |
|
901 _railstation.station_count = GetNumCustomStations(_railstation.station_class); |
|
902 |
|
903 w->vscroll.count = _railstation.station_count; |
|
904 w->vscroll.cap = 5; |
|
905 w->vscroll.pos = clamp(_railstation.station_type - 2, 0, w->vscroll.count - w->vscroll.cap); |
|
906 } |
763 } |
907 } |
764 |
908 |
765 static void BuildTrainDepotWndProc(Window *w, WindowEvent *e) |
909 static void BuildTrainDepotWndProc(Window *w, WindowEvent *e) |
766 { |
910 { |
767 switch (e->event) { |
911 switch (e->event) { |
836 w->click_state = (1 << 3) << (_cur_waypoint_type - w->hscroll.pos); |
980 w->click_state = (1 << 3) << (_cur_waypoint_type - w->hscroll.pos); |
837 DrawWindowWidgets(w); |
981 DrawWindowWidgets(w); |
838 |
982 |
839 for (i = 0; i < 5; i++) { |
983 for (i = 0; i < 5; i++) { |
840 if (w->hscroll.pos + i < _waypoint_count) { |
984 if (w->hscroll.pos + i < _waypoint_count) { |
|
985 const StationSpec *statspec = GetCustomStationSpec(STAT_CLASS_WAYP, w->hscroll.pos + i); |
|
986 |
841 DrawWaypointSprite(2 + i * 68, 25, w->hscroll.pos + i, _cur_railtype); |
987 DrawWaypointSprite(2 + i * 68, 25, w->hscroll.pos + i, _cur_railtype); |
|
988 |
|
989 if (statspec != NULL && |
|
990 HASBIT(statspec->callbackmask, CBM_STATION_AVAIL) && |
|
991 GetStationCallback(CBID_STATION_AVAILABILITY, 0, 0, statspec, NULL, INVALID_TILE) == 0) { |
|
992 GfxFillRect(4 + i * 68, 18, 67 + i * 68, 75, PALETTE_MODIFIER_GREYOUT); |
|
993 } |
842 } |
994 } |
843 } |
995 } |
844 break; |
996 break; |
845 } |
997 } |
846 case WE_CLICK: { |
998 case WE_CLICK: { |
847 switch (e->click.widget) { |
999 switch (e->click.widget) { |
848 case 3: case 4: case 5: case 6: case 7: |
1000 case 3: case 4: case 5: case 6: case 7: { |
849 _cur_waypoint_type = e->click.widget - 3 + w->hscroll.pos; |
1001 byte type = e->click.widget - 3 + w->hscroll.pos; |
|
1002 |
|
1003 /* Check station availability callback */ |
|
1004 const StationSpec *statspec = GetCustomStationSpec(STAT_CLASS_WAYP, type); |
|
1005 if (statspec != NULL && |
|
1006 HASBIT(statspec->callbackmask, CBM_STATION_AVAIL) && |
|
1007 GetStationCallback(CBID_STATION_AVAILABILITY, 0, 0, statspec, NULL, INVALID_TILE) == 0) return; |
|
1008 |
|
1009 _cur_waypoint_type = type; |
850 SndPlayFx(SND_15_BEEP); |
1010 SndPlayFx(SND_15_BEEP); |
851 SetWindowDirty(w); |
1011 SetWindowDirty(w); |
852 break; |
1012 break; |
|
1013 } |
853 } |
1014 } |
854 break; |
1015 break; |
855 } |
1016 } |
856 |
1017 |
857 case WE_MOUSELOOP: |
1018 case WE_MOUSELOOP: |