src/vehicle_gui.cpp
author rubidium
Sun, 25 May 2008 19:17:03 +0000
changeset 10703 2c998f3776d1
parent 10700 b3a94898f55c
child 10716 2406d1520245
permissions -rw-r--r--
(svn r13251) -Codechange: rename _patches to _settings as that is more logic.
-Codechange: move all Settings into substructs of _settings in a way that they are logically grouped.
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"
2159
3b634157c3b2 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2154
diff changeset
    39
8760
ce0891c412ce (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8754
diff changeset
    40
#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
    41
#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
    42
10502
996d9308d650 (svn r13045) -Codechange: make list_d (now GUIList) more generic and uniform.
rubidium
parents: 10481
diff changeset
    43
Sorting _sorting;
2159
3b634157c3b2 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2154
diff changeset
    44
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
    45
2462
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    46
typedef int CDECL VehicleSortListingTypeFunction(const void*, const void*);
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    47
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    48
static VehicleSortListingTypeFunction VehicleNumberSorter;
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    49
static VehicleSortListingTypeFunction VehicleNameSorter;
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    50
static VehicleSortListingTypeFunction VehicleAgeSorter;
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    51
static VehicleSortListingTypeFunction VehicleProfitThisYearSorter;
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    52
static VehicleSortListingTypeFunction VehicleProfitLastYearSorter;
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    53
static VehicleSortListingTypeFunction VehicleCargoSorter;
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    54
static VehicleSortListingTypeFunction VehicleReliabilitySorter;
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    55
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
    56
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
    57
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
    58
static VehicleSortListingTypeFunction VehicleLengthSorter;
2462
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    59
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    60
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
    61
	&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
    62
	&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
    63
	&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
    64
	&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
    65
	&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
    66
	&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
    67
	&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
    68
	&VehicleMaxSpeedSorter,
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
    69
	&VehicleModelSorter,
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
    70
	&VehicleValueSorter,
10234
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
    71
	&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
    72
};
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
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
    74
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
    75
	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
    76
	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
    77
	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
    78
	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
    79
	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
    80
	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
    81
	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
    82
	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
    83
	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
    84
	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
    85
	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
    86
	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
    87
};
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
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
    89
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
    90
{
10502
996d9308d650 (svn r13045) -Codechange: make list_d (now GUIList) more generic and uniform.
rubidium
parents: 10481
diff changeset
    91
	if (!(vl->vehicles.flags & VL_REBUILD)) return;
588
1b60458bdc29 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
    92
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
    93
	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
    94
10502
996d9308d650 (svn r13045) -Codechange: make list_d (now GUIList) more generic and uniform.
rubidium
parents: 10481
diff changeset
    95
	vl->vehicles.list_length = GenerateVehicleSortList(&vl->vehicles.sort_list, &vl->vehicles.list_length, vl->vehicle_type, owner, index, window_type);
588
1b60458bdc29 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
    96
10502
996d9308d650 (svn r13045) -Codechange: make list_d (now GUIList) more generic and uniform.
rubidium
parents: 10481
diff changeset
    97
	vl->vehicles.flags &= ~VL_REBUILD;
996d9308d650 (svn r13045) -Codechange: make list_d (now GUIList) more generic and uniform.
rubidium
parents: 10481
diff changeset
    98
	vl->vehicles.flags |= VL_RESORT;
588
1b60458bdc29 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
    99
}
1b60458bdc29 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   100
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
   101
