@ -50,6 +50,7 @@ typedef enum DepotWindowWidgets {
DEPOT_WIDGET_STOP_ALL ,
DEPOT_WIDGET_START_ALL ,
DEPOT_WIDGET_SELL ,
DEPOT_WIDGET_SELL_CHAIN ,
DEPOT_WIDGET_SELL_ALL ,
DEPOT_WIDGET_MATRIX ,
DEPOT_WIDGET_V_SCROLL , // Vertical scrollbar
@ -69,7 +70,8 @@ static const byte widget_moves[] = {
DEPOT_MOVE_RIGHT , // DEPOT_WIDGET_STOP_ALL
DEPOT_MOVE_RIGHT , // DEPOT_WIDGET_START_ALL
DEPOT_MOVE_RIGHT , // DEPOT_WIDGET_SELL
DEPOT_MOVE_NONE , // DEPOT_WIDGET_SELL_ALL
DEPOT_MOVE_NONE , // DEPOT_WIDGET_SELL_CHAIN
DEPOT_MOVE_DOWN_RIGHT , // DEPOT_WIDGET_SELL_ALL
DEPOT_STRETCH_DOWN_RIGHT , // DEPOT_WIDGET_MATRIX
DEPOT_MOVE_RIGHT_STRETCH_DOWN , // DEPOT_WIDGET_V_SCROLL
DEPOT_MOVE_NONE , // DEPOT_WIDGET_H_SCROLL
@ -96,20 +98,21 @@ 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_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_IMGBTN , RESIZE_LRB , 14 , 270 , 292 , 26 , 60 , 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_CHAIN, trains only
{ WWT_PUSHIMGBTN , RESIZE_LRTB , 14 , 270 , 292 , 61 , 83 , 0x0 , STR_DEPOT_SELL_ALL_BUTTON_TIP } , // DEPOT_WIDGET_SELL_ALL
{ WWT_MATRIX , RESIZE_RB , 14 , 0 , 269 , 14 , 61 , 0x0 , STR_NULL } , // DEPOT_WIDGET_MATRIX
{ WWT_SCROLLBAR , RESIZE_LRB , 14 , 293 , 304 , 14 , 61 , 0x0 , STR_0190_SCROLL_BAR_SCROLLS_LIST } , // DEPOT_WIDGET_V_SCROLL
{ 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
/* 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 , 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_RESIZEBOX , RESIZE_LRTB , 14 , 293 , 304 , 62, 73 , 0x0 , STR_RESIZE_BUTTON } , // DEPOT_WIDGET_RESIZE
{ WWT_PUSHTXTBTN , RESIZE_TB , 14 , 0 , 96 , 84, 95 , 0x0 , STR_NULL } , // DEPOT_WIDGET_BUILD
{ WWT_NODISTXTBTN , RESIZE_TB , 14 , 97 , 194 , 84, 95 , 0x0 , STR_NULL } , // DEPOT_WIDGET_CLONE
{ WWT_PUSHTXTBTN , RESIZE_TB , 14 , 195 , 292 , 84, 95 , STR_00E4_LOCATION , STR_NULL } , // DEPOT_WIDGET_LOCATION
{ WWT_RESIZEBOX , RESIZE_LRTB , 14 , 293 , 304 , 84, 95 , 0x0 , STR_RESIZE_BUTTON } , // DEPOT_WIDGET_RESIZE
{ WIDGETS_END } ,
} ;
@ -124,7 +127,7 @@ static const WindowDesc _train_depot_desc = {
} ;
static const WindowDesc _road_depot_desc = {
- 1 , - 1 , 315 , 6 8,
- 1 , - 1 , 315 , 82 ,
WC_VEHICLE_DEPOT , 0 ,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE ,
_depot_widgets ,
@ -132,7 +135,7 @@ static const WindowDesc _road_depot_desc = {
} ;
static const WindowDesc _ship_depot_desc = {
- 1 , - 1 , 305 , 74 ,
- 1 , - 1 , 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 ,
@ -140,7 +143,7 @@ static const WindowDesc _ship_depot_desc = {
} ;
static const WindowDesc _aircraft_depot_desc = {
- 1 , - 1 , 331 , 74 ,
- 1 , - 1 , 331 , 96 ,
WC_VEHICLE_DEPOT , 0 ,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE ,
_depot_widgets ,
@ -171,6 +174,75 @@ static inline void ShowVehicleViewWindow(const Vehicle *v)
}
}
static void DepotSellAllWndProc ( Window * w , WindowEvent * e )
{
switch ( e - > event ) {
case WE_PAINT :
if ( WP ( w , depot_d ) . type = = VEH_Aircraft ) {
SetDParam ( 0 , GetStationIndex ( w - > window_number ) ) ; // Airport name
} else {
Depot * depot = GetDepotByTile ( w - > window_number ) ;
assert ( depot ! = NULL ) ;
SetDParam ( 0 , depot - > town_index ) ;
}
DrawWindowWidgets ( w ) ;
DrawStringCentered ( 150 , 25 , STR_DEPOT_SELL_ALL_VEHICLE_CONFIRM , 0 ) ;
DrawStringCentered ( 150 , 38 , STR_ARE_YOU_SURE , 0 ) ;
break ;
case WE_CLICK :
switch ( e - > we . click . widget ) {
case 4 :
DoCommandP ( w - > window_number , WP ( w , depot_d ) . type , 0 , NULL , CMD_DEPOT_SELL_ALL_VEHICLES ) ;
/* Fallthought */
case 3 :
DeleteWindow ( w ) ;
break ;
}
break ;
}
}
static const Widget _depot_sell_all_widgets [ ] = {
{ WWT_CLOSEBOX , RESIZE_NONE , 5 , 0 , 10 , 0 , 13 , STR_00C5 , STR_018B_CLOSE_WINDOW } ,
{ WWT_CAPTION , RESIZE_NONE , 5 , 11 , 299 , 0 , 13 , 0x0 , STR_018C_WINDOW_TITLE_DRAG_THIS } ,
{ WWT_PANEL , RESIZE_NONE , 5 , 0 , 299 , 14 , 71 , 0x0 , STR_NULL } ,
{ WWT_PUSHTXTBTN , RESIZE_NONE , 5 , 85 , 144 , 52 , 63 , STR_012E_CANCEL , STR_DEPOT_SELL_ALL_CANCEL_TIP } ,
{ WWT_PUSHTXTBTN , RESIZE_NONE , 4 , 155 , 214 , 52 , 63 , STR_SELL , STR_DEPOT_SELL_ALL_TIP } ,
{ WIDGETS_END } ,
} ;
static const WindowDesc _depot_sell_all_desc = {
WDP_CENTER , WDP_CENTER , 300 , 72 ,
WC_DEPOT_SELL_ALL , 0 ,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET ,
_depot_sell_all_widgets ,
DepotSellAllWndProc
} ;
static void ShowDepotSellAllWindow ( TileIndex tile , byte type )
{
Window * w ;
w = AllocateWindowDescFront ( & _depot_sell_all_desc , tile ) ;
if ( w ! = NULL ) {
WP ( w , depot_d ) . type = type ;
switch ( type ) {
case VEH_Train : w - > widget [ 1 ] . data = STR_8800_TRAIN_DEPOT ; break ;
case VEH_Road : w - > widget [ 1 ] . data = STR_9003_ROAD_VEHICLE_DEPOT ; break ;
case VEH_Ship : w - > widget [ 1 ] . data = STR_9803_SHIP_DEPOT ; break ;
case VEH_Aircraft :
w - > widget [ 1 ] . data = STR_A002_AIRCRAFT_HANGAR ;
w - > widget [ 3 ] . tooltips = STR_DEPOT_SELL_ALL_CANCEL_HANGAR_TIP ;
w - > widget [ 4 ] . tooltips = STR_DEPOT_SELL_ALL_HANGAR_TIP ;
break ;
}
}
}
static void DrawDepotWindow ( Window * w )
{
Vehicle * * vl = WP ( w , depot_d ) . vehicle_list ;
@ -183,7 +255,8 @@ static void DrawDepotWindow(Window *w)
/* setup disabled buttons */
w - > disabled_state =
IsTileOwner ( tile , _local_player ) ? 0 : ( ( 1 < < DEPOT_WIDGET_STOP_ALL ) | ( 1 < < DEPOT_WIDGET_START_ALL ) |
( 1 < < DEPOT_WIDGET_SELL ) | ( 1 < < DEPOT_WIDGET_SELL_ALL ) | ( 1 < < DEPOT_WIDGET_BUILD ) | ( 1 < < DEPOT_WIDGET_CLONE ) ) ;
( 1 < < DEPOT_WIDGET_SELL ) | ( 1 < < DEPOT_WIDGET_SELL_CHAIN ) | ( 1 < < DEPOT_WIDGET_SELL_ALL ) |
( 1 < < DEPOT_WIDGET_BUILD ) | ( 1 < < DEPOT_WIDGET_CLONE ) ) ;
/* determine amount of items for scroller */
if ( WP ( w , depot_d ) . type = = VEH_Train ) {
@ -512,11 +585,11 @@ static void ResizeDepotButtons(Window *w)
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_ RE SIZ E] . 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 ;
/* 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 ;
}
}
@ -575,6 +648,10 @@ static void DepotWndProc(Window *w, WindowEvent *e)
DoCommandP ( w - > window_number , WP ( w , depot_d ) . type , e - > we . click . widget = = DEPOT_WIDGET_START_ALL ? 1 : 0 , NULL , CMD_MASS_START_STOP ) ;
break ;
case DEPOT_WIDGET_SELL_ALL :
ShowDepotSellAllWindow ( w - > window_number , WP ( w , depot_d ) . type ) ;
break ;
}
break ;
@ -633,7 +710,7 @@ static void DepotWndProc(Window *w, WindowEvent *e)
}
} break ;
case DEPOT_WIDGET_SELL : case DEPOT_WIDGET_SELL_ ALL :
case DEPOT_WIDGET_SELL : case DEPOT_WIDGET_SELL_ CHAIN :
if ( ! HASBIT ( w - > disabled_state , DEPOT_WIDGET_SELL ) & &
WP ( w , depot_d ) . sel ! = INVALID_VEHICLE ) {
Vehicle * v ;
@ -650,7 +727,7 @@ static void DepotWndProc(Window *w, WindowEvent *e)
WP ( w , depot_d ) . sel = INVALID_VEHICLE ;
SetWindowDirty ( w ) ;
sell_cmd = ( v - > type = = VEH_Train & & ( e - > we . click . widget = = DEPOT_WIDGET_SELL_ ALL | | _ctrl_pressed ) ) ? 1 : 0 ;
sell_cmd = ( v - > type = = VEH_Train & & ( e - > we . click . widget = = DEPOT_WIDGET_SELL_ CHAIN | | _ctrl_pressed ) ) ? 1 : 0 ;
is_engine = ( ! ( v - > type = = VEH_Train & & ! IsFrontEngine ( v ) ) ) ;
@ -734,6 +811,7 @@ static void SetupStringsForDepotWindow(Window *w, byte type)
/* Special strings only for hangars (using hangar instead of depot and so on) */
w - > widget [ DEPOT_WIDGET_STOP_ALL ] . tooltips = STR_MASS_STOP_HANGAR_TOOLTIP ;
w - > widget [ DEPOT_WIDGET_START_ALL ] . tooltips = STR_MASS_START_HANGAR_TOOLTIP ;
w - > widget [ DEPOT_WIDGET_SELL_ALL ] . tooltips = STR_DEPOT_SELL_ALL_BUTTON_HANGAR_TIP ;
break ;
}
}
@ -769,7 +847,7 @@ void ShowDepotWindow(TileIndex tile, byte type)
switch ( type ) {
case VEH_Train :
horizontal = 56 ;
vertical = 48 ;
vertical = 26 ;
w - > vscroll . cap = 6 ;
w - > hscroll . cap = 10 * 29 ;
w - > resize . step_width = 1 ;
@ -778,15 +856,15 @@ void ShowDepotWindow(TileIndex tile, byte type)
case VEH_Road :
horizontal = 10 ;
vertical = - 6 ;
w - > vscroll . cap = 3 ;
vertical = - 14 ;
w - > vscroll . cap = 4 ;
w - > hscroll . cap = 5 ;
w - > resize . step_width = 56 ;
w - > resize . step_height = 14 ;
break ;
case VEH_Ship :
w - > vscroll . cap = 2 ;
w - > vscroll . cap = 3 ;
w - > hscroll . cap = 3 ;
w - > resize . step_width = 90 ;
w - > resize . step_height = 24 ;
@ -794,7 +872,7 @@ void ShowDepotWindow(TileIndex tile, byte type)
case VEH_Aircraft :
horizontal = 26 ;
w - > vscroll . cap = 2 ;
w - > vscroll . cap = 3 ;
w - > hscroll . cap = 4 ;
w - > resize . step_width = 74 ;
w - > resize . step_height = 24 ;
@ -811,7 +889,7 @@ void ShowDepotWindow(TileIndex tile, byte type)
if ( type ! = VEH_Train ) {
SETBIT ( w - > hidden_state , DEPOT_WIDGET_H_SCROLL ) ;
SETBIT ( w - > hidden_state , DEPOT_WIDGET_SELL_ ALL ) ;
SETBIT ( w - > hidden_state , DEPOT_WIDGET_SELL_ CHAIN ) ;
}
/* Move the widgets to their right locations
@ -838,9 +916,9 @@ void ShowDepotWindow(TileIndex tile, byte type)
w - > widget [ DEPOT_WIDGET_H_SCROLL ] . top = w - > widget [ DEPOT_WIDGET_MATRIX ] . bottom - 11 ;
w - > widget [ DEPOT_WIDGET_MATRIX ] . bottom - = 12 ;
/* DEPOT_WIDGET_SELL_ ALL is under DEPOT_WIDGET_SELL. They got the same left and right and height is controlled in ResizeDepotButtons() */
w - > widget [ DEPOT_WIDGET_SELL_ ALL ] . left = w - > widget [ DEPOT_WIDGET_SELL ] . left ;
w - > widget [ DEPOT_WIDGET_SELL_ ALL ] . right = w - > widget [ DEPOT_WIDGET_SELL ] . right ;
/* 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 ) ;
}