src/vehicle_gui.cpp
author belugas
Fri, 13 Jun 2008 01:57:48 +0000
changeset 10950 36bf5bd16ebd
parent 10775 7061477bfbcf
child 10970 c0341ebaf88f
permissions -rw-r--r--
(svn r13504) -Codechange: enumify some widgets for scenario editor. More work is required.
2186
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     1
/* $Id$ */
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     2
10429
1b99254f9607 (svn r12971) -Documentation: add @file in files that missed them and add something more than whitespace as description of files that don't have a description.
rubidium
parents: 10371
diff changeset
     3
/** @file vehicle_gui.cpp The base GUI for all vehicles. */
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6676
diff changeset
     4
164
0cbdf3c9bde1 (svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
diff changeset
     5
#include "stdafx.h"
1891
92a3b0aa0946 (svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents: 1859
diff changeset
     6
#include "openttd.h"
1299
0a6510cc889b (svn r1803) Move debugging stuff into files of it's own
tron
parents: 1294
diff changeset
     7
#include "debug.h"
8750
fdd6054e7bae (svn r11818) -Codechange: split player.h into smaller pieces.
rubidium
parents: 8720
diff changeset
     8
#include "player_func.h"
842
ebfd36603ab9 (svn r1323) Adding autoreplace feature
bjarni
parents: 594
diff changeset
     9
#include "gui.h"
8603
88c5ce6a5215 (svn r11668) -Codechange: more refactoring aimed at reducing compile time and making it more logic where function definitions can be found.
rubidium
parents: 8602
diff changeset
    10
#include "window_gui.h"
88c5ce6a5215 (svn r11668) -Codechange: more refactoring aimed at reducing compile time and making it more logic where function definitions can be found.
rubidium
parents: 8602
diff changeset
    11
#include "textbuf_gui.h"
8612
6414fc21c2f3 (svn r11677) -Codechange: move price and command related types/functions to their respective places.
rubidium
parents: 8610
diff changeset
    12
#include "command_func.h"
2159
3b634157c3b2 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2154
diff changeset
    13
#include "variables.h"
3b634157c3b2 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2154
diff changeset
    14
#include "vehicle_gui.h"
8720
4e60c30e2006 (svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium
parents: 8710
diff changeset
    15
#include "viewport_func.h"
4e60c30e2006 (svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium
parents: 8710
diff changeset
    16
#include "gfx_func.h"
2676
2ba71e034d97 (svn r3218) -Feature: Multiheaded train engines will now stay in the same train
bjarni
parents: 2639
diff changeset
    17
#include "train.h"
3650
92a3f5cae745 (svn r4561) - NewGRF: implement most of callback 0x23: additional text in vehicle purchase windows.
peter1138
parents: 3492
diff changeset
    18
#include "newgrf_callbacks.h"
2962
dbd168a4703a (svn r3524) - Split newgrf features from engine.[ch] into newgrf_engine.[ch], and add the new files to project files.
peter1138
parents: 2951
diff changeset
    19
#include "newgrf_engine.h"
3650
92a3f5cae745 (svn r4561) - NewGRF: implement most of callback 0x23: additional text in vehicle purchase windows.
peter1138
parents: 3492
diff changeset
    20
#include "newgrf_text.h"
4442
8d8d0c2df7cb (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
    21
#include "ship.h"
8d8d0c2df7cb (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
    22
#include "aircraft.h"
8d8d0c2df7cb (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
    23
#include "roadveh.h"
10222
b6919c94cc77 (svn r12754) -Codechange: split depot.h into depot_map.h, depot_func.h and depot_base.h and remove quite a lot of unneeded (before this) includes of depot.h.
rubidium
parents: 10156
diff changeset
    24
#include "depot_base.h"
6417
26acff62d001 (svn r8826) -Codechange: Replace _cargoc's separate arrays with a regular struct array (with accessor) and implement new initialization method using cargo labels.
peter1138
parents: 6382
diff changeset
    25
#include "cargotype.h"
7139
4ae3ab180d05 (svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents: 7134
diff changeset
    26
#include "group.h"
8607
d16299e657ba (svn r11672) -Codechange: refactor some stuff out of gui.h.
rubidium
parents: 8603
diff changeset
    27
#include "group_gui.h"
8610
17cc343a23dd (svn r11675) -Codechange: split the string types from the string functions.
rubidium
parents: 8607
diff changeset
    28
#include "strings_func.h"
8627
448ebf3a8291 (svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents: 8626
diff changeset
    29
#include "functions.h"
448ebf3a8291 (svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents: 8626
diff changeset
    30
#include "window_func.h"
8640
1e93b81e96d2 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8636
diff changeset
    31
#include "vehicle_func.h"
8708
0c29fbc79be4 (svn r11775) -Codechange: move all autoreplace/autorenew functions to a single location.
rubidium
parents: 8675
diff changeset
    32
#include "autoreplace_gui.h"
8709
4187ad809fe7 (svn r11776) -Codechange: more header splittings to reduce the dependencies.
rubidium
parents: 8708
diff changeset
    33
#include "core/alloc_func.hpp"
8710
52015340050c (svn r11777) -Codechange: split the string header and make do not include it when it's not necessary.
rubidium
parents: 8709
diff changeset
    34
#include "string_func.h"
8766
c86cfa3a7580 (svn r11834) -Codechange: only include settings_type.h if needed.
rubidium
parents: 8760
diff changeset
    35
#include "settings_type.h"
8780
6f3f3ec6c69a (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents: 8766
diff changeset
    36
#include "widgets/dropdown_func.h"
9280
9c03416d26b1 (svn r12488) -Codechange: split order.h into order_base.h and order_func.h.
rubidium
parents: 9267
diff changeset
    37
#include "order_func.h"
10435
0e2b98df9707 (svn r12977) -Codechange: remove quite some redundant (duplicate) function declarations.
rubidium
parents: 10434
diff changeset
    38
#include "timetable.h"
10757
7f002e778125 (svn r13307) -Codechange: Separate VehicleList and its two functions so only the 3 users include it, reducing dependencies on misc/smallvec.h
peter1138
parents: 10741
diff changeset
    39
#include "vehiclelist.h"
2159
3b634157c3b2 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2154
diff changeset
    40
8760
ce0891c412ce (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8754
diff changeset
    41
#include "table/sprites.h"
ce0891c412ce (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8754
diff changeset
    42
#include "table/strings.h"
ce0891c412ce (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8754
diff changeset
    43
10502
996d9308d650 (svn r13045) -Codechange: make list_d (now GUIList) more generic and uniform.
rubidium
parents: 10481
diff changeset
    44
Sorting _sorting;
2159
3b634157c3b2 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2154
diff changeset
    45
static bool   _internal_sort_order;     // descending/ascending
164
0cbdf3c9bde1 (svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
diff changeset
    46
2462
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    47
typedef int CDECL VehicleSortListingTypeFunction(const void*, const void*);
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    48
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    49
static VehicleSortListingTypeFunction VehicleNumberSorter;
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    50
static VehicleSortListingTypeFunction VehicleNameSorter;
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    51
static VehicleSortListingTypeFunction VehicleAgeSorter;
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    52
static VehicleSortListingTypeFunction VehicleProfitThisYearSorter;
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    53
static VehicleSortListingTypeFunction VehicleProfitLastYearSorter;
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    54
static VehicleSortListingTypeFunction VehicleCargoSorter;
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    55
static VehicleSortListingTypeFunction VehicleReliabilitySorter;
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    56
static VehicleSortListingTypeFunction VehicleMaxSpeedSorter;
2965
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
    57
static VehicleSortListingTypeFunction VehicleModelSorter;
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
    58
static VehicleSortListingTypeFunction VehicleValueSorter;
10234
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
    59
static VehicleSortListingTypeFunction VehicleLengthSorter;
2462
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    60
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    61
static VehicleSortListingTypeFunction* const _vehicle_sorter[] = {
505
11582dcada49 (svn r813) Push two tables from vehicle_gui.h into vehicle_gui.c - they were in the binary 48 (!) times.
tron
parents: 243
diff changeset
    62
	&VehicleNumberSorter,
11582dcada49 (svn r813) Push two tables from vehicle_gui.h into vehicle_gui.c - they were in the binary 48 (!) times.
tron
parents: 243
diff changeset
    63
	&VehicleNameSorter,
11582dcada49 (svn r813) Push two tables from vehicle_gui.h into vehicle_gui.c - they were in the binary 48 (!) times.
tron
parents: 243
diff changeset
    64
	&VehicleAgeSorter,
11582dcada49 (svn r813) Push two tables from vehicle_gui.h into vehicle_gui.c - they were in the binary 48 (!) times.
tron
parents: 243
diff changeset
    65
	&VehicleProfitThisYearSorter,
11582dcada49 (svn r813) Push two tables from vehicle_gui.h into vehicle_gui.c - they were in the binary 48 (!) times.
tron
parents: 243
diff changeset
    66
	&VehicleProfitLastYearSorter,
11582dcada49 (svn r813) Push two tables from vehicle_gui.h into vehicle_gui.c - they were in the binary 48 (!) times.
tron
parents: 243
diff changeset
    67
	&VehicleCargoSorter,
11582dcada49 (svn r813) Push two tables from vehicle_gui.h into vehicle_gui.c - they were in the binary 48 (!) times.
tron
parents: 243
diff changeset
    68
	&VehicleReliabilitySorter,
2965
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
    69
	&VehicleMaxSpeedSorter,
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
    70
	&VehicleModelSorter,
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
    71
	&VehicleValueSorter,
10234
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
    72
	&VehicleLengthSorter,
505
11582dcada49 (svn r813) Push two tables from vehicle_gui.h into vehicle_gui.c - they were in the binary 48 (!) times.
tron
parents: 243
diff changeset
    73
};
11582dcada49 (svn r813) Push two tables from vehicle_gui.h into vehicle_gui.c - they were in the binary 48 (!) times.
tron
parents: 243
diff changeset
    74
7139
4ae3ab180d05 (svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents: 7134
diff changeset
    75
const StringID _vehicle_sort_listing[] = {
505
11582dcada49 (svn r813) Push two tables from vehicle_gui.h into vehicle_gui.c - they were in the binary 48 (!) times.
tron
parents: 243
diff changeset
    76
	STR_SORT_BY_NUMBER,
11582dcada49 (svn r813) Push two tables from vehicle_gui.h into vehicle_gui.c - they were in the binary 48 (!) times.
tron
parents: 243
diff changeset
    77
	STR_SORT_BY_DROPDOWN_NAME,
11582dcada49 (svn r813) Push two tables from vehicle_gui.h into vehicle_gui.c - they were in the binary 48 (!) times.
tron
parents: 243
diff changeset
    78
	STR_SORT_BY_AGE,
11582dcada49 (svn r813) Push two tables from vehicle_gui.h into vehicle_gui.c - they were in the binary 48 (!) times.
tron
parents: 243
diff changeset
    79
	STR_SORT_BY_PROFIT_THIS_YEAR,
11582dcada49 (svn r813) Push two tables from vehicle_gui.h into vehicle_gui.c - they were in the binary 48 (!) times.
tron
parents: 243
diff changeset
    80
	STR_SORT_BY_PROFIT_LAST_YEAR,
11582dcada49 (svn r813) Push two tables from vehicle_gui.h into vehicle_gui.c - they were in the binary 48 (!) times.
tron
parents: 243
diff changeset
    81
	STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE,
11582dcada49 (svn r813) Push two tables from vehicle_gui.h into vehicle_gui.c - they were in the binary 48 (!) times.
tron
parents: 243
diff changeset
    82
	STR_SORT_BY_RELIABILITY,
11582dcada49 (svn r813) Push two tables from vehicle_gui.h into vehicle_gui.c - they were in the binary 48 (!) times.
tron
parents: 243
diff changeset
    83
	STR_SORT_BY_MAX_SPEED,
2965
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
    84
	STR_SORT_BY_MODEL,
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
    85
	STR_SORT_BY_VALUE,
10234
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
    86
	STR_SORT_BY_LENGTH,
505
11582dcada49 (svn r813) Push two tables from vehicle_gui.h into vehicle_gui.c - they were in the binary 48 (!) times.
tron
parents: 243
diff changeset
    87
	INVALID_STRING_ID
11582dcada49 (svn r813) Push two tables from vehicle_gui.h into vehicle_gui.c - they were in the binary 48 (!) times.
tron
parents: 243
diff changeset
    88
};
11582dcada49 (svn r813) Push two tables from vehicle_gui.h into vehicle_gui.c - they were in the binary 48 (!) times.
tron
parents: 243
diff changeset
    89
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
    90
void BuildVehicleList(VehicleListBase *vl, PlayerID owner, uint16 index, uint16 window_type)
588
1b60458bdc29 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
    91
{
10502
996d9308d650 (svn r13045) -Codechange: make list_d (now GUIList) more generic and uniform.
rubidium
parents: 10481
diff changeset
    92
	if (!(vl->vehicles.flags & VL_REBUILD)) return;
588
1b60458bdc29 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
    93
5998
9491f99be62d (svn r8295) -Cleanup: merged arguments station, order and depot_airport_index for GenerateVehicleSortList() and BuildVehicleList() into one uint16 argument
bjarni
parents: 5996
diff changeset
    94
	DEBUG(misc, 3, "Building vehicle list for player %d at station %d", owner, index);
588
1b60458bdc29 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
    95
10716
2406d1520245 (svn r13266) -Codechange: Use SmallVector in GUIList
peter1138
parents: 10703
diff changeset
    96
	GenerateVehicleSortList(&vl->vehicles, vl->vehicle_type, owner, index, window_type);
588
1b60458bdc29 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
    97
10502
996d9308d650 (svn r13045) -Codechange: make list_d (now GUIList) more generic and uniform.
rubidium
parents: 10481
diff changeset
    98
	vl->vehicles.flags &= ~VL_REBUILD;
996d9308d650 (svn r13045) -Codechange: make list_d (now GUIList) more generic and uniform.
rubidium
parents: 10481
diff changeset
    99
	vl->vehicles.flags |= VL_RESORT;
588
1b60458bdc29 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   100
}
1b60458bdc29 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   101
9158
04fe70dfe028 (svn r12324) -Fix (r6789): vehicles could be sorted in a wrong order when a vehicle name changed - cached name was not invalidated
smatz
parents: 9157
diff changeset
   102
/* cached values for VehicleNameSorter to spare many GetString() calls */
04fe70dfe028 (svn r12324) -Fix (r6789): vehicles could be sorted in a wrong order when a vehicle name changed - cached name was not invalidated
smatz
parents: 9157
diff changeset
   103
static const Vehicle *_last_vehicle[2] = { NULL, NULL };
04fe70dfe028 (svn r12324) -Fix (r6789): vehicles could be sorted in a wrong order when a vehicle name changed - cached name was not invalidated
smatz
parents: 9157
diff changeset
   104
static char           _last_name[2][64] = { "", "" };
04fe70dfe028 (svn r12324) -Fix (r6789): vehicles could be sorted in a wrong order when a vehicle name changed - cached name was not invalidated
smatz
parents: 9157
diff changeset
   105
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   106
void SortVehicleList(VehicleListBase *vl)
588
1b60458bdc29 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   107
{
10502
996d9308d650 (svn r13045) -Codechange: make list_d (now GUIList) more generic and uniform.
rubidium
parents: 10481
diff changeset
   108
	if (!(vl->vehicles.flags & VL_RESORT)) return;
588
1b60458bdc29 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   109
9158
04fe70dfe028 (svn r12324) -Fix (r6789): vehicles could be sorted in a wrong order when a vehicle name changed - cached name was not invalidated
smatz
parents: 9157
diff changeset
   110
	/* invalidate cached values for name sorter - vehicle names could change */
04fe70dfe028 (svn r12324) -Fix (r6789): vehicles could be sorted in a wrong order when a vehicle name changed - cached name was not invalidated
smatz
parents: 9157
diff changeset
   111
	_last_vehicle[0] = _last_vehicle[1] = NULL;
04fe70dfe028 (svn r12324) -Fix (r6789): vehicles could be sorted in a wrong order when a vehicle name changed - cached name was not invalidated
smatz
parents: 9157
diff changeset
   112
10502
996d9308d650 (svn r13045) -Codechange: make list_d (now GUIList) more generic and uniform.
rubidium
parents: 10481
diff changeset
   113
	_internal_sort_order = (vl->vehicles.flags & VL_DESC) != 0;
10741
6efaa60ef3c6 (svn r13291) -Fix (r13266): qsort passed wrong sizeof data
peter1138
parents: 10720
diff changeset
   114
	qsort((void*)vl->vehicles.Begin(), vl->vehicles.Length(), sizeof(*vl->vehicles.Begin()),
10502
996d9308d650 (svn r13045) -Codechange: make list_d (now GUIList) more generic and uniform.
rubidium
parents: 10481
diff changeset
   115
		_vehicle_sorter[vl->vehicles.sort_type]);
588
1b60458bdc29 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   116
10502
996d9308d650 (svn r13045) -Codechange: make list_d (now GUIList) more generic and uniform.
rubidium
parents: 10481
diff changeset
   117
	vl->vehicles.resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS;
996d9308d650 (svn r13045) -Codechange: make list_d (now GUIList) more generic and uniform.
rubidium
parents: 10481
diff changeset
   118
	vl->vehicles.flags &= ~VL_RESORT;
588
1b60458bdc29 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   119
}
1b60458bdc29 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   120
10700
b3a94898f55c (svn r13248) -Codechange: Use VehicleList for depot GUI.
peter1138
parents: 10681
diff changeset
   121
void DepotSortList(VehicleList *list)
4740
e562a2cde601 (svn r6652) -Feature: [depot window] depot lists are now sorted, so vehicle 1 is always first and so on
bjarni
parents: 4735
diff changeset
   122
{
e562a2cde601 (svn r6652) -Feature: [depot window] depot lists are now sorted, so vehicle 1 is always first and so on
bjarni
parents: 4735
diff changeset
   123
	_internal_sort_order = 0;
10700
b3a94898f55c (svn r13248) -Codechange: Use VehicleList for depot GUI.
peter1138
parents: 10681
diff changeset
   124
	if (list->Length() < 2) return;
10741
6efaa60ef3c6 (svn r13291) -Fix (r13266): qsort passed wrong sizeof data
peter1138
parents: 10720
diff changeset
   125
	qsort((void*)list->Begin(), list->Length(), sizeof(*list->Begin()), _vehicle_sorter[0]);
4740
e562a2cde601 (svn r6652) -Feature: [depot window] depot lists are now sorted, so vehicle 1 is always first and so on
bjarni
parents: 4735
diff changeset
   126
}
588
1b60458bdc29 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   127
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6676
diff changeset
   128
/** draw the vehicle profit button in the vehicle list window. */
2436
177cb6a8339f (svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents: 2375
diff changeset
   129
void DrawVehicleProfitButton(const Vehicle *v, int x, int y)
164
0cbdf3c9bde1 (svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
diff changeset
   130
{
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5860
diff changeset
   131
	SpriteID pal;
164
0cbdf3c9bde1 (svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
diff changeset
   132
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6676
diff changeset
   133
	/* draw profit-based colored icons */
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   134
	if (v->age <= 365 * 2) {
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5860
diff changeset
   135
		pal = PALETTE_TO_GREY;
9110
55864e1fc263 (svn r12197) -Fix [FS#1788](r12134): show correct last year profit when the train had negative income
smatz
parents: 9052
diff changeset
   136
	} else if (v->GetDisplayProfitLastYear() < 0) {
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5860
diff changeset
   137
		pal = PALETTE_TO_RED;
9110
55864e1fc263 (svn r12197) -Fix [FS#1788](r12134): show correct last year profit when the train had negative income
smatz
parents: 9052
diff changeset
   138
	} else if (v->GetDisplayProfitLastYear() < 10000) {
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5860
diff changeset
   139
		pal = PALETTE_TO_YELLOW;
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   140
	} else {
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5860
diff changeset
   141
		pal = PALETTE_TO_GREEN;
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   142
	}
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5860
diff changeset
   143
	DrawSprite(SPR_BLOT, pal, x, y);
164
0cbdf3c9bde1 (svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
diff changeset
   144
}
0cbdf3c9bde1 (svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
diff changeset
   145
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
   146
struct RefitOption {
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   147
	CargoID cargo;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   148
	byte subtype;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   149
	uint16 value;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   150
	EngineID engine;
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
   151
};
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   152
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
   153
struct RefitList {
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   154
	uint num_lines;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   155
	RefitOption *items;
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
   156
};
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   157
4695
52419a88345d (svn r6602) - Feature: we now support NewGRF livery refits, as used by DBsetXL, amongst others. This requires a savegame bump to save the cargo subtype.
peter1138
parents: 4694
diff changeset
   158
static RefitList *BuildRefitList(const Vehicle *v)
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   159
{
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   160
	uint max_lines = 256;
5860
7fdc9b423ba1 (svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents: 5838
diff changeset
   161
	RefitOption *refit = CallocT<RefitOption>(max_lines);
7fdc9b423ba1 (svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents: 5838
diff changeset
   162
	RefitList *list = CallocT<RefitList>(1);
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   163
	Vehicle *u = (Vehicle*)v;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   164
	uint num_lines = 0;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   165
	uint i;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   166
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   167
	do {
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   168
		uint32 cmask = EngInfo(u->engine_type)->refit_mask;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   169
		byte callbackmask = EngInfo(u->engine_type)->callbackmask;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   170
4933
106e2a14ab3c (svn r6920) - Codechange: Ignore refit options of an engine if it has no capacity.
peter1138
parents: 4932
diff changeset
   171
		/* Skip this engine if it has no capacity */
106e2a14ab3c (svn r6920) - Codechange: Ignore refit options of an engine if it has no capacity.
peter1138
parents: 4932
diff changeset
   172
		if (u->cargo_cap == 0) continue;
106e2a14ab3c (svn r6920) - Codechange: Ignore refit options of an engine if it has no capacity.
peter1138
parents: 4932
diff changeset
   173
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   174
		/* Loop through all cargos in the refit mask */
6676
30aea9ac89bc (svn r9388) -Codechange: variable scope and type, and standardify all CargoID loops.
peter1138
parents: 6585
diff changeset
   175
		for (CargoID cid = 0; cid < NUM_CARGO && num_lines < max_lines; cid++) {
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   176
			/* Skip cargo type if it's not listed */
8424
4a488a90ccab (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents: 8342
diff changeset
   177
			if (!HasBit(cmask, cid)) continue;
4776
f9c174047c5d (svn r6690) - Fix (r6602): Translate global to per-climate cargo ids before... doing anything with them. (Thanks to MeusH for pointing this out...)
peter1138
parents: 4775
diff changeset
   178
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   179
			/* Check the vehicle's callback mask for cargo suffixes */
8424
4a488a90ccab (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents: 8342
diff changeset
   180
			if (HasBit(callbackmask, CBM_VEHICLE_CARGO_SUFFIX)) {
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   181
				/* Make a note of the original cargo type. It has to be
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   182
				 * changed to test the cargo & subtype... */
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   183
				CargoID temp_cargo = u->cargo_type;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   184
				byte temp_subtype  = u->cargo_subtype;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   185
				byte refit_cyc;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   186
6439
99a5807852b1 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6417
diff changeset
   187
				u->cargo_type = cid;
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   188
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   189
				for (refit_cyc = 0; refit_cyc < 16 && num_lines < max_lines; refit_cyc++) {
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   190
					bool duplicate = false;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   191
					uint16 callback;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   192
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   193
					u->cargo_subtype = refit_cyc;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   194
					callback = GetVehicleCallback(CBID_VEHICLE_CARGO_SUFFIX, 0, 0, u->engine_type, u);
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   195
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   196
					if (callback == 0xFF) callback = CALLBACK_FAILED;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   197
					if (refit_cyc != 0 && callback == CALLBACK_FAILED) break;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   198
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   199
					/* Check if this cargo and subtype combination are listed */
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   200
					for (i = 0; i < num_lines && !duplicate; i++) {
6439
99a5807852b1 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6417
diff changeset
   201
						if (refit[i].cargo == cid && refit[i].value == callback) duplicate = true;
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   202
					}
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   203
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   204
					if (duplicate) continue;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   205
6439
99a5807852b1 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6417
diff changeset
   206
					refit[num_lines].cargo   = cid;
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   207
					refit[num_lines].subtype = refit_cyc;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   208
					refit[num_lines].value   = callback;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   209
					refit[num_lines].engine  = u->engine_type;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   210
					num_lines++;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   211
				}
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   212
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   213
				/* Reset the vehicle's cargo type */
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   214
				u->cargo_type    = temp_cargo;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   215
				u->cargo_subtype = temp_subtype;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   216
			} else {
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   217
				/* No cargo suffix callback -- use no subtype */
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   218
				bool duplicate = false;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   219
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   220
				for (i = 0; i < num_lines && !duplicate; i++) {
6439
99a5807852b1 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6417
diff changeset
   221
					if (refit[i].cargo == cid && refit[i].value == CALLBACK_FAILED) duplicate = true;
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   222
				}
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   223
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   224
				if (!duplicate) {
6439
99a5807852b1 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6417
diff changeset
   225
					refit[num_lines].cargo   = cid;
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   226
					refit[num_lines].subtype = 0;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   227
					refit[num_lines].value   = CALLBACK_FAILED;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   228
					refit[num_lines].engine  = INVALID_ENGINE;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   229
					num_lines++;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   230
				}
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   231
			}
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   232
		}
7988
6075538f6111 (svn r11003) -Codechange: replace Vehicle->next to Vehicle->Next() and Vehicle->SetNext() so we can trap instances that change a next pointer and (in the future) update the first/previous pointers based on that.
rubidium
parents: 7986
diff changeset
   233
	} while (v->type == VEH_TRAIN && (u = u->Next()) != NULL && num_lines < max_lines);
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   234
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   235
	list->num_lines = num_lines;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   236
	list->items = refit;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   237
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   238
	return list;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   239
}
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   240
1859
b3af0081df39 (svn r2365) - Change: [refitting] Make refitting capacities for trains newgrf compatible. Train vehicles can now carry twice as much mail/goods as other cargo, and four times as much passengers.
hackykid
parents: 1802
diff changeset
   241
/** Draw the list of available refit options for a consist.
1802
448f187042d3 (svn r2306) - CodeChange: Check the last commands; refits. This needed an extensive rewrite and global/local-cargo ID juggling and bitmasking. However with this done it looks better as well and is compatible with newgrf handling. Big thanks to HackyKid for doing most of the work. This also closes patch "[ 1199277 ] Command checks"
Darkvater
parents: 1763
diff changeset
   242
 * Draw the list and highlight the selected refit option (if any)
6980
6b5dee376733 (svn r9665) -Documentation: Doxygen corrections,errors, corrections of corrections...
belugas
parents: 6919
diff changeset
   243
 * @param *list first vehicle in consist to get the refit-options of
1802
448f187042d3 (svn r2306) - CodeChange: Check the last commands; refits. This needed an extensive rewrite and global/local-cargo ID juggling and bitmasking. However with this done it looks better as well and is compatible with newgrf handling. Big thanks to HackyKid for doing most of the work. This also closes patch "[ 1199277 ] Command checks"
Darkvater
parents: 1763
diff changeset
   244
 * @param sel selected refit cargo-type in the window
6980
6b5dee376733 (svn r9665) -Documentation: Doxygen corrections,errors, corrections of corrections...
belugas
parents: 6919
diff changeset
   245
 * @param pos position of the selected item in caller widow
6b5dee376733 (svn r9665) -Documentation: Doxygen corrections,errors, corrections of corrections...
belugas
parents: 6919
diff changeset
   246
 * @param rows number of rows(capacity) in caller window
6b5dee376733 (svn r9665) -Documentation: Doxygen corrections,errors, corrections of corrections...
belugas
parents: 6919
diff changeset
   247
 * @param delta step height in caller window
4695
52419a88345d (svn r6602) - Feature: we now support NewGRF livery refits, as used by DBsetXL, amongst others. This requires a savegame bump to save the cargo subtype.
peter1138
parents: 4694
diff changeset
   248
 * @return the refit option that is hightlighted, NULL if none
1802
448f187042d3 (svn r2306) - CodeChange: Check the last commands; refits. This needed an extensive rewrite and global/local-cargo ID juggling and bitmasking. However with this done it looks better as well and is compatible with newgrf handling. Big thanks to HackyKid for doing most of the work. This also closes patch "[ 1199277 ] Command checks"
Darkvater
parents: 1763
diff changeset
   249
 */
4695
52419a88345d (svn r6602) - Feature: we now support NewGRF livery refits, as used by DBsetXL, amongst others. This requires a savegame bump to save the cargo subtype.
peter1138
parents: 4694
diff changeset
   250
static RefitOption *DrawVehicleRefitWindow(const RefitList *list, int sel, uint pos, uint rows, uint delta)
1802
448f187042d3 (svn r2306) - CodeChange: Check the last commands; refits. This needed an extensive rewrite and global/local-cargo ID juggling and bitmasking. However with this done it looks better as well and is compatible with newgrf handling. Big thanks to HackyKid for doing most of the work. This also closes patch "[ 1199277 ] Command checks"
Darkvater
parents: 1763
diff changeset
   251
{
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   252
	RefitOption *refit = list->items;
4695
52419a88345d (svn r6602) - Feature: we now support NewGRF livery refits, as used by DBsetXL, amongst others. This requires a savegame bump to save the cargo subtype.
peter1138
parents: 4694
diff changeset
   253
	RefitOption *selected = NULL;
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   254
	uint num_lines = list->num_lines;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   255
	uint y = 31;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   256
	uint i;
1802
448f187042d3 (svn r2306) - CodeChange: Check the last commands; refits. This needed an extensive rewrite and global/local-cargo ID juggling and bitmasking. However with this done it looks better as well and is compatible with newgrf handling. Big thanks to HackyKid for doing most of the work. This also closes patch "[ 1199277 ] Command checks"
Darkvater
parents: 1763
diff changeset
   257
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   258
	/* Draw the list, and find the selected cargo (by its position in list) */
4697
f824e8550d53 (svn r6607) - Fix (r6601): Fix selection of refit type when the list is scrolled.
peter1138
parents: 4695
diff changeset
   259
	for (i = 0; i < num_lines; i++) {
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8294
diff changeset
   260
		TextColour colour = TC_BLACK;
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   261
		if (sel == 0) {
4695
52419a88345d (svn r6602) - Feature: we now support NewGRF livery refits, as used by DBsetXL, amongst others. This requires a savegame bump to save the cargo subtype.
peter1138
parents: 4694
diff changeset
   262
			selected = &refit[i];
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8294
diff changeset
   263
			colour = TC_WHITE;
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   264
		}
1859
b3af0081df39 (svn r2365) - Change: [refitting] Make refitting capacities for trains newgrf compatible. Train vehicles can now carry twice as much mail/goods as other cargo, and four times as much passengers.
hackykid
parents: 1802
diff changeset
   265
4697
f824e8550d53 (svn r6607) - Fix (r6601): Fix selection of refit type when the list is scrolled.
peter1138
parents: 4695
diff changeset
   266
		if (i >= pos && i < pos + rows) {
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   267
			/* Draw the cargo name */
6417
26acff62d001 (svn r8826) -Codechange: Replace _cargoc's separate arrays with a regular struct array (with accessor) and implement new initialization method using cargo labels.
peter1138
parents: 6382
diff changeset
   268
			int last_x = DrawString(2, y, GetCargo(refit[i].cargo)->name, colour);
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   269
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   270
			/* If the callback succeeded, draw the cargo suffix */
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   271
			if (refit[i].value != CALLBACK_FAILED) {
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   272
				DrawString(last_x + 1, y, GetGRFStringID(GetEngineGRFID(refit[i].engine), 0xD000 + refit[i].value), colour);
3025
ec4098b53115 (svn r3605) - Remove silly macro and fix indenting in DrawVehicleRefitWindow()
peter1138
parents: 2989
diff changeset
   273
			}
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   274
			y += delta;
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   275
		}
3025
ec4098b53115 (svn r3605) - Remove silly macro and fix indenting in DrawVehicleRefitWindow()
peter1138
parents: 2989
diff changeset
   276
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   277
		sel--;
3025
ec4098b53115 (svn r3605) - Remove silly macro and fix indenting in DrawVehicleRefitWindow()
peter1138
parents: 2989
diff changeset
   278
	}
ec4098b53115 (svn r3605) - Remove silly macro and fix indenting in DrawVehicleRefitWindow()
peter1138
parents: 2989
diff changeset
   279
4695
52419a88345d (svn r6602) - Feature: we now support NewGRF livery refits, as used by DBsetXL, amongst others. This requires a savegame bump to save the cargo subtype.
peter1138
parents: 4694
diff changeset
   280
	return selected;
1802
448f187042d3 (svn r2306) - CodeChange: Check the last commands; refits. This needed an extensive rewrite and global/local-cargo ID juggling and bitmasking. However with this done it looks better as well and is compatible with newgrf handling. Big thanks to HackyKid for doing most of the work. This also closes patch "[ 1199277 ] Command checks"
Darkvater
parents: 1763
diff changeset
   281
}
448f187042d3 (svn r2306) - CodeChange: Check the last commands; refits. This needed an extensive rewrite and global/local-cargo ID juggling and bitmasking. However with this done it looks better as well and is compatible with newgrf handling. Big thanks to HackyKid for doing most of the work. This also closes patch "[ 1199277 ] Command checks"
Darkvater
parents: 1763
diff changeset
   282
10584
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   283
struct RefitWindow : public Window {
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   284
	int sel;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   285
	RefitOption *cargo;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   286
	RefitList *list;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   287
	uint length;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   288
	VehicleOrderID order;
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   289
10584
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   290
	RefitWindow(const WindowDesc *desc, const Vehicle *v, VehicleOrderID order) : Window(desc, v->index)
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   291
	{
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   292
		this->caption_color = v->owner;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   293
		this->vscroll.cap = 8;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   294
		this->resize.step_height = 14;
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   295
10584
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   296
		this->order = order;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   297
		this->sel  = -1;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   298
		this->list = BuildRefitList(v);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   299
		if (v->type == VEH_TRAIN) this->length = CountVehiclesInChain(v);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   300
		SetVScrollCount(this, this->list->num_lines);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   301
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   302
		switch (v->type) {
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   303
			case VEH_TRAIN:
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   304
				this->widget[3].tooltips = STR_RAIL_SELECT_TYPE_OF_CARGO_FOR;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   305
				this->widget[6].data     = STR_RAIL_REFIT_VEHICLE;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   306
				this->widget[6].tooltips = STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   307
				break;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   308
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   309
			case VEH_ROAD:
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   310
				this->widget[3].tooltips = STR_ROAD_SELECT_TYPE_OF_CARGO_FOR;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   311
				this->widget[6].data     = STR_REFIT_ROAD_VEHICLE;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   312
				this->widget[6].tooltips = STR_REFIT_ROAD_VEHICLE_TO_CARRY_HIGHLIGHTED;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   313
				break;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   314
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   315
			case VEH_SHIP:
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   316
				this->widget[3].tooltips = STR_983D_SELECT_TYPE_OF_CARGO_FOR;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   317
				this->widget[6].data     = STR_983C_REFIT_SHIP;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   318
				this->widget[6].tooltips = STR_983E_REFIT_SHIP_TO_CARRY_HIGHLIGHTED;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   319
				break;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   320
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   321
			case VEH_AIRCRAFT:
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   322
				this->widget[3].tooltips = STR_A03E_SELECT_TYPE_OF_CARGO_FOR;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   323
				this->widget[6].data     = STR_A03D_REFIT_AIRCRAFT;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   324
				this->widget[6].tooltips = STR_A03F_REFIT_AIRCRAFT_TO_CARRY;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   325
				break;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   326
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   327
			default: NOT_REACHED();
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   328
		}
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   329
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   330
		this->FindWindowPlacementAndResize(desc);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   331
	}
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   332
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   333
	~RefitWindow()
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   334
	{
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   335
		free(this->list->items);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   336
		free(this->list);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   337
	}
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   338
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   339
	virtual void OnPaint()
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   340
	{
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   341
		Vehicle *v = GetVehicle(this->window_number);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   342
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   343
		if (v->type == VEH_TRAIN) {
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   344
			uint length = CountVehiclesInChain(v);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   345
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   346
			if (length != this->length) {
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   347
				/* Consist length has changed, so rebuild the refit list */
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   348
				free(this->list->items);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   349
				free(this->list);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   350
				this->list = BuildRefitList(v);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   351
				this->length = length;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   352
			}
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   353
		}
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   354
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   355
		SetVScrollCount(this, this->list->num_lines);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   356
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   357
		SetDParam(0, v->index);
10595
7957c71b0dfe (svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium
parents: 10584
diff changeset
   358
		this->DrawWidgets();
10584
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   359
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   360
		this->cargo = DrawVehicleRefitWindow(this->list, this->sel, this->vscroll.pos, this->vscroll.cap, this->resize.step_height);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   361
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   362
		if (this->cargo != NULL) {
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   363
			CommandCost cost;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   364
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   365
			cost = DoCommand(v->tile, v->index, this->cargo->cargo | this->cargo->subtype << 8,
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   366
							 DC_QUERY_COST, GetCmdRefitVeh(v->type));
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   367
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   368
			if (CmdSucceeded(cost)) {
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   369
				SetDParam(0, this->cargo->cargo);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   370
				SetDParam(1, _returned_refit_capacity);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   371
				SetDParam(2, cost.GetCost());
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   372
				DrawString(2, this->widget[5].top + 1, STR_9840_NEW_CAPACITY_COST_OF_REFIT, TC_FROMSTRING);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   373
			}
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   374
		}
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   375
	}
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   376
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   377
	virtual void OnClick(Point pt, int widget)
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   378
	{
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   379
		switch (widget) {
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   380
			case 3: { // listbox
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   381
				int y = pt.y - this->widget[3].top;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   382
				if (y >= 0) {
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   383
					this->sel = (y / (int)this->resize.step_height) + this->vscroll.pos;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   384
					this->SetDirty();
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   385
				}
10584
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   386
				break;
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   387
			}
4642
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   388
10584
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   389
			case 6: // refit button
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   390
				if (this->cargo != NULL) {
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   391
					const Vehicle *v = GetVehicle(this->window_number);
6382
d7afe52a2289 (svn r8786) -Cleanup: replaced a switch-case to get the right refit command for a certain vehicle type. We have a function to do that
bjarni
parents: 6206
diff changeset
   392
10584
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   393
					if (this->order == INVALID_VEH_ORDER_ID) {
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   394
						int command = 0;
4642
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   395
10584
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   396
						switch (v->type) {
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   397
							default: NOT_REACHED();
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   398
							case VEH_TRAIN:    command = CMD_REFIT_RAIL_VEHICLE | CMD_MSG(STR_RAIL_CAN_T_REFIT_VEHICLE);  break;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   399
							case VEH_ROAD:     command = CMD_REFIT_ROAD_VEH     | CMD_MSG(STR_REFIT_ROAD_VEHICLE_CAN_T);  break;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   400
							case VEH_SHIP:     command = CMD_REFIT_SHIP         | CMD_MSG(STR_9841_CAN_T_REFIT_SHIP);     break;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   401
							case VEH_AIRCRAFT: command = CMD_REFIT_AIRCRAFT     | CMD_MSG(STR_A042_CAN_T_REFIT_AIRCRAFT); break;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   402
						}
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   403
						if (DoCommandP(v->tile, v->index, this->cargo->cargo | this->cargo->subtype << 8, NULL, command)) delete this;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   404
					} else {
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   405
						if (DoCommandP(v->tile, v->index, this->cargo->cargo | this->cargo->subtype << 8 | this->order << 16, NULL, CMD_ORDER_REFIT)) delete this;
4642
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   406
					}
10584
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   407
				}
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   408
				break;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   409
		}
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   410
	}
4712
273ec3b182bf (svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents: 4709
diff changeset
   411
10584
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   412
	virtual void OnResize(Point new_size, Point delta)
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   413
	{
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   414
		this->vscroll.cap += delta.y / (int)this->resize.step_height;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   415
		this->widget[3].data = (this->vscroll.cap << 8) + 1;
4642
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   416
	}
10584
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   417
};
4642
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   418
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   419
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   420
static const Widget _vehicle_refit_widgets[] = {
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   421
	{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,                            STR_018B_CLOSE_WINDOW},
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   422
	{    WWT_CAPTION,   RESIZE_NONE,    14,    11,   239,     0,    13, STR_983B_REFIT,                      STR_018C_WINDOW_TITLE_DRAG_THIS},
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   423
	{    WWT_TEXTBTN,   RESIZE_NONE,    14,     0,   239,    14,    27, STR_983F_SELECT_CARGO_TYPE_TO_CARRY, STR_983D_SELECT_TYPE_OF_CARGO_FOR},
4775
4e0daa957997 (svn r6689) -Fix: corrected vehicle type in tooltip for the list in the refit window
bjarni
parents: 4762
diff changeset
   424
	{     WWT_MATRIX, RESIZE_BOTTOM,    14,     0,   227,    28,   139, 0x801,                               STR_EMPTY},
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   425
	{  WWT_SCROLLBAR, RESIZE_BOTTOM,    14,   228,   239,    28,   139, 0x0,                                 STR_0190_SCROLL_BAR_SCROLLS_LIST},
4938
074f734a91ca (svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents: 4933
diff changeset
   426
	{      WWT_PANEL,     RESIZE_TB,    14,     0,   239,   140,   161, 0x0,                                 STR_NULL},
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   427
	{ WWT_PUSHTXTBTN,     RESIZE_TB,    14,     0,   227,   162,   173, 0x0,                                 STR_NULL},
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   428
	{  WWT_RESIZEBOX,     RESIZE_TB,    14,   228,   239,   162,   173, 0x0,                                 STR_RESIZE_BUTTON},
4642
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   429
	{   WIDGETS_END},
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   430
};
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   431
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   432
static const WindowDesc _vehicle_refit_desc = {
7837
65d7362153a6 (svn r10704) -Codechange: provide an infrastructure to have resizable windows that are smaller than the default window size.
rubidium
parents: 7568
diff changeset
   433
	WDP_AUTO, WDP_AUTO, 240, 174, 240, 174,
6987
b0f13039bda2 (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6980
diff changeset
   434
	WC_VEHICLE_REFIT, WC_VEHICLE_VIEW,
4694
a4d2a3abe75c (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   435
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_RESIZABLE,
4642
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   436
	_vehicle_refit_widgets,
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   437
};
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   438
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   439
/** Show the refit window for a vehicle
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   440
* @param *v The vehicle to show the refit window for
6987
b0f13039bda2 (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6980
diff changeset
   441
* @param order of the vehicle ( ? )
4642
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   442
*/
4712
273ec3b182bf (svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents: 4709
diff changeset
   443
void ShowVehicleRefitWindow(const Vehicle *v, VehicleOrderID order)
4642
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   444
{
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   445
	DeleteWindowById(WC_VEHICLE_REFIT, v->index);
10584
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   446
	new RefitWindow(&_vehicle_refit_desc, v, order);
4642
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   447
}
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   448
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6676
diff changeset
   449
/** Display additional text from NewGRF in the purchase information window */
4932
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   450
uint ShowAdditionalText(int x, int y, uint w, EngineID engine)
3650
92a3f5cae745 (svn r4561) - NewGRF: implement most of callback 0x23: additional text in vehicle purchase windows.
peter1138
parents: 3492
diff changeset
   451
{
92a3f5cae745 (svn r4561) - NewGRF: implement most of callback 0x23: additional text in vehicle purchase windows.
peter1138
parents: 3492
diff changeset
   452
	uint16 callback = GetVehicleCallback(CBID_VEHICLE_ADDITIONAL_TEXT, 0, 0, engine, NULL);
92a3f5cae745 (svn r4561) - NewGRF: implement most of callback 0x23: additional text in vehicle purchase windows.
peter1138
parents: 3492
diff changeset
   453
	if (callback == CALLBACK_FAILED) return 0;
92a3f5cae745 (svn r4561) - NewGRF: implement most of callback 0x23: additional text in vehicle purchase windows.
peter1138
parents: 3492
diff changeset
   454
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6676
diff changeset
   455
	/* STR_02BD is used to start the string with {BLACK} */
4928
4cdb51b5db7b (svn r6908) - Codechange: Modify DrawStringMultiLine() to return the number of pixel lines used, and use it for drawing NewGRF additional text (mart3p)
peter1138
parents: 4912
diff changeset
   456
	SetDParam(0, GetGRFStringID(GetEngineGRFID(engine), 0xD000 + callback));
4cdb51b5db7b (svn r6908) - Codechange: Modify DrawStringMultiLine() to return the number of pixel lines used, and use it for drawing NewGRF additional text (mart3p)
peter1138
parents: 4912
diff changeset
   457
	return DrawStringMultiLine(x, y, STR_02BD, w);
3650
92a3f5cae745 (svn r4561) - NewGRF: implement most of callback 0x23: additional text in vehicle purchase windows.
peter1138
parents: 3492
diff changeset
   458
}
92a3f5cae745 (svn r4561) - NewGRF: implement most of callback 0x23: additional text in vehicle purchase windows.
peter1138
parents: 3492
diff changeset
   459
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6676
diff changeset
   460
/** Display list of cargo types of the engine, for the purchase information window */
4932
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   461
uint ShowRefitOptionsList(int x, int y, uint w, EngineID engine)
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   462
{
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   463
	/* List of cargo types of this engine */
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   464
	uint32 cmask = EngInfo(engine)->refit_mask;
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   465
	/* List of cargo types available in this climate */
6439
99a5807852b1 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6417
diff changeset
   466
	uint32 lmask = _cargo_mask;
4932
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   467
	char *b = _userstring;
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   468
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   469
	/* Draw nothing if the engine is not refittable */
8328
6909973c8359 (svn r11382) -Codechange: renamed COUNTBITS to CountBits, as it is no longer a macro (skidd13)
truelight
parents: 8320
diff changeset
   470
	if (CountBits(cmask) <= 1) return 0;
4932
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   471
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   472
	b = InlineString(b, STR_PURCHASE_INFO_REFITTABLE_TO);
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   473
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   474
	if (cmask == lmask) {
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   475
		/* Engine can be refitted to all types in this climate */
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   476
		b = InlineString(b, STR_PURCHASE_INFO_ALL_TYPES);
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   477
	} else {
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   478
		/* Check if we are able to refit to more cargo types and unable to. If
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   479
		 * so, invert the cargo types to list those that we can't refit to. */
8328
6909973c8359 (svn r11382) -Codechange: renamed COUNTBITS to CountBits, as it is no longer a macro (skidd13)
truelight
parents: 8320
diff changeset
   480
		if (CountBits(cmask ^ lmask) < CountBits(cmask)) {
4932
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   481
			cmask ^= lmask;
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   482
			b = InlineString(b, STR_PURCHASE_INFO_ALL_BUT);
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   483
		}
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   484
6439
99a5807852b1 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6417
diff changeset
   485
		bool first = true;
99a5807852b1 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6417
diff changeset
   486
4932
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   487
		/* Add each cargo type to the list */
6439
99a5807852b1 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6417
diff changeset
   488
		for (CargoID cid = 0; cid < NUM_CARGO; cid++) {
8424
4a488a90ccab (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents: 8342
diff changeset
   489
			if (!HasBit(cmask, cid)) continue;
6439
99a5807852b1 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6417
diff changeset
   490
8537
0b4ab7d8b018 (svn r11601) -Codechange: more strict break conditions for _userstring, assert when it overflows anyway (eg. code change without proper check change)
smatz
parents: 8493
diff changeset
   491
			if (b >= lastof(_userstring) - (2 + 2 * 4)) break; // ", " and two calls to Utf8Encode()
0b4ab7d8b018 (svn r11601) -Codechange: more strict break conditions for _userstring, assert when it overflows anyway (eg. code change without proper check change)
smatz
parents: 8493
diff changeset
   492
6439
99a5807852b1 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6417
diff changeset
   493
			if (!first) b = strecpy(b, ", ", lastof(_userstring));
99a5807852b1 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6417
diff changeset
   494
			first = false;
99a5807852b1 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6417
diff changeset
   495
99a5807852b1 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6417
diff changeset
   496
			b = InlineString(b, GetCargo(cid)->name);
4932
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   497
		}
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   498
	}
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   499
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   500
	/* Terminate and display the completed string */
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   501
	*b = '\0';
8537
0b4ab7d8b018 (svn r11601) -Codechange: more strict break conditions for _userstring, assert when it overflows anyway (eg. code change without proper check change)
smatz
parents: 8493
diff changeset
   502
0b4ab7d8b018 (svn r11601) -Codechange: more strict break conditions for _userstring, assert when it overflows anyway (eg. code change without proper check change)
smatz
parents: 8493
diff changeset
   503
	/* Make sure we detect any buffer overflow */
0b4ab7d8b018 (svn r11601) -Codechange: more strict break conditions for _userstring, assert when it overflows anyway (eg. code change without proper check change)
smatz
parents: 8493
diff changeset
   504
	assert(b < endof(_userstring));
0b4ab7d8b018 (svn r11601) -Codechange: more strict break conditions for _userstring, assert when it overflows anyway (eg. code change without proper check change)
smatz
parents: 8493
diff changeset
   505
4932
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   506
	return DrawStringMultiLine(x, y, STR_SPEC_USERSTRING, w);
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   507
}
3567a3ec9d80 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   508
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   509
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6676
diff changeset
   510
/* if the sorting criteria had the same value, sort vehicle by unitnumber */
243
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   511
#define VEHICLEUNITNUMBERSORTER(r, a, b) {if (r == 0) {r = a->unitnumber - b->unitnumber;}}
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   512
2462
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   513
static int CDECL VehicleNumberSorter(const void *a, const void *b)
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   514
{
4266
57a72ad31925 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   515
	const Vehicle* va = *(const Vehicle**)a;
57a72ad31925 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   516
	const Vehicle* vb = *(const Vehicle**)b;
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   517
	int r = va->unitnumber - vb->unitnumber;
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   518
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   519
	return (_internal_sort_order & 1) ? -r : r;
164
0cbdf3c9bde1 (svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
diff changeset
   520
}
0cbdf3c9bde1 (svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
diff changeset
   521
2462
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   522
static int CDECL VehicleNameSorter(const void *a, const void *b)
164
0cbdf3c9bde1 (svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
diff changeset
   523
{
4266
57a72ad31925 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   524
	const Vehicle* va = *(const Vehicle**)a;
57a72ad31925 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   525
	const Vehicle* vb = *(const Vehicle**)b;
164
0cbdf3c9bde1 (svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
diff changeset
   526
	int r;
0cbdf3c9bde1 (svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
diff changeset
   527
9158
04fe70dfe028 (svn r12324) -Fix (r6789): vehicles could be sorted in a wrong order when a vehicle name changed - cached name was not invalidated
smatz
parents: 9157
diff changeset
   528
	if (va != _last_vehicle[0]) {
04fe70dfe028 (svn r12324) -Fix (r6789): vehicles could be sorted in a wrong order when a vehicle name changed - cached name was not invalidated
smatz
parents: 9157
diff changeset
   529
		_last_vehicle[0] = va;
8754
5dae65402806 (svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents: 8750
diff changeset
   530
		SetDParam(0, va->index);
9158
04fe70dfe028 (svn r12324) -Fix (r6789): vehicles could be sorted in a wrong order when a vehicle name changed - cached name was not invalidated
smatz
parents: 9157
diff changeset
   531
		GetString(_last_name[0], STR_VEHICLE_NAME, lastof(_last_name[0]));
164
0cbdf3c9bde1 (svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
diff changeset
   532
	}
0cbdf3c9bde1 (svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
diff changeset
   533
9158
04fe70dfe028 (svn r12324) -Fix (r6789): vehicles could be sorted in a wrong order when a vehicle name changed - cached name was not invalidated
smatz
parents: 9157
diff changeset
   534
	if (vb != _last_vehicle[1]) {
04fe70dfe028 (svn r12324) -Fix (r6789): vehicles could be sorted in a wrong order when a vehicle name changed - cached name was not invalidated
smatz
parents: 9157
diff changeset
   535
		_last_vehicle[1] = vb;
9157
b1c6c3ace486 (svn r12323) -Fix [FS#1821](r6789): vehicle sorting by name was broken, it was comparing two the same strings (when caching was not used)
smatz
parents: 9134
diff changeset
   536
		SetDParam(0, vb->index);
9158
04fe70dfe028 (svn r12324) -Fix (r6789): vehicles could be sorted in a wrong order when a vehicle name changed - cached name was not invalidated
smatz
parents: 9157
diff changeset
   537
		GetString(_last_name[1], STR_VEHICLE_NAME, lastof(_last_name[1]));
4863
b1968ab309b6 (svn r6789) - Codechange: Tidy up VehicleNameSorter() to use no global vars, and match the style of EngineNameSorter(). This also removes a bug where _internal_name_sorter_id was never set properly for anything other than trains.
peter1138
parents: 4835
diff changeset
   538
	}
b1968ab309b6 (svn r6789) - Codechange: Tidy up VehicleNameSorter() to use no global vars, and match the style of EngineNameSorter(). This also removes a bug where _internal_name_sorter_id was never set properly for anything other than trains.
peter1138
parents: 4835
diff changeset
   539
9158
04fe70dfe028 (svn r12324) -Fix (r6789): vehicles could be sorted in a wrong order when a vehicle name changed - cached name was not invalidated
smatz
parents: 9157
diff changeset
   540
	r = strcmp(_last_name[0], _last_name[1]); // sort by name
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 171
diff changeset
   541
243
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   542
	VEHICLEUNITNUMBERSORTER(r, va, vb);
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   543
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   544
	return (_internal_sort_order & 1) ? -r : r;
164
0cbdf3c9bde1 (svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
diff changeset
   545
}
0cbdf3c9bde1 (svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
diff changeset
   546
2462
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   547
static int CDECL VehicleAgeSorter(const void *a, const void *b)
164
0cbdf3c9bde1 (svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
diff changeset
   548
{
4266
57a72ad31925 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   549
	const Vehicle* va = *(const Vehicle**)a;
57a72ad31925 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   550
	const Vehicle* vb = *(const Vehicle**)b;
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   551
	int r = va->age - vb->age;
164
0cbdf3c9bde1 (svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
diff changeset
   552
243
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   553
	VEHICLEUNITNUMBERSORTER(r, va, vb);
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   554
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   555
	return (_internal_sort_order & 1) ? -r : r;
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   556
}
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   557
2462
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   558
static int CDECL VehicleProfitThisYearSorter(const void *a, const void *b)
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   559
{
4266
57a72ad31925 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   560
	const Vehicle* va = *(const Vehicle**)a;
57a72ad31925 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   561
	const Vehicle* vb = *(const Vehicle**)b;
9110
55864e1fc263 (svn r12197) -Fix [FS#1788](r12134): show correct last year profit when the train had negative income
smatz
parents: 9052
diff changeset
   562
	int r = ClampToI32(va->GetDisplayProfitThisYear() - vb->GetDisplayProfitThisYear());
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 171
diff changeset
   563
243
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   564
	VEHICLEUNITNUMBERSORTER(r, va, vb);
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   565
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   566
	return (_internal_sort_order & 1) ? -r : r;
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   567
}
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   568
2462
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   569
static int CDECL VehicleProfitLastYearSorter(const void *a, const void *b)
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   570
{
4266
57a72ad31925 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   571
	const Vehicle* va = *(const Vehicle**)a;
57a72ad31925 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   572
	const Vehicle* vb = *(const Vehicle**)b;
9110
55864e1fc263 (svn r12197) -Fix [FS#1788](r12134): show correct last year profit when the train had negative income
smatz
parents: 9052
diff changeset
   573
	int r = ClampToI32(va->GetDisplayProfitLastYear() - vb->GetDisplayProfitLastYear());
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   574
243
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   575
	VEHICLEUNITNUMBERSORTER(r, va, vb);
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   576
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   577
	return (_internal_sort_order & 1) ? -r : r;
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   578
}
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   579
2462
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   580
static int CDECL VehicleCargoSorter(const void *a, const void *b)
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   581
{
4266
57a72ad31925 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   582
	const Vehicle* va = *(const Vehicle**)a;
57a72ad31925 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   583
	const Vehicle* vb = *(const Vehicle**)b;
2549
f1d3b383d557 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   584
	const Vehicle* v;
f1d3b383d557 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   585
	AcceptedCargo cargoa;
f1d3b383d557 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   586
	AcceptedCargo cargob;
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   587
	int r = 0;
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   588
2549
f1d3b383d557 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   589
	memset(cargoa, 0, sizeof(cargoa));
f1d3b383d557 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   590
	memset(cargob, 0, sizeof(cargob));
7988
6075538f6111 (svn r11003) -Codechange: replace Vehicle->next to Vehicle->Next() and Vehicle->SetNext() so we can trap instances that change a next pointer and (in the future) update the first/previous pointers based on that.
rubidium
parents: 7986
diff changeset
   591
	for (v = va; v != NULL; v = v->Next()) cargoa[v->cargo_type] += v->cargo_cap;
6075538f6111 (svn r11003) -Codechange: replace Vehicle->next to Vehicle->Next() and Vehicle->SetNext() so we can trap instances that change a next pointer and (in the future) update the first/previous pointers based on that.
rubidium
parents: 7986
diff changeset
   592
	for (v = vb; v != NULL; v = v->Next()) cargob[v->cargo_type] += v->cargo_cap;
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   593
6676
30aea9ac89bc (svn r9388) -Codechange: variable scope and type, and standardify all CargoID loops.
peter1138
parents: 6585
diff changeset
   594
	for (CargoID i = 0; i < NUM_CARGO; i++) {
2549
f1d3b383d557 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   595
		r = cargoa[i] - cargob[i];
f1d3b383d557 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   596
		if (r != 0) break;
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   597
	}
164
0cbdf3c9bde1 (svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
diff changeset
   598
594
81c0d7edfb17 (svn r1016) Make the cargo sorter not consider the number of wagons of a particular cargo type but the sum of their capacity.
tron
parents: 588
diff changeset
   599
	VEHICLEUNITNUMBERSORTER(r, va, vb);
81c0d7edfb17 (svn r1016) Make the cargo sorter not consider the number of wagons of a particular cargo type but the sum of their capacity.
tron
parents: 588
diff changeset
   600
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   601
	return (_internal_sort_order & 1) ? -r : r;
164
0cbdf3c9bde1 (svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
diff changeset
   602
}
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   603
2462
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   604
static int CDECL VehicleReliabilitySorter(const void *a, const void *b)
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   605
{
4266
57a72ad31925 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   606
	const Vehicle* va = *(const Vehicle**)a;
57a72ad31925 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   607
	const Vehicle* vb = *(const Vehicle**)b;
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   608
	int r = va->reliability - vb->reliability;
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   609
243
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   610
	VEHICLEUNITNUMBERSORTER(r, va, vb);
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   611
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   612
	return (_internal_sort_order & 1) ? -r : r;
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   613
}
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   614
2462
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   615
static int CDECL VehicleMaxSpeedSorter(const void *a, const void *b)
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   616
{
4266
57a72ad31925 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   617
	const Vehicle* va = *(const Vehicle**)a;
57a72ad31925 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   618
	const Vehicle* vb = *(const Vehicle**)b;
1179
abea5b669f74 (svn r1681) -Feature: New realistic acceleration.
celestar
parents: 1178
diff changeset
   619
	int r;
abea5b669f74 (svn r1681) -Feature: New realistic acceleration.
celestar
parents: 1178
diff changeset
   620
6585
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6574
diff changeset
   621
	if (va->type == VEH_TRAIN && vb->type == VEH_TRAIN) {
9051
0becfc1d0c09 (svn r12133) -Fix: Vehicle sorting by max speed did not work properly for trains. Instead of trying to work it out again, just use the cached values...
peter1138
parents: 8920
diff changeset
   622
		r = va->u.rail.cached_max_speed - vb->u.rail.cached_max_speed;
1191
b680ace4455e (svn r1695) -Fix: I broke maximum speed sorting for anything but trains with the new acceleration. Sorry
Celestar
parents: 1182
diff changeset
   623
	} else {
b680ace4455e (svn r1695) -Fix: I broke maximum speed sorting for anything but trains with the new acceleration. Sorry
Celestar
parents: 1182
diff changeset
   624
		r = va->max_speed - vb->max_speed;
b680ace4455e (svn r1695) -Fix: I broke maximum speed sorting for anything but trains with the new acceleration. Sorry
Celestar
parents: 1182
diff changeset
   625
	}
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   626
243
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   627
	VEHICLEUNITNUMBERSORTER(r, va, vb);
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   628
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   629
	return (_internal_sort_order & 1) ? -r : r;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 171
diff changeset
   630
}
842
ebfd36603ab9 (svn r1323) Adding autoreplace feature
bjarni
parents: 594
diff changeset
   631
2965
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   632
static int CDECL VehicleModelSorter(const void *a, const void *b)
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   633
{
4266
57a72ad31925 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   634
	const Vehicle* va = *(const Vehicle**)a;
57a72ad31925 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   635
	const Vehicle* vb = *(const Vehicle**)b;
2965
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   636
	int r = va->engine_type - vb->engine_type;
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   637
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   638
	VEHICLEUNITNUMBERSORTER(r, va, vb);
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   639
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   640
	return (_internal_sort_order & 1) ? -r : r;
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   641
}
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   642
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   643
static int CDECL VehicleValueSorter(const void *a, const void *b)
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   644
{
4266
57a72ad31925 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   645
	const Vehicle* va = *(const Vehicle**)a;
57a72ad31925 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   646
	const Vehicle* vb = *(const Vehicle**)b;
2965
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   647
	const Vehicle *u;
7486
d130c10f4dab (svn r10246) -Fix (r10297): some forgotten money conversions and truncation issues. Thanks to benc for providing the patch.
rubidium
parents: 7446
diff changeset
   648
	Money valuea = 0, valueb = 0;
2965
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   649
7988
6075538f6111 (svn r11003) -Codechange: replace Vehicle->next to Vehicle->Next() and Vehicle->SetNext() so we can trap instances that change a next pointer and (in the future) update the first/previous pointers based on that.
rubidium
parents: 7986
diff changeset
   650
	for (u = va; u != NULL; u = u->Next()) valuea += u->value;
6075538f6111 (svn r11003) -Codechange: replace Vehicle->next to Vehicle->Next() and Vehicle->SetNext() so we can trap instances that change a next pointer and (in the future) update the first/previous pointers based on that.
rubidium
parents: 7986
diff changeset
   651
	for (u = vb; u != NULL; u = u->Next()) valueb += u->value;
2965
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   652
7486
d130c10f4dab (svn r10246) -Fix (r10297): some forgotten money conversions and truncation issues. Thanks to benc for providing the patch.
rubidium
parents: 7446
diff changeset
   653
	int r = ClampToI32(valuea - valueb);
2965
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   654
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   655
	VEHICLEUNITNUMBERSORTER(r, va, vb);
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   656
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   657
	return (_internal_sort_order & 1) ? -r : r;
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   658
}
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   659
10234
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   660
static int CDECL VehicleLengthSorter(const void *a, const void *b)
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   661
{
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   662
	const Vehicle *va = *(const Vehicle**)a;
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   663
	const Vehicle *vb = *(const Vehicle**)b;
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   664
	int r = 0;
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   665
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   666
	switch (va->type) {
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   667
		case VEH_TRAIN:
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   668
			r = va->u.rail.cached_total_length - vb->u.rail.cached_total_length;
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   669
			break;
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   670
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   671
		case VEH_ROAD:
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   672
			for (const Vehicle *u = va; u != NULL; u = u->Next()) r += u->u.road.cached_veh_length;
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   673
			for (const Vehicle *u = vb; u != NULL; u = u->Next()) r -= u->u.road.cached_veh_length;
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   674
			break;
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   675
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   676
		default: NOT_REACHED();
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   677
	}
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   678
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   679
	VEHICLEUNITNUMBERSORTER(r, va, vb);
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   680
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   681
	return (_internal_sort_order & 1) ? -r : r;
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   682
}
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   683
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6474
diff changeset
   684
void InitializeGUI()
1246
45f15251412b (svn r1750) - Feature: [ 1093261 ] Saving vehicle sorting criteria for each vehicle type (bociusz)
darkvater
parents: 1191
diff changeset
   685
{
45f15251412b (svn r1750) - Feature: [ 1093261 ] Saving vehicle sorting criteria for each vehicle type (bociusz)
darkvater
parents: 1191
diff changeset
   686
	memset(&_sorting, 0, sizeof(_sorting));
45f15251412b (svn r1750) - Feature: [ 1093261 ] Saving vehicle sorting criteria for each vehicle type (bociusz)
darkvater
parents: 1191
diff changeset
   687
}
2552
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   688
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   689
/** Assigns an already open vehicle window to a new vehicle.
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   690
 * Assigns an already open vehicle window to a new vehicle. If the vehicle got
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   691
 * any sub window open (orders and so on) it will change owner too.
10371
f4ebcb863ad6 (svn r12912) -Codechange: overloaded ChangeVehicleViewWindow() so each argument can be either a Vehicle pointer or a VehicleID
bjarni
parents: 10257
diff changeset
   692
 * @param from_index the current owner of the window
f4ebcb863ad6 (svn r12912) -Codechange: overloaded ChangeVehicleViewWindow() so each argument can be either a Vehicle pointer or a VehicleID
bjarni
parents: 10257
diff changeset
   693
 * @param to_index the new owner of the window
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   694
 */
10371
f4ebcb863ad6 (svn r12912) -Codechange: overloaded ChangeVehicleViewWindow() so each argument can be either a Vehicle pointer or a VehicleID
bjarni
parents: 10257
diff changeset
   695
void ChangeVehicleViewWindow(VehicleID from_index, VehicleID to_index)
2552
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   696
{
10371
f4ebcb863ad6 (svn r12912) -Codechange: overloaded ChangeVehicleViewWindow() so each argument can be either a Vehicle pointer or a VehicleID
bjarni
parents: 10257
diff changeset
   697
	Window *w = FindWindowById(WC_VEHICLE_VIEW, from_index);
2552
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   698
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   699
	if (w != NULL) {
10371
f4ebcb863ad6 (svn r12912) -Codechange: overloaded ChangeVehicleViewWindow() so each argument can be either a Vehicle pointer or a VehicleID
bjarni
parents: 10257
diff changeset
   700
		w->window_number = to_index;
10504
7c80c8aaa1df (svn r13047) -Codechange: remove vp_d
glx
parents: 10503
diff changeset
   701
		w->viewport->follow_vehicle = to_index;
10434
d6accd017341 (svn r12976) -Codechange: use w->SetDirty() instead of SetWindowDirty(w) when it's certain that w != NULL.
rubidium
parents: 10433
diff changeset
   702
		w->SetDirty();
2552
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   703
10371
f4ebcb863ad6 (svn r12912) -Codechange: overloaded ChangeVehicleViewWindow() so each argument can be either a Vehicle pointer or a VehicleID
bjarni
parents: 10257
diff changeset
   704
		w = FindWindowById(WC_VEHICLE_ORDERS, from_index);
2552
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   705
		if (w != NULL) {
10371
f4ebcb863ad6 (svn r12912) -Codechange: overloaded ChangeVehicleViewWindow() so each argument can be either a Vehicle pointer or a VehicleID
bjarni
parents: 10257
diff changeset
   706
			w->window_number = to_index;
10434
d6accd017341 (svn r12976) -Codechange: use w->SetDirty() instead of SetWindowDirty(w) when it's certain that w != NULL.
rubidium
parents: 10433
diff changeset
   707
			w->SetDirty();
2552
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   708
		}
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   709
10371
f4ebcb863ad6 (svn r12912) -Codechange: overloaded ChangeVehicleViewWindow() so each argument can be either a Vehicle pointer or a VehicleID
bjarni
parents: 10257
diff changeset
   710
		w = FindWindowById(WC_VEHICLE_REFIT, from_index);
2552
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   711
		if (w != NULL) {
10371
f4ebcb863ad6 (svn r12912) -Codechange: overloaded ChangeVehicleViewWindow() so each argument can be either a Vehicle pointer or a VehicleID
bjarni
parents: 10257
diff changeset
   712
			w->window_number = to_index;
10434
d6accd017341 (svn r12976) -Codechange: use w->SetDirty() instead of SetWindowDirty(w) when it's certain that w != NULL.
rubidium
parents: 10433
diff changeset
   713
			w->SetDirty();
2552
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   714
		}
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   715
10371
f4ebcb863ad6 (svn r12912) -Codechange: overloaded ChangeVehicleViewWindow() so each argument can be either a Vehicle pointer or a VehicleID
bjarni
parents: 10257
diff changeset
   716
		w = FindWindowById(WC_VEHICLE_DETAILS, from_index);
2552
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   717
		if (w != NULL) {
10371
f4ebcb863ad6 (svn r12912) -Codechange: overloaded ChangeVehicleViewWindow() so each argument can be either a Vehicle pointer or a VehicleID
bjarni
parents: 10257
diff changeset
   718
			w->window_number = to_index;
10434
d6accd017341 (svn r12976) -Codechange: use w->SetDirty() instead of SetWindowDirty(w) when it's certain that w != NULL.
rubidium
parents: 10433
diff changeset
   719
			w->SetDirty();
2552
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   720
		}
9134
618bee700fe7 (svn r12261) -Fix [FS#1805]: autoreplace did not update vehicle index for timetable window
glx
parents: 9110
diff changeset
   721
10371
f4ebcb863ad6 (svn r12912) -Codechange: overloaded ChangeVehicleViewWindow() so each argument can be either a Vehicle pointer or a VehicleID
bjarni
parents: 10257
diff changeset
   722
		w = FindWindowById(WC_VEHICLE_TIMETABLE, from_index);
9134
618bee700fe7 (svn r12261) -Fix [FS#1805]: autoreplace did not update vehicle index for timetable window
glx
parents: 9110
diff changeset
   723
		if (w != NULL) {
10371
f4ebcb863ad6 (svn r12912) -Codechange: overloaded ChangeVehicleViewWindow() so each argument can be either a Vehicle pointer or a VehicleID
bjarni
parents: 10257
diff changeset
   724
			w->window_number = to_index;
10434
d6accd017341 (svn r12976) -Codechange: use w->SetDirty() instead of SetWindowDirty(w) when it's certain that w != NULL.
rubidium
parents: 10433
diff changeset
   725
			w->SetDirty();
9134
618bee700fe7 (svn r12261) -Fix [FS#1805]: autoreplace did not update vehicle index for timetable window
glx
parents: 9110
diff changeset
   726
		}
2552
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   727
	}
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   728
}
4442
8d8d0c2df7cb (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
   729
5269
3f3eead5ace2 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
   730
enum VehicleListWindowWidgets {
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   731
	VLW_WIDGET_CLOSEBOX = 0,
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   732
	VLW_WIDGET_CAPTION,
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   733
	VLW_WIDGET_STICKY,
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   734
	VLW_WIDGET_SORT_ORDER,
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   735
	VLW_WIDGET_SORT_BY_PULLDOWN,
5274
8bb2b6d99ce7 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   736
	VLW_WIDGET_EMPTY_TOP_RIGHT,
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   737
	VLW_WIDGET_LIST,
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   738
	VLW_WIDGET_SCROLLBAR,
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   739
	VLW_WIDGET_OTHER_PLAYER_FILLER,
6097
f29c87f97d19 (svn r8420) -Codechange (r7418): Rename the 'New <vehtype>' button of the global vehicle lists to 'Available <vehtype>' as it is a view-only list, not one from which you can purchase (rolling) stock.
Darkvater
parents: 6060
diff changeset
   740
	VLW_WIDGET_AVAILABLE_VEHICLES,
5274
8bb2b6d99ce7 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   741
	VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN,
4673
a2cdac5529f7 (svn r6570) -Feature: added "start all" and "stop all" buttons to the vehicle lists
bjarni
parents: 4669
diff changeset
   742
	VLW_WIDGET_STOP_ALL,
a2cdac5529f7 (svn r6570) -Feature: added "start all" and "stop all" buttons to the vehicle lists
bjarni
parents: 4669
diff changeset
   743
	VLW_WIDGET_START_ALL,
5274
8bb2b6d99ce7 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   744
	VLW_WIDGET_EMPTY_BOTTOM_RIGHT,
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   745
	VLW_WIDGET_RESIZE,
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   746
};
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   747
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   748
static const Widget _vehicle_list_widgets[] = {
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   749
	{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,             STR_018B_CLOSE_WINDOW},
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   750
	{    WWT_CAPTION,  RESIZE_RIGHT,    14,    11,   247,     0,    13, 0x0,                  STR_018C_WINDOW_TITLE_DRAG_THIS},
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   751
	{  WWT_STICKYBOX,     RESIZE_LR,    14,   248,   259,     0,    13, 0x0,                  STR_STICKY_BUTTON},
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   752
	{ WWT_PUSHTXTBTN,   RESIZE_NONE,    14,     0,    80,    14,    25, STR_SORT_BY,          STR_SORT_ORDER_TIP},
8842
69a6737d61d3 (svn r11912) -Codechange: use dropdown widget for autoreplace, station builder and (second?) vehicle list windows
peter1138
parents: 8829
diff changeset
   753
	{   WWT_DROPDOWN,   RESIZE_NONE,    14,    81,   247,    14,    25, 0x0,                  STR_SORT_CRITERIA_TIP},
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   754
	{      WWT_PANEL,  RESIZE_RIGHT,    14,   248,   259,    14,    25, 0x0,                  STR_NULL},
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   755
	{     WWT_MATRIX,     RESIZE_RB,    14,     0,   247,    26,   169, 0x0,                  STR_NULL},
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   756
	{  WWT_SCROLLBAR,    RESIZE_LRB,    14,   248,   259,    26,   169, 0x0,                  STR_0190_SCROLL_BAR_SCROLLS_LIST},
5274
8bb2b6d99ce7 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   757
	/* Widget to be shown for other players hiding the following 6 widgets */
5282
527e021c3278 (svn r7431) -Fix (r7418): GUI glitch when viewing other player's vehicle lists: bottom panel continued behind resize button.
peter1138
parents: 5274
diff changeset
   758
	{      WWT_PANEL,    RESIZE_RTB,    14,     0,   247,   170,   181, 0x0,                  STR_NULL},
5274
8bb2b6d99ce7 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   759
8bb2b6d99ce7 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   760
	{ WWT_PUSHTXTBTN,     RESIZE_TB,    14,     0,   105,   170,   181, 0x0,                  STR_AVAILABLE_ENGINES_TIP},
8842
69a6737d61d3 (svn r11912) -Codechange: use dropdown widget for autoreplace, station builder and (second?) vehicle list windows
peter1138
parents: 8829
diff changeset
   761
	{   WWT_DROPDOWN,     RESIZE_TB,    14,   106,   223,   170,   181, STR_MANAGE_LIST,      STR_MANAGE_LIST_TIP},
5274
8bb2b6d99ce7 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   762
8bb2b6d99ce7 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   763
	{ WWT_PUSHIMGBTN,     RESIZE_TB,    14,   224,   235,   170,   181, SPR_FLAG_VEH_STOPPED, STR_MASS_STOP_LIST_TIP},
8bb2b6d99ce7 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   764
	{ WWT_PUSHIMGBTN,     RESIZE_TB,    14,   236,   247,   170,   181, SPR_FLAG_VEH_RUNNING, STR_MASS_START_LIST_TIP},
8bb2b6d99ce7 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   765
	{      WWT_PANEL,    RESIZE_RTB,    14,   248,   247,   170,   181, 0x0,                  STR_NULL},
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   766
	{  WWT_RESIZEBOX,   RESIZE_LRTB,    14,   248,   259,   170,   181, 0x0,                  STR_RESIZE_BUTTON},
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   767
	{   WIDGETS_END},
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   768
};
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   769
7139
4ae3ab180d05 (svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents: 7134
diff changeset
   770
void DrawSmallOrderList(const Vehicle *v, int x, int y)
4734
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   771
{
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   772
	const Order *order;
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   773
	int sel, i = 0;
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   774
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   775
	sel = v->cur_order_index;
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   776
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   777
	FOR_VEHICLE_ORDERS(v, order) {
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8294
diff changeset
   778
		if (sel == 0) DrawString(x - 6, y, STR_SMALL_RIGHT_ARROW, TC_BLACK);
4734
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   779
		sel--;
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   780
9332
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9282
diff changeset
   781
		if (order->IsType(OT_GOTO_STATION)) {
9336
3f75a2c5e0d3 (svn r12588) -Codechange: do not access the destination of an order directly.
rubidium
parents: 9332
diff changeset
   782
			if (v->type == VEH_SHIP && GetStation(order->GetDestination())->IsBuoy()) continue;
4734
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   783
9336
3f75a2c5e0d3 (svn r12588) -Codechange: do not access the destination of an order directly.
rubidium
parents: 9332
diff changeset
   784
			SetDParam(0, order->GetDestination());
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8294
diff changeset
   785
			DrawString(x, y, STR_A036, TC_FROMSTRING);
4734
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   786
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   787
			y += 6;
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   788
			if (++i == 4) break;
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   789
		}
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   790
	}
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   791
}
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   792
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   793
/**
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   794
 * Window for the (old) vehicle listing.
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   795
 *
4449
7b1d5a6d15be (svn r6227) -Codechange: added window type flags to use with PlayerVehWndProc
bjarni
parents: 4442
diff changeset
   796
 * bitmask for w->window_number
7b1d5a6d15be (svn r6227) -Codechange: added window type flags to use with PlayerVehWndProc
bjarni
parents: 4442
diff changeset
   797
 * 0-7 PlayerID (owner)
7b1d5a6d15be (svn r6227) -Codechange: added window type flags to use with PlayerVehWndProc
bjarni
parents: 4442
diff changeset
   798
 * 8-10 window type (use flags in vehicle_gui.h)
7b1d5a6d15be (svn r6227) -Codechange: added window type flags to use with PlayerVehWndProc
bjarni
parents: 4442
diff changeset
   799
 * 11-15 vehicle type (using VEH_, but can be compressed to fewer bytes if needed)
7b1d5a6d15be (svn r6227) -Codechange: added window type flags to use with PlayerVehWndProc
bjarni
parents: 4442
diff changeset
   800
 * 16-31 StationID or OrderID depending on window type (bit 8-10)
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   801
 */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   802
struct VehicleListWindow : public Window, public VehicleListBase {
4673
a2cdac5529f7 (svn r6570) -Feature: added "start all" and "stop all" buttons to the vehicle lists
bjarni
parents: 4669
diff changeset
   803
10525
da5bc725cda4 (svn r13069) -Codechange: it is no longer needed to pass a void *data pointer with the WE_CREATE message because nothing uses it anymore.
rubidium
parents: 10504
diff changeset
   804
	VehicleListWindow(const WindowDesc *desc, WindowNumber window_number) : Window(desc, window_number)
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   805
	{
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   806
		uint16 window_type = this->window_number & VLW_MASK;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   807
		PlayerID player = (PlayerID)GB(this->window_number, 0, 8);
5274
8bb2b6d99ce7 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   808
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   809
		this->vehicle_type = (VehicleType)GB(this->window_number, 11, 5);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   810
		this->caption_color = player;
5274
8bb2b6d99ce7 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   811
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   812
		/* Hide the widgets that we will not use in this window
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   813
		* Some windows contains actions only fit for the owner */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   814
		if (player == _local_player) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   815
			this->HideWidget(VLW_WIDGET_OTHER_PLAYER_FILLER);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   816
			this->SetWidgetDisabledState(VLW_WIDGET_AVAILABLE_VEHICLES, window_type != VLW_STANDARD);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   817
		} else {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   818
			this->SetWidgetsHiddenState(true,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   819
				VLW_WIDGET_AVAILABLE_VEHICLES,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   820
				VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   821
				VLW_WIDGET_STOP_ALL,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   822
				VLW_WIDGET_START_ALL,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   823
				VLW_WIDGET_EMPTY_BOTTOM_RIGHT,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   824
				WIDGET_LIST_END);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   825
		}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   826
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   827
		/* Set up the window widgets */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   828
		switch (this->vehicle_type) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   829
			case VEH_TRAIN:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   830
				this->widget[VLW_WIDGET_LIST].tooltips          = STR_883D_TRAINS_CLICK_ON_TRAIN_FOR;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   831
				this->widget[VLW_WIDGET_AVAILABLE_VEHICLES].data = STR_AVAILABLE_TRAINS;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   832
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   833
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   834
			case VEH_ROAD:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   835
				this->widget[VLW_WIDGET_LIST].tooltips          = STR_901A_ROAD_VEHICLES_CLICK_ON;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   836
				this->widget[VLW_WIDGET_AVAILABLE_VEHICLES].data = STR_AVAILABLE_ROAD_VEHICLES;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   837
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   838
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   839
			case VEH_SHIP:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   840
				this->widget[VLW_WIDGET_LIST].tooltips          = STR_9823_SHIPS_CLICK_ON_SHIP_FOR;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   841
				this->widget[VLW_WIDGET_AVAILABLE_VEHICLES].data = STR_AVAILABLE_SHIPS;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   842
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   843
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   844
			case VEH_AIRCRAFT:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   845
				this->widget[VLW_WIDGET_LIST].tooltips          = STR_A01F_AIRCRAFT_CLICK_ON_AIRCRAFT;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   846
				this->widget[VLW_WIDGET_AVAILABLE_VEHICLES].data = STR_AVAILABLE_AIRCRAFT;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   847
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   848
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   849
			default: NOT_REACHED();
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   850
		}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   851
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   852
		switch (window_type) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   853
			case VLW_SHARED_ORDERS:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   854
				this->widget[VLW_WIDGET_CAPTION].data  = STR_VEH_WITH_SHARED_ORDERS_LIST;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   855
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   856
			case VLW_STANDARD: /* Company Name - standard widget setup */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   857
				switch (this->vehicle_type) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   858
					case VEH_TRAIN:    this->widget[VLW_WIDGET_CAPTION].data = STR_881B_TRAINS;        break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   859
					case VEH_ROAD:     this->widget[VLW_WIDGET_CAPTION].data = STR_9001_ROAD_VEHICLES; break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   860
					case VEH_SHIP:     this->widget[VLW_WIDGET_CAPTION].data = STR_9805_SHIPS;         break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   861
					case VEH_AIRCRAFT: this->widget[VLW_WIDGET_CAPTION].data = STR_A009_AIRCRAFT;      break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   862
					default: NOT_REACHED(); break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   863
				}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   864
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   865
			case VLW_STATION_LIST: /* Station Name */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   866
				switch (this->vehicle_type) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   867
					case VEH_TRAIN:    this->widget[VLW_WIDGET_CAPTION].data = STR_SCHEDULED_TRAINS;        break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   868
					case VEH_ROAD:     this->widget[VLW_WIDGET_CAPTION].data = STR_SCHEDULED_ROAD_VEHICLES; break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   869
					case VEH_SHIP:     this->widget[VLW_WIDGET_CAPTION].data = STR_SCHEDULED_SHIPS;         break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   870
					case VEH_AIRCRAFT: this->widget[VLW_WIDGET_CAPTION].data = STR_SCHEDULED_AIRCRAFT;      break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   871
					default: NOT_REACHED(); break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   872
				}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   873
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   874
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   875
			case VLW_DEPOT_LIST:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   876
				switch (this->vehicle_type) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   877
					case VEH_TRAIN:    this->widget[VLW_WIDGET_CAPTION].data = STR_VEHICLE_LIST_TRAIN_DEPOT;    break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   878
					case VEH_ROAD:     this->widget[VLW_WIDGET_CAPTION].data = STR_VEHICLE_LIST_ROADVEH_DEPOT;  break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   879
					case VEH_SHIP:     this->widget[VLW_WIDGET_CAPTION].data = STR_VEHICLE_LIST_SHIP_DEPOT;     break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   880
					case VEH_AIRCRAFT: this->widget[VLW_WIDGET_CAPTION].data = STR_VEHICLE_LIST_AIRCRAFT_DEPOT; break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   881
					default: NOT_REACHED(); break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   882
				}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   883
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   884
			default: NOT_REACHED(); break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   885
		}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   886
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   887
		switch (this->vehicle_type) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   888
			case VEH_TRAIN:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   889
				this->resize.step_width = 1;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   890
				/* Fallthrough */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   891
			case VEH_ROAD:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   892
				this->vscroll.cap = 7;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   893
				this->resize.step_height = PLY_WND_PRC__SIZE_OF_ROW_SMALL;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   894
				this->resize.height = 220 - (PLY_WND_PRC__SIZE_OF_ROW_SMALL * 3); // Minimum of 4 vehicles
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   895
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   896
			case VEH_SHIP:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   897
			case VEH_AIRCRAFT:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   898
				this->vscroll.cap = 4;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   899
				this->resize.step_height = PLY_WND_PRC__SIZE_OF_ROW_BIG;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   900
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   901
			default: NOT_REACHED();
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   902
		}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   903
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   904
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   905
		this->widget[VLW_WIDGET_LIST].data = (this->vscroll.cap << 8) + 1;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   906
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   907
		/* Set up sorting. Make the window-specific _sorting variable
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   908
			* point to the correct global _sorting struct so we are freed
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   909
			* from having conditionals during window operation */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   910
		switch (this->vehicle_type) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   911
			case VEH_TRAIN:    this->sorting = &_sorting.train; break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   912
			case VEH_ROAD:     this->sorting = &_sorting.roadveh; break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   913
			case VEH_SHIP:     this->sorting = &_sorting.ship; break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   914
			case VEH_AIRCRAFT: this->sorting = &_sorting.aircraft; break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   915
			default: NOT_REACHED(); break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   916
		}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   917
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   918
		this->vehicles.flags = VL_REBUILD | (this->sorting->order ? VL_DESC : VL_NONE);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   919
		this->vehicles.sort_type = this->sorting->criteria;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   920
		this->vehicles.resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS; // Set up resort timer
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   921
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   922
		this->FindWindowPlacementAndResize(desc);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   923
	}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   924
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   925
	~VehicleListWindow()
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   926
	{
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   927
	}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   928
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   929
	virtual void OnPaint()
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   930
	{
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   931
		int x = 2;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   932
		int y = PLY_WND_PRC__OFFSET_TOP_WIDGET;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   933
		int max;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   934
		int i;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   935
		const PlayerID owner = (PlayerID)this->caption_color;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   936
		const uint16 window_type = this->window_number & VLW_MASK;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   937
		const uint16 index = GB(this->window_number, 16, 16);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   938
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   939
		BuildVehicleList(this, owner, index, window_type);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   940
		SortVehicleList(this);
10716
2406d1520245 (svn r13266) -Codechange: Use SmallVector in GUIList
peter1138
parents: 10703
diff changeset
   941
		SetVScrollCount(this, this->vehicles.Length());
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   942
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   943
		/* draw the widgets */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   944
		switch (window_type) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   945
			case VLW_SHARED_ORDERS: /* Shared Orders */
10716
2406d1520245 (svn r13266) -Codechange: Use SmallVector in GUIList
peter1138
parents: 10703
diff changeset
   946
				if (this->vehicles.Length() == 0) {
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   947
					/* We can't open this window without vehicles using this order
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   948
					* and we should close the window when deleting the order      */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   949
					NOT_REACHED();
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   950
				}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   951
				SetDParam(0, this->vscroll.count);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   952
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   953
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   954
			case VLW_STANDARD: /* Company Name */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   955
				SetDParam(0, owner);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   956
				SetDParam(1, this->vscroll.count);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   957
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   958
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   959
			case VLW_STATION_LIST: /* Station Name */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   960
				SetDParam(0, index);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   961
				SetDParam(1, this->vscroll.count);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   962
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   963
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   964
			case VLW_DEPOT_LIST:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   965
				switch (this->vehicle_type) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   966
					case VEH_TRAIN:    SetDParam(0, STR_8800_TRAIN_DEPOT);        break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   967
					case VEH_ROAD:     SetDParam(0, STR_9003_ROAD_VEHICLE_DEPOT); break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   968
					case VEH_SHIP:     SetDParam(0, STR_9803_SHIP_DEPOT);         break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   969
					case VEH_AIRCRAFT: SetDParam(0, STR_A002_AIRCRAFT_HANGAR);    break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   970
					default: NOT_REACHED(); break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   971
				}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   972
				if (this->vehicle_type == VEH_AIRCRAFT) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   973
					SetDParam(1, index); // Airport name
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   974
				} else {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   975
					SetDParam(1, GetDepot(index)->town_index);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   976
				}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   977
				SetDParam(2, this->vscroll.count);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   978
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   979
			default: NOT_REACHED(); break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   980
		}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   981
10716
2406d1520245 (svn r13266) -Codechange: Use SmallVector in GUIList
peter1138
parents: 10703
diff changeset
   982
		this->SetWidgetsDisabledState(this->vehicles.Length() == 0,
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   983
			VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   984
			VLW_WIDGET_STOP_ALL,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   985
			VLW_WIDGET_START_ALL,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   986
			WIDGET_LIST_END);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   987
10595
7957c71b0dfe (svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium
parents: 10584
diff changeset
   988
		this->DrawWidgets();
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   989
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   990
		/* draw sorting criteria string */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   991
		DrawString(85, 15, _vehicle_sort_listing[this->vehicles.sort_type], TC_BLACK);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   992
		/* draw arrow pointing up/down for ascending/descending sorting */
10595
7957c71b0dfe (svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium
parents: 10584
diff changeset
   993
		this->DrawSortButtonState(VLW_WIDGET_SORT_ORDER, this->vehicles.flags & VL_DESC ? SBS_DOWN : SBS_UP);
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   994
10716
2406d1520245 (svn r13266) -Codechange: Use SmallVector in GUIList
peter1138
parents: 10703
diff changeset
   995
		max = min(this->vscroll.pos + this->vscroll.cap, this->vehicles.Length());
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   996
		for (i = this->vscroll.pos; i < max; ++i) {
10716
2406d1520245 (svn r13266) -Codechange: Use SmallVector in GUIList
peter1138
parents: 10703
diff changeset
   997
			const Vehicle *v = this->vehicles[i];
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   998
			StringID str;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   999
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1000
			SetDParam(0, v->GetDisplayProfitThisYear());
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1001
			SetDParam(1, v->GetDisplayProfitLastYear());
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1002
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1003
			DrawVehicleImage(v, x + 19, y + 6, INVALID_VEHICLE, this->widget[VLW_WIDGET_LIST].right - this->widget[VLW_WIDGET_LIST].left - 20, 0);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1004
			DrawString(x + 19, y + this->resize.step_height - 8, STR_0198_PROFIT_THIS_YEAR_LAST_YEAR, TC_FROMSTRING);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1005
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1006
			if (v->name != NULL) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1007
				/* The vehicle got a name so we will print it */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1008
				SetDParam(0, v->index);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1009
				DrawString(x + 19, y, STR_01AB, TC_FROMSTRING);
4442
8d8d0c2df7cb (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1010
			}
4545
ac6c6a32b18f (svn r6377) -Codechange: Set up the widgets in the WE_CREATE instead of on every WE_PAINT
Darkvater
parents: 4542
diff changeset
  1011
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1012
			if (this->resize.step_height == PLY_WND_PRC__SIZE_OF_ROW_BIG) DrawSmallOrderList(v, x + 138, y);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1013
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1014
			if (v->IsInDepot()) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1015
				str = STR_021F;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1016
			} else {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1017
				str = (v->age > v->max_age - 366) ? STR_00E3 : STR_00E2;
4442
8d8d0c2df7cb (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1018
			}
8d8d0c2df7cb (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1019
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1020
			SetDParam(0, v->unitnumber);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1021
			DrawString(x, y + 2, str, TC_FROMSTRING);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1022
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1023
			DrawVehicleProfitButton(v, x, y + 13);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1024
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1025
			y += this->resize.step_height;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1026
		}
4442
8d8d0c2df7cb (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1027
	}
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1028
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1029
	virtual void OnClick(Point pt, int widget)
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1030
	{
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1031
		switch (widget) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1032
			case VLW_WIDGET_SORT_ORDER: /* Flip sorting method ascending/descending */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1033
				this->vehicles.flags ^= VL_DESC;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1034
				this->vehicles.flags |= VL_RESORT;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1035
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1036
				this->sorting->order = !!(this->vehicles.flags & VL_DESC);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1037
				this->SetDirty();
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1038
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1039
			case VLW_WIDGET_SORT_BY_PULLDOWN:/* Select sorting criteria dropdown menu */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1040
				ShowDropDownMenu(this, _vehicle_sort_listing, this->vehicles.sort_type, VLW_WIDGET_SORT_BY_PULLDOWN, 0, (this->vehicle_type == VEH_TRAIN || this->vehicle_type == VEH_ROAD) ? 0 : (1 << 10));
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1041
				return;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1042
			case VLW_WIDGET_LIST: { /* Matrix to show vehicles */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1043
				uint32 id_v = (pt.y - PLY_WND_PRC__OFFSET_TOP_WIDGET) / this->resize.step_height;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1044
				const Vehicle *v;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1045
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1046
				if (id_v >= this->vscroll.cap) return; // click out of bounds
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1047
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1048
				id_v += this->vscroll.pos;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1049
10716
2406d1520245 (svn r13266) -Codechange: Use SmallVector in GUIList
peter1138
parents: 10703
diff changeset
  1050
				if (id_v >= this->vehicles.Length()) return; // click out of list bound
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1051
10716
2406d1520245 (svn r13266) -Codechange: Use SmallVector in GUIList
peter1138
parents: 10703
diff changeset
  1052
				v = this->vehicles[id_v];
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1053
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1054
				ShowVehicleViewWindow(v);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1055
			} break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1056
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1057
			case VLW_WIDGET_AVAILABLE_VEHICLES:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1058
				ShowBuildVehicleWindow(0, this->vehicle_type);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1059
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1060
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1061
			case VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN: {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1062
				static StringID action_str[] = {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1063
					STR_REPLACE_VEHICLES,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1064
					STR_SEND_FOR_SERVICING,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1065
					STR_NULL,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1066
					INVALID_STRING_ID
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1067
				};
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1068
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1069
				static const StringID depot_name[] = {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1070
					STR_SEND_TRAIN_TO_DEPOT,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1071
					STR_SEND_ROAD_VEHICLE_TO_DEPOT,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1072
					STR_SEND_SHIP_TO_DEPOT,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1073
					STR_SEND_AIRCRAFT_TO_HANGAR
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1074
				};
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1075
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1076
				/* XXX - Substite string since the dropdown cannot handle dynamic strings */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1077
				action_str[2] = depot_name[this->vehicle_type];
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1078
				ShowDropDownMenu(this, action_str, 0, VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN, 0, (this->window_number & VLW_MASK) == VLW_STANDARD ? 0 : 1);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1079
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1080
			}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1081
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1082
			case VLW_WIDGET_STOP_ALL:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1083
			case VLW_WIDGET_START_ALL:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1084
				DoCommandP(0, GB(this->window_number, 16, 16), (this->window_number & VLW_MASK) | (1 << 6) | (widget == VLW_WIDGET_START_ALL ? (1 << 5) : 0) | this->vehicle_type, NULL, CMD_MASS_START_STOP);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1085
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1086
		}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1087
	}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1088
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1089
	virtual void OnDropdownSelect(int widget, int index)
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1090
	{
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1091
		switch (widget) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1092
			case VLW_WIDGET_SORT_BY_PULLDOWN:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1093
				if (this->vehicles.sort_type != index) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1094
					/* value has changed -> resort */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1095
					this->vehicles.flags |= VL_RESORT;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1096
					this->vehicles.sort_type = index;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1097
					this->sorting->criteria = this->vehicles.sort_type;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1098
				}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1099
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1100
			case VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN:
10716
2406d1520245 (svn r13266) -Codechange: Use SmallVector in GUIList
peter1138
parents: 10703
diff changeset
  1101
				assert(this->vehicles.Length() != 0);
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1102
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1103
				switch (index) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1104
					case 0: /* Replace window */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1105
						ShowReplaceGroupVehicleWindow(DEFAULT_GROUP, this->vehicle_type);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1106
						break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1107
					case 1: /* Send for servicing */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1108
						DoCommandP(0, GB(this->window_number, 16, 16) /* StationID or OrderID (depending on VLW) */,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1109
							(this->window_number & VLW_MASK) | DEPOT_MASS_SEND | DEPOT_SERVICE,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1110
							NULL,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1111
							GetCmdSendToDepot(this->vehicle_type));
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1112
						break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1113
					case 2: /* Send to Depots */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1114
						DoCommandP(0, GB(this->window_number, 16, 16) /* StationID or OrderID (depending on VLW) */,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1115
							(this->window_number & VLW_MASK) | DEPOT_MASS_SEND,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1116
							NULL,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1117
							GetCmdSendToDepot(this->vehicle_type));
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1118
						break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1119
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1120
					default: NOT_REACHED();
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1121
				}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1122
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1123
			default: NOT_REACHED();
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1124
		}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1125
		this->SetDirty();
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1126
	}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1127
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1128
	virtual void OnTick()
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1129
	{
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1130
		if (_pause_game != 0) return;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1131
		if (--this->vehicles.resort_timer == 0) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1132
			StationID station = ((this->window_number & VLW_MASK) == VLW_STATION_LIST) ? GB(this->window_number, 16, 16) : INVALID_STATION;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1133
			PlayerID owner = (PlayerID)this->caption_color;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1134
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1135
			DEBUG(misc, 3, "Periodic resort %d list player %d at station %d", this->vehicle_type, owner, station);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1136
			this->vehicles.resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1137
			this->vehicles.flags |= VL_RESORT;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1138
			this->SetDirty();
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1139
		}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1140
	}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1141
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1142
	virtual void OnResize(Point new_size, Point delta)
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1143
	{
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1144
		this->vscroll.cap += delta.y / (int)this->resize.step_height;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1145
		this->widget[VLW_WIDGET_LIST].data = (this->vscroll.cap << 8) + 1;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1146
	}
10621
3edd349d9c14 (svn r13165) -Codechange: replace some RebuildXXXList/ResortXXXList+InvalidateWindowXXX with InvalidateWindowXXXData.
rubidium
parents: 10596
diff changeset
  1147
3edd349d9c14 (svn r13165) -Codechange: replace some RebuildXXXList/ResortXXXList+InvalidateWindowXXX with InvalidateWindowXXXData.
rubidium
parents: 10596
diff changeset
  1148
	virtual void OnInvalidateData(int data)
3edd349d9c14 (svn r13165) -Codechange: replace some RebuildXXXList/ResortXXXList+InvalidateWindowXXX with InvalidateWindowXXXData.
rubidium
parents: 10596
diff changeset
  1149
	{
3edd349d9c14 (svn r13165) -Codechange: replace some RebuildXXXList/ResortXXXList+InvalidateWindowXXX with InvalidateWindowXXXData.
rubidium
parents: 10596
diff changeset
  1150
		this->vehicles.flags |= (data == 0 ? VL_REBUILD : VL_RESORT);
3edd349d9c14 (svn r13165) -Codechange: replace some RebuildXXXList/ResortXXXList+InvalidateWindowXXX with InvalidateWindowXXXData.
rubidium
parents: 10596
diff changeset
  1151
	}
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1152
};
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1153
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1154
static const WindowDesc _player_vehicle_list_train_desc = {
7837
65d7362153a6 (svn r10704) -Codechange: provide an infrastructure to have resizable windows that are smaller than the default window size.
rubidium
parents: 7568
diff changeset
  1155
	WDP_AUTO, WDP_AUTO, 260, 182, 260, 182,
6144
5a0ffbf27ced (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 6098
diff changeset
  1156
	WC_TRAINS_LIST, WC_NONE,
5070
0bbf5264bfb7 (svn r7128) -Codechange: Replace magic numbers by magic enums (windowdesc positioning WDP_AUTO = -1)
Darkvater
parents: 5005
diff changeset
  1157
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
0bbf5264bfb7 (svn r7128) -Codechange: Replace magic numbers by magic enums (windowdesc positioning WDP_AUTO = -1)
Darkvater
parents: 5005
diff changeset
  1158
	_vehicle_list_widgets,
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1159
};
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1160
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1161
static const WindowDesc _player_vehicle_list_road_veh_desc = {
7837
65d7362153a6 (svn r10704) -Codechange: provide an infrastructure to have resizable windows that are smaller than the default window size.
rubidium
parents: 7568
diff changeset
  1162
	WDP_AUTO, WDP_AUTO, 260, 182, 260, 182,
6144
5a0ffbf27ced (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 6098
diff changeset
  1163
	WC_ROADVEH_LIST, WC_NONE,
4726
3d907a5bae52 (svn r6638) -Fix r5652: restored each vehicle list type to their type classes, so it's possible to redraw all lists of one vehicle type again (instead of all types)
bjarni
parents: 4723
diff changeset
  1164
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
3d907a5bae52 (svn r6638) -Fix r5652: restored each vehicle list type to their type classes, so it's possible to redraw all lists of one vehicle type again (instead of all types)
bjarni
parents: 4723
diff changeset
  1165
	_vehicle_list_widgets,
3d907a5bae52 (svn r6638) -Fix r5652: restored each vehicle list type to their type classes, so it's possible to redraw all lists of one vehicle type again (instead of all types)
bjarni
parents: 4723
diff changeset
  1166
};
3d907a5bae52 (svn r6638) -Fix r5652: restored each vehicle list type to their type classes, so it's possible to redraw all lists of one vehicle type again (instead of all types)
bjarni
parents: 4723
diff changeset
  1167
3d907a5bae52 (svn r6638) -Fix r5652: restored each vehicle list type to their type classes, so it's possible to redraw all lists of one vehicle type again (instead of all types)
bjarni
parents: 4723
diff changeset
  1168
static const WindowDesc _player_vehicle_list_ship_desc = {
7837
65d7362153a6 (svn r10704) -Codechange: provide an infrastructure to have resizable windows that are smaller than the default window size.
rubidium
parents: 7568
diff changeset
  1169
	WDP_AUTO, WDP_AUTO, 260, 182, 260, 182,
6144
5a0ffbf27ced (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 6098
diff changeset
  1170
	WC_SHIPS_LIST, WC_NONE,
4726
3d907a5bae52 (svn r6638) -Fix r5652: restored each vehicle list type to their type classes, so it's possible to redraw all lists of one vehicle type again (instead of all types)
bjarni
parents: 4723
diff changeset
  1171
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
3d907a5bae52 (svn r6638) -Fix r5652: restored each vehicle list type to their type classes, so it's possible to redraw all lists of one vehicle type again (instead of all types)
bjarni
parents: 4723
diff changeset
  1172
	_vehicle_list_widgets,
3d907a5bae52 (svn r6638) -Fix r5652: restored each vehicle list type to their type classes, so it's possible to redraw all lists of one vehicle type again (instead of all types)
bjarni
parents: 4723
diff changeset
  1173
};
3d907a5bae52 (svn r6638) -Fix r5652: restored each vehicle list type to their type classes, so it's possible to redraw all lists of one vehicle type again (instead of all types)
bjarni
parents: 4723
diff changeset
  1174
3d907a5bae52 (svn r6638) -Fix r5652: restored each vehicle list type to their type classes, so it's possible to redraw all lists of one vehicle type again (instead of all types)
bjarni
parents: 4723
diff changeset
  1175
static const WindowDesc _player_vehicle_list_aircraft_desc = {
7837
65d7362153a6 (svn r10704) -Codechange: provide an infrastructure to have resizable windows that are smaller than the default window size.
rubidium
parents: 7568
diff changeset
  1176
	WDP_AUTO, WDP_AUTO, 260, 182, 260, 182,
6144
5a0ffbf27ced (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 6098
diff changeset
  1177
	WC_AIRCRAFT_LIST, WC_NONE,
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1178
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1179
	_vehicle_list_widgets,
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1180
};
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1181
7134
c5a90dd41166 (svn r9869) -Codechange: replace some bytes with VehicleType, i.e. more type strictness.
rubidium
parents: 7117
diff changeset
  1182
static void ShowVehicleListWindowLocal(PlayerID player, uint16 VLW_flag, VehicleType vehicle_type, uint16 unique_number)
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1183
{
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1184
	VehicleListWindow *w;
5005
21e84e53c732 (svn r7022) -Fix [FS#292]: Properly guard against viewing company-sensitive information from
Darkvater
parents: 4999
diff changeset
  1185
	WindowNumber num;
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1186
5005
21e84e53c732 (svn r7022) -Fix [FS#292]: Properly guard against viewing company-sensitive information from
Darkvater
parents: 4999
diff changeset
  1187
	if (!IsValidPlayer(player)) return;
21e84e53c732 (svn r7022) -Fix [FS#292]: Properly guard against viewing company-sensitive information from
Darkvater
parents: 4999
diff changeset
  1188
5996
d4b66530ded4 (svn r8293) -Codechange: overloaded ShowVehicleListWindow() so it can open all types of vehicle lists (depending on arguments)
bjarni
parents: 5919
diff changeset
  1189
	num = (unique_number << 16) | (vehicle_type << 11) | VLW_flag | player;
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1190
5269
3f3eead5ace2 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1191
	/* The vehicle list windows have been unified. Just some strings need
3f3eead5ace2 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1192
	 * to be changed which happens in the WE_CREATE event and resizing
3f3eead5ace2 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1193
	 * some of the windows to the correct size */
4726
3d907a5bae52 (svn r6638) -Fix r5652: restored each vehicle list type to their type classes, so it's possible to redraw all lists of one vehicle type again (instead of all types)
bjarni
parents: 4723
diff changeset
  1194
	switch (vehicle_type) {
6003
4a5ca50a2c97 (svn r8303) -Codechange (r8293): default is moved to the front of the switch in ShowVehicleListWindowLocal()
bjarni
parents: 5998
diff changeset
  1195
		default: NOT_REACHED();
6585
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6574
diff changeset
  1196
		case VEH_TRAIN:
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1197
			w = AllocateWindowDescFront<VehicleListWindow>(&_player_vehicle_list_train_desc, num);
5269
3f3eead5ace2 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1198
			if (w != NULL) ResizeWindow(w, 65, 38);
3f3eead5ace2 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1199
			break;
6585
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6574
diff changeset
  1200
		case VEH_ROAD:
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1201
			w = AllocateWindowDescFront<VehicleListWindow>(&_player_vehicle_list_road_veh_desc, num);
5269
3f3eead5ace2 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1202
			if (w != NULL) ResizeWindow(w, 0, 38);
3f3eead5ace2 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1203
			break;
6585
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6574
diff changeset
  1204
		case VEH_SHIP:
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1205
			w = AllocateWindowDescFront<VehicleListWindow>(&_player_vehicle_list_ship_desc, num);
5269
3f3eead5ace2 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1206
			break;
6585
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6574
diff changeset
  1207
		case VEH_AIRCRAFT:
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1208
			w = AllocateWindowDescFront<VehicleListWindow>(&_player_vehicle_list_aircraft_desc, num);
5269
3f3eead5ace2 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1209
			break;
3f3eead5ace2 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1210
	}
3f3eead5ace2 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1211
3f3eead5ace2 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1212
	if (w != NULL) {
3f3eead5ace2 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1213
		/* Set the minimum window size to the current window size */
3f3eead5ace2 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1214
		w->resize.width = w->width;
3f3eead5ace2 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1215
		w->resize.height = w->height;
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1216
	}
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1217
}
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1218
7134
c5a90dd41166 (svn r9869) -Codechange: replace some bytes with VehicleType, i.e. more type strictness.
rubidium
parents: 7117
diff changeset
  1219
void ShowVehicleListWindow(PlayerID player, VehicleType vehicle_type)
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1220
{
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10757
diff changeset
  1221
	/* If _settings_client.gui.advanced_vehicle_list > 1, display the Advanced list
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10757
diff changeset
  1222
	 * if _settings_client.gui.advanced_vehicle_list == 1, display Advanced list only for local player
8043
be5076cc40ef (svn r11067) -Codechange: also make it possible to use the advanced vehicle list for other players. Patch by SmatZ.
rubidium
parents: 8036
diff changeset
  1223
	 * if _ctrl_pressed, do the opposite action (Advanced list x Normal list)
be5076cc40ef (svn r11067) -Codechange: also make it possible to use the advanced vehicle list for other players. Patch by SmatZ.
rubidium
parents: 8036
diff changeset
  1224
	 */
be5076cc40ef (svn r11067) -Codechange: also make it possible to use the advanced vehicle list for other players. Patch by SmatZ.
rubidium
parents: 8036
diff changeset
  1225
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10757
diff changeset
  1226
	if ((_settings_client.gui.advanced_vehicle_list > (uint)(player != _local_player)) != _ctrl_pressed) {
7139
4ae3ab180d05 (svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents: 7134
diff changeset
  1227
		ShowPlayerGroup(player, vehicle_type);
4ae3ab180d05 (svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents: 7134
diff changeset
  1228
	} else {
4ae3ab180d05 (svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents: 7134
diff changeset
  1229
		ShowVehicleListWindowLocal(player, VLW_STANDARD, vehicle_type, 0);
4ae3ab180d05 (svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents: 7134
diff changeset
  1230
	}
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1231
}
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1232
5996
d4b66530ded4 (svn r8293) -Codechange: overloaded ShowVehicleListWindow() so it can open all types of vehicle lists (depending on arguments)
bjarni
parents: 5919
diff changeset
  1233
void ShowVehicleListWindow(const Vehicle *v)
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1234
{
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1235
	if (v->orders == NULL) return; // no shared list to show
5996
d4b66530ded4 (svn r8293) -Codechange: overloaded ShowVehicleListWindow() so it can open all types of vehicle lists (depending on arguments)
bjarni
parents: 5919
diff changeset
  1236
	ShowVehicleListWindowLocal(v->owner, VLW_SHARED_ORDERS, v->type, v->orders->index);
4669
43b14210d7bd (svn r6565) - Fix (r6562): Missing newline at EOF caused a compiler warning
peter1138
parents: 4668
diff changeset
  1237
}
4681
7d7a89b32dd0 (svn r6586) -Feature: [depot window] added a vehicle list window with all vehicles having a certain depot in their orders
bjarni
parents: 4678
diff changeset
  1238
7134
c5a90dd41166 (svn r9869) -Codechange: replace some bytes with VehicleType, i.e. more type strictness.
rubidium
parents: 7117
diff changeset
  1239
void ShowVehicleListWindow(PlayerID player, VehicleType vehicle_type, StationID station)
5996
d4b66530ded4 (svn r8293) -Codechange: overloaded ShowVehicleListWindow() so it can open all types of vehicle lists (depending on arguments)
bjarni
parents: 5919
diff changeset
  1240
{
d4b66530ded4 (svn r8293) -Codechange: overloaded ShowVehicleListWindow() so it can open all types of vehicle lists (depending on arguments)
bjarni
parents: 5919
diff changeset
  1241
	ShowVehicleListWindowLocal(player, VLW_STATION_LIST, vehicle_type, station);
d4b66530ded4 (svn r8293) -Codechange: overloaded ShowVehicleListWindow() so it can open all types of vehicle lists (depending on arguments)
bjarni
parents: 5919
diff changeset
  1242
}
d4b66530ded4 (svn r8293) -Codechange: overloaded ShowVehicleListWindow() so it can open all types of vehicle lists (depending on arguments)
bjarni
parents: 5919
diff changeset
  1243
7134
c5a90dd41166 (svn r9869) -Codechange: replace some bytes with VehicleType, i.e. more type strictness.
rubidium
parents: 7117
diff changeset
  1244
void ShowVehicleListWindow(PlayerID player, VehicleType vehicle_type, TileIndex depot_tile)
4681
7d7a89b32dd0 (svn r6586) -Feature: [depot window] added a vehicle list window with all vehicles having a certain depot in their orders
bjarni
parents: 4678
diff changeset
  1245
{
7d7a89b32dd0 (svn r6586) -Feature: [depot window] added a vehicle list window with all vehicles having a certain depot in their orders
bjarni
parents: 4678
diff changeset
  1246
	uint16 depot_airport_index;
7d7a89b32dd0 (svn r6586) -Feature: [depot window] added a vehicle list window with all vehicles having a certain depot in their orders
bjarni
parents: 4678
diff changeset
  1247
6585
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6574
diff changeset
  1248
	if (vehicle_type == VEH_AIRCRAFT) {
4681
7d7a89b32dd0 (svn r6586) -Feature: [depot window] added a vehicle list window with all vehicles having a certain depot in their orders
bjarni
parents: 4678
diff changeset
  1249
		depot_airport_index = GetStationIndex(depot_tile);
7d7a89b32dd0 (svn r6586) -Feature: [depot window] added a vehicle list window with all vehicles having a certain depot in their orders
bjarni
parents: 4678
diff changeset
  1250
	} else {
7d7a89b32dd0 (svn r6586) -Feature: [depot window] added a vehicle list window with all vehicles having a certain depot in their orders
bjarni
parents: 4678
diff changeset
  1251
		Depot *depot = GetDepotByTile(depot_tile);
7d7a89b32dd0 (svn r6586) -Feature: [depot window] added a vehicle list window with all vehicles having a certain depot in their orders
bjarni
parents: 4678
diff changeset
  1252
		if (depot == NULL) return; // no depot to show
7d7a89b32dd0 (svn r6586) -Feature: [depot window] added a vehicle list window with all vehicles having a certain depot in their orders
bjarni
parents: 4678
diff changeset
  1253
		depot_airport_index = depot->index;
7d7a89b32dd0 (svn r6586) -Feature: [depot window] added a vehicle list window with all vehicles having a certain depot in their orders
bjarni
parents: 4678
diff changeset
  1254
	}
5996
d4b66530ded4 (svn r8293) -Codechange: overloaded ShowVehicleListWindow() so it can open all types of vehicle lists (depending on arguments)
bjarni
parents: 5919
diff changeset
  1255
	ShowVehicleListWindowLocal(player, VLW_DEPOT_LIST, vehicle_type, depot_airport_index);
4681
7d7a89b32dd0 (svn r6586) -Feature: [depot window] added a vehicle list window with all vehicles having a certain depot in their orders
bjarni
parents: 4678
diff changeset
  1256
}
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1257
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1258
8026
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1259
/* Unified vehicle GUI - Vehicle Details Window */
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1260
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1261
/** Constants of vehicle details widget indices */
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1262
enum VehicleDetailsWindowWidgets {
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1263
	VLD_WIDGET_CLOSEBOX = 0,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1264
	VLD_WIDGET_CAPTION,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1265
	VLD_WIDGET_RENAME_VEHICLE,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1266
	VLD_WIDGET_TOP_DETAILS,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1267
	VLD_WIDGET_INCREASE_SERVICING_INTERVAL,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1268
	VLD_WIDGET_DECREASE_SERVICING_INTERVAL,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1269
	VLD_WIDGET_BOTTOM_RIGHT,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1270
	VLD_WIDGET_MIDDLE_DETAILS,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1271
	VLD_WIDGET_SCROLLBAR,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1272
	VLD_WIDGET_DETAILS_CARGO_CARRIED,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1273
	VLD_WIDGET_DETAILS_TRAIN_VEHICLES,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1274
	VLD_WIDGET_DETAILS_CAPACITY_OF_EACH,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1275
	VLD_WIDGET_DETAILS_TOTAL_CARGO,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1276
	VLD_WIDGET_RESIZE,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1277
};
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1278
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1279
/** Vehicle details widgets. */
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1280
static const Widget _vehicle_details_widgets[] = {
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1281
	{   WWT_CLOSEBOX,   RESIZE_NONE, 14,   0,  10,   0,  13, STR_00C5,             STR_018B_CLOSE_WINDOW},                  // VLD_WIDGET_CLOSEBOX
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1282
	{    WWT_CAPTION,  RESIZE_RIGHT, 14,  11, 364,   0,  13, 0x0,                  STR_018C_WINDOW_TITLE_DRAG_THIS},        // VLD_WIDGET_CAPTION
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1283
	{ WWT_PUSHTXTBTN,     RESIZE_LR, 14, 365, 404,   0,  13, STR_01AA_NAME,        STR_NULL /* filled in later */},         // VLD_WIDGET_RENAME_VEHICLE
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1284
	{      WWT_PANEL,  RESIZE_RIGHT, 14,   0, 404,  14,  55, 0x0,                  STR_NULL},                               // VLD_WIDGET_TOP_DETAILS
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1285
	{ WWT_PUSHTXTBTN,     RESIZE_TB, 14,   0,  10, 101, 106, STR_0188,             STR_884D_INCREASE_SERVICING_INTERVAL},   // VLD_WIDGET_INCREASE_SERVICING_INTERVAL
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1286
	{ WWT_PUSHTXTBTN,     RESIZE_TB, 14,   0,  10, 107, 112, STR_0189,             STR_884E_DECREASE_SERVICING_INTERVAL},   // VLD_WIDGET_DECREASE_SERVICING_INTERVAL
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1287
	{      WWT_PANEL,    RESIZE_RTB, 14,  11, 404, 101, 112, 0x0,                  STR_NULL},                               // VLD_WIDGET_BOTTOM_RIGHT
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1288
	{     WWT_MATRIX,     RESIZE_RB, 14,   0, 392,  56, 100, 0x701,                STR_NULL},                               // VLD_WIDGET_MIDDLE_DETAILS
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1289
	{  WWT_SCROLLBAR,    RESIZE_LRB, 14, 393, 404,  56, 100, 0x0,                  STR_0190_SCROLL_BAR_SCROLLS_LIST},       // VLD_WIDGET_SCROLLBAR
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1290
	{ WWT_PUSHTXTBTN,     RESIZE_TB, 14,   0,  95, 113, 124, STR_013C_CARGO,       STR_884F_SHOW_DETAILS_OF_CARGO_CARRIED}, // VLD_WIDGET_DETAILS_CARGO_CARRIED
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1291
	{ WWT_PUSHTXTBTN,     RESIZE_TB, 14,  96, 194, 113, 124, STR_013D_INFORMATION, STR_8850_SHOW_DETAILS_OF_TRAIN_VEHICLES},// VLD_WIDGET_DETAILS_TRAIN_VEHICLES
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1292
	{ WWT_PUSHTXTBTN,     RESIZE_TB, 14, 195, 293, 113, 124, STR_013E_CAPACITIES,  STR_8851_SHOW_CAPACITIES_OF_EACH},       // VLD_WIDGET_DETAILS_CAPACITY_OF_EACH
8920
04df97185061 (svn r11994) -Codechange: Remove numbers from string names where the strings aren't present in TTD, since they don't correspond to either TTD's TextIDs or OpenTTD's StringIDs.
maedhros
parents: 8846
diff changeset
  1293
	{ WWT_PUSHTXTBTN,    RESIZE_RTB, 14, 294, 392, 113, 124, STR_TOTAL_CARGO,      STR_SHOW_TOTAL_CARGO},                   // VLD_WIDGET_DETAILS_TOTAL_CARGO
8026
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1294
	{  WWT_RESIZEBOX,   RESIZE_LRTB, 14, 393, 404, 113, 124, 0x0,                  STR_RESIZE_BUTTON},                      // VLD_RESIZE
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1295
	{   WIDGETS_END},
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1296
};
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1297
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1298
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1299
/** Command indices for the _vehicle_command_translation_table. */
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1300
enum VehicleStringTranslation {
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1301
	VST_VEHICLE_AGE_RUNNING_COST_YR,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1302
	VST_VEHICLE_MAX_SPEED,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1303
	VST_VEHICLE_PROFIT_THIS_YEAR_LAST_YEAR,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1304
	VST_VEHICLE_RELIABILITY_BREAKDOWNS,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1305
};
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1306
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1307
/** Command codes for the shared buttons indexed by VehicleCommandTranslation and vehicle type. */
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1308
static const StringID _vehicle_translation_table[][4] = {
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1309
	{ // VST_VEHICLE_AGE_RUNNING_COST_YR
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1310
		STR_885D_AGE_RUNNING_COST_YR,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1311
		STR_900D_AGE_RUNNING_COST_YR,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1312
		STR_9812_AGE_RUNNING_COST_YR,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1313
		STR_A00D_AGE_RUNNING_COST_YR,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1314
	},
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1315
	{ // VST_VEHICLE_MAX_SPEED
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1316
		STR_NULL,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1317
		STR_900E_MAX_SPEED,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1318
		STR_9813_MAX_SPEED,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1319
		STR_A00E_MAX_SPEED,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1320
	},
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1321
	{ // VST_VEHICLE_PROFIT_THIS_YEAR_LAST_YEAR
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1322
		STR_885F_PROFIT_THIS_YEAR_LAST_YEAR,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1323
		STR_900F_PROFIT_THIS_YEAR_LAST_YEAR,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1324
		STR_9814_PROFIT_THIS_YEAR_LAST_YEAR,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1325
		STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1326
	},
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1327
	{ // VST_VEHICLE_RELIABILITY_BREAKDOWNS
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1328
		STR_8860_RELIABILITY_BREAKDOWNS,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1329
		STR_9010_RELIABILITY_BREAKDOWNS,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1330
		STR_9815_RELIABILITY_BREAKDOWNS,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1331
		STR_A010_RELIABILITY_BREAKDOWNS,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1332
	},
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1333
};
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1334
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1335
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1336
extern int GetTrainDetailsWndVScroll(VehicleID veh_id, byte det_tab);
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1337
extern void DrawTrainDetails(const Vehicle *v, int x, int y, int vscroll_pos, uint16 vscroll_cap, byte det_tab);
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1338
extern void DrawRoadVehDetails(const Vehicle *v, int x, int y);
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1339
extern void DrawShipDetails(const Vehicle *v, int x, int y);
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1340
extern void DrawAircraftDetails(const Vehicle *v, int x, int y);
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1341
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1342
struct VehicleDetailsWindow : Window {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1343
	int tab;
8026
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1344
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1345
	/** Initialize a newly created vehicle details window */
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1346
	VehicleDetailsWindow(const WindowDesc *desc, WindowNumber window_number) : Window(desc, window_number)
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1347
	{
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1348
		const Vehicle *v = GetVehicle(this->window_number);
8026
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1349
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1350
		switch (v->type) {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1351
			case VEH_TRAIN:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1352
				ResizeWindow(this, 0, 39);
8026
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1353
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1354
				this->vscroll.cap = 6;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1355
				this->height += 12;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1356
				this->resize.step_height = 14;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1357
				this->resize.height = this->height - 14 * 2; // Minimum of 4 wagons in the display
8026
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1358
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1359
				this->widget[VLD_WIDGET_RENAME_VEHICLE].tooltips = STR_8867_NAME_TRAIN;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1360
				this->widget[VLD_WIDGET_CAPTION].data = STR_8802_DETAILS;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1361
				break;
8026
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1362
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1363
			case VEH_ROAD: {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1364
				this->widget[VLD_WIDGET_CAPTION].data = STR_900C_DETAILS;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1365
				this->widget[VLD_WIDGET_RENAME_VEHICLE].tooltips = STR_902E_NAME_ROAD_VEHICLE;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1366
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1367
				if (!RoadVehHasArticPart(v)) break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1368
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1369
				/* Draw the text under the vehicle instead of next to it, minus the
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1370
				 * height already allocated for the cargo of the first vehicle. */
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1371
				uint height_extension = 15 - 11;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1372
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1373
				/* Add space for the cargo amount for each part. */
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1374
				for (const Vehicle *u = v; u != NULL; u = u->Next()) {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1375
					height_extension += 11;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1376
				}
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1377
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1378
				ResizeWindow(this, 0, height_extension);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1379
			} break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1380
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1381
			case VEH_SHIP:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1382
				this->widget[VLD_WIDGET_RENAME_VEHICLE].tooltips = STR_982F_NAME_SHIP;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1383
				this->widget[VLD_WIDGET_CAPTION].data = STR_9811_DETAILS;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1384
				break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1385
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1386
			case VEH_AIRCRAFT:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1387
				ResizeWindow(this, 0, 11);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1388
				this->widget[VLD_WIDGET_RENAME_VEHICLE].tooltips = STR_A032_NAME_AIRCRAFT;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1389
				this->widget[VLD_WIDGET_CAPTION].data = STR_A00C_DETAILS;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1390
				break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1391
			default: NOT_REACHED();
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1392
		}
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1393
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1394
		if (v->type != VEH_TRAIN) {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1395
			this->vscroll.cap = 1;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1396
			this->widget[VLD_WIDGET_MIDDLE_DETAILS].right += 12;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1397
		}
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1398
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1399
		this->widget[VLD_WIDGET_MIDDLE_DETAILS].data = (this->vscroll.cap << 8) + 1;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1400
		this->caption_color = v->owner;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1401
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1402
		this->tab = 0;
10681
3aa3de4d448b (svn r13225) -Fix (r13041): Missing calls to FindWindowPlacementAndResize() from lots
peter1138
parents: 10641
diff changeset
  1403
3aa3de4d448b (svn r13225) -Fix (r13041): Missing calls to FindWindowPlacementAndResize() from lots
peter1138
parents: 10641
diff changeset
  1404
		this->FindWindowPlacementAndResize(desc);
8026
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1405
	}
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1406
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1407
	/** Checks whether service interval is enabled for the vehicle. */
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1408
	static bool IsVehicleServiceIntervalEnabled(const VehicleType vehicle_type)
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1409
	{
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1410
		switch (vehicle_type) {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1411
			default: NOT_REACHED();
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10757
diff changeset
  1412
			case VEH_TRAIN:    return _settings_game.vehicle.servint_trains   != 0; break;
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10757
diff changeset
  1413
			case VEH_ROAD:     return _settings_game.vehicle.servint_roadveh  != 0; break;
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10757
diff changeset
  1414
			case VEH_SHIP:     return _settings_game.vehicle.servint_ships    != 0; break;
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10757
diff changeset
  1415
			case VEH_AIRCRAFT: return _settings_game.vehicle.servint_aircraft != 0; break;
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1416
		}
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1417
		return false; // kill a compiler warning
8026
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1418
	}
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1419
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1420
	/**
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1421
	 * Draw the details for the given vehicle at the position (x, y) of the Details windows
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1422
	 *
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1423
	 * @param v current vehicle
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1424
	 * @param x The x coordinate
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1425
	 * @param y The y coordinate
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1426
	 * @param vscroll_pos (train only)
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1427
	 * @param vscroll_cap (train only)
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1428
	 * @param det_tab (train only)
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1429
	 */
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1430
	static void DrawVehicleDetails(const Vehicle *v, int x, int y, int vscroll_pos, uint vscroll_cap, byte det_tab)
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1431
	{
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1432
		switch (v->type) {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1433
			case VEH_TRAIN:    DrawTrainDetails(v, x, y, vscroll_pos, vscroll_cap, det_tab);  break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1434
			case VEH_ROAD:     DrawRoadVehDetails(v, x, y);  break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1435
			case VEH_SHIP:     DrawShipDetails(v, x, y);     break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1436
			case VEH_AIRCRAFT: DrawAircraftDetails(v, x, y); break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1437
			default: NOT_REACHED();
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1438
		}
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1439
	}
8026
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1440
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1441
	/** Repaint vehicle details window. */
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1442
	virtual void OnPaint()
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1443
	{
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1444
		const Vehicle *v = GetVehicle(this->window_number);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1445
		byte det_tab = this->tab;
8026
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1446
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1447
		this->SetWidgetDisabledState(VLD_WIDGET_RENAME_VEHICLE, v->owner != _local_player);
8026
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1448
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1449
		if (v->type == VEH_TRAIN) {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1450
			this->DisableWidget(det_tab + VLD_WIDGET_DETAILS_CARGO_CARRIED);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1451
			SetVScrollCount(this, GetTrainDetailsWndVScroll(v->index, det_tab));
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1452
		}
8026
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1453
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1454
		this->SetWidgetsHiddenState(v->type != VEH_TRAIN,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1455
			VLD_WIDGET_SCROLLBAR,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1456
			VLD_WIDGET_DETAILS_CARGO_CARRIED,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1457
			VLD_WIDGET_DETAILS_TRAIN_VEHICLES,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1458
			VLD_WIDGET_DETAILS_CAPACITY_OF_EACH,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1459
			VLD_WIDGET_DETAILS_TOTAL_CARGO,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1460
			VLD_WIDGET_RESIZE,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1461
			WIDGET_LIST_END);
8026
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1462
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1463
		/* Disable service-scroller when interval is set to disabled */
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1464
		this->SetWidgetsDisabledState(!IsVehicleServiceIntervalEnabled(v->type),
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1465
			VLD_WIDGET_INCREASE_SERVICING_INTERVAL,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1466
			VLD_WIDGET_DECREASE_SERVICING_INTERVAL,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1467
			WIDGET_LIST_END);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1468
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1469
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1470
		SetDParam(0, v->index);
10595
7957c71b0dfe (svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium
parents: 10584
diff changeset
  1471
		this->DrawWidgets();
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1472
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1473
		/* Draw running cost */
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1474
		SetDParam(1, v->age / 366);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1475
		SetDParam(0, (v->age + 365 < v->max_age) ? STR_AGE : STR_AGE_RED);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1476
		SetDParam(2, v->max_age / 366);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1477
		SetDParam(3, v->GetDisplayRunningCost());
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1478
		DrawString(2, 15, _vehicle_translation_table[VST_VEHICLE_AGE_RUNNING_COST_YR][v->type], TC_FROMSTRING);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1479
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1480
		/* Draw max speed */
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1481
		switch (v->type) {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1482
			case VEH_TRAIN:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1483
				SetDParam(2, v->GetDisplayMaxSpeed());
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1484
				SetDParam(1, v->u.rail.cached_power);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1485
				SetDParam(0, v->u.rail.cached_weight);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1486
				SetDParam(3, v->u.rail.cached_max_te / 1000);
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10757
diff changeset
  1487
				DrawString(2, 25, (_settings_game.vehicle.realistic_acceleration && v->u.rail.railtype != RAILTYPE_MAGLEV) ?
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1488
					STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1489
					STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED, TC_FROMSTRING);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1490
				break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1491
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1492
			case VEH_ROAD:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1493
			case VEH_SHIP:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1494
			case VEH_AIRCRAFT:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1495
				SetDParam(0, v->GetDisplayMaxSpeed());
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1496
				DrawString(2, 25, _vehicle_translation_table[VST_VEHICLE_MAX_SPEED][v->type], TC_FROMSTRING);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1497
				break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1498
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1499
			default: NOT_REACHED();
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1500
		}
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1501
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1502
		/* Draw profit */
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1503
		SetDParam(0, v->GetDisplayProfitThisYear());
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1504
		SetDParam(1, v->GetDisplayProfitLastYear());
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1505
		DrawString(2, 35, _vehicle_translation_table[VST_VEHICLE_PROFIT_THIS_YEAR_LAST_YEAR][v->type], TC_FROMSTRING);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1506
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1507
		/* Draw breakdown & reliability */
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1508
		SetDParam(0, v->reliability * 100 >> 16);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1509
		SetDParam(1, v->breakdowns_since_last_service);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1510
		DrawString(2, 45, _vehicle_translation_table[VST_VEHICLE_RELIABILITY_BREAKDOWNS][v->type], TC_FROMSTRING);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1511
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1512
		/* Draw service interval text */
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1513
		SetDParam(0, v->service_interval);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1514
		SetDParam(1, v->date_of_last_service);
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10757
diff changeset
  1515
		DrawString(13, this->height - (v->type != VEH_TRAIN ? 11 : 23), _settings_game.vehicle.servint_ispercent ? STR_SERVICING_INTERVAL_PERCENT : STR_883C_SERVICING_INTERVAL_DAYS, TC_FROMSTRING);
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1516
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1517
		switch (v->type) {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1518
			case VEH_TRAIN:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1519
				DrawVehicleDetails(v, 2, 57, this->vscroll.pos, this->vscroll.cap, det_tab);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1520
				break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1521
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1522
			case VEH_ROAD:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1523
			case VEH_SHIP:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1524
			case VEH_AIRCRAFT:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1525
				DrawVehicleImage(v, 3, 57, INVALID_VEHICLE, 0, 0);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1526
				DrawVehicleDetails(v, 75, 57, this->vscroll.pos, this->vscroll.cap, det_tab);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1527
				break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1528
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1529
			default: NOT_REACHED();
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1530
		}
8026
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1531
	}
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1532
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1533
	virtual void OnClick(Point pt, int widget)
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1534
	{
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1535
		/** Message strings for renaming vehicles indexed by vehicle type. */
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1536
		static const StringID _name_vehicle_title[] = {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1537
			STR_8865_NAME_TRAIN,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1538
			STR_902C_NAME_ROAD_VEHICLE,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1539
			STR_9831_NAME_SHIP,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1540
			STR_A030_NAME_AIRCRAFT
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1541
		};
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1542
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1543
		switch (widget) {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1544
			case VLD_WIDGET_RENAME_VEHICLE: {// rename
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1545
				const Vehicle *v = GetVehicle(this->window_number);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1546
				SetDParam(0, v->index);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1547
				ShowQueryString(STR_VEHICLE_NAME, _name_vehicle_title[v->type], 31, 150, this, CS_ALPHANUMERAL);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1548
			} break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1549
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1550
			case VLD_WIDGET_INCREASE_SERVICING_INTERVAL:   // increase int
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1551
			case VLD_WIDGET_DECREASE_SERVICING_INTERVAL: { // decrease int
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1552
				int mod = _ctrl_pressed ? 5 : 10;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1553
				const Vehicle *v = GetVehicle(this->window_number);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1554
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1555
				mod = (widget == VLD_WIDGET_DECREASE_SERVICING_INTERVAL) ? -mod : mod;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1556
				mod = GetServiceIntervalClamped(mod + v->service_interval);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1557
				if (mod == v->service_interval) return;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1558
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1559
				DoCommandP(v->tile, v->index, mod, NULL, CMD_CHANGE_SERVICE_INT | CMD_MSG(STR_018A_CAN_T_CHANGE_SERVICING));
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1560
			} break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1561
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1562
			case VLD_WIDGET_DETAILS_CARGO_CARRIED:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1563
			case VLD_WIDGET_DETAILS_TRAIN_VEHICLES:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1564
			case VLD_WIDGET_DETAILS_CAPACITY_OF_EACH:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1565
			case VLD_WIDGET_DETAILS_TOTAL_CARGO:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1566
				this->SetWidgetsDisabledState(false,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1567
					VLD_WIDGET_DETAILS_CARGO_CARRIED,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1568
					VLD_WIDGET_DETAILS_TRAIN_VEHICLES,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1569
					VLD_WIDGET_DETAILS_CAPACITY_OF_EACH,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1570
					VLD_WIDGET_DETAILS_TOTAL_CARGO,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1571
					widget,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1572
					WIDGET_LIST_END);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1573
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1574
				this->tab = widget - VLD_WIDGET_DETAILS_CARGO_CARRIED;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1575
				this->SetDirty();
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1576
				break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1577
		}
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1578
	}
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1579
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1580
	virtual void OnQueryTextFinished(char *str)
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1581
	{
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1582
		/** Message strings for error while renaming indexed by vehicle type. */
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1583
		static const StringID _name_vehicle_error[] = {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1584
			STR_8866_CAN_T_NAME_TRAIN,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1585
			STR_902D_CAN_T_NAME_ROAD_VEHICLE,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1586
			STR_9832_CAN_T_NAME_SHIP,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1587
			STR_A031_CAN_T_NAME_AIRCRAFT
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1588
		};
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1589
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1590
		if (!StrEmpty(str)) {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1591
			_cmd_text = str;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1592
			DoCommandP(0, this->window_number, 0, NULL, CMD_NAME_VEHICLE | CMD_MSG(_name_vehicle_error[GetVehicle(this->window_number)->type]));
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1593
		}
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1594
	}
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1595
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1596
	virtual void OnResize(Point new_size, Point delta)
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1597
	{
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1598
		if (delta.x != 0) ResizeButtons(this, VLD_WIDGET_DETAILS_CARGO_CARRIED, VLD_WIDGET_DETAILS_TOTAL_CARGO);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1599
		if (delta.y == 0) return;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1600
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1601
		this->vscroll.cap += delta.y / 14;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1602
		this->widget[VLD_WIDGET_MIDDLE_DETAILS].data = (this->vscroll.cap << 8) + 1;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1603
	}
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1604
};
8026
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1605
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1606
/** Vehicle details window descriptor. */
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1607
static const WindowDesc _vehicle_details_desc = {
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1608
	WDP_AUTO, WDP_AUTO, 405, 113, 405, 113,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1609
	WC_VEHICLE_DETAILS, WC_VEHICLE_VIEW,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1610
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_RESIZABLE,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1611
	_vehicle_details_widgets,
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1612
};
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1613
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1614
/** Shows the vehicle details window of the given vehicle. */
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1615
static void ShowVehicleDetailsWindow(const Vehicle *v)
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1616
{
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1617
	DeleteWindowById(WC_VEHICLE_ORDERS, v->index);
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1618
	DeleteWindowById(WC_VEHICLE_DETAILS, v->index);
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1619
	AllocateWindowDescFront<VehicleDetailsWindow>(&_vehicle_details_desc, v->index);
8026
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1620
}
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1621
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1622
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1623
/* Unified vehicle GUI - Vehicle View Window */
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1624
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1625
/** Vehicle view widgets. */
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1626
static const Widget _vehicle_view_widgets[] = {
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1627
	{   WWT_CLOSEBOX,  RESIZE_NONE,  14,   0,  10,   0,  13, STR_00C5,                 STR_018B_CLOSE_WINDOW },           // VVW_WIDGET_CLOSEBOX
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1628
	{    WWT_CAPTION, RESIZE_RIGHT,  14,  11, 237,   0,  13, 0x0 /* filled later */,   STR_018C_WINDOW_TITLE_DRAG_THIS }, // VVW_WIDGET_CAPTION
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1629
	{  WWT_STICKYBOX,    RESIZE_LR,  14, 238, 249,   0,  13, 0x0,                      STR_STICKY_BUTTON },               // VVW_WIDGET_STICKY
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1630
	{      WWT_PANEL,    RESIZE_RB,  14,   0, 231,  14, 103, 0x0,                      STR_NULL },                        // VVW_WIDGET_PANEL
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1631
	{      WWT_INSET,    RESIZE_RB,  14,   2, 229,  16, 101, 0x0,                      STR_NULL },                        // VVW_WIDGET_VIEWPORT
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1632
	{    WWT_PUSHBTN,   RESIZE_RTB,  14,   0, 237, 104, 115, 0x0,                      0x0 /* filled later */ },          // VVW_WIDGET_START_STOP_VEH
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1633
	{ WWT_PUSHIMGBTN,    RESIZE_LR,  14, 232, 249,  14,  31, SPR_CENTRE_VIEW_VEHICLE,  0x0 /* filled later */ },          // VVW_WIDGET_CENTER_MAIN_VIEH
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1634
	{ WWT_PUSHIMGBTN,    RESIZE_LR,  14, 232, 249,  32,  49, 0x0 /* filled later */,   0x0 /* filled later */ },          // VVW_WIDGET_GOTO_DEPOT
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1635
	{ WWT_PUSHIMGBTN,    RESIZE_LR,  14, 232, 249,  50,  67, SPR_REFIT_VEHICLE,        0x0 /* filled later */ },          // VVW_WIDGET_REFIT_VEH
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1636
	{ WWT_PUSHIMGBTN,    RESIZE_LR,  14, 232, 249,  68,  85, SPR_SHOW_ORDERS,          0x0 /* filled later */ },          // VVW_WIDGET_SHOW_ORDERS
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1637
	{ WWT_PUSHIMGBTN,    RESIZE_LR,  14, 232, 249,  86, 103, SPR_SHOW_VEHICLE_DETAILS, 0x0 /* filled later */ },          // VVW_WIDGET_SHOW_DETAILS
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1638
	{ WWT_PUSHIMGBTN,    RESIZE_LR,  14, 232, 249,  32,  49, 0x0 /* filled later */,   0x0 /* filled later */ },          // VVW_WIDGET_CLONE_VEH
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1639
	{      WWT_PANEL,   RESIZE_LRB,  14, 232, 249, 104, 103, 0x0,                      STR_NULL },                        // VVW_WIDGET_EMPTY_BOTTOM_RIGHT
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1640
	{  WWT_RESIZEBOX,  RESIZE_LRTB,  14, 238, 249, 104, 115, 0x0,                      STR_NULL },                        // VVW_WIDGET_RESIZE
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1641
	{ WWT_PUSHIMGBTN,    RESIZE_LR,  14, 232, 249,  50,  67, SPR_FORCE_VEHICLE_TURN,   STR_9020_FORCE_VEHICLE_TO_TURN_AROUND }, // VVW_WIDGET_TURN_AROUND
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1642
	{ WWT_PUSHIMGBTN,    RESIZE_LR,  14, 232, 249,  50,  67, SPR_IGNORE_SIGNALS,       STR_884A_FORCE_TRAIN_TO_PROCEED },       // VVW_WIDGET_FORCE_PROCEED
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1643
{   WIDGETS_END},
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1644
};
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1645
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1646
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1647
/** Vehicle view window descriptor for all vehicles but trains. */
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1648
static const WindowDesc _vehicle_view_desc = {
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1649
	WDP_AUTO, WDP_AUTO, 250, 116, 250, 116,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1650
	WC_VEHICLE_VIEW, WC_NONE,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1651
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1652
	_vehicle_view_widgets,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1653
};
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1654
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1655
/** Vehicle view window descriptor for trains. Only minimum_height and
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1656
 *  default_height are different for train view.
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1657
 */
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1658
static const WindowDesc _train_view_desc = {
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1659
	WDP_AUTO, WDP_AUTO, 250, 134, 250, 134,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1660
	WC_VEHICLE_VIEW, WC_NONE,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1661
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1662
	_vehicle_view_widgets,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1663
};
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1664
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1665
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1666
/* Just to make sure, nobody has changed the vehicle type constants, as we are
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1667
	 using them for array indexing in a number of places here. */
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1668
assert_compile(VEH_TRAIN == 0);
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1669
assert_compile(VEH_ROAD == 1);
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1670
assert_compile(VEH_SHIP == 2);
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1671
assert_compile(VEH_AIRCRAFT == 3);
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1672
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1673
/** Zoom levels for vehicle views indexed by vehicle type. */
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1674
static const ZoomLevel _vehicle_view_zoom_levels[] = {
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1675
	ZOOM_LVL_TRAIN,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1676
	ZOOM_LVL_ROADVEH,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1677
	ZOOM_LVL_SHIP,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1678
	ZOOM_LVL_AIRCRAFT,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1679
};
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1680
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1681
/* Constants for geometry of vehicle view viewport */
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1682
static const int VV_VIEWPORT_X = 3;
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1683
static const int VV_VIEWPORT_Y = 17;
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1684
static const int VV_INITIAL_VIEWPORT_WIDTH = 226;
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1685
static const int VV_INITIAL_VIEWPORT_HEIGHT = 84;
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1686
static const int VV_INITIAL_VIEWPORT_HEIGHT_TRAIN = 102;
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1687
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1688
/** Command indices for the _vehicle_command_translation_table. */
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1689
enum VehicleCommandTranslation {
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1690
	VCT_CMD_START_STOP = 0,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1691
	VCT_CMD_GOTO_DEPOT,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1692
	VCT_CMD_CLONE_VEH,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1693
	VCT_CMD_TURN_AROUND,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1694
};
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1695
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1696
/** Command codes for the shared buttons indexed by VehicleCommandTranslation and vehicle type. */
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1697
static const uint32 _vehicle_command_translation_table[][4] = {
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1698
	{ // VCT_CMD_START_STOP
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1699
		CMD_START_STOP_TRAIN | CMD_MSG(STR_883B_CAN_T_STOP_START_TRAIN),
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1700
		CMD_START_STOP_ROADVEH | CMD_MSG(STR_9015_CAN_T_STOP_START_ROAD_VEHICLE),
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1701
		CMD_START_STOP_SHIP | CMD_MSG(STR_9818_CAN_T_STOP_START_SHIP),
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1702
		CMD_START_STOP_AIRCRAFT | CMD_MSG(STR_A016_CAN_T_STOP_START_AIRCRAFT)
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1703
	},
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1704
	{ // VCT_CMD_GOTO_DEPOT
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1705
		/* TrainGotoDepot has a nice randomizer in the pathfinder, which causes desyncs... */
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1706
		CMD_SEND_TRAIN_TO_DEPOT | CMD_NO_TEST_IF_IN_NETWORK | CMD_MSG(STR_8830_CAN_T_SEND_TRAIN_TO_DEPOT),
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1707
		CMD_SEND_ROADVEH_TO_DEPOT | CMD_MSG(STR_9018_CAN_T_SEND_VEHICLE_TO_DEPOT),
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1708
		CMD_SEND_SHIP_TO_DEPOT | CMD_MSG(STR_9819_CAN_T_SEND_SHIP_TO_DEPOT),
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1709
		CMD_SEND_AIRCRAFT_TO_HANGAR | CMD_MSG(STR_A012_CAN_T_SEND_AIRCRAFT_TO)
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1710
	},
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1711
	{ // VCT_CMD_CLONE_VEH
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1712
		CMD_CLONE_VEHICLE | CMD_MSG(STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE),
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1713
		CMD_CLONE_VEHICLE | CMD_MSG(STR_9009_CAN_T_BUILD_ROAD_VEHICLE),
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1714
		CMD_CLONE_VEHICLE | CMD_MSG(STR_980D_CAN_T_BUILD_SHIP),
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1715
		CMD_CLONE_VEHICLE | CMD_MSG(STR_A008_CAN_T_BUILD_AIRCRAFT)
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1716
	},
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1717
	{ // VCT_CMD_TURN_AROUND
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1718
		CMD_REVERSE_TRAIN_DIRECTION | CMD_MSG(STR_8869_CAN_T_REVERSE_DIRECTION),
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1719
		CMD_TURN_ROADVEH | CMD_MSG(STR_9033_CAN_T_MAKE_VEHICLE_TURN),
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1720
		0xffffffff, // invalid for ships
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1721
		0xffffffff  // invalid for aircrafts
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1722
	},
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1723
};
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1724
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1725
/** Checks whether the vehicle may be refitted at the moment.*/
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1726
static bool IsVehicleRefitable(const Vehicle *v)
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1727
{
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1728
	/* Why is this so different for different vehicles?
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1729
	 * Does maybe work one solution for all?
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1730
	 */
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1731
	switch (v->type) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1732
		case VEH_TRAIN:    return false;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1733
		case VEH_ROAD:     return EngInfo(v->engine_type)->refit_mask != 0 && v->IsStoppedInDepot();
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1734
		case VEH_SHIP:     return ShipVehInfo(v->engine_type)->refittable && v->IsStoppedInDepot();
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1735
		case VEH_AIRCRAFT: return v->IsStoppedInDepot();
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1736
		default: NOT_REACHED();
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1737
	}
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1738
}
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1739
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1740
struct VehicleViewWindow : Window {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1741
	VehicleViewWindow(const WindowDesc *desc, WindowNumber window_number) : Window(desc, window_number)
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1742
	{
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1743
		const Vehicle *v = GetVehicle(this->window_number);
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1744
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1745
		this->caption_color = v->owner;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1746
		InitializeWindowViewport(this, VV_VIEWPORT_X, VV_VIEWPORT_Y, VV_INITIAL_VIEWPORT_WIDTH,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1747
												 (v->type == VEH_TRAIN) ? VV_INITIAL_VIEWPORT_HEIGHT_TRAIN : VV_INITIAL_VIEWPORT_HEIGHT,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1748
												 this->window_number | (1 << 31), _vehicle_view_zoom_levels[v->type]);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1749
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1750
		/*
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1751
		 * fill in data and tooltip codes for the widgets and
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1752
		 * move some of the buttons for trains
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1753
		 */
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1754
		switch (v->type) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1755
			case VEH_TRAIN:
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1756
				this->widget[VVW_WIDGET_CAPTION].data = STR_882E;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1757
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1758
				this->widget[VVW_WIDGET_START_STOP_VEH].tooltips = STR_8846_CURRENT_TRAIN_ACTION_CLICK;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1759
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1760
				this->widget[VVW_WIDGET_CENTER_MAIN_VIEH].tooltips = STR_8848_CENTER_MAIN_VIEW_ON_TRAIN;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1761
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1762
				this->widget[VVW_WIDGET_GOTO_DEPOT].data = SPR_SEND_TRAIN_TODEPOT;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1763
				this->widget[VVW_WIDGET_GOTO_DEPOT].tooltips = STR_8849_SEND_TRAIN_TO_DEPOT;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1764
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1765
				this->widget[VVW_WIDGET_REFIT_VEH].tooltips = STR_RAIL_REFIT_VEHICLE_TO_CARRY;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1766
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1767
				this->widget[VVW_WIDGET_SHOW_ORDERS].tooltips = STR_8847_SHOW_TRAIN_S_ORDERS;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1768
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1769
				this->widget[VVW_WIDGET_SHOW_DETAILS].tooltips = STR_884C_SHOW_TRAIN_DETAILS;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1770
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1771
				this->widget[VVW_WIDGET_CLONE_VEH].data = SPR_CLONE_TRAIN;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1772
				this->widget[VVW_WIDGET_CLONE_VEH].tooltips = STR_CLONE_TRAIN_INFO;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1773
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1774
				this->widget[VVW_WIDGET_TURN_AROUND].tooltips = STR_884B_REVERSE_DIRECTION_OF_TRAIN;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1775
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1776
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1777
				/* due to more buttons we must modify the layout a bit for trains */
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1778
				this->widget[VVW_WIDGET_PANEL].bottom = 121;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1779
				this->widget[VVW_WIDGET_VIEWPORT].bottom = 119;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1780
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1781
				this->widget[VVW_WIDGET_START_STOP_VEH].top = 122;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1782
				this->widget[VVW_WIDGET_START_STOP_VEH].bottom = 133;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1783
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1784
				this->widget[VVW_WIDGET_REFIT_VEH].top = 68;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1785
				this->widget[VVW_WIDGET_REFIT_VEH].bottom = 85;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1786
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1787
				this->widget[VVW_WIDGET_SHOW_ORDERS].top = 86;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1788
				this->widget[VVW_WIDGET_SHOW_ORDERS].bottom = 103;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1789
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1790
				this->widget[VVW_WIDGET_SHOW_DETAILS].top = 104;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1791
				this->widget[VVW_WIDGET_SHOW_DETAILS].bottom = 121;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1792
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1793
				this->widget[VVW_WIDGET_EMPTY_BOTTOM_RIGHT].top = 122;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1794
				this->widget[VVW_WIDGET_EMPTY_BOTTOM_RIGHT].bottom = 121;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1795
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1796
				this->widget[VVW_WIDGET_RESIZE].top = 122;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1797
				this->widget[VVW_WIDGET_RESIZE].bottom = 133;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1798
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1799
				this->widget[VVW_WIDGET_TURN_AROUND].top = 68;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1800
				this->widget[VVW_WIDGET_TURN_AROUND].bottom = 85;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1801
				break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1802
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1803
			case VEH_ROAD:
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1804
				this->widget[VVW_WIDGET_CAPTION].data = STR_9002;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1805
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1806
				this->widget[VVW_WIDGET_START_STOP_VEH].tooltips = STR_901C_CURRENT_VEHICLE_ACTION;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1807
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1808
				this->widget[VVW_WIDGET_CENTER_MAIN_VIEH].tooltips = STR_901E_CENTER_MAIN_VIEW_ON_VEHICLE;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1809
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1810
				this->widget[VVW_WIDGET_GOTO_DEPOT].data = SPR_SEND_ROADVEH_TODEPOT;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1811
				this->widget[VVW_WIDGET_GOTO_DEPOT].tooltips = STR_901F_SEND_VEHICLE_TO_DEPOT;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1812
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1813
				this->widget[VVW_WIDGET_REFIT_VEH].tooltips = STR_REFIT_ROAD_VEHICLE_TO_CARRY;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1814
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1815
				this->widget[VVW_WIDGET_SHOW_ORDERS].tooltips = STR_901D_SHOW_VEHICLE_S_ORDERS;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1816
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1817
				this->widget[VVW_WIDGET_SHOW_DETAILS].tooltips = STR_9021_SHOW_ROAD_VEHICLE_DETAILS;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1818
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1819
				this->widget[VVW_WIDGET_CLONE_VEH].data = SPR_CLONE_ROADVEH;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1820
				this->widget[VVW_WIDGET_CLONE_VEH].tooltips = STR_CLONE_ROAD_VEHICLE_INFO;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1821
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1822
				this->SetWidgetHiddenState(VVW_WIDGET_FORCE_PROCEED, true);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1823
				break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1824
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1825
			case VEH_SHIP:
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1826
				this->widget[VVW_WIDGET_CAPTION].data = STR_980F;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1827
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1828
				this->widget[VVW_WIDGET_START_STOP_VEH].tooltips = STR_9827_CURRENT_SHIP_ACTION_CLICK;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1829
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1830
				this->widget[VVW_WIDGET_CENTER_MAIN_VIEH].tooltips = STR_9829_CENTER_MAIN_VIEW_ON_SHIP;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1831
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1832
				this->widget[VVW_WIDGET_GOTO_DEPOT].data = SPR_SEND_SHIP_TODEPOT;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1833
				this->widget[VVW_WIDGET_GOTO_DEPOT].tooltips = STR_982A_SEND_SHIP_TO_DEPOT;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1834
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1835
				this->widget[VVW_WIDGET_REFIT_VEH].tooltips = STR_983A_REFIT_CARGO_SHIP_TO_CARRY;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1836
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1837
				this->widget[VVW_WIDGET_SHOW_ORDERS].tooltips = STR_9828_SHOW_SHIP_S_ORDERS;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1838
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1839
				this->widget[VVW_WIDGET_SHOW_DETAILS].tooltips = STR_982B_SHOW_SHIP_DETAILS;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1840
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1841
				this->widget[VVW_WIDGET_CLONE_VEH].data = SPR_CLONE_SHIP;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1842
				this->widget[VVW_WIDGET_CLONE_VEH].tooltips = STR_CLONE_SHIP_INFO;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1843
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1844
				this->SetWidgetsHiddenState(true,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1845
																		VVW_WIDGET_TURN_AROUND,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1846
																		VVW_WIDGET_FORCE_PROCEED,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1847
																		WIDGET_LIST_END);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1848
				break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1849
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1850
			case VEH_AIRCRAFT:
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1851
				this->widget[VVW_WIDGET_CAPTION].data = STR_A00A;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1852
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1853
				this->widget[VVW_WIDGET_START_STOP_VEH].tooltips = STR_A027_CURRENT_AIRCRAFT_ACTION;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1854
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1855
				this->widget[VVW_WIDGET_CENTER_MAIN_VIEH].tooltips = STR_A029_CENTER_MAIN_VIEW_ON_AIRCRAFT;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1856
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1857
				this->widget[VVW_WIDGET_GOTO_DEPOT].data = SPR_SEND_AIRCRAFT_TODEPOT;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1858
				this->widget[VVW_WIDGET_GOTO_DEPOT].tooltips = STR_A02A_SEND_AIRCRAFT_TO_HANGAR;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1859
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1860
				this->widget[VVW_WIDGET_REFIT_VEH].tooltips = STR_A03B_REFIT_AIRCRAFT_TO_CARRY;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1861
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1862
				this->widget[VVW_WIDGET_SHOW_ORDERS].tooltips = STR_A028_SHOW_AIRCRAFT_S_ORDERS;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1863
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1864
				this->widget[VVW_WIDGET_SHOW_DETAILS].tooltips = STR_A02B_SHOW_AIRCRAFT_DETAILS;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1865
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1866
				this->widget[VVW_WIDGET_CLONE_VEH].data = SPR_CLONE_AIRCRAFT;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1867
				this->widget[VVW_WIDGET_CLONE_VEH].tooltips = STR_CLONE_AIRCRAFT_INFO;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1868
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1869
				this->SetWidgetsHiddenState(true,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1870
																		VVW_WIDGET_TURN_AROUND,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1871
																		VVW_WIDGET_FORCE_PROCEED,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1872
																		WIDGET_LIST_END);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1873
				break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1874
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1875
				default: NOT_REACHED();
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1876
		}
10681
3aa3de4d448b (svn r13225) -Fix (r13041): Missing calls to FindWindowPlacementAndResize() from lots
peter1138
parents: 10641
diff changeset
  1877
3aa3de4d448b (svn r13225) -Fix (r13041): Missing calls to FindWindowPlacementAndResize() from lots
peter1138
parents: 10641
diff changeset
  1878
		this->FindWindowPlacementAndResize(desc);
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1879
	}
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1880
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1881
	~VehicleViewWindow()
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1882
	{
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1883
		DeleteWindowById(WC_VEHICLE_ORDERS, this->window_number);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1884
		DeleteWindowById(WC_VEHICLE_REFIT, this->window_number);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1885
		DeleteWindowById(WC_VEHICLE_DETAILS, this->window_number);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1886
		DeleteWindowById(WC_VEHICLE_TIMETABLE, this->window_number);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1887
	}
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1888
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1889
	virtual void OnPaint()
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1890
	{
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1891
		/** Message strings for heading to depot indexed by vehicle type. */
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1892
		static const StringID _heading_for_depot_strings[] = {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1893
			STR_HEADING_FOR_TRAIN_DEPOT,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1894
			STR_HEADING_FOR_ROAD_DEPOT,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1895
			STR_HEADING_FOR_SHIP_DEPOT,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1896
			STR_HEADING_FOR_HANGAR,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1897
		};
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1898
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1899
		/** Message strings for heading to depot and servicing indexed by vehicle type. */
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1900
		static const StringID _heading_for_depot_service_strings[] = {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1901
			STR_HEADING_FOR_TRAIN_DEPOT_SERVICE,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1902
			STR_HEADING_FOR_ROAD_DEPOT_SERVICE,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1903
			STR_HEADING_FOR_SHIP_DEPOT_SERVICE,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1904
			STR_HEADING_FOR_HANGAR_SERVICE,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1905
		};
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1906
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1907
		const Vehicle *v = GetVehicle(this->window_number);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1908
		StringID str;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1909
		bool is_localplayer = v->owner == _local_player;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1910
		bool refitable_and_stopped_in_depot = IsVehicleRefitable(v);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1911
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1912
		this->SetWidgetDisabledState(VVW_WIDGET_GOTO_DEPOT, !is_localplayer);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1913
		this->SetWidgetDisabledState(VVW_WIDGET_REFIT_VEH,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1914
																!refitable_and_stopped_in_depot || !is_localplayer);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1915
		this->SetWidgetDisabledState(VVW_WIDGET_CLONE_VEH, !is_localplayer);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1916
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1917
		if (v->type == VEH_TRAIN) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1918
			this->SetWidgetDisabledState(VVW_WIDGET_FORCE_PROCEED, !is_localplayer);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1919
			this->SetWidgetDisabledState(VVW_WIDGET_TURN_AROUND, !is_localplayer);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1920
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1921
			/* Cargo refit button is disabled, until we know we can enable it below. */
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1922
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1923
			if (is_localplayer) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1924
				/* See if any vehicle can be refitted */
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1925
				for (const Vehicle *u = v; u != NULL; u = u->Next()) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1926
					if (EngInfo(u->engine_type)->refit_mask != 0 ||
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1927
							(RailVehInfo(v->engine_type)->railveh_type != RAILVEH_WAGON && v->cargo_cap != 0)) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1928
						this->EnableWidget(VVW_WIDGET_REFIT_VEH);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1929
						/* We have a refittable carriage, bail out */
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1930
						break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1931
					}
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1932
				}
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1933
			}
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1934
		}
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1935
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1936
		/* draw widgets & caption */
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1937
		SetDParam(0, v->index);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1938
		this->DrawWidgets();
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1939
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1940
		if (v->vehstatus & VS_CRASHED) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1941
			str = STR_8863_CRASHED;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1942
		} else if (v->type != VEH_AIRCRAFT && v->breakdown_ctr == 1) { // check for aircraft necessary?
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1943
			str = STR_885C_BROKEN_DOWN;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1944
		} else if (v->vehstatus & VS_STOPPED) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1945
			if (v->type == VEH_TRAIN) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1946
				if (v->cur_speed == 0) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1947
					if (v->u.rail.cached_power == 0) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1948
						str = STR_TRAIN_NO_POWER;
8255
ba58769915ac (svn r11304) -Feature: Control-Clicking the Center Main View button on the vehicle window allows the main viewport to follow the chosen vehicle.(stevenh)
belugas
parents: 8138
diff changeset
  1949
					} else {
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1950
						str = STR_8861_STOPPED;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1951
					}
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1952
				} else {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1953
					SetDParam(0, v->GetDisplaySpeed());
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10757
diff changeset
  1954
					str = STR_TRAIN_STOPPING + _settings_client.gui.vehicle_speed;
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1955
				}
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1956
			} else { // no train
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1957
				str = STR_8861_STOPPED;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1958
			}
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1959
		} else { // vehicle is in a "normal" state, show current order
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1960
			switch (v->current_order.GetType()) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1961
				case OT_GOTO_STATION: {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1962
					SetDParam(0, v->current_order.GetDestination());
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1963
					SetDParam(1, v->GetDisplaySpeed());
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10757
diff changeset
  1964
					str = STR_HEADING_FOR_STATION + _settings_client.gui.vehicle_speed;
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1965
				} break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1966
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1967
				case OT_GOTO_DEPOT: {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1968
					if (v->type == VEH_AIRCRAFT) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1969
						/* Aircrafts always go to a station, even if you say depot */
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1970
						SetDParam(0, v->current_order.GetDestination());
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1971
						SetDParam(1, v->GetDisplaySpeed());
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1972
					} else {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1973
						Depot *depot = GetDepot(v->current_order.GetDestination());
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1974
						SetDParam(0, depot->town_index);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1975
						SetDParam(1, v->GetDisplaySpeed());
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1976
					}
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1977
					if ((v->current_order.GetDepotActionType() & ODATFB_HALT) && !(v->current_order.GetDepotOrderType() & ODTFB_PART_OF_ORDERS)) {
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10757
diff changeset
  1978
						str = _heading_for_depot_strings[v->type] + _settings_client.gui.vehicle_speed;
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1979
					} else {
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10757
diff changeset
  1980
						str = _heading_for_depot_service_strings[v->type] + _settings_client.gui.vehicle_speed;
8255
ba58769915ac (svn r11304) -Feature: Control-Clicking the Center Main View button on the vehicle window allows the main viewport to follow the chosen vehicle.(stevenh)
belugas
parents: 8138
diff changeset
  1981
					}
ba58769915ac (svn r11304) -Feature: Control-Clicking the Center Main View button on the vehicle window allows the main viewport to follow the chosen vehicle.(stevenh)
belugas
parents: 8138
diff changeset
  1982
				} break;
ba58769915ac (svn r11304) -Feature: Control-Clicking the Center Main View button on the vehicle window allows the main viewport to follow the chosen vehicle.(stevenh)
belugas
parents: 8138
diff changeset
  1983
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1984
				case OT_LOADING:
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1985
					str = STR_882F_LOADING_UNLOADING;
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1986
					break;
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1987
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1988
				case OT_GOTO_WAYPOINT: {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1989
					assert(v->type == VEH_TRAIN);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1990
					SetDParam(0, v->current_order.GetDestination());
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10757
diff changeset
  1991
					str = STR_HEADING_FOR_WAYPOINT + _settings_client.gui.vehicle_speed;
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1992
					SetDParam(1, v->GetDisplaySpeed());
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1993
					break;
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1994
				}
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1995
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1996
				case OT_LEAVESTATION:
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1997
					if (v->type != VEH_AIRCRAFT) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1998
						str = STR_LEAVING;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1999
						break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2000
					}
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2001
					/* fall-through if aircraft. Does this even happen? */
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2002
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2003
				default:
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2004
					if (v->num_orders == 0) {
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10757
diff changeset
  2005
						str = STR_NO_ORDERS + _settings_client.gui.vehicle_speed;
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2006
						SetDParam(0, v->GetDisplaySpeed());
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2007
					} else {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2008
						str = STR_EMPTY;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2009
					}
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  2010
					break;
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  2011
			}
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2012
		}
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  2013
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2014
		/* draw the flag plus orders */
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2015
		DrawSprite(v->vehstatus & VS_STOPPED ? SPR_FLAG_VEH_STOPPED : SPR_FLAG_VEH_RUNNING, PAL_NONE, 2, this->widget[VVW_WIDGET_START_STOP_VEH].top + 1);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2016
		DrawStringCenteredTruncated(this->widget[VVW_WIDGET_START_STOP_VEH].left + 8, this->widget[VVW_WIDGET_START_STOP_VEH].right, this->widget[VVW_WIDGET_START_STOP_VEH].top + 1, str, TC_FROMSTRING);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2017
		this->DrawViewport();
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2018
	}
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  2019
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2020
	virtual void OnClick(Point pt, int widget)
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2021
	{
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2022
		const Vehicle *v = GetVehicle(this->window_number);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2023
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2024
		switch (widget) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2025
			case VVW_WIDGET_START_STOP_VEH: // start stop
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2026
				DoCommandP(v->tile, v->index, 0, NULL,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2027
										_vehicle_command_translation_table[VCT_CMD_START_STOP][v->type]);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2028
				break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2029
			case VVW_WIDGET_CENTER_MAIN_VIEH: {/* center main view */
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2030
				const Window *mainwindow = FindWindowById(WC_MAIN_WINDOW, 0);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2031
				/* code to allow the main window to 'follow' the vehicle if the ctrl key is pressed */
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2032
				if (_ctrl_pressed && mainwindow->viewport->zoom == ZOOM_LVL_NORMAL) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2033
					mainwindow->viewport->follow_vehicle = v->index;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2034
				} else {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2035
					ScrollMainWindowTo(v->x_pos, v->y_pos);
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  2036
				}
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2037
			} break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2038
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2039
			case VVW_WIDGET_GOTO_DEPOT: // goto hangar
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2040
				DoCommandP(v->tile, v->index, _ctrl_pressed ? DEPOT_SERVICE : 0, NULL,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2041
					_vehicle_command_translation_table[VCT_CMD_GOTO_DEPOT][v->type]);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2042
				break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2043
			case VVW_WIDGET_REFIT_VEH: // refit
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2044
				ShowVehicleRefitWindow(v, INVALID_VEH_ORDER_ID);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2045
				break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2046
			case VVW_WIDGET_SHOW_ORDERS: // show orders
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2047
				if (_ctrl_pressed) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2048
					ShowTimetableWindow(v);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2049
				} else {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2050
					ShowOrdersWindow(v);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2051
				}
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2052
				break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2053
			case VVW_WIDGET_SHOW_DETAILS: // show details
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2054
				ShowVehicleDetailsWindow(v);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2055
				break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2056
			case VVW_WIDGET_CLONE_VEH: // clone vehicle
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2057
				DoCommandP(v->tile, v->index, _ctrl_pressed ? 1 : 0, CcCloneVehicle,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2058
										_vehicle_command_translation_table[VCT_CMD_CLONE_VEH][v->type]);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2059
				break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2060
			case VVW_WIDGET_TURN_AROUND: // turn around
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2061
				assert(v->type == VEH_TRAIN || v->type == VEH_ROAD);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2062
				DoCommandP(v->tile, v->index, 0, NULL,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2063
										_vehicle_command_translation_table[VCT_CMD_TURN_AROUND][v->type]);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2064
				break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2065
			case VVW_WIDGET_FORCE_PROCEED: // force proceed
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2066
				assert(v->type == VEH_TRAIN);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2067
				DoCommandP(v->tile, v->index, 0, NULL, CMD_FORCE_TRAIN_PROCEED | CMD_MSG(STR_8862_CAN_T_MAKE_TRAIN_PASS_SIGNAL));
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2068
				break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2069
		}
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2070
	}
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2071
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2072
	virtual void OnResize(Point new_size, Point delta)
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2073
	{
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2074
		this->viewport->width          += delta.x;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2075
		this->viewport->height         += delta.y;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2076
		this->viewport->virtual_width  += delta.x;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2077
		this->viewport->virtual_height += delta.y;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2078
	}
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2079
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2080
	virtual void OnTick()
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2081
	{
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2082
		const Vehicle *v = GetVehicle(this->window_number);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2083
		bool veh_stopped = v->IsStoppedInDepot();
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2084
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2085
		/* Widget VVW_WIDGET_GOTO_DEPOT must be hidden if the vehicle is already
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2086
		 * stopped in depot.
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2087
		 * Widget VVW_WIDGET_CLONE_VEH should then be shown, since cloning is
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2088
		 * allowed only while in depot and stopped.
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2089
		 * This sytem allows to have two buttons, on top of each other.
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2090
		 * The same system applies to widget VVW_WIDGET_REFIT_VEH and VVW_WIDGET_TURN_AROUND.*/
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2091
		if (veh_stopped != this->IsWidgetHidden(VVW_WIDGET_GOTO_DEPOT) || veh_stopped == this->IsWidgetHidden(VVW_WIDGET_CLONE_VEH)) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2092
			this->SetWidgetHiddenState( VVW_WIDGET_GOTO_DEPOT, veh_stopped);  // send to depot
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2093
			this->SetWidgetHiddenState(VVW_WIDGET_CLONE_VEH, !veh_stopped); // clone
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2094
			if (v->type == VEH_ROAD || v->type == VEH_TRAIN) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2095
				this->SetWidgetHiddenState( VVW_WIDGET_REFIT_VEH, !veh_stopped); // refit
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2096
				this->SetWidgetHiddenState(VVW_WIDGET_TURN_AROUND, veh_stopped);  // force turn around
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  2097
			}
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2098
			this->SetDirty();
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2099
		}
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  2100
	}
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2101
};
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2102
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2103
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2104
/** Shows the vehicle view window of the given vehicle. */
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2105
void ShowVehicleViewWindow(const Vehicle *v)
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2106
{
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2107
	AllocateWindowDescFront<VehicleViewWindow>((v->type == VEH_TRAIN) ? &_train_view_desc : &_vehicle_view_desc, v->index);
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  2108
}
8640
1e93b81e96d2 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8636
diff changeset
  2109
1e93b81e96d2 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8636
diff changeset
  2110
void DrawVehicleImage(const Vehicle *v, int x, int y, VehicleID selection, int count, int skip)
1e93b81e96d2 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8636
diff changeset
  2111
{
1e93b81e96d2 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8636
diff changeset
  2112
	switch (v->type) {
1e93b81e96d2 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8636
diff changeset
  2113
		case VEH_TRAIN:    DrawTrainImage(v, x, y, selection, count, skip); break;
1e93b81e96d2 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8636
diff changeset
  2114
		case VEH_ROAD:     DrawRoadVehImage(v, x, y, selection, count);     break;
1e93b81e96d2 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8636
diff changeset
  2115
		case VEH_SHIP:     DrawShipImage(v, x, y, selection);               break;
1e93b81e96d2 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8636
diff changeset
  2116
		case VEH_AIRCRAFT: DrawAircraftImage(v, x, y, selection);           break;
1e93b81e96d2 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8636
diff changeset
  2117
		default: NOT_REACHED();
1e93b81e96d2 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8636
diff changeset
  2118
	}
1e93b81e96d2 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8636
diff changeset
  2119
}
10596
0ee9eba64c9c (svn r13140) -Codechange: move the gui-list-sorting out of window_gui.h so window_gui.h only needs to be included in *_gui.cpp.
rubidium
parents: 10595
diff changeset
  2120
0ee9eba64c9c (svn r13140) -Codechange: move the gui-list-sorting out of window_gui.h so window_gui.h only needs to be included in *_gui.cpp.
rubidium
parents: 10595
diff changeset
  2121
void StopGlobalFollowVehicle(const Vehicle *v)
0ee9eba64c9c (svn r13140) -Codechange: move the gui-list-sorting out of window_gui.h so window_gui.h only needs to be included in *_gui.cpp.
rubidium
parents: 10595
diff changeset
  2122
{
0ee9eba64c9c (svn r13140) -Codechange: move the gui-list-sorting out of window_gui.h so window_gui.h only needs to be included in *_gui.cpp.
rubidium
parents: 10595
diff changeset
  2123
	Window *w = FindWindowById(WC_MAIN_WINDOW, 0);
0ee9eba64c9c (svn r13140) -Codechange: move the gui-list-sorting out of window_gui.h so window_gui.h only needs to be included in *_gui.cpp.
rubidium
parents: 10595
diff changeset
  2124
	if (w != NULL && w->viewport->follow_vehicle == v->index) {
0ee9eba64c9c (svn r13140) -Codechange: move the gui-list-sorting out of window_gui.h so window_gui.h only needs to be included in *_gui.cpp.
rubidium
parents: 10595
diff changeset
  2125
		ScrollMainWindowTo(v->x_pos, v->y_pos, true); // lock the main view on the vehicle's last position
0ee9eba64c9c (svn r13140) -Codechange: move the gui-list-sorting out of window_gui.h so window_gui.h only needs to be included in *_gui.cpp.
rubidium
parents: 10595
diff changeset
  2126
		w->viewport->follow_vehicle = INVALID_VEHICLE;
0ee9eba64c9c (svn r13140) -Codechange: move the gui-list-sorting out of window_gui.h so window_gui.h only needs to be included in *_gui.cpp.
rubidium
parents: 10595
diff changeset
  2127
	}
0ee9eba64c9c (svn r13140) -Codechange: move the gui-list-sorting out of window_gui.h so window_gui.h only needs to be included in *_gui.cpp.
rubidium
parents: 10595
diff changeset
  2128
}