56 DEPOT_WIDGET_V_SCROLL, // Vertical scrollbar |
56 DEPOT_WIDGET_V_SCROLL, // Vertical scrollbar |
57 DEPOT_WIDGET_H_SCROLL, // Horizontal scrollbar |
57 DEPOT_WIDGET_H_SCROLL, // Horizontal scrollbar |
58 DEPOT_WIDGET_BUILD, |
58 DEPOT_WIDGET_BUILD, |
59 DEPOT_WIDGET_CLONE, |
59 DEPOT_WIDGET_CLONE, |
60 DEPOT_WIDGET_LOCATION, |
60 DEPOT_WIDGET_LOCATION, |
|
61 DEPOT_WIDGET_AUTOREPLACE, |
61 DEPOT_WIDGET_RESIZE, |
62 DEPOT_WIDGET_RESIZE, |
62 DEPOT_WIDGET_LAST, // used to assert if DepotWindowWidgets and widget_moves got different lengths. Due to this usage, it needs to be last |
63 DEPOT_WIDGET_LAST, // used to assert if DepotWindowWidgets and widget_moves got different lengths. Due to this usage, it needs to be last |
63 } DepotWindowWidget; |
64 } DepotWindowWidget; |
64 |
65 |
65 /* Define how to move each widget. The order is important */ |
66 /* Define how to move each widget. The order is important */ |
76 DEPOT_MOVE_RIGHT_STRETCH_DOWN, // DEPOT_WIDGET_V_SCROLL |
77 DEPOT_MOVE_RIGHT_STRETCH_DOWN, // DEPOT_WIDGET_V_SCROLL |
77 DEPOT_MOVE_NONE, // DEPOT_WIDGET_H_SCROLL |
78 DEPOT_MOVE_NONE, // DEPOT_WIDGET_H_SCROLL |
78 DEPOT_MOVE_DOWN, // DEPOT_WIDGET_BUILD |
79 DEPOT_MOVE_DOWN, // DEPOT_WIDGET_BUILD |
79 DEPOT_MOVE_DOWN, // DEPOT_WIDGET_CLONE |
80 DEPOT_MOVE_DOWN, // DEPOT_WIDGET_CLONE |
80 DEPOT_MOVE_DOWN, // DEPOT_WIDGET_LOCATION |
81 DEPOT_MOVE_DOWN, // DEPOT_WIDGET_LOCATION |
|
82 DEPOT_MOVE_DOWN_RIGHT, // DEPOT_WIDGET_AUTOREPLACE |
81 DEPOT_MOVE_DOWN_RIGHT, // DEPOT_WIDGET_RESIZE |
83 DEPOT_MOVE_DOWN_RIGHT, // DEPOT_WIDGET_RESIZE |
82 }; |
84 }; |
83 |
85 |
84 /* Widget array for all depot windows. |
86 /* Widget array for all depot windows. |
85 * If a widget is needed in some windows only (like train specific), add it for all windows |
87 * If a widget is needed in some windows only (like train specific), add it for all windows |
110 /* The buttons in the bottom of the window. left and right is not important as they are later resized to be equal in size |
112 /* The buttons in the bottom of the window. left and right is not important as they are later resized to be equal in size |
111 * This calculation is based on right in DEPOT_WIDGET_LOCATION and it presumes left of DEPOT_WIDGET_BUILD is 0 */ |
113 * This calculation is based on right in DEPOT_WIDGET_LOCATION and it presumes left of DEPOT_WIDGET_BUILD is 0 */ |
112 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 96, 84, 95, 0x0, STR_NULL}, // DEPOT_WIDGET_BUILD |
114 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 96, 84, 95, 0x0, STR_NULL}, // DEPOT_WIDGET_BUILD |
113 {WWT_NODISTXTBTN, RESIZE_TB, 14, 97, 194, 84, 95, 0x0, STR_NULL}, // DEPOT_WIDGET_CLONE |
115 {WWT_NODISTXTBTN, RESIZE_TB, 14, 97, 194, 84, 95, 0x0, STR_NULL}, // DEPOT_WIDGET_CLONE |
114 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 195, 292, 84, 95, STR_00E4_LOCATION, STR_NULL}, // DEPOT_WIDGET_LOCATION |
116 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 195, 292, 84, 95, STR_00E4_LOCATION, STR_NULL}, // DEPOT_WIDGET_LOCATION |
|
117 { WWT_PUSHIMGBTN, RESIZE_LRTB, 14, 281, 292, 84, 95, 0x0, STR_DEPOT_AUTOREPLACE_TIP}, // DEPOT_WIDGET_AUTOREPLACE |
115 { WWT_RESIZEBOX, RESIZE_LRTB, 14, 293, 304, 84, 95, 0x0, STR_RESIZE_BUTTON}, // DEPOT_WIDGET_RESIZE |
118 { WWT_RESIZEBOX, RESIZE_LRTB, 14, 293, 304, 84, 95, 0x0, STR_RESIZE_BUTTON}, // DEPOT_WIDGET_RESIZE |
116 { WIDGETS_END}, |
119 { WIDGETS_END}, |
117 }; |
120 }; |
118 |
121 |
119 static void DepotWndProc(Window *w, WindowEvent *e); |
122 static void DepotWndProc(Window *w, WindowEvent *e); |
254 |
257 |
255 /* setup disabled buttons */ |
258 /* setup disabled buttons */ |
256 w->disabled_state = |
259 w->disabled_state = |
257 IsTileOwner(tile, _local_player) ? 0 : ( (1 << DEPOT_WIDGET_STOP_ALL) | (1 << DEPOT_WIDGET_START_ALL) | |
260 IsTileOwner(tile, _local_player) ? 0 : ( (1 << DEPOT_WIDGET_STOP_ALL) | (1 << DEPOT_WIDGET_START_ALL) | |
258 (1 << DEPOT_WIDGET_SELL) | (1 << DEPOT_WIDGET_SELL_CHAIN) | (1 << DEPOT_WIDGET_SELL_ALL) | |
261 (1 << DEPOT_WIDGET_SELL) | (1 << DEPOT_WIDGET_SELL_CHAIN) | (1 << DEPOT_WIDGET_SELL_ALL) | |
259 (1 << DEPOT_WIDGET_BUILD) | (1 << DEPOT_WIDGET_CLONE)); |
262 (1 << DEPOT_WIDGET_BUILD) | (1 << DEPOT_WIDGET_CLONE) | (1 << DEPOT_WIDGET_AUTOREPLACE)); |
260 |
263 |
261 /* determine amount of items for scroller */ |
264 /* determine amount of items for scroller */ |
262 if (WP(w, depot_d).type == VEH_Train) { |
265 if (WP(w, depot_d).type == VEH_Train) { |
263 hnum = 8; |
266 hnum = 8; |
264 for (num = 0; num < WP(w, depot_d).engine_count; num++) { |
267 for (num = 0; num < WP(w, depot_d).engine_count; num++) { |
576 static void ResizeDepotButtons(Window *w) |
579 static void ResizeDepotButtons(Window *w) |
577 { |
580 { |
578 /* We got the widget moved around. Now we will make some widgets to fill the gab between some widgets in equal sizes */ |
581 /* We got the widget moved around. Now we will make some widgets to fill the gab between some widgets in equal sizes */ |
579 |
582 |
580 /* Make the buttons in the bottom equal in size */ |
583 /* Make the buttons in the bottom equal in size */ |
581 w->widget[DEPOT_WIDGET_LOCATION].right = w->widget[DEPOT_WIDGET_RESIZE].left - 1; |
584 w->widget[DEPOT_WIDGET_LOCATION].right = w->widget[DEPOT_WIDGET_AUTOREPLACE].left - 1; |
582 w->widget[DEPOT_WIDGET_BUILD].right = w->widget[DEPOT_WIDGET_LOCATION].right / 3; |
585 w->widget[DEPOT_WIDGET_BUILD].right = w->widget[DEPOT_WIDGET_LOCATION].right / 3; |
583 w->widget[DEPOT_WIDGET_LOCATION].left = w->widget[DEPOT_WIDGET_BUILD].right * 2; |
586 w->widget[DEPOT_WIDGET_LOCATION].left = w->widget[DEPOT_WIDGET_BUILD].right * 2; |
584 w->widget[DEPOT_WIDGET_CLONE].left = w->widget[DEPOT_WIDGET_BUILD].right + 1; |
587 w->widget[DEPOT_WIDGET_CLONE].left = w->widget[DEPOT_WIDGET_BUILD].right + 1; |
585 w->widget[DEPOT_WIDGET_CLONE].right = w->widget[DEPOT_WIDGET_LOCATION].left - 1; |
588 w->widget[DEPOT_WIDGET_CLONE].right = w->widget[DEPOT_WIDGET_LOCATION].left - 1; |
586 |
589 |
648 DoCommandP(w->window_number, WP(w, depot_d).type, e->we.click.widget == DEPOT_WIDGET_START_ALL ? 1 : 0, NULL, CMD_MASS_START_STOP); |
651 DoCommandP(w->window_number, WP(w, depot_d).type, e->we.click.widget == DEPOT_WIDGET_START_ALL ? 1 : 0, NULL, CMD_MASS_START_STOP); |
649 break; |
652 break; |
650 |
653 |
651 case DEPOT_WIDGET_SELL_ALL: |
654 case DEPOT_WIDGET_SELL_ALL: |
652 ShowDepotSellAllWindow(w->window_number, WP(w, depot_d).type); |
655 ShowDepotSellAllWindow(w->window_number, WP(w, depot_d).type); |
|
656 break; |
|
657 |
|
658 case DEPOT_WIDGET_AUTOREPLACE: |
|
659 DoCommandP(w->window_number, WP(w, depot_d).type, 0, NULL, CMD_DEPOT_MASS_AUTOREPLACE); |
653 break; |
660 break; |
654 |
661 |
655 } |
662 } |
656 break; |
663 break; |
657 |
664 |
810 |
817 |
811 /* Special strings only for hangars (using hangar instead of depot and so on) */ |
818 /* Special strings only for hangars (using hangar instead of depot and so on) */ |
812 w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_HANGAR_TOOLTIP; |
819 w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_HANGAR_TOOLTIP; |
813 w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_HANGAR_TOOLTIP; |
820 w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_HANGAR_TOOLTIP; |
814 w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_HANGAR_TIP; |
821 w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_HANGAR_TIP; |
|
822 w->widget[DEPOT_WIDGET_AUTOREPLACE].tooltips = STR_DEPOT_AUTOREPLACE_HANGAR_TIP; |
815 break; |
823 break; |
816 } |
824 } |
817 } |
825 } |
818 |
826 |
819 /** Opens a depot window |
827 /** Opens a depot window |