139 static const Widget _group_widgets[] = { |
140 static const Widget _group_widgets[] = { |
140 { WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, |
141 { WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, |
141 { WWT_CAPTION, RESIZE_RIGHT, 14, 11, 513, 0, 13, 0x0, STR_018C_WINDOW_TITLE_DRAG_THIS}, |
142 { WWT_CAPTION, RESIZE_RIGHT, 14, 11, 513, 0, 13, 0x0, STR_018C_WINDOW_TITLE_DRAG_THIS}, |
142 { WWT_STICKYBOX, RESIZE_LR, 14, 514, 525, 0, 13, 0x0, STR_STICKY_BUTTON}, |
143 { WWT_STICKYBOX, RESIZE_LR, 14, 514, 525, 0, 13, 0x0, STR_STICKY_BUTTON}, |
143 { WWT_PANEL, RESIZE_NONE, 14, 0, 200, 14, 25, 0x0, STR_NULL}, |
144 { WWT_PANEL, RESIZE_NONE, 14, 0, 200, 14, 25, 0x0, STR_NULL}, |
144 { WWT_PANEL, RESIZE_NONE, 14, 0, 200, 26, 39, 0x0, STR_NULL}, |
145 { WWT_PANEL, RESIZE_NONE, 14, 0, 200, 26, 38, 0x0, STR_NULL}, |
145 { WWT_MATRIX, RESIZE_BOTTOM, 14, 0, 188, 39, 220, 0x701, STR_GROUPS_CLICK_ON_GROUP_FOR_TIP}, |
146 { WWT_PANEL, RESIZE_NONE, 14, 0, 200, 39, 52, 0x0, STR_NULL}, |
|
147 { WWT_MATRIX, RESIZE_BOTTOM, 14, 0, 188, 52, 220, 0x701, STR_GROUPS_CLICK_ON_GROUP_FOR_TIP}, |
146 { WWT_SCROLLBAR, RESIZE_BOTTOM, 14, 189, 200, 26, 220, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
148 { WWT_SCROLLBAR, RESIZE_BOTTOM, 14, 189, 200, 26, 220, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
147 { WWT_PUSHTXTBTN, RESIZE_NONE, 14, 201, 281, 14, 25, STR_SORT_BY, STR_SORT_ORDER_TIP}, |
149 { WWT_PUSHTXTBTN, RESIZE_NONE, 14, 201, 281, 14, 25, STR_SORT_BY, STR_SORT_ORDER_TIP}, |
148 { WWT_PANEL, RESIZE_NONE, 14, 282, 435, 14, 25, 0x0, STR_SORT_CRITERIA_TIP}, |
150 { WWT_PANEL, RESIZE_NONE, 14, 282, 435, 14, 25, 0x0, STR_SORT_CRITERIA_TIP}, |
149 { WWT_TEXTBTN, RESIZE_NONE, 14, 436, 447, 14, 25, STR_0225, STR_SORT_CRITERIA_TIP}, |
151 { WWT_TEXTBTN, RESIZE_NONE, 14, 436, 447, 14, 25, STR_0225, STR_SORT_CRITERIA_TIP}, |
150 { WWT_PANEL, RESIZE_RIGHT, 14, 448, 525, 14, 25, 0x0, STR_NULL}, |
152 { WWT_PANEL, RESIZE_RIGHT, 14, 448, 525, 14, 25, 0x0, STR_NULL}, |
332 GRP_WIDGET_START_ALL, |
334 GRP_WIDGET_START_ALL, |
333 GRP_WIDGET_MANAGE_VEHICLES, |
335 GRP_WIDGET_MANAGE_VEHICLES, |
334 GRP_WIDGET_MANAGE_VEHICLES_DROPDOWN, |
336 GRP_WIDGET_MANAGE_VEHICLES_DROPDOWN, |
335 WIDGET_LIST_END); |
337 WIDGET_LIST_END); |
336 |
338 |
337 /* Disable the group specific function when we select the default group */ |
339 /* Disable the group specific function when we select the default group or all vehicles */ |
338 SetWindowWidgetsDisabledState(w, IsDefaultGroupID(gv->group_sel), |
340 SetWindowWidgetsDisabledState(w, IsDefaultGroupID(gv->group_sel) || IsAllGroupID(gv->group_sel), |
339 GRP_WIDGET_DELETE_GROUP, |
341 GRP_WIDGET_DELETE_GROUP, |
340 GRP_WIDGET_RENAME_GROUP, |
342 GRP_WIDGET_RENAME_GROUP, |
341 GRP_WIDGET_REPLACE_PROTECTION, |
343 GRP_WIDGET_REPLACE_PROTECTION, |
342 WIDGET_LIST_END); |
344 WIDGET_LIST_END); |
343 |
345 |
344 /* If selected_group == DEFAULT_GROUP, draw the standard caption |
346 /* If selected_group == DEFAULT_GROUP || ALL_GROUP, draw the standard caption |
345 We list all vehicles */ |
347 We list all vehicles or ungrouped vehicles */ |
346 if (IsDefaultGroupID(gv->group_sel)) { |
348 if (IsDefaultGroupID(gv->group_sel) || IsAllGroupID(gv->group_sel)) { |
347 SetDParam(0, p->index); |
349 SetDParam(0, p->index); |
348 SetDParam(1, gv->l.list_length); |
350 SetDParam(1, gv->l.list_length); |
349 |
351 |
350 switch (gv->vehicle_type) { |
352 switch (gv->vehicle_type) { |
351 case VEH_TRAIN: |
353 case VEH_TRAIN: |
396 |
398 |
397 DrawWindowWidgets(w); |
399 DrawWindowWidgets(w); |
398 |
400 |
399 /* Draw Matrix Group |
401 /* Draw Matrix Group |
400 * The selected group is drawn in white */ |
402 * The selected group is drawn in white */ |
401 StringID str; |
403 StringID str_all_veh, str_no_group_veh; |
402 |
404 |
403 switch (gv->vehicle_type) { |
405 switch (gv->vehicle_type) { |
404 case VEH_TRAIN: str = STR_GROUP_ALL_TRAINS; break; |
406 case VEH_TRAIN: |
405 case VEH_ROAD: str = STR_GROUP_ALL_ROADS; break; |
407 str_all_veh = STR_GROUP_ALL_TRAINS; |
406 case VEH_SHIP: str = STR_GROUP_ALL_SHIPS; break; |
408 str_no_group_veh = STR_GROUP_DEFAULT_TRAINS; |
407 case VEH_AIRCRAFT: str = STR_GROUP_ALL_AIRCRAFTS; break; |
409 break; |
|
410 case VEH_ROAD: |
|
411 str_all_veh = STR_GROUP_ALL_ROADS; |
|
412 str_no_group_veh = STR_GROUP_DEFAULT_ROADS; |
|
413 break; |
|
414 case VEH_SHIP: |
|
415 str_all_veh = STR_GROUP_ALL_SHIPS; |
|
416 str_no_group_veh = STR_GROUP_DEFAULT_SHIPS; |
|
417 break; |
|
418 case VEH_AIRCRAFT: |
|
419 str_all_veh = STR_GROUP_ALL_AIRCRAFTS; |
|
420 str_no_group_veh = STR_GROUP_DEFAULT_AIRCRAFTS; |
|
421 break; |
408 default: NOT_REACHED(); break; |
422 default: NOT_REACHED(); break; |
409 } |
423 } |
410 DrawString(10, y1, str, IsDefaultGroupID(gv->group_sel) ? 12 : 16); |
424 DrawString(10, y1, str_all_veh, IsAllGroupID(gv->group_sel) ? 12 : 16); |
|
425 |
|
426 y1 += 13; |
|
427 |
|
428 DrawString(10, y1, str_no_group_veh, IsDefaultGroupID(gv->group_sel) ? 12 : 16); |
411 |
429 |
412 max = min(w->vscroll.pos + w->vscroll.cap, gl->l.list_length); |
430 max = min(w->vscroll.pos + w->vscroll.cap, gl->l.list_length); |
413 for (i = w->vscroll.pos ; i < max ; ++i) { |
431 for (i = w->vscroll.pos ; i < max ; ++i) { |
414 const Group *g = gl->sort_list[i]; |
432 const Group *g = gl->sort_list[i]; |
415 |
433 |
489 case GRP_WIDGET_SORT_BY_DROPDOWN: // Select sorting criteria dropdown menu |
507 case GRP_WIDGET_SORT_BY_DROPDOWN: // Select sorting criteria dropdown menu |
490 ShowDropDownMenu(w, _vehicle_sort_listing, gv->l.sort_type, GRP_WIDGET_SORT_BY_DROPDOWN, 0, 0); |
508 ShowDropDownMenu(w, _vehicle_sort_listing, gv->l.sort_type, GRP_WIDGET_SORT_BY_DROPDOWN, 0, 0); |
491 return; |
509 return; |
492 |
510 |
493 case GRP_WIDGET_ALL_VEHICLES: // All vehicles button |
511 case GRP_WIDGET_ALL_VEHICLES: // All vehicles button |
|
512 if (!IsAllGroupID(gv->group_sel)) { |
|
513 gv->group_sel = ALL_GROUP; |
|
514 gv->l.flags |= VL_REBUILD; |
|
515 UpdateGroupActionDropdown(w, gv->group_sel); |
|
516 SetWindowDirty(w); |
|
517 } |
|
518 break; |
|
519 |
|
520 case GRP_WIDGET_DEFAULT_VEHICLES: // Ungrouped vehicles button |
494 if (!IsDefaultGroupID(gv->group_sel)) { |
521 if (!IsDefaultGroupID(gv->group_sel)) { |
495 gv->group_sel = DEFAULT_GROUP; |
522 gv->group_sel = DEFAULT_GROUP; |
496 gv->l.flags |= VL_REBUILD; |
523 gv->l.flags |= VL_REBUILD; |
497 UpdateGroupActionDropdown(w, gv->group_sel); |
524 UpdateGroupActionDropdown(w, gv->group_sel); |
498 SetWindowDirty(w); |
525 SetWindowDirty(w); |
499 } |
526 } |
500 break; |
527 break; |
501 |
528 |
502 case GRP_WIDGET_LIST_GROUP: { // Matrix Group |
529 case GRP_WIDGET_LIST_GROUP: { // Matrix Group |
503 uint16 id_g = (e->we.click.pt.y - PLY_WND_PRC__OFFSET_TOP_WIDGET - 13) / PLY_WND_PRC__SIZE_OF_ROW_TINY; |
530 uint16 id_g = (e->we.click.pt.y - PLY_WND_PRC__OFFSET_TOP_WIDGET - 26) / PLY_WND_PRC__SIZE_OF_ROW_TINY; |
504 |
531 |
505 if (id_g >= w->vscroll.cap) return; |
532 if (id_g >= w->vscroll.cap) return; |
506 |
533 |
507 id_g += w->vscroll.pos; |
534 id_g += w->vscroll.pos; |
508 |
535 |
542 DoCommandP(0, gv->vehicle_type, 0, NULL, CMD_CREATE_GROUP | CMD_MSG(STR_GROUP_CAN_T_CREATE)); |
569 DoCommandP(0, gv->vehicle_type, 0, NULL, CMD_CREATE_GROUP | CMD_MSG(STR_GROUP_CAN_T_CREATE)); |
543 break; |
570 break; |
544 |
571 |
545 case GRP_WIDGET_DELETE_GROUP: { // Delete the selected group |
572 case GRP_WIDGET_DELETE_GROUP: { // Delete the selected group |
546 GroupID group = gv->group_sel; |
573 GroupID group = gv->group_sel; |
547 gv->group_sel = DEFAULT_GROUP; |
574 gv->group_sel = ALL_GROUP; |
548 |
575 |
549 DoCommandP(0, group, 0, NULL, CMD_DELETE_GROUP | CMD_MSG(STR_GROUP_CAN_T_DELETE)); |
576 DoCommandP(0, group, 0, NULL, CMD_DELETE_GROUP | CMD_MSG(STR_GROUP_CAN_T_DELETE)); |
550 break; |
577 break; |
551 } |
578 } |
552 |
579 |
553 case GRP_WIDGET_RENAME_GROUP: { // Rename the selected roup |
580 case GRP_WIDGET_RENAME_GROUP: { // Rename the selected roup |
554 assert(!IsDefaultGroupID(gv->group_sel)); |
581 assert(IsValidGroupID(gv->group_sel)); |
555 |
582 |
556 const Group *g = GetGroup(gv->group_sel); |
583 const Group *g = GetGroup(gv->group_sel); |
557 |
584 |
558 SetDParam(0, g->index); |
585 SetDParam(0, g->index); |
559 ShowQueryString(STR_GROUP_NAME, STR_GROUP_RENAME_CAPTION, 31, 150, w, CS_ALPHANUMERAL); |
586 ShowQueryString(STR_GROUP_NAME, STR_GROUP_RENAME_CAPTION, 31, 150, w, CS_ALPHANUMERAL); |
571 } |
598 } |
572 |
599 |
573 |
600 |
574 case GRP_WIDGET_START_ALL: |
601 case GRP_WIDGET_START_ALL: |
575 case GRP_WIDGET_STOP_ALL: { // Start/stop all vehicles of the list |
602 case GRP_WIDGET_STOP_ALL: { // Start/stop all vehicles of the list |
576 DoCommandP(0, gv->group_sel, ((IsDefaultGroupID(gv->group_sel) ? VLW_STANDARD : VLW_GROUP_LIST) & VLW_MASK) |
603 DoCommandP(0, gv->group_sel, ((IsAllGroupID(gv->group_sel) ? VLW_STANDARD : VLW_GROUP_LIST) & VLW_MASK) |
577 | (1 << 6) |
604 | (1 << 6) |
578 | (e->we.click.widget == GRP_WIDGET_START_ALL ? (1 << 5) : 0) |
605 | (e->we.click.widget == GRP_WIDGET_START_ALL ? (1 << 5) : 0) |
579 | gv->vehicle_type, NULL, CMD_MASS_START_STOP); |
606 | gv->vehicle_type, NULL, CMD_MASS_START_STOP); |
580 |
607 |
581 break; |
608 break; |
582 } |
609 } |
583 |
610 |
584 case GRP_WIDGET_REPLACE_PROTECTION: |
611 case GRP_WIDGET_REPLACE_PROTECTION: |
585 if (!IsDefaultGroupID(gv->group_sel)) { |
612 if (IsValidGroupID(gv->group_sel)) { |
586 const Group *g = GetGroup(gv->group_sel); |
613 const Group *g = GetGroup(gv->group_sel); |
587 |
614 |
588 DoCommandP(0, gv->group_sel, !g->replace_protection, NULL, CMD_SET_GROUP_REPLACE_PROTECTION); |
615 DoCommandP(0, gv->group_sel, !g->replace_protection, NULL, CMD_SET_GROUP_REPLACE_PROTECTION); |
589 } |
616 } |
590 break; |
617 break; |
689 switch (e->we.dropdown.index) { |
717 switch (e->we.dropdown.index) { |
690 case 0: // Replace window |
718 case 0: // Replace window |
691 ShowReplaceGroupVehicleWindow(gv->group_sel, gv->vehicle_type); |
719 ShowReplaceGroupVehicleWindow(gv->group_sel, gv->vehicle_type); |
692 break; |
720 break; |
693 case 1: // Send for servicing |
721 case 1: // Send for servicing |
694 DoCommandP(0, gv->group_sel, ((IsDefaultGroupID(gv->group_sel) ? VLW_STANDARD : VLW_GROUP_LIST) & VLW_MASK) |
722 DoCommandP(0, gv->group_sel, ((IsAllGroupID(gv->group_sel) ? VLW_STANDARD : VLW_GROUP_LIST) & VLW_MASK) |
695 | DEPOT_MASS_SEND |
723 | DEPOT_MASS_SEND |
696 | DEPOT_SERVICE, NULL, GetCmdSendToDepot(gv->vehicle_type)); |
724 | DEPOT_SERVICE, NULL, GetCmdSendToDepot(gv->vehicle_type)); |
697 break; |
725 break; |
698 case 2: // Send to Depots |
726 case 2: // Send to Depots |
699 DoCommandP(0, gv->group_sel, ((IsDefaultGroupID(gv->group_sel) ? VLW_STANDARD : VLW_GROUP_LIST) & VLW_MASK) |
727 DoCommandP(0, gv->group_sel, ((IsAllGroupID(gv->group_sel) ? VLW_STANDARD : VLW_GROUP_LIST) & VLW_MASK) |
700 | DEPOT_MASS_SEND, NULL, GetCmdSendToDepot(gv->vehicle_type)); |
728 | DEPOT_MASS_SEND, NULL, GetCmdSendToDepot(gv->vehicle_type)); |
701 break; |
729 break; |
702 case 3: // Add shared Vehicles |
730 case 3: // Add shared Vehicles |
703 assert(!IsDefaultGroupID(gv->group_sel)); |
731 assert(IsValidGroupID(gv->group_sel)); |
704 |
732 |
705 DoCommandP(0, gv->group_sel, gv->vehicle_type, NULL, CMD_ADD_SHARED_VEHICLE_GROUP | CMD_MSG(STR_GROUP_CAN_T_ADD_SHARED_VEHICLE)); |
733 DoCommandP(0, gv->group_sel, gv->vehicle_type, NULL, CMD_ADD_SHARED_VEHICLE_GROUP | CMD_MSG(STR_GROUP_CAN_T_ADD_SHARED_VEHICLE)); |
706 break; |
734 break; |
707 case 4: // Remove all Vehicles from the selected group |
735 case 4: // Remove all Vehicles from the selected group |
708 assert(!IsDefaultGroupID(gv->group_sel)); |
736 assert(IsValidGroupID(gv->group_sel)); |
709 |
737 |
710 DoCommandP(0, gv->group_sel, gv->vehicle_type, NULL, CMD_REMOVE_ALL_VEHICLES_GROUP | CMD_MSG(STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES)); |
738 DoCommandP(0, gv->group_sel, gv->vehicle_type, NULL, CMD_REMOVE_ALL_VEHICLES_GROUP | CMD_MSG(STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES)); |
711 break; |
739 break; |
712 default: NOT_REACHED(); |
740 default: NOT_REACHED(); |
713 } |
741 } |