/* 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
   102
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
   103
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
   104
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   105
void SortVehicleList(VehicleListBase *vl)
588
1b60458bdc29 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   106
{
10502
996d9308d650 (svn r13045) -Codechange: make list_d (now GUIList) more generic and uniform.
rubidium
parents: 10481
diff changeset
   107
	if (!(vl->vehicles.flags & VL_RESORT)) return;
588
1b60458bdc29 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   108
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
   109
	/* 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
   110
	_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
   111
10502
996d9308d650 (svn r13045) -Codechange: make list_d (now GUIList) more generic and uniform.
rubidium
parents: 10481
diff changeset
   112
	_internal_sort_order = (vl->vehicles.flags & VL_DESC) != 0;
996d9308d650 (svn r13045) -Codechange: make list_d (now GUIList) more generic and uniform.
rubidium
parents: 10481
diff changeset
   113
	qsort((void*)vl->vehicles.sort_list, vl->vehicles.list_length, sizeof(vl->vehicles.sort_list[0]),
996d9308d650 (svn r13045) -Codechange: make list_d (now GUIList) more generic and uniform.
rubidium
parents: 10481
diff changeset
   114
		_vehicle_sorter[vl->vehicles.sort_type]);
588
1b60458bdc29 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   115
10502
996d9308d650 (svn r13045) -Codechange: make list_d (now GUIList) more generic and uniform.
rubidium
parents: 10481
diff changeset
   116
	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
   117
	vl->vehicles.flags &= ~VL_RESORT;
588
1b60458bdc29 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   118
}
1b60458bdc29 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   119
10700
b3a94898f55c (svn r13248) -Codechange: Use VehicleList for depot GUI.
peter1138
parents: 10681
diff changeset
   120
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
   121
{
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
	_internal_sort_order = 0;
10700
b3a94898f55c (svn r13248) -Codechange: Use VehicleList for depot GUI.
peter1138
parents: 10681
diff changeset
   123
	if (list->Length() < 2) return;
b3a94898f55c (svn r13248) -Codechange: Use VehicleList for depot GUI.
peter1138
parents: 10681
diff changeset
   124
	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
   125
}
588
1b60458bdc29 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   126
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
   127
/** 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
   128
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
   129
{
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5860
diff changeset
   130
	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
   131
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
   132
	/* draw profit-based colored icons */
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   133
	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
   134
		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
   135
	} 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
   136
		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
   137
	} 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
   138
		pal = PALETTE_TO_YELLOW;
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   139
	} else {
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5860
diff changeset
   140
		pal = PALETTE_TO_GREEN;
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   141
	}
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5860
diff changeset
   142
	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
   143
}
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
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
   145
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
   146
	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
   147
	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
   148
	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
   149
	EngineID engine;
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
   150
};
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
   151
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
   152
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
   153
	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
   154
	RefitOption *items;
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
   155
};
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
   156
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
   157
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
   158
{
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
	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
   160
	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
   161
	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
   162
	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
   163
	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
   164
	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
   165
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
	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
   167
		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
   168
		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
   169
4933
106e2a14ab3c (svn r6920) - Codechange: Ignore refit options of an engine if it has no capacity.
peter1138
parents: 4932
diff changeset
   170
		/* 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
   171
		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
   172
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
   173
		/* 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
   174
		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
   175
			/* 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
   176
			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
   177
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
   178
			/* 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
   179
			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
   180
				/* 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
   181
				 * 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
   182
				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
   183
				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
   184
				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
   185
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
   186
				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
   187
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
				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
   189
					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
   190
					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
   191
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
					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
   193
					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
   194
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
					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
   196
					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
   197
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
					/* 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
   199
					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
   200
						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
   201
					}
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
					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
   204
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
   205
					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
   206
					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
   207
					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
   208
					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
   209
					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
   210
				}
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
				/* 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
   213
				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
   214
				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
   215
			} 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
   216
				/* 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
   217
				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
   218
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
				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
   220
					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
   221
				}
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
				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
   224
					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
   225
					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
   226
					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
   227
					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
   228
					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
   229
				}
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
		}
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
   232
	} 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
   233
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
	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
   235
	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
   236
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
	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
   238
}
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
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
   240
/** 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
   241
 * 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
   242
 * @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
   243
 * @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
   244
 * @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
   245
 * @param rows number of rows(capacity) in caller window
6b5dee376733 (svn r9665) -Documentation: Doxygen corrections,errors, corrections of corrections...
belugas
parents: 6919
diff changeset
   246
 * @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
   247
 * @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
   248
 */
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
   249
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
   250
{
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
   251
	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
   252
	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
   253
	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
   254
	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
   255
	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
   256
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
   257
	/* 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
   258
	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
   259
		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
   260
		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
   261
			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
   262
			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
   263
		}
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
   264
4697
f824e8550d53 (svn r6607) - Fix (r6601): Fix selection of refit type when the list is scrolled.
peter1138
parents: 4695
diff changeset
   265
		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
   266
			/* 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
   267
			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
   268
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
			/* 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
   270
			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
   271
				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
   272
			}
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
   273
			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
   274
		}
3025
ec4098b53115 (svn r3605) - Remove silly macro and fix indenting in DrawVehicleRefitWindow()
peter1138
parents: 2989
diff changeset
   275
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
   276
		sel--;
3025
ec4098b53115 (svn r3605) - Remove silly macro and fix indenting in DrawVehicleRefitWindow()
peter1138
parents: 2989
diff changeset
   277
	}
ec4098b53115 (svn r3605) - Remove silly macro and fix indenting in DrawVehicleRefitWindow()
peter1138
parents: 2989
diff changeset
   278
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
   279
	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
   280
}
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
10584
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   282
struct RefitWindow : public Window {
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   283
	int sel;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   284
	RefitOption *cargo;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   285
	RefitList *list;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   286
	uint length;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   287
	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
   288
10584
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   289
	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
   290
	{
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   291
		this->caption_color = v->owner;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   292
		this->vscroll.cap = 8;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   293
		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
   294
10584
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   295
		this->order = order;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   296
		this->sel  = -1;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   297
		this->list = BuildRefitList(v);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   298
		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
   299
		SetVScrollCount(this, this->list->num_lines);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   300
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   301
		switch (v->type) {
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   302
			case VEH_TRAIN:
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   303
				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
   304
				this->widget[6].data     = STR_RAIL_REFIT_VEHICLE;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   305
				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
   306
				break;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   307
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   308
			case VEH_ROAD:
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   309
				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
   310
				this->widget[6].data     = STR_REFIT_ROAD_VEHICLE;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   311
				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
   312
				break;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   313
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   314
			case VEH_SHIP:
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   315
				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
   316
				this->widget[6].data     = STR_983C_REFIT_SHIP;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   317
				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
   318
				break;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   319
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   320
			case VEH_AIRCRAFT:
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   321
				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
   322
				this->widget[6].data     = STR_A03D_REFIT_AIRCRAFT;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   323
				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
   324
				break;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   325
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   326
			default: NOT_REACHED();
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   327
		}
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
		this->FindWindowPlacementAndResize(desc);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   330
	}
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
	~RefitWindow()
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   333
	{
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   334
		free(this->list->items);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   335
		free(this->list);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   336
	}
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
	virtual void OnPaint()
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   339
	{
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   340
		Vehicle *v = GetVehicle(this->window_number);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   341
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   342
		if (v->type == VEH_TRAIN) {
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   343
			uint length = CountVehiclesInChain(v);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   344
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   345
			if (length != this->length) {
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   346
				/* 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
   347
				free(this->list->items);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   348
				free(this->list);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   349
				this->list = BuildRefitList(v);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   350
				this->length = length;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   351
			}
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
		SetVScrollCount(this, this->list->num_lines);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   355
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   356
		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
   357
		this->DrawWidgets();
10584
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   358
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   359
		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
   360
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   361
		if (this->cargo != NULL) {
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   362
			CommandCost cost;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   363
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   364
			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
   365
							 DC_QUERY_COST, GetCmdRefitVeh(v->type));
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   366
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   367
			if (CmdSucceeded(cost)) {
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   368
				SetDParam(0, this->cargo->cargo);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   369
				SetDParam(1, _returned_refit_capacity);
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   370
				SetDParam(2, cost.GetCost());
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   371
				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
   372
			}
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
	virtual void OnClick(Point pt, int widget)
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   377
	{
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   378
		switch (widget) {
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   379
			case 3: { // listbox
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   380
				int y = pt.y - this->widget[3].top;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   381
				if (y >= 0) {
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   382
					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
   383
					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
   384
				}
10584
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   385
				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
   386
			}
4642
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   387
10584
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   388
			case 6: // refit button
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   389
				if (this->cargo != NULL) {
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   390
					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
   391
10584
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   392
					if (this->order == INVALID_VEH_ORDER_ID) {
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   393
						int command = 0;
4642
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   394
10584
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   395
						switch (v->type) {
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   396
							default: NOT_REACHED();
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   397
							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
   398
							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
   399
							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
   400
							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
   401
						}
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   402
						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
   403
					} else {
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   404
						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
   405
					}
10584
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   406
				}
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   407
				break;
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   408
		}
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   409
	}
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
   410
10584
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   411
	virtual void OnResize(Point new_size, Point delta)
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   412
	{
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   413
		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
   414
		this->widget[3].data = (this->vscroll.cap << 8) + 1;
4642
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   415
	}
10584
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   416
};
4642
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   417
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
static const Widget _vehicle_refit_widgets[] = {
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   420
	{   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
   421
	{    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
   422
	{    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
   423
	{     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
   424
	{  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
   425
	{      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
   426
	{ 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
   427
	{  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
   428
	{   WIDGETS_END},
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   429
};
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
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
   432
	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
   433
	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
   434
	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
   435
	_vehicle_refit_widgets,
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   436
};
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
/** Show the refit window for a vehicle
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   439
* @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
   440
* @param order of the vehicle ( ? )
4642
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   441
*/
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
   442
void ShowVehicleRefitWindow(const Vehicle *v, VehicleOrderID order)
4642
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   443
{
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   444
	DeleteWindowById(WC_VEHICLE_REFIT, v->index);
10584
15d97b3d442d (svn r13128) -Codechange: Make a class of the refit window
peter1138
parents: 10576
diff changeset
   445
	new RefitWindow(&_vehicle_refit_desc, v, order);
4642
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   446
}
486900e9288d (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   447
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
   448
/** 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
   449
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
   450
{
92a3f5cae745 (svn r4561) - NewGRF: implement most of callback 0x23: additional text in vehicle purchase windows.
peter1138
parents: 3492
diff changeset
   451
	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
   452
	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
   453
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
   454
	/* 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
   455
	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
   456
	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
   457
}
92a3f5cae745 (svn r4561) - NewGRF: implement most of callback 0x23: additional text in vehicle purchase windows.
peter1138
parents: 3492
diff changeset
   458
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
   459
/** 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
   460
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
   461
{
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
	/* 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
   463
	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
   464
	/* 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
   465
	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
   466
	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
   467
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
	/* 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
   469
	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
   470
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
	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
   472
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
	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
   474
		/* 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
   475
		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
   476
	} 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
   477
		/* 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
   478
		 * 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
   479
		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
   480
			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
   481
			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
   482
		}
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
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
   484
		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
   485
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
   486
		/* 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
   487
		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
   488
			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
   489
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
   490
			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
   491
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
   492
			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
   493
			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
   494
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
			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
   496
		}
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
	/* 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
   500
	*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
   501
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
	/* 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
   503
	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
   504
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
   505
	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
   506
}
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
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   508
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
   509
/* 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
   510
#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
   511
2462
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   512
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
   513
{
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
   514
	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
   515
	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
   516
	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
   517
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   518
	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
   519
}
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
2462
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   521
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
   522
{
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
   523
	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
   524
	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
   525
	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
   526
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
   527
	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
   528
		_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
   529
		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
   530
		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
   531
	}
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
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
   533
	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
   534
		_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
   535
		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
   536
		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
   537
	}
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
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
   539
	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
   540
243
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   541
	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
   542
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   543
	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
   544
}
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
2462
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   546
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
   547
{
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
   548
	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
   549
	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
   550
	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
   551
243
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   552
	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
   553
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   554
	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
   555
}
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   556
2462
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   557
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
   558
{
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
   559
	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
   560
	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
   561
	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
   562
243
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   563
	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
   564
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   565
	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
   566
}
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   567
2462
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   568
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
   569
{
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
   570
	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
   571
	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
   572
	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
   573
243
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   574
	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
   575
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   576
	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
   577
}
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   578
2462
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   579
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
   580
{
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
   581
	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
   582
	const Vehicle* vb = *(const Vehicle**)b;
2549
f1d3b383d557 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   583
	const Vehicle* v;
f1d3b383d557 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   584
	AcceptedCargo cargoa;
f1d3b383d557 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   585
	AcceptedCargo cargob;
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   586
	int r = 0;
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   587
2549
f1d3b383d557 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   588
	memset(cargoa, 0, sizeof(cargoa));
f1d3b383d557 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   589
	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
   590
	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
   591
	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
   592
6676
30aea9ac89bc (svn r9388) -Codechange: variable scope and type, and standardify all CargoID loops.
peter1138
parents: 6585
diff changeset
   593
	for (CargoID i = 0; i < NUM_CARGO; i++) {
2549
f1d3b383d557 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   594
		r = cargoa[i] - cargob[i];
f1d3b383d557 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   595
		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
   596
	}
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
   597
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
   598
	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
   599
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   600
	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
   601
}
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   602
2462
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   603
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
   604
{
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
   605
	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
   606
	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
   607
	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
   608
243
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   609
	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
   610
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   611
	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
   612
}
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   613
2462
2475587ac5de (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   614
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
   615
{
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
   616
	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
   617
	const Vehicle* vb = *(const Vehicle**)b;
1179
abea5b669f74 (svn r1681) -Feature: New realistic acceleration.
celestar
parents: 1178
diff changeset
   618
	int r;
abea5b669f74 (svn r1681) -Feature: New realistic acceleration.
celestar
parents: 1178
diff changeset
   619
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
   620
	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
   621
		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
   622
	} else {
b680ace4455e (svn r1695) -Fix: I broke maximum speed sorting for anything but trains with the new acceleration. Sorry
Celestar
parents: 1182
diff changeset
   623
		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
   624
	}
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   625
243
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   626
	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
   627
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   628
	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
   629
}
842
ebfd36603ab9 (svn r1323) Adding autoreplace feature
bjarni
parents: 594
diff changeset
   630
2965
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   631
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
   632
{
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
   633
	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
   634
	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
   635
	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
   636
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   637
	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
   638
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   639
	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
   640
}
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
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
   643
{
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
   644
	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
   645
	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
   646
	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
   647
	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
   648
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
   649
	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
   650
	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
   651
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
   652
	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
   653
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   654
	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
   655
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   656
	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
   657
}
edaa999a25dd (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   658
10234
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   659
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
   660
{
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   661
	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
   662
	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
   663
	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
   664
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   665
	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
   666
		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
   667
			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
   668
			break;
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   669
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   670
		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
   671
			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
   672
			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
   673
			break;
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   674
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   675
		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
   676
	}
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
	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
   679
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   680
	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
   681
}
a7ffe39edea9 (svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
rubidium
parents: 10229
diff changeset
   682
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6474
diff changeset
   683
void InitializeGUI()
1246
45f15251412b (svn r1750) - Feature: [ 1093261 ] Saving vehicle sorting criteria for each vehicle type (bociusz)
darkvater
parents: 1191
diff changeset
   684
{
45f15251412b (svn r1750) - Feature: [ 1093261 ] Saving vehicle sorting criteria for each vehicle type (bociusz)
darkvater
parents: 1191
diff changeset
   685
	memset(&_sorting, 0, sizeof(_sorting));
45f15251412b (svn r1750) - Feature: [ 1093261 ] Saving vehicle sorting criteria for each vehicle type (bociusz)
darkvater
parents: 1191
diff changeset
   686
}
2552
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   687
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   688
/** Assigns an already open vehicle window to a new vehicle.
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   689
 * Assigns an already open vehicle window to a new vehicle. If the vehicle got
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   690
 * 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
   691
 * @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
   692
 * @param to_index the new owner of the window
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   693
 */
10371
f4ebcb863ad6 (svn r12912) -Codechange: overloaded ChangeVehicleViewWindow() so each argument can be either a Vehicle pointer or a VehicleID
bjarni
parents: 10257
diff changeset
   694
void ChangeVehicleViewWindow(VehicleID from_index, VehicleID to_index)
2552
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   695
{
10371
f4ebcb863ad6 (svn r12912) -Codechange: overloaded ChangeVehicleViewWindow() so each argument can be either a Vehicle pointer or a VehicleID
bjarni
parents: 10257
diff changeset
   696
	Window *w = FindWindowById(WC_VEHICLE_VIEW, from_index);
2552
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   697
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   698
	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
   699
		w->window_number = to_index;
10504
7c80c8aaa1df (svn r13047) -Codechange: remove vp_d
glx
parents: 10503
diff changeset
   700
		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
   701
		w->SetDirty();
2552
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   702
10371
f4ebcb863ad6 (svn r12912) -Codechange: overloaded ChangeVehicleViewWindow() so each argument can be either a Vehicle pointer or a VehicleID
bjarni
parents: 10257
diff changeset
   703
		w = FindWindowById(WC_VEHICLE_ORDERS, from_index);
2552
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   704
		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
   705
			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
   706
			w->SetDirty();
2552
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   707
		}
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   708
10371
f4ebcb863ad6 (svn r12912) -Codechange: overloaded ChangeVehicleViewWindow() so each argument can be either a Vehicle pointer or a VehicleID
bjarni
parents: 10257
diff changeset
   709
		w = FindWindowById(WC_VEHICLE_REFIT, from_index);
2552
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   710
		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
   711
			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
   712
			w->SetDirty();
2552
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   713
		}
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   714
10371
f4ebcb863ad6 (svn r12912) -Codechange: overloaded ChangeVehicleViewWindow() so each argument can be either a Vehicle pointer or a VehicleID
bjarni
parents: 10257
diff changeset
   715
		w = FindWindowById(WC_VEHICLE_DETAILS, from_index);
2552
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   716
		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
   717
			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
   718
			w->SetDirty();
2552
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   719
		}
9134
618bee700fe7 (svn r12261) -Fix [FS#1805]: autoreplace did not update vehicle index for timetable window
glx
parents: 9110
diff changeset
   720
10371
f4ebcb863ad6 (svn r12912) -Codechange: overloaded ChangeVehicleViewWindow() so each argument can be either a Vehicle pointer or a VehicleID
bjarni
parents: 10257
diff changeset
   721
		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
   722
		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
   723
			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
   724
			w->SetDirty();
9134
618bee700fe7 (svn r12261) -Fix [FS#1805]: autoreplace did not update vehicle index for timetable window
glx
parents: 9110
diff changeset
   725
		}
2552
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   726
	}
fb174febb0b1 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   727
}
4442
8d8d0c2df7cb (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
   728
5269
3f3eead5ace2 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
   729
enum VehicleListWindowWidgets {
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   730
	VLW_WIDGET_CLOSEBOX = 0,
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   731
	VLW_WIDGET_CAPTION,
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   732
	VLW_WIDGET_STICKY,
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   733
	VLW_WIDGET_SORT_ORDER,
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   734
	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
   735
	VLW_WIDGET_EMPTY_TOP_RIGHT,
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   736
	VLW_WIDGET_LIST,
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   737
	VLW_WIDGET_SCROLLBAR,
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   738
	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
   739
	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
   740
	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
   741
	VLW_WIDGET_STOP_ALL,
a2cdac5529f7 (svn r6570) -Feature: added "start all" and "stop all" buttons to the vehicle lists
bjarni
parents: 4669
diff changeset
   742
	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
   743
	VLW_WIDGET_EMPTY_BOTTOM_RIGHT,
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   744
	VLW_WIDGET_RESIZE,
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   745
};
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
static const Widget _vehicle_list_widgets[] = {
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   748
	{   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
   749
	{    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
   750
	{  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
   751
	{ 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
   752
	{   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
   753
	{      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
   754
	{     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
   755
	{  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
   756
	/* 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
   757
	{      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
   758
8bb2b6d99ce7 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   759
	{ 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
   760
	{   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
   761
8bb2b6d99ce7 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   762
	{ 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
   763
	{ 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
   764
	{      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
   765
	{  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
   766
	{   WIDGETS_END},
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   767
};
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   768
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
   769
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
   770
{
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   771
	const Order *order;
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   772
	int sel, i = 0;
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   773
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   774
	sel = v->cur_order_index;
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   775
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   776
	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
   777
		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
   778
		sel--;
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   779
9332
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9282
diff changeset
   780
		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
   781
			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
   782
9336
3f75a2c5e0d3 (svn r12588) -Codechange: do not access the destination of an order directly.
rubidium
parents: 9332
diff changeset
   783
			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
   784
			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
   785
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   786
			y += 6;
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   787
			if (++i == 4) break;
20770a208a04 (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   788
		}
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
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   792
/**
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   793
 * Window for the (old) vehicle listing.
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   794
 *
4449
7b1d5a6d15be (svn r6227) -Codechange: added window type flags to use with PlayerVehWndProc
bjarni
parents: 4442
diff changeset
   795
 * bitmask for w->window_number
7b1d5a6d15be (svn r6227) -Codechange: added window type flags to use with PlayerVehWndProc
bjarni
parents: 4442
diff changeset
   796
 * 0-7 PlayerID (owner)
7b1d5a6d15be (svn r6227) -Codechange: added window type flags to use with PlayerVehWndProc
bjarni
parents: 4442
diff changeset
   797
 * 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
   798
 * 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
   799
 * 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
   800
 */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   801
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
   802
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
   803
	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
   804
	{
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   805
		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
   806
		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
   807
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   808
		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
   809
		this->vehicles.list_length = 0;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   810
		this->vehicles.sort_list = NULL;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   811
		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
   812
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   813
		/* 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
   814
		* 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
   815
		if (player == _local_player) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   816
			this->HideWidget(VLW_WIDGET_OTHER_PLAYER_FILLER);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   817
			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
   818
		} else {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   819
			this->SetWidgetsHiddenState(true,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   820
				VLW_WIDGET_AVAILABLE_VEHICLES,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   821
				VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   822
				VLW_WIDGET_STOP_ALL,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   823
				VLW_WIDGET_START_ALL,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   824
				VLW_WIDGET_EMPTY_BOTTOM_RIGHT,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   825
				WIDGET_LIST_END);
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
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   828
		/* Set up the window widgets */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   829
		switch (this->vehicle_type) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   830
			case VEH_TRAIN:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   831
				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
   832
				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
   833
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   834
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   835
			case VEH_ROAD:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   836
				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
   837
				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
   838
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   839
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   840
			case VEH_SHIP:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   841
				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
   842
				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
   843
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   844
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   845
			case VEH_AIRCRAFT:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   846
				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
   847
				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
   848
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   849
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   850
			default: NOT_REACHED();
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
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   853
		switch (window_type) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   854
			case VLW_SHARED_ORDERS:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   855
				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
   856
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   857
			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
   858
				switch (this->vehicle_type) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   859
					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
   860
					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
   861
					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
   862
					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
   863
					default: NOT_REACHED(); break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   864
				}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   865
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   866
			case VLW_STATION_LIST: /* Station Name */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   867
				switch (this->vehicle_type) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   868
					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
   869
					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
   870
					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
   871
					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
   872
					default: NOT_REACHED(); break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   873
				}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   874
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   875
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   876
			case VLW_DEPOT_LIST:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   877
				switch (this->vehicle_type) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   878
					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
   879
					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
   880
					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
   881
					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
   882
					default: NOT_REACHED(); break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   883
				}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   884
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   885
			default: NOT_REACHED(); break;
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
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   888
		switch (this->vehicle_type) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   889
			case VEH_TRAIN:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   890
				this->resize.step_width = 1;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   891
				/* Fallthrough */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   892
			case VEH_ROAD:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   893
				this->vscroll.cap = 7;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   894
				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
   895
				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
   896
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   897
			case VEH_SHIP:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   898
			case VEH_AIRCRAFT:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   899
				this->vscroll.cap = 4;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   900
				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
   901
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   902
			default: NOT_REACHED();
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
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   906
		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
   907
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   908
		/* 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
   909
			* 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
   910
			* from having conditionals during window operation */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   911
		switch (this->vehicle_type) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   912
			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
   913
			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
   914
			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
   915
			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
   916
			default: NOT_REACHED(); break;
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
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   919
		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
   920
		this->vehicles.sort_type = this->sorting->criteria;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   921
		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
   922
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   923
		this->FindWindowPlacementAndResize(desc);
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
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   926
	~VehicleListWindow()
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
		free((void*)this->vehicles.sort_list);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   929
	}
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
	virtual void OnPaint()
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   932
	{
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   933
		int x = 2;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   934
		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
   935
		int max;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   936
		int i;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   937
		const PlayerID owner = (PlayerID)this->caption_color;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   938
		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
   939
		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
   940
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   941
		BuildVehicleList(this, owner, index, window_type);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   942
		SortVehicleList(this);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   943
		SetVScrollCount(this, this->vehicles.list_length);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   944
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   945
		/* draw the widgets */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   946
		switch (window_type) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   947
			case VLW_SHARED_ORDERS: /* Shared Orders */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   948
				if (this->vehicles.list_length == 0) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   949
					/* 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
   950
					* 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
   951
					NOT_REACHED();
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   952
				}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   953
				SetDParam(0, this->vscroll.count);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   954
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   955
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   956
			case VLW_STANDARD: /* Company Name */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   957
				SetDParam(0, owner);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   958
				SetDParam(1, this->vscroll.count);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   959
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   960
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   961
			case VLW_STATION_LIST: /* Station Name */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   962
				SetDParam(0, index);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   963
				SetDParam(1, this->vscroll.count);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   964
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   965
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   966
			case VLW_DEPOT_LIST:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   967
				switch (this->vehicle_type) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   968
					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
   969
					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
   970
					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
   971
					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
   972
					default: NOT_REACHED(); break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   973
				}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   974
				if (this->vehicle_type == VEH_AIRCRAFT) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   975
					SetDParam(1, index); // Airport name
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   976
				} else {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   977
					SetDParam(1, GetDepot(index)->town_index);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   978
				}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   979
				SetDParam(2, this->vscroll.count);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   980
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   981
			default: NOT_REACHED(); break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   982
		}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   983
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   984
		this->SetWidgetsDisabledState(this->vehicles.list_length == 0,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   985
			VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   986
			VLW_WIDGET_STOP_ALL,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   987
			VLW_WIDGET_START_ALL,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   988
			WIDGET_LIST_END);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   989
10595
7957c71b0dfe (svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium
parents: 10584
diff changeset
   990
		this->DrawWidgets();
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   991
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   992
		/* draw sorting criteria string */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   993
		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
   994
		/* 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
   995
		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
   996
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   997
		max = min(this->vscroll.pos + this->vscroll.cap, this->vehicles.list_length);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   998
		for (i = this->vscroll.pos; i < max; ++i) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
   999
			const Vehicle *v = this->vehicles.sort_list[i];
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1000
			StringID str;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1001
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1002
			SetDParam(0, v->GetDisplayProfitThisYear());
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1003
			SetDParam(1, v->GetDisplayProfitLastYear());
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1004
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1005
			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
  1006
			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
  1007
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1008
			if (v->name != NULL) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1009
				/* 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
  1010
				SetDParam(0, v->index);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1011
				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
  1012
			}
4545
ac6c6a32b18f (svn r6377) -Codechange: Set up the widgets in the WE_CREATE instead of on every WE_PAINT
Darkvater
parents: 4542
diff changeset
  1013
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1014
			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
  1015
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1016
			if (v->IsInDepot()) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1017
				str = STR_021F;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1018
			} else {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1019
				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
  1020
			}
8d8d0c2df7cb (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1021
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1022
			SetDParam(0, v->unitnumber);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1023
			DrawString(x, y + 2, str, TC_FROMSTRING);
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
			DrawVehicleProfitButton(v, x, y + 13);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1026
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1027
			y += this->resize.step_height;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1028
		}
4442
8d8d0c2df7cb (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1029
	}
10503
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
	virtual void OnClick(Point pt, int widget)
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1032
	{
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1033
		switch (widget) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1034
			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
  1035
				this->vehicles.flags ^= VL_DESC;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1036
				this->vehicles.flags |= VL_RESORT;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1037
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1038
				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
  1039
				this->SetDirty();
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1040
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1041
			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
  1042
				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
  1043
				return;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1044
			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
  1045
				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
  1046
				const Vehicle *v;
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
				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
  1049
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1050
				id_v += this->vscroll.pos;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1051
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1052
				if (id_v >= this->vehicles.list_length) return; // click out of list bound
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
				v = this->vehicles.sort_list[id_v];
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1055
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1056
				ShowVehicleViewWindow(v);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1057
			} break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1058
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1059
			case VLW_WIDGET_AVAILABLE_VEHICLES:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1060
				ShowBuildVehicleWindow(0, this->vehicle_type);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1061
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1062
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1063
			case VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN: {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1064
				static StringID action_str[] = {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1065
					STR_REPLACE_VEHICLES,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1066
					STR_SEND_FOR_SERVICING,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1067
					STR_NULL,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1068
					INVALID_STRING_ID
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1069
				};
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1070
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1071
				static const StringID depot_name[] = {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1072
					STR_SEND_TRAIN_TO_DEPOT,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1073
					STR_SEND_ROAD_VEHICLE_TO_DEPOT,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1074
					STR_SEND_SHIP_TO_DEPOT,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1075
					STR_SEND_AIRCRAFT_TO_HANGAR
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1076
				};
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1077
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1078
				/* 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
  1079
				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
  1080
				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
  1081
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1082
			}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1083
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1084
			case VLW_WIDGET_STOP_ALL:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1085
			case VLW_WIDGET_START_ALL:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1086
				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
  1087
				break;
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
	}
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
	virtual void OnDropdownSelect(int widget, int index)
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1092
	{
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1093
		switch (widget) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1094
			case VLW_WIDGET_SORT_BY_PULLDOWN:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1095
				if (this->vehicles.sort_type != index) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1096
					/* value has changed -> resort */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1097
					this->vehicles.flags |= VL_RESORT;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1098
					this->vehicles.sort_type = index;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1099
					this->sorting->criteria = this->vehicles.sort_type;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1100
				}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1101
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1102
			case VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN:
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1103
				assert(this->vehicles.list_length != 0);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1104
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1105
				switch (index) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1106
					case 0: /* Replace window */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1107
						ShowReplaceGroupVehicleWindow(DEFAULT_GROUP, this->vehicle_type);
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1108
						break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1109
					case 1: /* Send for servicing */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1110
						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
  1111
							(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
  1112
							NULL,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1113
							GetCmdSendToDepot(this->vehicle_type));
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1114
						break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1115
					case 2: /* Send to Depots */
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1116
						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
  1117
							(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
  1118
							NULL,
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1119
							GetCmdSendToDepot(this->vehicle_type));
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1120
						break;
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
					default: NOT_REACHED();
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1123
				}
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1124
				break;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1125
			default: NOT_REACHED();
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
		this->SetDirty();
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1128
	}
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
	virtual void OnTick()
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1131
	{
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1132
		if (_pause_game != 0) return;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1133
		if (--this->vehicles.resort_timer == 0) {
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1134
			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
  1135
			PlayerID owner = (PlayerID)this->caption_color;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1136
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1137
			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
  1138
			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
  1139
			this->vehicles.flags |= VL_RESORT;
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1140
			this->SetDirty();
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
	}
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
	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
  1145
	{
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1146
		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
  1147
		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
  1148
	}
10621
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
	virtual void OnInvalidateData(int data)
3edd349d9c14 (svn r13165) -Codechange: replace some RebuildXXXList/ResortXXXList+InvalidateWindowXXX with InvalidateWindowXXXData.
rubidium
parents: 10596
diff changeset
  1151
	{
3edd349d9c14 (svn r13165) -Codechange: replace some RebuildXXXList/ResortXXXList+InvalidateWindowXXX with InvalidateWindowXXXData.
rubidium
parents: 10596
diff changeset
  1152
		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
  1153
	}
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1154
};
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1155
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1156
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
  1157
	WDP_AUTO, WDP_AUTO, 260, 182, 260, 182,
6144
5a0ffbf27ced (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 6098
diff changeset
  1158
	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
  1159
	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
  1160
	_vehicle_list_widgets,
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1161
};
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1162
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1163
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
  1164
	WDP_AUTO, WDP_AUTO, 260, 182, 260, 182,
6144
5a0ffbf27ced (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 6098
diff changeset
  1165
	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
  1166
	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
  1167
	_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
  1168
};
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
  1169
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
  1170
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
  1171
	WDP_AUTO, WDP_AUTO, 260, 182, 260, 182,
6144
5a0ffbf27ced (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 6098
diff changeset
  1172
	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
  1173
	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
  1174
	_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
  1175
};
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
  1176
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
  1177
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
  1178
	WDP_AUTO, WDP_AUTO, 260, 182, 260, 182,
6144
5a0ffbf27ced (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 6098
diff changeset
  1179
	WC_AIRCRAFT_LIST, WC_NONE,
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1180
	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
  1181
	_vehicle_list_widgets,
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1182
};
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1183
7134
c5a90dd41166 (svn r9869) -Codechange: replace some bytes with VehicleType, i.e. more type strictness.
rubidium
parents: 7117
diff changeset
  1184
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
  1185
{
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1186
	VehicleListWindow *w;
5005
21e84e53c732 (svn r7022) -Fix [FS#292]: Properly guard against viewing company-sensitive information from
Darkvater
parents: 4999
diff changeset
  1187
	WindowNumber num;
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1188
5005
21e84e53c732 (svn r7022) -Fix [FS#292]: Properly guard against viewing company-sensitive information from
Darkvater
parents: 4999
diff changeset
  1189
	if (!IsValidPlayer(player)) return;
21e84e53c732 (svn r7022) -Fix [FS#292]: Properly guard against viewing company-sensitive information from
Darkvater
parents: 4999
diff changeset
  1190
5996
d4b66530ded4 (svn r8293) -Codechange: overloaded ShowVehicleListWindow() so it can open all types of vehicle lists (depending on arguments)
bjarni
parents: 5919
diff changeset
  1191
	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
  1192
5269
3f3eead5ace2 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1193
	/* 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
  1194
	 * 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
  1195
	 * 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
  1196
	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
  1197
		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
  1198
		case VEH_TRAIN:
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1199
			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
  1200
			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
  1201
			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
  1202
		case VEH_ROAD:
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1203
			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
  1204
			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
  1205
			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
  1206
		case VEH_SHIP:
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1207
			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
  1208
			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
  1209
		case VEH_AIRCRAFT:
10503
f7032c1220d9 (svn r13046) -Codechange: make classes of the VehicleListWindow and the VehicleGroupWindow.
rubidium
parents: 10502
diff changeset
  1210
			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
  1211
			break;
3f3eead5ace2 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1212
	}
3f3eead5ace2 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1213
3f3eead5ace2 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1214
	if (w != NULL) {
3f3eead5ace2 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1215
		/* 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
  1216
		w->resize.width = w->width;
3f3eead5ace2 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1217
		w->resize.height = w->height;
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1218
	}
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1219
}
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1220
7134
c5a90dd41166 (svn r9869) -Codechange: replace some bytes with VehicleType, i.e. more type strictness.
rubidium
parents: 7117
diff changeset
  1221
void ShowVehicleListWindow(PlayerID player, VehicleType vehicle_type)
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1222
{
10703
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10700
diff changeset
  1223
	/* If _settings.gui.advanced_vehicle_list > 1, display the Advanced list
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10700
diff changeset
  1224
	 * if _settings.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
  1225
	 * 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
  1226
	 */
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
  1227
10703
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10700
diff changeset
  1228
	if ((_settings.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
  1229
		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
  1230
	} 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
  1231
		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
  1232
	}
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1233
}
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1234
5996
d4b66530ded4 (svn r8293) -Codechange: overloaded ShowVehicleListWindow() so it can open all types of vehicle lists (depending on arguments)
bjarni
parents: 5919
diff changeset
  1235
void ShowVehicleListWindow(const Vehicle *v)
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1236
{
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1237
	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
  1238
	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
  1239
}
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
  1240
7134
c5a90dd41166 (svn r9869) -Codechange: replace some bytes with VehicleType, i.e. more type strictness.
rubidium
parents: 7117
diff changeset
  1241
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
  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
	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
  1244
}
d4b66530ded4 (svn r8293) -Codechange: overloaded ShowVehicleListWindow() so it can open all types of vehicle lists (depending on arguments)
bjarni
parents: 5919
diff changeset
  1245
7134
c5a90dd41166 (svn r9869) -Codechange: replace some bytes with VehicleType, i.e. more type strictness.
rubidium
parents: 7117
diff changeset
  1246
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
  1247
{
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
  1248
	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
  1249
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
  1250
	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
  1251
		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
  1252
	} 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
  1253
		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
  1254
		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
  1255
		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
  1256
	}
5996
d4b66530ded4 (svn r8293) -Codechange: overloaded ShowVehicleListWindow() so it can open all types of vehicle lists (depending on arguments)
bjarni
parents: 5919
diff changeset
  1257
	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
  1258
}
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1259
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1260
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
  1261
/* 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
  1262
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
/** 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
  1264
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
  1265
	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
  1266
	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
  1267
	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
  1268
	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
  1269
	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
  1270
	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
  1271
	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
  1272
	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
  1273
	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
  1274
	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
  1275
	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
  1276
	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
  1277
	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
  1278
	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
  1279
};
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
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
/** 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
  1282
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
  1283
	{   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
  1284
	{    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
  1285
	{ 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
  1286
	{      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
  1287
	{ 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
  1288
	{ 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
  1289
	{      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
  1290
	{     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
  1291
	{  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
  1292
	{ 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
  1293
	{ 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
  1294
	{ 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
  1295
	{ 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
  1296
	{  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
  1297
	{   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
  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
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
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
/** 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
  1302
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
  1303
	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
  1304
	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
  1305
	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
  1306
	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
  1307
};
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
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
/** 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
  1310
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
  1311
	{ // 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
  1312
		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
  1313
		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
  1314
		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
  1315
		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
  1316
	},
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
	{ // 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
  1318
		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
  1319
		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
  1320
		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
  1321
		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
  1322
	},
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
	{ // 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
  1324
		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
  1325
		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
  1326
		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
  1327
		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
  1328
	},
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
	{ // 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
  1330
		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
  1331
		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
  1332
		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
  1333
		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
  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
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
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 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
  1339
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
  1340
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
  1341
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
  1342
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
  1343
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1344
struct VehicleDetailsWindow : Window {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1345
	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
  1346
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1347
	/** Initialize a newly created vehicle details window */
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1348
	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
  1349
	{
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1350
		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
  1351
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1352
		switch (v->type) {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1353
			case VEH_TRAIN:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1354
				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
  1355
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1356
				this->vscroll.cap = 6;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1357
				this->height += 12;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1358
				this->resize.step_height = 14;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1359
				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
  1360
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1361
				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
  1362
				this->widget[VLD_WIDGET_CAPTION].data = STR_8802_DETAILS;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1363
				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
  1364
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1365
			case VEH_ROAD: {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1366
				this->widget[VLD_WIDGET_CAPTION].data = STR_900C_DETAILS;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1367
				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
  1368
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1369
				if (!RoadVehHasArticPart(v)) break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1370
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1371
				/* 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
  1372
				 * 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
  1373
				uint height_extension = 15 - 11;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1374
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1375
				/* Add space for the cargo amount for each part. */
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1376
				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
  1377
					height_extension += 11;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1378
				}
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1379
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1380
				ResizeWindow(this, 0, height_extension);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1381
			} break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1382
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1383
			case VEH_SHIP:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1384
				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
  1385
				this->widget[VLD_WIDGET_CAPTION].data = STR_9811_DETAILS;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1386
				break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1387
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1388
			case VEH_AIRCRAFT:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1389
				ResizeWindow(this, 0, 11);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1390
				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
  1391
				this->widget[VLD_WIDGET_CAPTION].data = STR_A00C_DETAILS;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1392
				break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1393
			default: NOT_REACHED();
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1394
		}
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1395
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1396
		if (v->type != VEH_TRAIN) {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1397
			this->vscroll.cap = 1;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1398
			this->widget[VLD_WIDGET_MIDDLE_DETAILS].right += 12;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1399
		}
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1400
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1401
		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
  1402
		this->caption_color = v->owner;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1403
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1404
		this->tab = 0;
10681
3aa3de4d448b (svn r13225) -Fix (r13041): Missing calls to FindWindowPlacementAndResize() from lots
peter1138
parents: 10641
diff changeset
  1405
3aa3de4d448b (svn r13225) -Fix (r13041): Missing calls to FindWindowPlacementAndResize() from lots
peter1138
parents: 10641
diff changeset
  1406
		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
  1407
	}
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1408
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1409
	/** Checks whether service interval is enabled for the vehicle. */
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1410
	static bool IsVehicleServiceIntervalEnabled(const VehicleType vehicle_type)
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1411
	{
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1412
		switch (vehicle_type) {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1413
			default: NOT_REACHED();
10703
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10700
diff changeset
  1414
			case VEH_TRAIN:    return _settings.vehicle.servint_trains   != 0; break;
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10700
diff changeset
  1415
			case VEH_ROAD:     return _settings.vehicle.servint_roadveh  != 0; break;
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10700
diff changeset
  1416
			case VEH_SHIP:     return _settings.vehicle.servint_ships    != 0; break;
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10700
diff changeset
  1417
			case VEH_AIRCRAFT: return _settings.vehicle.servint_aircraft != 0; break;
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1418
		}
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1419
		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
  1420
	}
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1421
10576
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
	 * 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
  1424
	 *
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1425
	 * @param v current vehicle
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1426
	 * @param x The x coordinate
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1427
	 * @param y The y coordinate
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1428
	 * @param vscroll_pos (train only)
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1429
	 * @param vscroll_cap (train only)
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1430
	 * @param det_tab (train only)
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
	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
  1433
	{
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1434
		switch (v->type) {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1435
			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
  1436
			case VEH_ROAD:     DrawRoadVehDetails(v, x, y);  break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1437
			case VEH_SHIP:     DrawShipDetails(v, x, y);     break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1438
			case VEH_AIRCRAFT: DrawAircraftDetails(v, x, y); break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1439
			default: NOT_REACHED();
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1440
		}
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1441
	}
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
  1442
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1443
	/** Repaint vehicle details window. */
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1444
	virtual void OnPaint()
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1445
	{
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1446
		const Vehicle *v = GetVehicle(this->window_number);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1447
		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
  1448
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1449
		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
  1450
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1451
		if (v->type == VEH_TRAIN) {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1452
			this->DisableWidget(det_tab + VLD_WIDGET_DETAILS_CARGO_CARRIED);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1453
			SetVScrollCount(this, GetTrainDetailsWndVScroll(v->index, det_tab));
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1454
		}
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
  1455
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1456
		this->SetWidgetsHiddenState(v->type != VEH_TRAIN,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1457
			VLD_WIDGET_SCROLLBAR,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1458
			VLD_WIDGET_DETAILS_CARGO_CARRIED,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1459
			VLD_WIDGET_DETAILS_TRAIN_VEHICLES,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1460
			VLD_WIDGET_DETAILS_CAPACITY_OF_EACH,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1461
			VLD_WIDGET_DETAILS_TOTAL_CARGO,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1462
			VLD_WIDGET_RESIZE,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1463
			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
  1464
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1465
		/* Disable service-scroller when interval is set to disabled */
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1466
		this->SetWidgetsDisabledState(!IsVehicleServiceIntervalEnabled(v->type),
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1467
			VLD_WIDGET_INCREASE_SERVICING_INTERVAL,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1468
			VLD_WIDGET_DECREASE_SERVICING_INTERVAL,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1469
			WIDGET_LIST_END);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1470
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1471
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1472
		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
  1473
		this->DrawWidgets();
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1474
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1475
		/* Draw running cost */
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1476
		SetDParam(1, v->age / 366);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1477
		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
  1478
		SetDParam(2, v->max_age / 366);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1479
		SetDParam(3, v->GetDisplayRunningCost());
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1480
		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
  1481
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1482
		/* Draw max speed */
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1483
		switch (v->type) {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1484
			case VEH_TRAIN:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1485
				SetDParam(2, v->GetDisplayMaxSpeed());
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1486
				SetDParam(1, v->u.rail.cached_power);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1487
				SetDParam(0, v->u.rail.cached_weight);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1488
				SetDParam(3, v->u.rail.cached_max_te / 1000);
10703
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10700
diff changeset
  1489
				DrawString(2, 25, (_settings.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
  1490
					STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1491
					STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED, TC_FROMSTRING);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1492
				break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1493
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1494
			case VEH_ROAD:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1495
			case VEH_SHIP:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1496
			case VEH_AIRCRAFT:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1497
				SetDParam(0, v->GetDisplayMaxSpeed());
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1498
				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
  1499
				break;
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
			default: NOT_REACHED();
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1502
		}
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1503
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1504
		/* Draw profit */
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1505
		SetDParam(0, v->GetDisplayProfitThisYear());
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1506
		SetDParam(1, v->GetDisplayProfitLastYear());
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1507
		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
  1508
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1509
		/* Draw breakdown & reliability */
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1510
		SetDParam(0, v->reliability * 100 >> 16);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1511
		SetDParam(1, v->breakdowns_since_last_service);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1512
		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
  1513
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1514
		/* Draw service interval text */
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1515
		SetDParam(0, v->service_interval);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1516
		SetDParam(1, v->date_of_last_service);
10703
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10700
diff changeset
  1517
		DrawString(13, this->height - (v->type != VEH_TRAIN ? 11 : 23), _settings.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
  1518
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1519
		switch (v->type) {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1520
			case VEH_TRAIN:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1521
				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
  1522
				break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1523
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1524
			case VEH_ROAD:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1525
			case VEH_SHIP:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1526
			case VEH_AIRCRAFT:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1527
				DrawVehicleImage(v, 3, 57, INVALID_VEHICLE, 0, 0);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1528
				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
  1529
				break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1530
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1531
			default: NOT_REACHED();
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1532
		}
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
  1533
	}
10576
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
	virtual void OnClick(Point pt, int widget)
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1536
	{
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1537
		/** Message strings for renaming vehicles indexed by vehicle type. */
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1538
		static const StringID _name_vehicle_title[] = {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1539
			STR_8865_NAME_TRAIN,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1540
			STR_902C_NAME_ROAD_VEHICLE,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1541
			STR_9831_NAME_SHIP,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1542
			STR_A030_NAME_AIRCRAFT
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1543
		};
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1544
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1545
		switch (widget) {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1546
			case VLD_WIDGET_RENAME_VEHICLE: {// rename
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1547
				const Vehicle *v = GetVehicle(this->window_number);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1548
				SetDParam(0, v->index);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1549
				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
  1550
			} break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1551
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1552
			case VLD_WIDGET_INCREASE_SERVICING_INTERVAL:   // increase int
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1553
			case VLD_WIDGET_DECREASE_SERVICING_INTERVAL: { // decrease int
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1554
				int mod = _ctrl_pressed ? 5 : 10;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1555
				const Vehicle *v = GetVehicle(this->window_number);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1556
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1557
				mod = (widget == VLD_WIDGET_DECREASE_SERVICING_INTERVAL) ? -mod : mod;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1558
				mod = GetServiceIntervalClamped(mod + v->service_interval);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1559
				if (mod == v->service_interval) return;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1560
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1561
				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
  1562
			} break;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1563
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1564
			case VLD_WIDGET_DETAILS_CARGO_CARRIED:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1565
			case VLD_WIDGET_DETAILS_TRAIN_VEHICLES:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1566
			case VLD_WIDGET_DETAILS_CAPACITY_OF_EACH:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1567
			case VLD_WIDGET_DETAILS_TOTAL_CARGO:
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1568
				this->SetWidgetsDisabledState(false,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1569
					VLD_WIDGET_DETAILS_CARGO_CARRIED,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1570
					VLD_WIDGET_DETAILS_TRAIN_VEHICLES,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1571
					VLD_WIDGET_DETAILS_CAPACITY_OF_EACH,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1572
					VLD_WIDGET_DETAILS_TOTAL_CARGO,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1573
					widget,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1574
					WIDGET_LIST_END);
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1575
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1576
				this->tab = widget - VLD_WIDGET_DETAILS_CARGO_CARRIED;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1577
				this->SetDirty();
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1578
				break;
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
	}
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
	virtual void OnQueryTextFinished(char *str)
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1583
	{
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1584
		/** 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
  1585
		static const StringID _name_vehicle_error[] = {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1586
			STR_8866_CAN_T_NAME_TRAIN,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1587
			STR_902D_CAN_T_NAME_ROAD_VEHICLE,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1588
			STR_9832_CAN_T_NAME_SHIP,
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1589
			STR_A031_CAN_T_NAME_AIRCRAFT
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1590
		};
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1591
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1592
		if (!StrEmpty(str)) {
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1593
			_cmd_text = str;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1594
			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
  1595
		}
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1596
	}
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
	virtual void OnResize(Point new_size, Point delta)
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1599
	{
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1600
		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
  1601
		if (delta.y == 0) return;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1602
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1603
		this->vscroll.cap += delta.y / 14;
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1604
		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
  1605
	}
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1606
};
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
  1607
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
/** 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
  1609
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
  1610
	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
  1611
	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
  1612
	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
  1613
	_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
  1614
};
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
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
/** 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
  1617
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
  1618
{
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1619
	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
  1620
	DeleteWindowById(WC_VEHICLE_DETAILS, v->index);
10576
3a8790d797ef (svn r13120) -Codechange: make a class of the VehicleDetailsWindow.
rubidium
parents: 10525
diff changeset
  1621
	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
  1622
}
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1623
269979f5319d (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 8012
diff changeset
  1624
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1625
/* Unified vehicle GUI - Vehicle View Window */
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1626
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1627
/** Vehicle view widgets. */
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1628
static const Widget _vehicle_view_widgets[] = {
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1629
	{   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
  1630
	{    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
  1631
	{  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
  1632
	{      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
  1633
	{      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
  1634
	{    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
  1635
	{ 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
  1636
	{ 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
  1637
	{ 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
  1638
	{ 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
  1639
	{ 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
  1640
	{ 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
  1641
	{      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
  1642
	{  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
  1643
	{ 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
  1644
	{ 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
  1645
{   WIDGETS_END},
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
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1648
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1649
/** 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
  1650
static const WindowDesc _vehicle_view_desc = {
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1651
	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
  1652
	WC_VEHICLE_VIEW, WC_NONE,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1653
	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
  1654
	_vehicle_view_widgets,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1655
};
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1656
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1657
/** 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
  1658
 *  default_height are different for train view.
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1659
 */
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1660
static const WindowDesc _train_view_desc = {
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1661
	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
  1662
	WC_VEHICLE_VIEW, WC_NONE,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1663
	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
  1664
	_vehicle_view_widgets,
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
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1667
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1668
/* 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
  1669
	 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
  1670
assert_compile(VEH_TRAIN == 0);
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1671
assert_compile(VEH_ROAD == 1);
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1672
assert_compile(VEH_SHIP == 2);
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1673
assert_compile(VEH_AIRCRAFT == 3);
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1674
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1675
/** 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
  1676
static const ZoomLevel _vehicle_view_zoom_levels[] = {
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1677
	ZOOM_LVL_TRAIN,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1678
	ZOOM_LVL_ROADVEH,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1679
	ZOOM_LVL_SHIP,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1680
	ZOOM_LVL_AIRCRAFT,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1681
};
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1682
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1683
/* Constants for geometry of vehicle view viewport */
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1684
static const int VV_VIEWPORT_X = 3;
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1685
static const int VV_VIEWPORT_Y = 17;
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1686
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
  1687
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
  1688
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
  1689
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1690
/** 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
  1691
enum VehicleCommandTranslation {
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1692
	VCT_CMD_START_STOP = 0,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1693
	VCT_CMD_GOTO_DEPOT,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1694
	VCT_CMD_CLONE_VEH,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1695
	VCT_CMD_TURN_AROUND,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1696
};
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1697
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1698
/** 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
  1699
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
  1700
	{ // VCT_CMD_START_STOP
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1701
		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
  1702
		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
  1703
		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
  1704
		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
  1705
	},
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1706
	{ // VCT_CMD_GOTO_DEPOT
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1707
		/* 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
  1708
		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
  1709
		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
  1710
		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
  1711
		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
  1712
	},
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1713
	{ // VCT_CMD_CLONE_VEH
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1714
		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
  1715
		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
  1716
		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
  1717
		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
  1718
	},
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1719
	{ // VCT_CMD_TURN_AROUND
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1720
		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
  1721
		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
  1722
		0xffffffff, // invalid for ships
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1723
		0xffffffff  // invalid for aircrafts
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1724
	},
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1725
};
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1726
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1727
/** 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
  1728
static bool IsVehicleRefitable(const Vehicle *v)
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1729
{
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1730
	/* Why is this so different for different vehicles?
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1731
	 * Does maybe work one solution for all?
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1732
	 */
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1733
	switch (v->type) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1734
		case VEH_TRAIN:    return false;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1735
		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
  1736
		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
  1737
		case VEH_AIRCRAFT: return v->IsStoppedInDepot();
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1738
		default: NOT_REACHED();
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1739
	}
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1740
}
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1741
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1742
struct VehicleViewWindow : Window {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1743
	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
  1744
	{
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1745
		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
  1746
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1747
		this->caption_color = v->owner;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1748
		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
  1749
												 (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
  1750
												 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
  1751
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1752
		/*
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1753
		 * 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
  1754
		 * move some of the buttons for trains
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1755
		 */
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1756
		switch (v->type) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1757
			case VEH_TRAIN:
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1758
				this->widget[VVW_WIDGET_CAPTION].data = STR_882E;
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_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
  1761
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1762
				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
  1763
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1764
				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
  1765
				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
  1766
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1767
				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
  1768
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1769
				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
  1770
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1771
				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
  1772
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1773
				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
  1774
				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
  1775
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1776
				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
  1777
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1778
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1779
				/* 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
  1780
				this->widget[VVW_WIDGET_PANEL].bottom = 121;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1781
				this->widget[VVW_WIDGET_VIEWPORT].bottom = 119;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1782
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1783
				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
  1784
				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
  1785
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1786
				this->widget[VVW_WIDGET_REFIT_VEH].top = 68;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1787
				this->widget[VVW_WIDGET_REFIT_VEH].bottom = 85;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1788
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1789
				this->widget[VVW_WIDGET_SHOW_ORDERS].top = 86;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1790
				this->widget[VVW_WIDGET_SHOW_ORDERS].bottom = 103;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1791
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1792
				this->widget[VVW_WIDGET_SHOW_DETAILS].top = 104;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1793
				this->widget[VVW_WIDGET_SHOW_DETAILS].bottom = 121;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1794
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1795
				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
  1796
				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
  1797
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1798
				this->widget[VVW_WIDGET_RESIZE].top = 122;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1799
				this->widget[VVW_WIDGET_RESIZE].bottom = 133;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1800
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1801
				this->widget[VVW_WIDGET_TURN_AROUND].top = 68;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1802
				this->widget[VVW_WIDGET_TURN_AROUND].bottom = 85;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1803
				break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1804
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1805
			case VEH_ROAD:
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1806
				this->widget[VVW_WIDGET_CAPTION].data = STR_9002;
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_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
  1809
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1810
				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
  1811
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1812
				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
  1813
				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
  1814
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1815
				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
  1816
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1817
				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
  1818
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1819
				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
  1820
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1821
				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
  1822
				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
  1823
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1824
				this->SetWidgetHiddenState(VVW_WIDGET_FORCE_PROCEED, true);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1825
				break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1826
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1827
			case VEH_SHIP:
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1828
				this->widget[VVW_WIDGET_CAPTION].data = STR_980F;
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_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
  1831
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1832
				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
  1833
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1834
				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
  1835
				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
  1836
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1837
				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
  1838
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1839
				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
  1840
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1841
				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
  1842
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1843
				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
  1844
				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
  1845
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1846
				this->SetWidgetsHiddenState(true,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1847
																		VVW_WIDGET_TURN_AROUND,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1848
																		VVW_WIDGET_FORCE_PROCEED,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1849
																		WIDGET_LIST_END);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1850
				break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1851
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1852
			case VEH_AIRCRAFT:
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1853
				this->widget[VVW_WIDGET_CAPTION].data = STR_A00A;
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_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
  1856
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1857
				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
  1858
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1859
				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
  1860
				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
  1861
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1862
				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
  1863
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1864
				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
  1865
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1866
				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
  1867
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1868
				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
  1869
				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
  1870
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1871
				this->SetWidgetsHiddenState(true,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1872
																		VVW_WIDGET_TURN_AROUND,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1873
																		VVW_WIDGET_FORCE_PROCEED,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1874
																		WIDGET_LIST_END);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1875
				break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1876
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1877
				default: NOT_REACHED();
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1878
		}
10681
3aa3de4d448b (svn r13225) -Fix (r13041): Missing calls to FindWindowPlacementAndResize() from lots
peter1138
parents: 10641
diff changeset
  1879
3aa3de4d448b (svn r13225) -Fix (r13041): Missing calls to FindWindowPlacementAndResize() from lots
peter1138
parents: 10641
diff changeset
  1880
		this->FindWindowPlacementAndResize(desc);
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1881
	}
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
	~VehicleViewWindow()
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1884
	{
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1885
		DeleteWindowById(WC_VEHICLE_ORDERS, this->window_number);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1886
		DeleteWindowById(WC_VEHICLE_REFIT, this->window_number);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1887
		DeleteWindowById(WC_VEHICLE_DETAILS, this->window_number);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1888
		DeleteWindowById(WC_VEHICLE_TIMETABLE, this->window_number);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1889
	}
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
	virtual void OnPaint()
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1892
	{
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1893
		/** 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
  1894
		static const StringID _heading_for_depot_strings[] = {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1895
			STR_HEADING_FOR_TRAIN_DEPOT,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1896
			STR_HEADING_FOR_ROAD_DEPOT,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1897
			STR_HEADING_FOR_SHIP_DEPOT,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1898
			STR_HEADING_FOR_HANGAR,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1899
		};
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1900
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1901
		/** 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
  1902
		static const StringID _heading_for_depot_service_strings[] = {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1903
			STR_HEADING_FOR_TRAIN_DEPOT_SERVICE,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1904
			STR_HEADING_FOR_ROAD_DEPOT_SERVICE,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1905
			STR_HEADING_FOR_SHIP_DEPOT_SERVICE,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1906
			STR_HEADING_FOR_HANGAR_SERVICE,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1907
		};
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1908
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1909
		const Vehicle *v = GetVehicle(this->window_number);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1910
		StringID str;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1911
		bool is_localplayer = v->owner == _local_player;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1912
		bool refitable_and_stopped_in_depot = IsVehicleRefitable(v);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1913
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1914
		this->SetWidgetDisabledState(VVW_WIDGET_GOTO_DEPOT, !is_localplayer);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1915
		this->SetWidgetDisabledState(VVW_WIDGET_REFIT_VEH,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1916
																!refitable_and_stopped_in_depot || !is_localplayer);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1917
		this->SetWidgetDisabledState(VVW_WIDGET_CLONE_VEH, !is_localplayer);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1918
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1919
		if (v->type == VEH_TRAIN) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1920
			this->SetWidgetDisabledState(VVW_WIDGET_FORCE_PROCEED, !is_localplayer);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1921
			this->SetWidgetDisabledState(VVW_WIDGET_TURN_AROUND, !is_localplayer);
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
			/* 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
  1924
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1925
			if (is_localplayer) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1926
				/* See if any vehicle can be refitted */
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1927
				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
  1928
					if (EngInfo(u->engine_type)->refit_mask != 0 ||
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1929
							(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
  1930
						this->EnableWidget(VVW_WIDGET_REFIT_VEH);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1931
						/* We have a refittable carriage, bail out */
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1932
						break;
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
		}
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1937
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1938
		/* draw widgets & caption */
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1939
		SetDParam(0, v->index);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1940
		this->DrawWidgets();
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1941
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1942
		if (v->vehstatus & VS_CRASHED) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1943
			str = STR_8863_CRASHED;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1944
		} 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
  1945
			str = STR_885C_BROKEN_DOWN;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1946
		} else if (v->vehstatus & VS_STOPPED) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1947
			if (v->type == VEH_TRAIN) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1948
				if (v->cur_speed == 0) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1949
					if (v->u.rail.cached_power == 0) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1950
						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
  1951
					} else {
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1952
						str = STR_8861_STOPPED;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1953
					}
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1954
				} else {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1955
					SetDParam(0, v->GetDisplaySpeed());
10703
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10700
diff changeset
  1956
					str = STR_TRAIN_STOPPING + _settings.gui.vehicle_speed;
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1957
				}
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1958
			} else { // no train
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1959
				str = STR_8861_STOPPED;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1960
			}
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1961
		} 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
  1962
			switch (v->current_order.GetType()) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1963
				case OT_GOTO_STATION: {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1964
					SetDParam(0, v->current_order.GetDestination());
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1965
					SetDParam(1, v->GetDisplaySpeed());
10703
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10700
diff changeset
  1966
					str = STR_HEADING_FOR_STATION + _settings.gui.vehicle_speed;
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1967
				} break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1968
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1969
				case OT_GOTO_DEPOT: {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1970
					if (v->type == VEH_AIRCRAFT) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1971
						/* 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
  1972
						SetDParam(0, v->current_order.GetDestination());
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1973
						SetDParam(1, v->GetDisplaySpeed());
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1974
					} else {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1975
						Depot *depot = GetDepot(v->current_order.GetDestination());
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1976
						SetDParam(0, depot->town_index);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1977
						SetDParam(1, v->GetDisplaySpeed());
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1978
					}
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1979
					if ((v->current_order.GetDepotActionType() & ODATFB_HALT) && !(v->current_order.GetDepotOrderType() & ODTFB_PART_OF_ORDERS)) {
10703
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10700
diff changeset
  1980
						str = _heading_for_depot_strings[v->type] + _settings.gui.vehicle_speed;
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1981
					} else {
10703
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10700
diff changeset
  1982
						str = _heading_for_depot_service_strings[v->type] + _settings.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
  1983
					}
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
  1984
				} 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
  1985
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1986
				case OT_LOADING:
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1987
					str = STR_882F_LOADING_UNLOADING;
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1988
					break;
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1989
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1990
				case OT_GOTO_WAYPOINT: {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1991
					assert(v->type == VEH_TRAIN);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1992
					SetDParam(0, v->current_order.GetDestination());
10703
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10700
diff changeset
  1993
					str = STR_HEADING_FOR_WAYPOINT + _settings.gui.vehicle_speed;
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1994
					SetDParam(1, v->GetDisplaySpeed());
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  1995
					break;
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1996
				}
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1997
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1998
				case OT_LEAVESTATION:
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  1999
					if (v->type != VEH_AIRCRAFT) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2000
						str = STR_LEAVING;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2001
						break;
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
					/* fall-through if aircraft. Does this even happen? */
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2004
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2005
				default:
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2006
					if (v->num_orders == 0) {
10703
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10700
diff changeset
  2007
						str = STR_NO_ORDERS + _settings.gui.vehicle_speed;
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2008
						SetDParam(0, v->GetDisplaySpeed());
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2009
					} else {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2010
						str = STR_EMPTY;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2011
					}
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  2012
					break;
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
		}
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  2015
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2016
		/* draw the flag plus orders */
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2017
		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
  2018
		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
  2019
		this->DrawViewport();
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2020
	}
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  2021
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2022
	virtual void OnClick(Point pt, int widget)
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
		const Vehicle *v = GetVehicle(this->window_number);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2025
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2026
		switch (widget) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2027
			case VVW_WIDGET_START_STOP_VEH: // start stop
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2028
				DoCommandP(v->tile, v->index, 0, NULL,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2029
										_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
  2030
				break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2031
			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
  2032
				const Window *mainwindow = FindWindowById(WC_MAIN_WINDOW, 0);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2033
				/* 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
  2034
				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
  2035
					mainwindow->viewport->follow_vehicle = v->index;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2036
				} else {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2037
					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
  2038
				}
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2039
			} break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2040
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2041
			case VVW_WIDGET_GOTO_DEPOT: // goto hangar
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2042
				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
  2043
					_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
  2044
				break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2045
			case VVW_WIDGET_REFIT_VEH: // refit
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2046
				ShowVehicleRefitWindow(v, INVALID_VEH_ORDER_ID);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2047
				break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2048
			case VVW_WIDGET_SHOW_ORDERS: // show orders
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2049
				if (_ctrl_pressed) {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2050
					ShowTimetableWindow(v);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2051
				} else {
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2052
					ShowOrdersWindow(v);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2053
				}
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2054
				break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2055
			case VVW_WIDGET_SHOW_DETAILS: // show details
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2056
				ShowVehicleDetailsWindow(v);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2057
				break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2058
			case VVW_WIDGET_CLONE_VEH: // clone vehicle
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2059
				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
  2060
										_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
  2061
				break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2062
			case VVW_WIDGET_TURN_AROUND: // turn around
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2063
				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
  2064
				DoCommandP(v->tile, v->index, 0, NULL,
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2065
										_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
  2066
				break;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2067
			case VVW_WIDGET_FORCE_PROCEED: // force proceed
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2068
				assert(v->type == VEH_TRAIN);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2069
				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
  2070
				break;
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
	}
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
	virtual void OnResize(Point new_size, Point delta)
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2075
	{
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2076
		this->viewport->width          += delta.x;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2077
		this->viewport->height         += delta.y;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2078
		this->viewport->virtual_width  += delta.x;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2079
		this->viewport->virtual_height += delta.y;
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2080
	}
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
	virtual void OnTick()
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2083
	{
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2084
		const Vehicle *v = GetVehicle(this->window_number);
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2085
		bool veh_stopped = v->IsStoppedInDepot();
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2086
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2087
		/* 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
  2088
		 * stopped in depot.
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2089
		 * 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
  2090
		 * allowed only while in depot and stopped.
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2091
		 * 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
  2092
		 * 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
  2093
		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
  2094
			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
  2095
			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
  2096
			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
  2097
				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
  2098
				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
  2099
			}
10639
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2100
			this->SetDirty();
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2101
		}
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7837
diff changeset
  2102
	}
10639
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
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2105
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2106
/** 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
  2107
void ShowVehicleViewWindow(const Vehicle *v)
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2108
{
0091368fe9fc (svn r13183) -Codechange: make a window class of the VehicleViewWindow.
rubidium
parents: 10621
diff changeset
  2109
	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
  2110
}
8640
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
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
  2113
{
1e93b81e96d2 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8636
diff changeset
  2114
	switch (v->type) {
1e93b81e96d2 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8636
diff changeset
  2115
		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
  2116
		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
  2117
		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
  2118
		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
  2119
		default: NOT_REACHED();
1e93b81e96d2 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8636
diff changeset
  2120
	}
1e93b81e96d2 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8636
diff changeset
  2121
}
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
  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
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
  2124
{
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
	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
  2126
	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
  2127
		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
  2128
		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
  2129
	}
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
  2130
}