From 2cab6db18c9b2f266cfe884e22decf37fe93fe82 Mon Sep 17 00:00:00 2001 From: bjarni Date: Wed, 27 Sep 2006 11:34:27 +0000 Subject: [PATCH] (svn r6522) -Feature: [depot window] the buttons are now "scaled" resized This means that "Build vehicle", "Clone vehicle" and "Location" will always fill the space from the left window border to the resize button and they are equal in size The sell button will also use all the space between the start/stop buttons and the resize button and for trains, the sell button is split into two buttons in equal sizes This will prevent the issue where a small window is resized into a large one and the buttons remains pretty small -Codechange: [depot window] The enum with widget names is now changed into automatic numbering so all lines will not have to be changed each time a new widget is added --- depot_gui.c | 83 ++++++++++++++++++++++++++--------------------------- 1 file changed, 40 insertions(+), 43 deletions(-) diff --git a/depot_gui.c b/depot_gui.c index 04858fbed3..13cd2b17c9 100644 --- a/depot_gui.c +++ b/depot_gui.c @@ -17,24 +17,23 @@ #include "newgrf_engine.h" #include "train.h" -enum { - DEPOT_WIDGET_CLOSEBOX = 0, - DEPOT_WIDGET_CAPTION = 1, - DEPOT_WIDGET_STICKY = 2, - DEPOT_WIDGET_STOP_ALL = 3, - DEPOT_WIDGET_START_ALL = 4, - DEPOT_WIDGET_V_RESIZE = 5, // blank widget, that fills the gab at the sell button when resizing vertically - DEPOT_WIDGET_SELL = 6, - DEPOT_WIDGET_SELL_ALL = 7, - DEPOT_WIDGET_MATRIX = 8, - DEPOT_WIDGET_V_SCROLL = 9, // Vertical scrollbar - DEPOT_WIDGET_H_SCROLL = 10, // Horizontal scrollbar - DEPOT_WIDGET_BUILD = 11, - DEPOT_WIDGET_CLONE = 12, - DEPOT_WIDGET_LOCATION = 13, - DEPOT_WIDGET_H_RESIZE = 14, // blank widget, that fills the gab at the build and clone buttons when resizing horizontally - DEPOT_WIDGET_RESIZE = 15, -}; +/* Names of the widgets. Keep them in the same order as in the widget array */ +typedef enum DepotWindowWidgets { + DEPOT_WIDGET_CLOSEBOX = 0, + DEPOT_WIDGET_CAPTION, + DEPOT_WIDGET_STICKY, + DEPOT_WIDGET_STOP_ALL, + DEPOT_WIDGET_START_ALL, + DEPOT_WIDGET_SELL, + DEPOT_WIDGET_SELL_ALL, + DEPOT_WIDGET_MATRIX, + DEPOT_WIDGET_V_SCROLL, // Vertical scrollbar + DEPOT_WIDGET_H_SCROLL, // Horizontal scrollbar + DEPOT_WIDGET_BUILD, + DEPOT_WIDGET_CLONE, + DEPOT_WIDGET_LOCATION, + DEPOT_WIDGET_RESIZE, +} DepotWindowWidget; /* Widget array for all depot windows. * If a widget is needed in some windows only (like train specific), add it for all windows @@ -47,8 +46,7 @@ static const Widget _depot_widgets[] = { { WWT_PUSHIMGBTN, RESIZE_LR, 14, 270, 280, 14, 25, SPR_FLAG_VEH_STOPPED,STR_MASS_STOP_DEPOT_TOOLTIP}, // DEPOT_WIDGET_STOP_ALL { WWT_PUSHIMGBTN, RESIZE_LR, 14, 281, 292, 14, 25, SPR_FLAG_VEH_RUNNING,STR_MASS_START_DEPOT_TOOLTIP}, // DEPOT_WIDGET_START_ALL - { WWT_PANEL, RESIZE_LRB, 14, 270, 292, 26, 25, 0x0, STR_NULL}, // DEPOT_WIDGET_V_RESIZE - { WWT_IMGBTN, RESIZE_LRTB, 14, 270, 292, 26, 61, 0x2A9, STR_NULL}, // DEPOT_WIDGET_SELL + { WWT_IMGBTN, RESIZE_LRB, 14, 270, 292, 26, 61, 0x2A9, STR_NULL}, // DEPOT_WIDGET_SELL { WWT_PANEL, RESIZE_LRTB, 14, 326, 348, 0, 0, 0x2BF, STR_DRAG_WHOLE_TRAIN_TO_SELL_TIP}, // DEPOT_WIDGET_SELL_ALL, trains only { WWT_MATRIX, RESIZE_RB, 14, 0, 269, 14, 61, 0x0, STR_NULL}, // DEPOT_WIDGET_MATRIX @@ -61,8 +59,6 @@ static const Widget _depot_widgets[] = { { WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 96, 62, 73, 0x0, STR_NULL}, // DEPOT_WIDGET_BUILD {WWT_NODISTXTBTN, RESIZE_TB, 14, 97, 194, 62, 73, 0x0, STR_NULL}, // DEPOT_WIDGET_CLONE { WWT_PUSHTXTBTN, RESIZE_TB, 14, 195, 292, 62, 73, STR_00E4_LOCATION, STR_NULL}, // DEPOT_WIDGET_LOCATION - - { WWT_PANEL, RESIZE_RTB, 14, 293, 292, 62, 73, 0x0, STR_NULL}, // DEPOT_WIDGET_H_RESIZE { WWT_RESIZEBOX, RESIZE_LRTB, 14, 293, 304, 62, 73, 0x0, STR_RESIZE_BUTTON}, // DEPOT_WIDGET_RESIZE { WIDGETS_END}, }; @@ -76,12 +72,10 @@ static const Widget _depot_widgets[] = { /* List of widgets where the left side should be moved to the right */ static const byte left[] = { DEPOT_WIDGET_STICKY, - DEPOT_WIDGET_V_RESIZE, DEPOT_WIDGET_STOP_ALL, DEPOT_WIDGET_START_ALL, DEPOT_WIDGET_SELL, DEPOT_WIDGET_V_SCROLL, - DEPOT_WIDGET_H_RESIZE, DEPOT_WIDGET_RESIZE, }; @@ -89,14 +83,12 @@ static const byte left[] = { static const byte right[] = { DEPOT_WIDGET_CAPTION, DEPOT_WIDGET_STICKY, - DEPOT_WIDGET_V_RESIZE, DEPOT_WIDGET_STOP_ALL, DEPOT_WIDGET_START_ALL, DEPOT_WIDGET_SELL, DEPOT_WIDGET_MATRIX, DEPOT_WIDGET_V_SCROLL, DEPOT_WIDGET_LOCATION, - DEPOT_WIDGET_H_RESIZE, DEPOT_WIDGET_RESIZE, }; @@ -105,7 +97,6 @@ static const byte top[] = { DEPOT_WIDGET_BUILD, DEPOT_WIDGET_CLONE, DEPOT_WIDGET_LOCATION, - DEPOT_WIDGET_H_RESIZE, DEPOT_WIDGET_RESIZE, }; @@ -117,7 +108,6 @@ static const byte bottom[] = { DEPOT_WIDGET_BUILD, DEPOT_WIDGET_CLONE, DEPOT_WIDGET_LOCATION, - DEPOT_WIDGET_H_RESIZE, DEPOT_WIDGET_RESIZE, }; @@ -503,6 +493,26 @@ static void ClonePlaceObj(const Window *w) if (v != NULL) HandleCloneVehClick(v, 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 */ + + /* Make the buttons in the bottom equal in size */ + w->widget[DEPOT_WIDGET_LOCATION].right = w->widget[DEPOT_WIDGET_RESIZE].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; + w->widget[DEPOT_WIDGET_CLONE].right = w->widget[DEPOT_WIDGET_LOCATION].left - 1; + + 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_ALL will get the same size. + * This way it will stay the same even if DEPOT_WIDGET_SELL_ALL is resized for some reason */ + w->widget[DEPOT_WIDGET_SELL_ALL].bottom = w->widget[DEPOT_WIDGET_RESIZE].top - 1; + w->widget[DEPOT_WIDGET_SELL_ALL].top = ((w->widget[DEPOT_WIDGET_SELL_ALL].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_ALL].top - 1; + } +} + static void DepotWndProc(Window *w, WindowEvent *e) { switch (e->event) { @@ -663,6 +673,7 @@ static void DepotWndProc(Window *w, WindowEvent *e) w->vscroll.cap += e->we.sizing.diff.y / (int)w->resize.step_height; w->hscroll.cap += e->we.sizing.diff.x / (int)w->resize.step_width; w->widget[DEPOT_WIDGET_MATRIX].data = (w->vscroll.cap << 8) + (WP(w, depot_d).type == VEH_Train ? 1 : w->hscroll.cap); + ResizeDepotButtons(w); break; } } @@ -809,20 +820,6 @@ void ShowDepotWindow(TileIndex tile, byte type) for (i = 0; i < lengthof(bottom); i++) w->widget[bottom[i]].bottom += vertical; } - /* We got the widget moved around. Now we will make some widgets to fill the gab between some widgets in equal sizes */ - - /* Make the buttons in the bottom equal in size */ - 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; - w->widget[DEPOT_WIDGET_CLONE].right = w->widget[DEPOT_WIDGET_LOCATION].left - 1; - - if (type == VEH_Train) { - /* Divide the size of DEPOT_WIDGET_SELL into two equally big buttons so DEPOT_WIDGET_SELL and DEPOT_WIDGET_SELL_ALL will get the same size. - * This way it will stay the same even if DEPOT_WIDGET_SELL_ALL is resized for some reason */ - w->widget[DEPOT_WIDGET_SELL_ALL].bottom = w->widget[DEPOT_WIDGET_SELL].bottom; - w->widget[DEPOT_WIDGET_SELL_ALL].top = ((w->widget[DEPOT_WIDGET_SELL_ALL].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_ALL].top - 1; - } + ResizeDepotButtons(w); } }