branch | NewGRF_ports |
changeset 6872 | 1c4a4a609f85 |
parent 6871 | 5a9dc001e1ad |
child 6877 | 889301acc299 |
6871:5a9dc001e1ad | 6872:1c4a4a609f85 |
---|---|
3 /** @file vehicle_gui.cpp */ |
3 /** @file vehicle_gui.cpp */ |
4 |
4 |
5 #include "stdafx.h" |
5 #include "stdafx.h" |
6 #include "openttd.h" |
6 #include "openttd.h" |
7 #include "debug.h" |
7 #include "debug.h" |
8 #include "functions.h" |
8 #include "player_func.h" |
9 #include "player.h" |
|
10 #include "station.h" |
9 #include "station.h" |
11 #include "strings.h" |
|
12 #include "table/sprites.h" |
|
13 #include "table/strings.h" |
|
14 #include "vehicle.h" |
|
15 #include "window.h" |
|
16 #include "engine.h" |
10 #include "engine.h" |
17 #include "gui.h" |
11 #include "gui.h" |
18 #include "command.h" |
12 #include "window_gui.h" |
19 #include "gfx.h" |
13 #include "textbuf_gui.h" |
14 #include "command_func.h" |
|
20 #include "variables.h" |
15 #include "variables.h" |
21 #include "vehicle_gui.h" |
16 #include "vehicle_gui.h" |
22 #include "viewport.h" |
17 #include "viewport_func.h" |
18 #include "gfx_func.h" |
|
23 #include "train.h" |
19 #include "train.h" |
24 #include "newgrf_callbacks.h" |
20 #include "newgrf_callbacks.h" |
25 #include "newgrf_engine.h" |
21 #include "newgrf_engine.h" |
26 #include "newgrf_text.h" |
22 #include "newgrf_text.h" |
27 #include "date.h" |
|
28 #include "ship.h" |
23 #include "ship.h" |
29 #include "aircraft.h" |
24 #include "aircraft.h" |
30 #include "roadveh.h" |
25 #include "roadveh.h" |
31 #include "depot.h" |
26 #include "depot.h" |
32 #include "helpers.hpp" |
|
33 #include "cargotype.h" |
27 #include "cargotype.h" |
34 #include "group.h" |
28 #include "group.h" |
29 #include "group_gui.h" |
|
30 #include "strings_func.h" |
|
31 #include "functions.h" |
|
32 #include "window_func.h" |
|
33 #include "vehicle_func.h" |
|
34 #include "autoreplace_gui.h" |
|
35 #include "core/alloc_func.hpp" |
|
36 #include "string_func.h" |
|
37 #include "settings_type.h" |
|
38 #include "widgets/dropdown_func.h" |
|
39 |
|
40 #include "table/sprites.h" |
|
41 #include "table/strings.h" |
|
35 |
42 |
36 struct Sorting { |
43 struct Sorting { |
37 Listing aircraft; |
44 Listing aircraft; |
38 Listing roadveh; |
45 Listing roadveh; |
39 Listing ship; |
46 Listing ship; |
504 |
511 |
505 /* Add each cargo type to the list */ |
512 /* Add each cargo type to the list */ |
506 for (CargoID cid = 0; cid < NUM_CARGO; cid++) { |
513 for (CargoID cid = 0; cid < NUM_CARGO; cid++) { |
507 if (!HasBit(cmask, cid)) continue; |
514 if (!HasBit(cmask, cid)) continue; |
508 |
515 |
516 if (b >= lastof(_userstring) - (2 + 2 * 4)) break; // ", " and two calls to Utf8Encode() |
|
517 |
|
509 if (!first) b = strecpy(b, ", ", lastof(_userstring)); |
518 if (!first) b = strecpy(b, ", ", lastof(_userstring)); |
510 first = false; |
519 first = false; |
511 |
520 |
512 b = InlineString(b, GetCargo(cid)->name); |
521 b = InlineString(b, GetCargo(cid)->name); |
513 } |
522 } |
514 } |
523 } |
515 |
524 |
516 /* Terminate and display the completed string */ |
525 /* Terminate and display the completed string */ |
517 *b = '\0'; |
526 *b = '\0'; |
527 |
|
528 /* Make sure we detect any buffer overflow */ |
|
529 assert(b < endof(_userstring)); |
|
530 |
|
518 return DrawStringMultiLine(x, y, STR_SPEC_USERSTRING, w); |
531 return DrawStringMultiLine(x, y, STR_SPEC_USERSTRING, w); |
519 } |
532 } |
520 |
533 |
521 |
534 |
522 /* if the sorting criteria had the same value, sort vehicle by unitnumber */ |
535 /* if the sorting criteria had the same value, sort vehicle by unitnumber */ |
540 const Vehicle* vb = *(const Vehicle**)b; |
553 const Vehicle* vb = *(const Vehicle**)b; |
541 int r; |
554 int r; |
542 |
555 |
543 if (va != last_vehicle[0]) { |
556 if (va != last_vehicle[0]) { |
544 last_vehicle[0] = va; |
557 last_vehicle[0] = va; |
545 if (IsCustomName(va->string_id)) { |
558 SetDParam(0, va->index); |
546 GetString(last_name[0], va->string_id, lastof(last_name[0])); |
559 GetString(last_name[0], STR_VEHICLE_NAME, lastof(last_name[0])); |
547 } else { |
|
548 last_name[0][0] = '\0'; |
|
549 } |
|
550 } |
560 } |
551 |
561 |
552 if (vb != last_vehicle[1]) { |
562 if (vb != last_vehicle[1]) { |
553 last_vehicle[1] = vb; |
563 last_vehicle[1] = vb; |
554 if (IsCustomName(vb->string_id)) { |
564 SetDParam(1, vb->index); |
555 GetString(last_name[1], vb->string_id, lastof(last_name[1])); |
565 GetString(last_name[1], STR_VEHICLE_NAME, lastof(last_name[1])); |
556 } else { |
|
557 last_name[1][0] = '\0'; |
|
558 } |
|
559 } |
566 } |
560 |
567 |
561 r = strcmp(last_name[0], last_name[1]); // sort by name |
568 r = strcmp(last_name[0], last_name[1]); // sort by name |
562 |
569 |
563 VEHICLEUNITNUMBERSORTER(r, va, vb); |
570 VEHICLEUNITNUMBERSORTER(r, va, vb); |
734 enum VehicleListWindowWidgets { |
741 enum VehicleListWindowWidgets { |
735 VLW_WIDGET_CLOSEBOX = 0, |
742 VLW_WIDGET_CLOSEBOX = 0, |
736 VLW_WIDGET_CAPTION, |
743 VLW_WIDGET_CAPTION, |
737 VLW_WIDGET_STICKY, |
744 VLW_WIDGET_STICKY, |
738 VLW_WIDGET_SORT_ORDER, |
745 VLW_WIDGET_SORT_ORDER, |
739 VLW_WIDGET_SORT_BY_TEXT, |
|
740 VLW_WIDGET_SORT_BY_PULLDOWN, |
746 VLW_WIDGET_SORT_BY_PULLDOWN, |
741 VLW_WIDGET_EMPTY_TOP_RIGHT, |
747 VLW_WIDGET_EMPTY_TOP_RIGHT, |
742 VLW_WIDGET_LIST, |
748 VLW_WIDGET_LIST, |
743 VLW_WIDGET_SCROLLBAR, |
749 VLW_WIDGET_SCROLLBAR, |
744 VLW_WIDGET_OTHER_PLAYER_FILLER, |
750 VLW_WIDGET_OTHER_PLAYER_FILLER, |
745 VLW_WIDGET_AVAILABLE_VEHICLES, |
751 VLW_WIDGET_AVAILABLE_VEHICLES, |
746 VLW_WIDGET_MANAGE_VEHICLES, |
|
747 VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN, |
752 VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN, |
748 VLW_WIDGET_STOP_ALL, |
753 VLW_WIDGET_STOP_ALL, |
749 VLW_WIDGET_START_ALL, |
754 VLW_WIDGET_START_ALL, |
750 VLW_WIDGET_EMPTY_BOTTOM_RIGHT, |
755 VLW_WIDGET_EMPTY_BOTTOM_RIGHT, |
751 VLW_WIDGET_RESIZE, |
756 VLW_WIDGET_RESIZE, |
754 static const Widget _vehicle_list_widgets[] = { |
759 static const Widget _vehicle_list_widgets[] = { |
755 { WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, |
760 { WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, |
756 { WWT_CAPTION, RESIZE_RIGHT, 14, 11, 247, 0, 13, 0x0, STR_018C_WINDOW_TITLE_DRAG_THIS}, |
761 { WWT_CAPTION, RESIZE_RIGHT, 14, 11, 247, 0, 13, 0x0, STR_018C_WINDOW_TITLE_DRAG_THIS}, |
757 { WWT_STICKYBOX, RESIZE_LR, 14, 248, 259, 0, 13, 0x0, STR_STICKY_BUTTON}, |
762 { WWT_STICKYBOX, RESIZE_LR, 14, 248, 259, 0, 13, 0x0, STR_STICKY_BUTTON}, |
758 { WWT_PUSHTXTBTN, RESIZE_NONE, 14, 0, 80, 14, 25, STR_SORT_BY, STR_SORT_ORDER_TIP}, |
763 { WWT_PUSHTXTBTN, RESIZE_NONE, 14, 0, 80, 14, 25, STR_SORT_BY, STR_SORT_ORDER_TIP}, |
759 { WWT_PANEL, RESIZE_NONE, 14, 81, 235, 14, 25, 0x0, STR_SORT_CRITERIA_TIP}, |
764 { WWT_DROPDOWN, RESIZE_NONE, 14, 81, 247, 14, 25, 0x0, STR_SORT_CRITERIA_TIP}, |
760 { WWT_TEXTBTN, RESIZE_NONE, 14, 236, 247, 14, 25, STR_0225, STR_SORT_CRITERIA_TIP}, |
|
761 { WWT_PANEL, RESIZE_RIGHT, 14, 248, 259, 14, 25, 0x0, STR_NULL}, |
765 { WWT_PANEL, RESIZE_RIGHT, 14, 248, 259, 14, 25, 0x0, STR_NULL}, |
762 { WWT_MATRIX, RESIZE_RB, 14, 0, 247, 26, 169, 0x0, STR_NULL}, |
766 { WWT_MATRIX, RESIZE_RB, 14, 0, 247, 26, 169, 0x0, STR_NULL}, |
763 { WWT_SCROLLBAR, RESIZE_LRB, 14, 248, 259, 26, 169, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
767 { WWT_SCROLLBAR, RESIZE_LRB, 14, 248, 259, 26, 169, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
764 /* Widget to be shown for other players hiding the following 6 widgets */ |
768 /* Widget to be shown for other players hiding the following 6 widgets */ |
765 { WWT_PANEL, RESIZE_RTB, 14, 0, 247, 170, 181, 0x0, STR_NULL}, |
769 { WWT_PANEL, RESIZE_RTB, 14, 0, 247, 170, 181, 0x0, STR_NULL}, |
766 |
770 |
767 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 105, 170, 181, 0x0, STR_AVAILABLE_ENGINES_TIP}, |
771 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 105, 170, 181, 0x0, STR_AVAILABLE_ENGINES_TIP}, |
768 { WWT_TEXTBTN, RESIZE_TB, 14, 106, 211, 170, 181, STR_MANAGE_LIST, STR_MANAGE_LIST_TIP}, |
772 { WWT_DROPDOWN, RESIZE_TB, 14, 106, 223, 170, 181, STR_MANAGE_LIST, STR_MANAGE_LIST_TIP}, |
769 { WWT_TEXTBTN, RESIZE_TB, 14, 212, 223, 170, 181, STR_0225, STR_MANAGE_LIST_TIP}, |
|
770 |
773 |
771 { WWT_PUSHIMGBTN, RESIZE_TB, 14, 224, 235, 170, 181, SPR_FLAG_VEH_STOPPED, STR_MASS_STOP_LIST_TIP}, |
774 { WWT_PUSHIMGBTN, RESIZE_TB, 14, 224, 235, 170, 181, SPR_FLAG_VEH_STOPPED, STR_MASS_STOP_LIST_TIP}, |
772 { WWT_PUSHIMGBTN, RESIZE_TB, 14, 236, 247, 170, 181, SPR_FLAG_VEH_RUNNING, STR_MASS_START_LIST_TIP}, |
775 { WWT_PUSHIMGBTN, RESIZE_TB, 14, 236, 247, 170, 181, SPR_FLAG_VEH_RUNNING, STR_MASS_START_LIST_TIP}, |
773 { WWT_PANEL, RESIZE_RTB, 14, 248, 247, 170, 181, 0x0, STR_NULL}, |
776 { WWT_PANEL, RESIZE_RTB, 14, 248, 247, 170, 181, 0x0, STR_NULL}, |
774 { WWT_RESIZEBOX, RESIZE_LRTB, 14, 248, 259, 170, 181, 0x0, STR_RESIZE_BUTTON}, |
777 { WWT_RESIZEBOX, RESIZE_LRTB, 14, 248, 259, 170, 181, 0x0, STR_RESIZE_BUTTON}, |
792 w->HideWidget(VLW_WIDGET_OTHER_PLAYER_FILLER); |
795 w->HideWidget(VLW_WIDGET_OTHER_PLAYER_FILLER); |
793 w->SetWidgetDisabledState(VLW_WIDGET_AVAILABLE_VEHICLES, window_type != VLW_STANDARD); |
796 w->SetWidgetDisabledState(VLW_WIDGET_AVAILABLE_VEHICLES, window_type != VLW_STANDARD); |
794 } else { |
797 } else { |
795 w->SetWidgetsHiddenState(true, |
798 w->SetWidgetsHiddenState(true, |
796 VLW_WIDGET_AVAILABLE_VEHICLES, |
799 VLW_WIDGET_AVAILABLE_VEHICLES, |
797 VLW_WIDGET_MANAGE_VEHICLES, |
|
798 VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN, |
800 VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN, |
799 VLW_WIDGET_STOP_ALL, |
801 VLW_WIDGET_STOP_ALL, |
800 VLW_WIDGET_START_ALL, |
802 VLW_WIDGET_START_ALL, |
801 VLW_WIDGET_EMPTY_BOTTOM_RIGHT, |
803 VLW_WIDGET_EMPTY_BOTTOM_RIGHT, |
802 WIDGET_LIST_END); |
804 WIDGET_LIST_END); |
927 int x = 2; |
929 int x = 2; |
928 int y = PLY_WND_PRC__OFFSET_TOP_WIDGET; |
930 int y = PLY_WND_PRC__OFFSET_TOP_WIDGET; |
929 int max; |
931 int max; |
930 int i; |
932 int i; |
931 const PlayerID owner = (PlayerID)w->caption_color; |
933 const PlayerID owner = (PlayerID)w->caption_color; |
932 const Player *p = GetPlayer(owner); |
|
933 const uint16 window_type = w->window_number & VLW_MASK; |
934 const uint16 window_type = w->window_number & VLW_MASK; |
934 const uint16 index = GB(w->window_number, 16, 16); |
935 const uint16 index = GB(w->window_number, 16, 16); |
935 |
936 |
936 BuildVehicleList(vl, owner, index, window_type); |
937 BuildVehicleList(vl, owner, index, window_type); |
937 SortVehicleList(vl); |
938 SortVehicleList(vl); |
947 } |
948 } |
948 SetDParam(0, w->vscroll.count); |
949 SetDParam(0, w->vscroll.count); |
949 break; |
950 break; |
950 |
951 |
951 case VLW_STANDARD: /* Company Name */ |
952 case VLW_STANDARD: /* Company Name */ |
952 SetDParam(0, p->index); |
953 SetDParam(0, owner); |
953 SetDParam(1, w->vscroll.count); |
954 SetDParam(1, w->vscroll.count); |
954 break; |
955 break; |
955 |
956 |
956 case VLW_STATION_LIST: /* Station Name */ |
957 case VLW_STATION_LIST: /* Station Name */ |
957 SetDParam(0, index); |
958 SetDParam(0, index); |
975 break; |
976 break; |
976 default: NOT_REACHED(); break; |
977 default: NOT_REACHED(); break; |
977 } |
978 } |
978 |
979 |
979 w->SetWidgetsDisabledState(vl->l.list_length == 0, |
980 w->SetWidgetsDisabledState(vl->l.list_length == 0, |
980 VLW_WIDGET_MANAGE_VEHICLES, |
|
981 VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN, |
981 VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN, |
982 VLW_WIDGET_STOP_ALL, |
982 VLW_WIDGET_STOP_ALL, |
983 VLW_WIDGET_START_ALL, |
983 VLW_WIDGET_START_ALL, |
984 WIDGET_LIST_END); |
984 WIDGET_LIST_END); |
985 |
985 |
986 DrawWindowWidgets(w); |
986 DrawWindowWidgets(w); |
987 |
987 |
988 /* draw sorting criteria string */ |
988 /* draw sorting criteria string */ |
989 DrawString(85, 15, _vehicle_sort_listing[vl->l.sort_type], TC_BLACK); |
989 DrawString(85, 15, _vehicle_sort_listing[vl->l.sort_type], TC_BLACK); |
990 /* draw arrow pointing up/down for ascending/descending sorting */ |
990 /* draw arrow pointing up/down for ascending/descending sorting */ |
991 DoDrawString(vl->l.flags & VL_DESC ? DOWNARROW : UPARROW, 69, 15, TC_BLACK); |
991 DrawSortButtonState(w, VLW_WIDGET_SORT_ORDER, vl->l.flags & VL_DESC ? SBS_DOWN : SBS_UP); |
992 |
992 |
993 max = min(w->vscroll.pos + w->vscroll.cap, vl->l.list_length); |
993 max = min(w->vscroll.pos + w->vscroll.cap, vl->l.list_length); |
994 for (i = w->vscroll.pos; i < max; ++i) { |
994 for (i = w->vscroll.pos; i < max; ++i) { |
995 const Vehicle *v = vl->sort_list[i]; |
995 const Vehicle *v = vl->sort_list[i]; |
996 StringID str; |
996 StringID str; |
997 |
997 |
998 SetDParam(0, v->profit_this_year); |
998 SetDParam(0, v->profit_this_year); |
999 SetDParam(1, v->profit_last_year); |
999 SetDParam(1, v->profit_last_year); |
1000 |
1000 |
1001 DrawVehicleImage(v, x + 19, y + 6, w->widget[VLW_WIDGET_LIST].right - w->widget[VLW_WIDGET_LIST].left - 20, 0, INVALID_VEHICLE); |
1001 DrawVehicleImage(v, x + 19, y + 6, INVALID_VEHICLE, w->widget[VLW_WIDGET_LIST].right - w->widget[VLW_WIDGET_LIST].left - 20, 0); |
1002 DrawString(x + 19, y + w->resize.step_height - 8, STR_0198_PROFIT_THIS_YEAR_LAST_YEAR, TC_FROMSTRING); |
1002 DrawString(x + 19, y + w->resize.step_height - 8, STR_0198_PROFIT_THIS_YEAR_LAST_YEAR, TC_FROMSTRING); |
1003 |
1003 |
1004 if ((v->type == VEH_TRAIN && v->string_id != STR_SV_TRAIN_NAME) || |
1004 if (v->name != NULL) { |
1005 (v->type == VEH_ROAD && v->string_id != STR_SV_ROADVEH_NAME) || |
|
1006 (v->type == VEH_SHIP && v->string_id != STR_SV_SHIP_NAME) || |
|
1007 (v->type == VEH_AIRCRAFT && v->string_id != STR_SV_AIRCRAFT_NAME)) { |
|
1008 |
|
1009 /* The vehicle got a name so we will print it */ |
1005 /* The vehicle got a name so we will print it */ |
1010 SetDParam(0, v->index); |
1006 SetDParam(0, v->index); |
1011 DrawString(x + 19, y, STR_01AB, TC_FROMSTRING); |
1007 DrawString(x + 19, y, STR_01AB, TC_FROMSTRING); |
1012 } |
1008 } |
1013 |
1009 |
1055 vl->l.flags |= VL_RESORT; |
1051 vl->l.flags |= VL_RESORT; |
1056 |
1052 |
1057 vl->_sorting->order = !!(vl->l.flags & VL_DESC); |
1053 vl->_sorting->order = !!(vl->l.flags & VL_DESC); |
1058 SetWindowDirty(w); |
1054 SetWindowDirty(w); |
1059 break; |
1055 break; |
1060 case VLW_WIDGET_SORT_BY_TEXT: case VLW_WIDGET_SORT_BY_PULLDOWN:/* Select sorting criteria dropdown menu */ |
1056 case VLW_WIDGET_SORT_BY_PULLDOWN:/* Select sorting criteria dropdown menu */ |
1061 ShowDropDownMenu(w, _vehicle_sort_listing, vl->l.sort_type, VLW_WIDGET_SORT_BY_PULLDOWN, 0, 0); |
1057 ShowDropDownMenu(w, _vehicle_sort_listing, vl->l.sort_type, VLW_WIDGET_SORT_BY_PULLDOWN, 0, 0); |
1062 return; |
1058 return; |
1063 case VLW_WIDGET_LIST: { /* Matrix to show vehicles */ |
1059 case VLW_WIDGET_LIST: { /* Matrix to show vehicles */ |
1064 uint32 id_v = (e->we.click.pt.y - PLY_WND_PRC__OFFSET_TOP_WIDGET) / w->resize.step_height; |
1060 uint32 id_v = (e->we.click.pt.y - PLY_WND_PRC__OFFSET_TOP_WIDGET) / w->resize.step_height; |
1065 const Vehicle *v; |
1061 const Vehicle *v; |
1077 |
1073 |
1078 case VLW_WIDGET_AVAILABLE_VEHICLES: |
1074 case VLW_WIDGET_AVAILABLE_VEHICLES: |
1079 ShowBuildVehicleWindow(0, vl->vehicle_type); |
1075 ShowBuildVehicleWindow(0, vl->vehicle_type); |
1080 break; |
1076 break; |
1081 |
1077 |
1082 case VLW_WIDGET_MANAGE_VEHICLES: |
|
1083 case VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN: { |
1078 case VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN: { |
1084 static StringID action_str[] = { |
1079 static StringID action_str[] = { |
1085 STR_REPLACE_VEHICLES, |
1080 STR_REPLACE_VEHICLES, |
1086 STR_SEND_FOR_SERVICING, |
1081 STR_SEND_FOR_SERVICING, |
1087 STR_NULL, |
1082 STR_NULL, |
1121 case VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN: |
1116 case VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN: |
1122 assert(vl->l.list_length != 0); |
1117 assert(vl->l.list_length != 0); |
1123 |
1118 |
1124 switch (e->we.dropdown.index) { |
1119 switch (e->we.dropdown.index) { |
1125 case 0: /* Replace window */ |
1120 case 0: /* Replace window */ |
1126 ShowReplaceVehicleWindow(vl->vehicle_type); |
1121 ShowReplaceGroupVehicleWindow(DEFAULT_GROUP, vl->vehicle_type); |
1127 break; |
1122 break; |
1128 case 1: /* Send for servicing */ |
1123 case 1: /* Send for servicing */ |
1129 DoCommandP(0, GB(w->window_number, 16, 16) /* StationID or OrderID (depending on VLW) */, |
1124 DoCommandP(0, GB(w->window_number, 16, 16) /* StationID or OrderID (depending on VLW) */, |
1130 (w->window_number & VLW_MASK) | DEPOT_MASS_SEND | DEPOT_SERVICE, |
1125 (w->window_number & VLW_MASK) | DEPOT_MASS_SEND | DEPOT_SERVICE, |
1131 NULL, |
1126 NULL, |
1149 case WE_DESTROY: |
1144 case WE_DESTROY: |
1150 free((void*)vl->sort_list); |
1145 free((void*)vl->sort_list); |
1151 break; |
1146 break; |
1152 |
1147 |
1153 case WE_TICK: /* resort the list every 20 seconds orso (10 days) */ |
1148 case WE_TICK: /* resort the list every 20 seconds orso (10 days) */ |
1149 if (_pause_game != 0) break; |
|
1154 if (--vl->l.resort_timer == 0) { |
1150 if (--vl->l.resort_timer == 0) { |
1155 StationID station = ((w->window_number & VLW_MASK) == VLW_STATION_LIST) ? GB(w->window_number, 16, 16) : INVALID_STATION; |
1151 StationID station = ((w->window_number & VLW_MASK) == VLW_STATION_LIST) ? GB(w->window_number, 16, 16) : INVALID_STATION; |
1156 PlayerID owner = (PlayerID)w->caption_color; |
1152 PlayerID owner = (PlayerID)w->caption_color; |
1157 |
1153 |
1158 DEBUG(misc, 3, "Periodic resort %d list player %d at station %d", vl->vehicle_type, owner, station); |
1154 DEBUG(misc, 3, "Periodic resort %d list player %d at station %d", vl->vehicle_type, owner, station); |
1536 break; |
1532 break; |
1537 |
1533 |
1538 case VEH_ROAD: |
1534 case VEH_ROAD: |
1539 case VEH_SHIP: |
1535 case VEH_SHIP: |
1540 case VEH_AIRCRAFT: |
1536 case VEH_AIRCRAFT: |
1541 DrawVehicleImage(v, 3, 57, 0, 0, INVALID_VEHICLE); |
1537 DrawVehicleImage(v, 3, 57, INVALID_VEHICLE, 0, 0); |
1542 DrawVehicleDetails(v, 75, 57, w->vscroll.pos, w->vscroll.cap, det_tab); |
1538 DrawVehicleDetails(v, 75, 57, w->vscroll.pos, w->vscroll.cap, det_tab); |
1543 break; |
1539 break; |
1544 |
1540 |
1545 default: NOT_REACHED(); |
1541 default: NOT_REACHED(); |
1546 } |
1542 } |
1646 AllocateWindowDescFront(&_vehicle_details_desc, v->index); |
1642 AllocateWindowDescFront(&_vehicle_details_desc, v->index); |
1647 } |
1643 } |
1648 |
1644 |
1649 |
1645 |
1650 /* Unified vehicle GUI - Vehicle View Window */ |
1646 /* Unified vehicle GUI - Vehicle View Window */ |
1651 |
|
1652 /** Constants of vehicle view widget indices */ |
|
1653 enum VehicleViewWindowWidgets { |
|
1654 VVW_WIDGET_CLOSEBOX = 0, |
|
1655 VVW_WIDGET_CAPTION, |
|
1656 VVW_WIDGET_STICKY, |
|
1657 VVW_WIDGET_PANEL, |
|
1658 VVW_WIDGET_VIEWPORT, |
|
1659 VVW_WIDGET_START_STOP_VEH, |
|
1660 VVW_WIDGET_CENTER_MAIN_VIEH, |
|
1661 VVW_WIDGET_GOTO_DEPOT, |
|
1662 VVW_WIDGET_REFIT_VEH, |
|
1663 VVW_WIDGET_SHOW_ORDERS, |
|
1664 VVW_WIDGET_SHOW_DETAILS, |
|
1665 VVW_WIDGET_CLONE_VEH, |
|
1666 VVW_WIDGET_EMPTY_BOTTOM_RIGHT, |
|
1667 VVW_WIDGET_RESIZE, |
|
1668 VVW_WIDGET_TURN_AROUND, |
|
1669 VVW_WIDGET_FORCE_PROCEED, |
|
1670 }; |
|
1671 |
1647 |
1672 /** Vehicle view widgets. */ |
1648 /** Vehicle view widgets. */ |
1673 static const Widget _vehicle_view_widgets[] = { |
1649 static const Widget _vehicle_view_widgets[] = { |
1674 { WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW }, // VVW_WIDGET_CLOSEBOX |
1650 { WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW }, // VVW_WIDGET_CLOSEBOX |
1675 { WWT_CAPTION, RESIZE_RIGHT, 14, 11, 237, 0, 13, 0x0 /* filled later */, STR_018C_WINDOW_TITLE_DRAG_THIS }, // VVW_WIDGET_CAPTION |
1651 { WWT_CAPTION, RESIZE_RIGHT, 14, 11, 237, 0, 13, 0x0 /* filled later */, STR_018C_WINDOW_TITLE_DRAG_THIS }, // VVW_WIDGET_CAPTION |
1985 } else { |
1961 } else { |
1986 Depot *depot = GetDepot(v->current_order.dest); |
1962 Depot *depot = GetDepot(v->current_order.dest); |
1987 SetDParam(0, depot->town_index); |
1963 SetDParam(0, depot->town_index); |
1988 SetDParam(1, v->GetDisplaySpeed()); |
1964 SetDParam(1, v->GetDisplaySpeed()); |
1989 } |
1965 } |
1990 if (HasBit(v->current_order.flags, OFB_HALT_IN_DEPOT) && !HasBit(v->current_order.flags, OFB_PART_OF_ORDERS)) { |
1966 if (HasBit(v->current_order.flags, OF_HALT_IN_DEPOT) && !HasBit(v->current_order.flags, OF_PART_OF_ORDERS)) { |
1991 str = _heading_for_depot_strings[v->type] + _patches.vehicle_speed; |
1967 str = _heading_for_depot_strings[v->type] + _patches.vehicle_speed; |
1992 } else { |
1968 } else { |
1993 str = _heading_for_depot_service_strings[v->type] + _patches.vehicle_speed; |
1969 str = _heading_for_depot_service_strings[v->type] + _patches.vehicle_speed; |
1994 } |
1970 } |
1995 } break; |
1971 } break; |
2160 SetWindowDirty(w); |
2136 SetWindowDirty(w); |
2161 } |
2137 } |
2162 } break; |
2138 } break; |
2163 } |
2139 } |
2164 } |
2140 } |
2141 |
|
2142 void DrawVehicleImage(const Vehicle *v, int x, int y, VehicleID selection, int count, int skip) |
|
2143 { |
|
2144 switch (v->type) { |
|
2145 case VEH_TRAIN: DrawTrainImage(v, x, y, selection, count, skip); break; |
|
2146 case VEH_ROAD: DrawRoadVehImage(v, x, y, selection, count); break; |
|
2147 case VEH_SHIP: DrawShipImage(v, x, y, selection); break; |
|
2148 case VEH_AIRCRAFT: DrawAircraftImage(v, x, y, selection); break; |
|
2149 default: NOT_REACHED(); |
|
2150 } |
|
2151 } |