summaryrefslogtreecommitdiff
path: root/depot_gui.c
diff options
context:
space:
mode:
Diffstat (limited to 'depot_gui.c')
-rw-r--r--depot_gui.c405
1 files changed, 184 insertions, 221 deletions
diff --git a/depot_gui.c b/depot_gui.c
index 5dac5cc6d..2ce1096f3 100644
--- a/depot_gui.c
+++ b/depot_gui.c
@@ -18,7 +18,6 @@
#include "vehicle_gui.h"
#include "station_map.h"
#include "newgrf_engine.h"
-#include "resize_window_widgets.h"
/*
* Since all depot window sizes aren't the same, we need to modify sizes a little.
@@ -27,7 +26,7 @@
*/
/* Names of the widgets. Keep them in the same order as in the widget array */
-typedef enum DepotWindowWidgets {
+enum DepotWindowWidgets {
DEPOT_WIDGET_CLOSEBOX = 0,
DEPOT_WIDGET_CAPTION,
DEPOT_WIDGET_STICKY,
@@ -45,28 +44,6 @@ typedef enum DepotWindowWidgets {
DEPOT_WIDGET_STOP_ALL,
DEPOT_WIDGET_START_ALL,
DEPOT_WIDGET_RESIZE,
- DEPOT_WIDGET_LAST, // used to assert if DepotWindowWidgets and widget_moves got different lengths. Due to this usage, it needs to be last
-} DepotWindowWidget;
-
-/* Define how to move each widget. The order is important */
-static const byte widget_moves[] = {
- WIDGET_MOVE_NONE, // DEPOT_WIDGET_CLOSEBOX
- WIDGET_STRETCH_RIGHT, // DEPOT_WIDGET_CAPTION
- WIDGET_MOVE_RIGHT, // DEPOT_WIDGET_STICKY
- WIDGET_MOVE_RIGHT_STRETCH_DOWN, // DEPOT_WIDGET_SELL
- WIDGET_MOVE_NONE, // DEPOT_WIDGET_SELL_CHAIN
- WIDGET_MOVE_DOWN_RIGHT, // DEPOT_WIDGET_SELL_ALL
- WIDGET_MOVE_DOWN_RIGHT, // DEPOT_WIDGET_AUTOREPLACE
- WIDGET_STRETCH_DOWN_RIGHT, // DEPOT_WIDGET_MATRIX
- WIDGET_MOVE_RIGHT_STRETCH_DOWN, // DEPOT_WIDGET_V_SCROLL
- WIDGET_MOVE_NONE, // DEPOT_WIDGET_H_SCROLL
- WIDGET_MOVE_DOWN, // DEPOT_WIDGET_BUILD
- WIDGET_MOVE_DOWN, // DEPOT_WIDGET_CLONE
- WIDGET_MOVE_DOWN, // DEPOT_WIDGET_LOCATION
- WIDGET_MOVE_DOWN_RIGHT, // DEPOT_WIDGET_VEHICLE_LIST
- WIDGET_MOVE_DOWN_RIGHT, // DEPOT_WIDGET_STOP_ALL
- WIDGET_MOVE_DOWN_RIGHT, // DEPOT_WIDGET_START_ALL
- WIDGET_MOVE_DOWN_RIGHT, // DEPOT_WIDGET_RESIZE
};
/* Widget array for all depot windows.
@@ -86,20 +63,20 @@ static const Widget _depot_widgets[] = {
/* Widgets are set up run-time */
{ WWT_IMGBTN, RESIZE_LRB, 14, 270, 292, 14, 37, 0x0, STR_NULL}, // DEPOT_WIDGET_SELL
- { WWT_IMGBTN, RESIZE_LRTB, 14, 326, 348, 0, 0, SPR_SELL_CHAIN_TRAIN,STR_DRAG_WHOLE_TRAIN_TO_SELL_TIP}, // DEPOT_WIDGET_SELL_CHAIN, trains only
+ { WWT_IMGBTN, RESIZE_LRTB, 14, 270, 292, 14, 37, SPR_SELL_CHAIN_TRAIN,STR_DRAG_WHOLE_TRAIN_TO_SELL_TIP}, // DEPOT_WIDGET_SELL_CHAIN, trains only
{ WWT_PUSHIMGBTN, RESIZE_LRTB, 14, 270, 292, 38, 60, 0x0, STR_NULL}, // DEPOT_WIDGET_SELL_ALL
{ WWT_PUSHIMGBTN, RESIZE_LRTB, 14, 270, 292, 61, 83, 0x0, STR_NULL}, // DEPOT_WIDGET_AUTOREPLACE
{ WWT_MATRIX, RESIZE_RB, 14, 0, 269, 14, 83, 0x0, STR_NULL}, // DEPOT_WIDGET_MATRIX
{ WWT_SCROLLBAR, RESIZE_LRB, 14, 293, 304, 14, 83, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, // DEPOT_WIDGET_V_SCROLL
- { WWT_HSCROLLBAR, RESIZE_RTB, 14, 0, 325, 98, 109, 0x0, STR_HSCROLL_BAR_SCROLLS_LIST}, // DEPOT_WIDGET_H_SCROLL, trains only
+ { WWT_HSCROLLBAR, RESIZE_RTB, 14, 0, 269, 72, 83, 0x0, STR_HSCROLL_BAR_SCROLLS_LIST}, // DEPOT_WIDGET_H_SCROLL, trains only
/* The buttons in the bottom of the window. left and right is not important as they are later resized to be equal in size
* This calculation is based on right in DEPOT_WIDGET_LOCATION and it presumes left of DEPOT_WIDGET_BUILD is 0 */
{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 85, 84, 95, 0x0, STR_NULL}, // DEPOT_WIDGET_BUILD
{ WWT_TEXTBTN, RESIZE_TB, 14, 86, 170, 84, 95, 0x0, STR_NULL}, // DEPOT_WIDGET_CLONE
- { WWT_PUSHTXTBTN, RESIZE_TB, 14, 171, 257, 84, 95, STR_00E4_LOCATION, STR_NULL}, // DEPOT_WIDGET_LOCATION
+ { WWT_PUSHTXTBTN, RESIZE_RTB, 14, 171, 257, 84, 95, STR_00E4_LOCATION, STR_NULL}, // DEPOT_WIDGET_LOCATION
{ WWT_PUSHTXTBTN, RESIZE_LRTB, 14, 258, 269, 84, 95, 0x0, STR_NULL}, // DEPOT_WIDGET_VEHICLE_LIST
{ WWT_PUSHIMGBTN, RESIZE_LRTB, 14, 270, 280, 84, 95, SPR_FLAG_VEH_STOPPED,STR_NULL}, // DEPOT_WIDGET_STOP_ALL
{ WWT_PUSHIMGBTN, RESIZE_LRTB, 14, 281, 292, 84, 95, SPR_FLAG_VEH_RUNNING,STR_NULL}, // DEPOT_WIDGET_START_ALL
@@ -110,7 +87,7 @@ static const Widget _depot_widgets[] = {
static void DepotWndProc(Window *w, WindowEvent *e);
static const WindowDesc _train_depot_desc = {
- WDP_AUTO, WDP_AUTO, 361, 122,
+ WDP_AUTO, WDP_AUTO, 305, 96,
WC_VEHICLE_DEPOT,0,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
_depot_widgets,
@@ -118,7 +95,7 @@ static const WindowDesc _train_depot_desc = {
};
static const WindowDesc _road_depot_desc = {
- WDP_AUTO, WDP_AUTO, 315, 96,
+ WDP_AUTO, WDP_AUTO, 305, 96,
WC_VEHICLE_DEPOT,0,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
_depot_widgets,
@@ -126,7 +103,7 @@ static const WindowDesc _road_depot_desc = {
};
static const WindowDesc _ship_depot_desc = {
- WDP_AUTO, WDP_AUTO, 305, 98,
+ WDP_AUTO, WDP_AUTO, 305, 96,
WC_VEHICLE_DEPOT,0,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
_depot_widgets,
@@ -134,7 +111,7 @@ static const WindowDesc _ship_depot_desc = {
};
static const WindowDesc _aircraft_depot_desc = {
- WDP_AUTO, WDP_AUTO, 331, 98,
+ WDP_AUTO, WDP_AUTO, 305, 96,
WC_VEHICLE_DEPOT,0,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
_depot_widgets,
@@ -596,10 +573,9 @@ static void ClonePlaceObj(const Window *w)
static void ResizeDepotButtons(Window *w)
{
- /* We got the widget moved around. Now we will make some widgets to fill the gab between some widgets in equal sizes */
+ /* We got the widget moved around. Now we will make some widgets to fill the gap between some widgets in equal sizes */
/* Make the buttons in the bottom equal in size */
- w->widget[DEPOT_WIDGET_LOCATION].right = w->widget[DEPOT_WIDGET_VEHICLE_LIST].left - 1;
w->widget[DEPOT_WIDGET_BUILD].right = w->widget[DEPOT_WIDGET_LOCATION].right / 3;
w->widget[DEPOT_WIDGET_LOCATION].left = w->widget[DEPOT_WIDGET_BUILD].right * 2;
w->widget[DEPOT_WIDGET_CLONE].left = w->widget[DEPOT_WIDGET_BUILD].right + 1;
@@ -608,18 +584,182 @@ static void ResizeDepotButtons(Window *w)
if (WP(w, depot_d).type == VEH_Train) {
/* Divide the size of DEPOT_WIDGET_SELL into two equally big buttons so DEPOT_WIDGET_SELL and DEPOT_WIDGET_SELL_CHAIN will get the same size.
* This way it will stay the same even if DEPOT_WIDGET_SELL_CHAIN is resized for some reason */
- w->widget[DEPOT_WIDGET_SELL_CHAIN].bottom = w->widget[DEPOT_WIDGET_SELL_ALL].top - 1;
w->widget[DEPOT_WIDGET_SELL_CHAIN].top = ((w->widget[DEPOT_WIDGET_SELL_CHAIN].bottom - w->widget[DEPOT_WIDGET_SELL].top) / 2) + w->widget[DEPOT_WIDGET_SELL].top;
w->widget[DEPOT_WIDGET_SELL].bottom = w->widget[DEPOT_WIDGET_SELL_CHAIN].top - 1;
}
}
+/* Function to set up vehicle specific sprites and strings
+ * Only use this if it's the same widget, that's used for more than one vehicle type and it needs different text/sprites
+ * Vehicle specific text/sprites, that's in a widget, that's only shown for one vehicle type (like sell whole train) is set in the widget array
+ */
+static void SetupStringsForDepotWindow(Window *w, byte type)
+{
+ switch (type) {
+ case VEH_Train:
+ w->widget[DEPOT_WIDGET_CAPTION].data = STR_8800_TRAIN_DEPOT;
+ w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_TRAIN_TIP;
+ w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_TRAIN_TIP;
+ w->widget[DEPOT_WIDGET_SELL].tooltips = STR_8841_DRAG_TRAIN_VEHICLE_TO_HERE;
+ w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP;
+ w->widget[DEPOT_WIDGET_MATRIX].tooltips = STR_883F_TRAINS_CLICK_ON_TRAIN_FOR;
+
+ w->widget[DEPOT_WIDGET_BUILD].data = STR_8815_NEW_VEHICLES;
+ w->widget[DEPOT_WIDGET_BUILD].tooltips = STR_8840_BUILD_NEW_TRAIN_VEHICLE;
+ w->widget[DEPOT_WIDGET_CLONE].data = STR_CLONE_TRAIN;
+ w->widget[DEPOT_WIDGET_CLONE].tooltips = STR_CLONE_TRAIN_DEPOT_INFO;
+
+ w->widget[DEPOT_WIDGET_LOCATION].tooltips = STR_8842_CENTER_MAIN_VIEW_ON_TRAIN;
+ w->widget[DEPOT_WIDGET_VEHICLE_LIST].data = STR_TRAIN;
+ w->widget[DEPOT_WIDGET_VEHICLE_LIST].tooltips = STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TIP;
+ w->widget[DEPOT_WIDGET_AUTOREPLACE].tooltips = STR_DEPOT_AUTOREPLACE_TRAIN_TIP;
+
+ /* Sprites */
+ w->widget[DEPOT_WIDGET_SELL].data = SPR_SELL_TRAIN;
+ w->widget[DEPOT_WIDGET_SELL_ALL].data = SPR_SELL_ALL_TRAIN;
+ w->widget[DEPOT_WIDGET_AUTOREPLACE].data = SPR_REPLACE_TRAIN;
+ break;
+
+ case VEH_Road:
+ w->widget[DEPOT_WIDGET_CAPTION].data = STR_9003_ROAD_VEHICLE_DEPOT;
+ w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_ROADVEH_TIP;
+ w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_ROADVEH_TIP;
+ w->widget[DEPOT_WIDGET_SELL].tooltips = STR_9024_DRAG_ROAD_VEHICLE_TO_HERE;
+ w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP;
+ w->widget[DEPOT_WIDGET_MATRIX].tooltips = STR_9022_VEHICLES_CLICK_ON_VEHICLE;
+
+ w->widget[DEPOT_WIDGET_BUILD].data = STR_9004_NEW_VEHICLES;
+ w->widget[DEPOT_WIDGET_BUILD].tooltips = STR_9023_BUILD_NEW_ROAD_VEHICLE;
+ w->widget[DEPOT_WIDGET_CLONE].data = STR_CLONE_ROAD_VEHICLE;
+ w->widget[DEPOT_WIDGET_CLONE].tooltips = STR_CLONE_ROAD_VEHICLE_DEPOT_INFO;
+
+ w->widget[DEPOT_WIDGET_LOCATION].tooltips = STR_9025_CENTER_MAIN_VIEW_ON_ROAD;
+ w->widget[DEPOT_WIDGET_VEHICLE_LIST].data = STR_LORRY;
+ w->widget[DEPOT_WIDGET_VEHICLE_LIST].tooltips = STR_DEPOT_VEHICLE_ORDER_LIST_ROADVEH_TIP;
+ w->widget[DEPOT_WIDGET_AUTOREPLACE].tooltips = STR_DEPOT_AUTOREPLACE_ROADVEH_TIP;
+
+ /* Sprites */
+ w->widget[DEPOT_WIDGET_SELL].data = SPR_SELL_ROADVEH;
+ w->widget[DEPOT_WIDGET_SELL_ALL].data = SPR_SELL_ALL_ROADVEH;
+ w->widget[DEPOT_WIDGET_AUTOREPLACE].data = SPR_REPLACE_ROADVEH;
+ break;
+
+ case VEH_Ship:
+ w->widget[DEPOT_WIDGET_CAPTION].data = STR_9803_SHIP_DEPOT;
+ w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_SHIP_TIP;
+ w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_SHIP_TIP;
+ w->widget[DEPOT_WIDGET_SELL].tooltips = STR_9821_DRAG_SHIP_TO_HERE_TO_SELL;
+ w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_SHIP_TIP;
+ w->widget[DEPOT_WIDGET_MATRIX].tooltips = STR_981F_SHIPS_CLICK_ON_SHIP_FOR;
+
+ w->widget[DEPOT_WIDGET_BUILD].data = STR_9804_NEW_SHIPS;
+ w->widget[DEPOT_WIDGET_BUILD].tooltips = STR_9820_BUILD_NEW_SHIP;
+ w->widget[DEPOT_WIDGET_CLONE].data = STR_CLONE_SHIP;
+ w->widget[DEPOT_WIDGET_CLONE].tooltips = STR_CLONE_SHIP_DEPOT_INFO;
+
+ w->widget[DEPOT_WIDGET_LOCATION].tooltips = STR_9822_CENTER_MAIN_VIEW_ON_SHIP;
+ w->widget[DEPOT_WIDGET_VEHICLE_LIST].data = STR_SHIP;
+ w->widget[DEPOT_WIDGET_VEHICLE_LIST].tooltips = STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TIP;
+ w->widget[DEPOT_WIDGET_AUTOREPLACE].tooltips = STR_DEPOT_AUTOREPLACE_SHIP_TIP;
+
+ /* Sprites */
+ w->widget[DEPOT_WIDGET_SELL].data = SPR_SELL_SHIP;
+ w->widget[DEPOT_WIDGET_SELL_ALL].data = SPR_SELL_ALL_SHIP;
+ w->widget[DEPOT_WIDGET_AUTOREPLACE].data = SPR_REPLACE_SHIP;
+ break;
+
+ case VEH_Aircraft:
+ w->widget[DEPOT_WIDGET_CAPTION].data = STR_A002_AIRCRAFT_HANGAR;
+ w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_HANGAR_TIP;
+ w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_HANGAR_TIP;
+ w->widget[DEPOT_WIDGET_SELL].tooltips = STR_A023_DRAG_AIRCRAFT_TO_HERE_TO;
+ w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TIP;
+ w->widget[DEPOT_WIDGET_MATRIX].tooltips = STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT;
+
+ w->widget[DEPOT_WIDGET_BUILD].data = STR_A003_NEW_AIRCRAFT;
+ w->widget[DEPOT_WIDGET_BUILD].tooltips = STR_A022_BUILD_NEW_AIRCRAFT;
+ w->widget[DEPOT_WIDGET_CLONE].data = STR_CLONE_AIRCRAFT;
+ w->widget[DEPOT_WIDGET_CLONE].tooltips = STR_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW;
+
+ w->widget[DEPOT_WIDGET_LOCATION].tooltips = STR_A024_CENTER_MAIN_VIEW_ON_HANGAR;
+ w->widget[DEPOT_WIDGET_VEHICLE_LIST].data = STR_PLANE;
+ w->widget[DEPOT_WIDGET_VEHICLE_LIST].tooltips = STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TIP;
+ w->widget[DEPOT_WIDGET_AUTOREPLACE].tooltips = STR_DEPOT_AUTOREPLACE_AIRCRAFT_TIP;
+
+ /* Sprites */
+ w->widget[DEPOT_WIDGET_SELL].data = SPR_SELL_AIRCRAFT;
+ w->widget[DEPOT_WIDGET_SELL_ALL].data = SPR_SELL_ALL_AIRCRAFT;
+ w->widget[DEPOT_WIDGET_AUTOREPLACE].data = SPR_REPLACE_AIRCRAFT;
+ break;
+ }
+}
+
+static void CreateDepotListWindow(Window *w, byte type)
+{
+ WP(w, depot_d).type = type;
+ _backup_orders_tile = 0;
+
+ /* Resize the window according to the vehicle type */
+ switch (type) {
+ default: NOT_REACHED();
+ case VEH_Train:
+ w->vscroll.cap = 6;
+ w->hscroll.cap = 10 * 29;
+ w->resize.step_width = 1;
+ ResizeWindow(w, 56, 26);
+ break;
+
+ case VEH_Road:
+ w->vscroll.cap = 5;
+ w->hscroll.cap = 5;
+ w->resize.step_width = 56;
+ ResizeWindow(w, 10, 0);
+ break;
+
+ case VEH_Ship:
+ w->vscroll.cap = 3;
+ w->hscroll.cap = 3;
+ w->resize.step_width = 90;
+ ResizeWindow(w, 0, 2);
+ break;
+
+ case VEH_Aircraft:
+ w->vscroll.cap = 3;
+ w->hscroll.cap = 4;
+ w->resize.step_width = 74;
+ ResizeWindow(w, 26, 2);
+ break;
+ }
+
+ /* Set the minimum window size to the current window size */
+ w->resize.width = w->width;
+ w->resize.height = w->height;
+ w->resize.step_height = GetVehicleListHeight(type);
+
+ SetupStringsForDepotWindow(w, type);
+
+ w->widget[DEPOT_WIDGET_MATRIX].data =
+ (w->vscroll.cap * 0x100) // number of rows to draw on the background
+ + (type == VEH_Train ? 1 : w->hscroll.cap); // number of boxes in each row. Trains always have just one
+
+
+ SetWindowWidgetsHiddenState(w, type != VEH_Train,
+ DEPOT_WIDGET_H_SCROLL,
+ DEPOT_WIDGET_SELL_CHAIN,
+ WIDGET_LIST_END);
+
+ /* The train depot has a horizontal scroller, make the matrix that much shorter to fit */
+ if (type == VEH_Train) w->widget[DEPOT_WIDGET_MATRIX].bottom -= 12;
+ ResizeDepotButtons(w);
+}
+
void DepotSortList(Vehicle **v, uint16 length);
static void DepotWndProc(Window *w, WindowEvent *e)
{
switch (e->event) {
case WE_CREATE:
+ WP(w, depot_d).sel = INVALID_VEHICLE;
WP(w, depot_d).vehicle_list = NULL;
WP(w, depot_d).wagon_list = NULL;
WP(w, depot_d).engine_count = 0;
@@ -831,111 +971,6 @@ static void DepotWndProc(Window *w, WindowEvent *e)
}
}
-/* Function to set up vehicle specific sprites and strings
- * Only use this if it's the same widget, that's used for more than one vehicle type and it needs different text/sprites
- * Vehicle specific text/sprites, that's in a widget, that's only shown for one vehicle type (like sell whole train) is set in the widget array
- */
-static void SetupStringsForDepotWindow(Window *w, byte type)
-{
- switch (type) {
- case VEH_Train:
- w->widget[DEPOT_WIDGET_CAPTION].data = STR_8800_TRAIN_DEPOT;
- w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_TRAIN_TIP;
- w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_TRAIN_TIP;
- w->widget[DEPOT_WIDGET_SELL].tooltips = STR_8841_DRAG_TRAIN_VEHICLE_TO_HERE;
- w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP;
- w->widget[DEPOT_WIDGET_MATRIX].tooltips = STR_883F_TRAINS_CLICK_ON_TRAIN_FOR;
-
- w->widget[DEPOT_WIDGET_BUILD].data = STR_8815_NEW_VEHICLES;
- w->widget[DEPOT_WIDGET_BUILD].tooltips = STR_8840_BUILD_NEW_TRAIN_VEHICLE;
- w->widget[DEPOT_WIDGET_CLONE].data = STR_CLONE_TRAIN;
- w->widget[DEPOT_WIDGET_CLONE].tooltips = STR_CLONE_TRAIN_DEPOT_INFO;
-
- w->widget[DEPOT_WIDGET_LOCATION].tooltips = STR_8842_CENTER_MAIN_VIEW_ON_TRAIN;
- w->widget[DEPOT_WIDGET_VEHICLE_LIST].data = STR_TRAIN;
- w->widget[DEPOT_WIDGET_VEHICLE_LIST].tooltips = STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TIP;
- w->widget[DEPOT_WIDGET_AUTOREPLACE].tooltips = STR_DEPOT_AUTOREPLACE_TRAIN_TIP;
-
- /* Sprites */
- w->widget[DEPOT_WIDGET_SELL].data = SPR_SELL_TRAIN;
- w->widget[DEPOT_WIDGET_SELL_ALL].data = SPR_SELL_ALL_TRAIN;
- w->widget[DEPOT_WIDGET_AUTOREPLACE].data = SPR_REPLACE_TRAIN;
- break;
-
- case VEH_Road:
- w->widget[DEPOT_WIDGET_CAPTION].data = STR_9003_ROAD_VEHICLE_DEPOT;
- w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_ROADVEH_TIP;
- w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_ROADVEH_TIP;
- w->widget[DEPOT_WIDGET_SELL].tooltips = STR_9024_DRAG_ROAD_VEHICLE_TO_HERE;
- w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP;
- w->widget[DEPOT_WIDGET_MATRIX].tooltips = STR_9022_VEHICLES_CLICK_ON_VEHICLE;
-
- w->widget[DEPOT_WIDGET_BUILD].data = STR_9004_NEW_VEHICLES;
- w->widget[DEPOT_WIDGET_BUILD].tooltips = STR_9023_BUILD_NEW_ROAD_VEHICLE;
- w->widget[DEPOT_WIDGET_CLONE].data = STR_CLONE_ROAD_VEHICLE;
- w->widget[DEPOT_WIDGET_CLONE].tooltips = STR_CLONE_ROAD_VEHICLE_DEPOT_INFO;
-
- w->widget[DEPOT_WIDGET_LOCATION].tooltips = STR_9025_CENTER_MAIN_VIEW_ON_ROAD;
- w->widget[DEPOT_WIDGET_VEHICLE_LIST].data = STR_LORRY;
- w->widget[DEPOT_WIDGET_VEHICLE_LIST].tooltips = STR_DEPOT_VEHICLE_ORDER_LIST_ROADVEH_TIP;
- w->widget[DEPOT_WIDGET_AUTOREPLACE].tooltips = STR_DEPOT_AUTOREPLACE_ROADVEH_TIP;
-
- /* Sprites */
- w->widget[DEPOT_WIDGET_SELL].data = SPR_SELL_ROADVEH;
- w->widget[DEPOT_WIDGET_SELL_ALL].data = SPR_SELL_ALL_ROADVEH;
- w->widget[DEPOT_WIDGET_AUTOREPLACE].data = SPR_REPLACE_ROADVEH;
- break;
-
- case VEH_Ship:
- w->widget[DEPOT_WIDGET_CAPTION].data = STR_9803_SHIP_DEPOT;
- w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_SHIP_TIP;
- w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_SHIP_TIP;
- w->widget[DEPOT_WIDGET_SELL].tooltips = STR_9821_DRAG_SHIP_TO_HERE_TO_SELL;
- w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_SHIP_TIP;
- w->widget[DEPOT_WIDGET_MATRIX].tooltips = STR_981F_SHIPS_CLICK_ON_SHIP_FOR;
-
- w->widget[DEPOT_WIDGET_BUILD].data = STR_9804_NEW_SHIPS;
- w->widget[DEPOT_WIDGET_BUILD].tooltips = STR_9820_BUILD_NEW_SHIP;
- w->widget[DEPOT_WIDGET_CLONE].data = STR_CLONE_SHIP;
- w->widget[DEPOT_WIDGET_CLONE].tooltips = STR_CLONE_SHIP_DEPOT_INFO;
-
- w->widget[DEPOT_WIDGET_LOCATION].tooltips = STR_9822_CENTER_MAIN_VIEW_ON_SHIP;
- w->widget[DEPOT_WIDGET_VEHICLE_LIST].data = STR_SHIP;
- w->widget[DEPOT_WIDGET_VEHICLE_LIST].tooltips = STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TIP;
- w->widget[DEPOT_WIDGET_AUTOREPLACE].tooltips = STR_DEPOT_AUTOREPLACE_SHIP_TIP;
-
- /* Sprites */
- w->widget[DEPOT_WIDGET_SELL].data = SPR_SELL_SHIP;
- w->widget[DEPOT_WIDGET_SELL_ALL].data = SPR_SELL_ALL_SHIP;
- w->widget[DEPOT_WIDGET_AUTOREPLACE].data = SPR_REPLACE_SHIP;
- break;
-
- case VEH_Aircraft:
- w->widget[DEPOT_WIDGET_CAPTION].data = STR_A002_AIRCRAFT_HANGAR;
- w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_HANGAR_TIP;
- w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_HANGAR_TIP;
- w->widget[DEPOT_WIDGET_SELL].tooltips = STR_A023_DRAG_AIRCRAFT_TO_HERE_TO;
- w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TIP;
- w->widget[DEPOT_WIDGET_MATRIX].tooltips = STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT;
-
- w->widget[DEPOT_WIDGET_BUILD].data = STR_A003_NEW_AIRCRAFT;
- w->widget[DEPOT_WIDGET_BUILD].tooltips = STR_A022_BUILD_NEW_AIRCRAFT;
- w->widget[DEPOT_WIDGET_CLONE].data = STR_CLONE_AIRCRAFT;
- w->widget[DEPOT_WIDGET_CLONE].tooltips = STR_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW;
-
- w->widget[DEPOT_WIDGET_LOCATION].tooltips = STR_A024_CENTER_MAIN_VIEW_ON_HANGAR;
- w->widget[DEPOT_WIDGET_VEHICLE_LIST].data = STR_PLANE;
- w->widget[DEPOT_WIDGET_VEHICLE_LIST].tooltips = STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TIP;
- w->widget[DEPOT_WIDGET_AUTOREPLACE].tooltips = STR_DEPOT_AUTOREPLACE_AIRCRAFT_TIP;
-
- /* Sprites */
- w->widget[DEPOT_WIDGET_SELL].data = SPR_SELL_AIRCRAFT;
- w->widget[DEPOT_WIDGET_SELL_ALL].data = SPR_SELL_ALL_AIRCRAFT;
- w->widget[DEPOT_WIDGET_AUTOREPLACE].data = SPR_REPLACE_AIRCRAFT;
- break;
- }
-}
-
/** Opens a depot window
* @param tile The tile where the depot/hangar is located
* @param type The type of vehicles in the depot
@@ -944,93 +979,21 @@ void ShowDepotWindow(TileIndex tile, byte type)
{
Window *w;
- /* First we ensure that the widget counts are equal in all 3 lists to prevent bad stuff from happening */
- assert(lengthof(widget_moves) == lengthof(_depot_widgets) - 1); // we should not count WIDGETS_END
- assert(lengthof(widget_moves) == DEPOT_WIDGET_LAST);
-
switch (type) {
- case VEH_Train: w = AllocateWindowDescFront(&_train_depot_desc, tile); break;
- case VEH_Road: w = AllocateWindowDescFront(&_road_depot_desc, tile); break;
- case VEH_Ship: w = AllocateWindowDescFront(&_ship_depot_desc, tile); break;
- case VEH_Aircraft: w = AllocateWindowDescFront(&_aircraft_depot_desc, tile); break;
- default: NOT_REACHED(); w = NULL;
+ default: NOT_REACHED();
+ case VEH_Train:
+ w = AllocateWindowDescFront(&_train_depot_desc, tile); break;
+ case VEH_Road:
+ w = AllocateWindowDescFront(&_road_depot_desc, tile); break;
+ case VEH_Ship:
+ w = AllocateWindowDescFront(&_ship_depot_desc, tile); break;
+ case VEH_Aircraft:
+ w = AllocateWindowDescFront(&_aircraft_depot_desc, tile); break;
}
if (w != NULL) {
- int16 horizontal = 0, vertical = 0;
w->caption_color = GetTileOwner(tile);
- WP(w, depot_d).type = type;
- WP(w, depot_d).sel = INVALID_VEHICLE;
- _backup_orders_tile = 0;
-
- /* Resize the window according to the vehicle type */
- switch (type) {
- case VEH_Train:
- horizontal = 56;
- vertical = 26;
- w->vscroll.cap = 6;
- w->hscroll.cap = 10 * 29;
- w->resize.step_width = 1;
- break;
-
- case VEH_Road:
- horizontal = 10;
- w->vscroll.cap = 5;
- w->hscroll.cap = 5;
- w->resize.step_width = 56;
- break;
-
- case VEH_Ship:
- vertical = 2;
- w->vscroll.cap = 3;
- w->hscroll.cap = 3;
- w->resize.step_width = 90;
- break;
-
- case VEH_Aircraft:
- horizontal = 26;
- vertical = 2;
- w->vscroll.cap = 3;
- w->hscroll.cap = 4;
- w->resize.step_width = 74;
- break;
-
- default: NOT_REACHED();
- }
-
- w->resize.step_height = GetVehicleListHeight(type);
-
- SetupStringsForDepotWindow(w, type);
-
- w->widget[DEPOT_WIDGET_MATRIX].data =
- (w->vscroll.cap * 0x100) // number of rows to draw on the background
- + (type == VEH_Train ? 1 : w->hscroll.cap); // number of boxes in each row. Trains always have just one
-
-
- SetWindowWidgetsHiddenState(w, type != VEH_Train,
- DEPOT_WIDGET_H_SCROLL,
- DEPOT_WIDGET_SELL_CHAIN,
- WIDGET_LIST_END);
-
- /* Move the widgets to their right locations */
- ResizeWindowWidgets(w, widget_moves, lengthof(widget_moves), horizontal, vertical);
-
- if (type == VEH_Train) {
- /* Now we move the train only widgets so they are placed correctly
- * Doing it here will ensure that they move if the widget they are placed on top of/aligned to are moved */
-
- /* DEPOT_WIDGET_H_SCROLL is placed in the lowest part of DEPOT_WIDGET_MATRIX */
- w->widget[DEPOT_WIDGET_H_SCROLL].left = w->widget[DEPOT_WIDGET_MATRIX].left;
- w->widget[DEPOT_WIDGET_H_SCROLL].right = w->widget[DEPOT_WIDGET_MATRIX].right;
- w->widget[DEPOT_WIDGET_H_SCROLL].bottom = w->widget[DEPOT_WIDGET_MATRIX].bottom;
- w->widget[DEPOT_WIDGET_H_SCROLL].top = w->widget[DEPOT_WIDGET_MATRIX].bottom - 11;
- w->widget[DEPOT_WIDGET_MATRIX].bottom -= 12;
-
- /* DEPOT_WIDGET_SELL_CHAIN is under DEPOT_WIDGET_SELL. They got the same left and right and height is controlled in ResizeDepotButtons() */
- w->widget[DEPOT_WIDGET_SELL_CHAIN].left = w->widget[DEPOT_WIDGET_SELL].left;
- w->widget[DEPOT_WIDGET_SELL_CHAIN].right = w->widget[DEPOT_WIDGET_SELL].right;
- }
- ResizeDepotButtons(w);
+ CreateDepotListWindow(w, type);
}
}