src/vehicle_gui.cpp
author rubidium
Sat, 12 Jan 2008 14:10:35 +0000
changeset 8254 1496654ca5e7
parent 8224 c5a64d87cc54
child 8258 9fa31acb07bc
permissions -rw-r--r--
(svn r11818) -Codechange: split player.h into smaller pieces.
2186
db48cf29b983 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     1
/* $Id$ */
db48cf29b983 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     2
6423
8e10e79e0fd1 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6350
diff changeset
     3
/** @file vehicle_gui.cpp */
8e10e79e0fd1 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6350
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
862800791170 (svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents: 1859
diff changeset
     6
#include "openttd.h"
1299
39c06aba09aa (svn r1803) Move debugging stuff into files of it's own
tron
parents: 1294
diff changeset
     7
#include "debug.h"
8254
1496654ca5e7 (svn r11818) -Codechange: split player.h into smaller pieces.
rubidium
parents: 8224
diff changeset
     8
#include "player_func.h"
2466
1aa260b43faa (svn r2992) Use PlayerID, StationID and INVALID_STATION instead of int, int and -1
tron
parents: 2462
diff changeset
     9
#include "station.h"
1363
775a7ee52369 (svn r1867) Include tables/sprites.h only in files which need it
tron
parents: 1309
diff changeset
    10
#include "table/sprites.h"
507
04b5403aaf6b (svn r815) Include strings.h only in the files which need it.
tron
parents: 505
diff changeset
    11
#include "table/strings.h"
842
efc3546bc313 (svn r1323) Adding autoreplace feature
bjarni
parents: 594
diff changeset
    12
#include "engine.h"
efc3546bc313 (svn r1323) Adding autoreplace feature
bjarni
parents: 594
diff changeset
    13
#include "gui.h"
8107
bb7deea89175 (svn r11668) -Codechange: more refactoring aimed at reducing compile time and making it more logic where function definitions can be found.
rubidium
parents: 8106
diff changeset
    14
#include "window_gui.h"
bb7deea89175 (svn r11668) -Codechange: more refactoring aimed at reducing compile time and making it more logic where function definitions can be found.
rubidium
parents: 8106
diff changeset
    15
#include "textbuf_gui.h"
8116
8da76dcb3287 (svn r11677) -Codechange: move price and command related types/functions to their respective places.
rubidium
parents: 8114
diff changeset
    16
#include "command_func.h"
2159
f6284cf5fab0 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2154
diff changeset
    17
#include "variables.h"
f6284cf5fab0 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2154
diff changeset
    18
#include "vehicle_gui.h"
8224
c5a64d87cc54 (svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium
parents: 8214
diff changeset
    19
#include "viewport_func.h"
c5a64d87cc54 (svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium
parents: 8214
diff changeset
    20
#include "gfx_func.h"
2676
59b65b4fb480 (svn r3218) -Feature: Multiheaded train engines will now stay in the same train
bjarni
parents: 2639
diff changeset
    21
#include "train.h"
3650
4dd8517bdcf6 (svn r4561) - NewGRF: implement most of callback 0x23: additional text in vehicle purchase windows.
peter1138
parents: 3492
diff changeset
    22
#include "newgrf_callbacks.h"
2962
f0a49b646c48 (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
    23
#include "newgrf_engine.h"
3650
4dd8517bdcf6 (svn r4561) - NewGRF: implement most of callback 0x23: additional text in vehicle purchase windows.
peter1138
parents: 3492
diff changeset
    24
#include "newgrf_text.h"
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
    25
#include "ship.h"
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
    26
#include "aircraft.h"
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
    27
#include "roadveh.h"
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
    28
#include "depot.h"
6091
c8827d9ae04a (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: 6056
diff changeset
    29
#include "cargotype.h"
6643
f81bee57bc09 (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: 6638
diff changeset
    30
#include "group.h"
8111
02d19f43eea6 (svn r11672) -Codechange: refactor some stuff out of gui.h.
rubidium
parents: 8107
diff changeset
    31
#include "group_gui.h"
8114
dd6d21dc99c1 (svn r11675) -Codechange: split the string types from the string functions.
rubidium
parents: 8111
diff changeset
    32
#include "strings_func.h"
8131
160939e24ed3 (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: 8130
diff changeset
    33
#include "functions.h"
160939e24ed3 (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: 8130
diff changeset
    34
#include "window_func.h"
8144
65cec0877b78 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8140
diff changeset
    35
#include "vehicle_func.h"
8212
cf3fce5c7464 (svn r11775) -Codechange: move all autoreplace/autorenew functions to a single location.
rubidium
parents: 8179
diff changeset
    36
#include "autoreplace_gui.h"
8213
7bdd7593eb9b (svn r11776) -Codechange: more header splittings to reduce the dependencies.
rubidium
parents: 8212
diff changeset
    37
#include "core/alloc_func.hpp"
8214
971f861d5543 (svn r11777) -Codechange: split the string header and make do not include it when it's not necessary.
rubidium
parents: 8213
diff changeset
    38
#include "string_func.h"
2159
f6284cf5fab0 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2154
diff changeset
    39
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6247
diff changeset
    40
struct Sorting {
4542
f42ecc669275 (svn r6372) -Codechange: static, unneeded decleration in headers, superfluous header includes
Darkvater
parents: 4541
diff changeset
    41
	Listing aircraft;
f42ecc669275 (svn r6372) -Codechange: static, unneeded decleration in headers, superfluous header includes
Darkvater
parents: 4541
diff changeset
    42
	Listing roadveh;
f42ecc669275 (svn r6372) -Codechange: static, unneeded decleration in headers, superfluous header includes
Darkvater
parents: 4541
diff changeset
    43
	Listing ship;
f42ecc669275 (svn r6372) -Codechange: static, unneeded decleration in headers, superfluous header includes
Darkvater
parents: 4541
diff changeset
    44
	Listing train;
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6247
diff changeset
    45
};
4542
f42ecc669275 (svn r6372) -Codechange: static, unneeded decleration in headers, superfluous header includes
Darkvater
parents: 4541
diff changeset
    46
f42ecc669275 (svn r6372) -Codechange: static, unneeded decleration in headers, superfluous header includes
Darkvater
parents: 4541
diff changeset
    47
static Sorting _sorting;
f42ecc669275 (svn r6372) -Codechange: static, unneeded decleration in headers, superfluous header includes
Darkvater
parents: 4541
diff changeset
    48
2159
f6284cf5fab0 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2154
diff changeset
    49
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
    50
2462
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    51
typedef int CDECL VehicleSortListingTypeFunction(const void*, const void*);
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    52
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    53
static VehicleSortListingTypeFunction VehicleNumberSorter;
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    54
static VehicleSortListingTypeFunction VehicleNameSorter;
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    55
static VehicleSortListingTypeFunction VehicleAgeSorter;
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    56
static VehicleSortListingTypeFunction VehicleProfitThisYearSorter;
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    57
static VehicleSortListingTypeFunction VehicleProfitLastYearSorter;
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    58
static VehicleSortListingTypeFunction VehicleCargoSorter;
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    59
static VehicleSortListingTypeFunction VehicleReliabilitySorter;
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    60
static VehicleSortListingTypeFunction VehicleMaxSpeedSorter;
2965
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
    61
static VehicleSortListingTypeFunction VehicleModelSorter;
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
    62
static VehicleSortListingTypeFunction VehicleValueSorter;
2462
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    63
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    64
static VehicleSortListingTypeFunction* const _vehicle_sorter[] = {
505
1d5e770d2ce4 (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
	&VehicleNumberSorter,
1d5e770d2ce4 (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
	&VehicleNameSorter,
1d5e770d2ce4 (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
	&VehicleAgeSorter,
1d5e770d2ce4 (svn r813) Push two tables from vehicle_gui.h into vehicle_gui.c - they were in the binary 48 (!) times.
tron
parents: 243
diff changeset
    68
	&VehicleProfitThisYearSorter,
1d5e770d2ce4 (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
    69
	&VehicleProfitLastYearSorter,
1d5e770d2ce4 (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
    70
	&VehicleCargoSorter,
1d5e770d2ce4 (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
    71
	&VehicleReliabilitySorter,
2965
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
    72
	&VehicleMaxSpeedSorter,
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
    73
	&VehicleModelSorter,
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
    74
	&VehicleValueSorter,
505
1d5e770d2ce4 (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
};
1d5e770d2ce4 (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
6643
f81bee57bc09 (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: 6638
diff changeset
    77
const StringID _vehicle_sort_listing[] = {
505
1d5e770d2ce4 (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_NUMBER,
1d5e770d2ce4 (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_DROPDOWN_NAME,
1d5e770d2ce4 (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_AGE,
1d5e770d2ce4 (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_PROFIT_THIS_YEAR,
1d5e770d2ce4 (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_PROFIT_LAST_YEAR,
1d5e770d2ce4 (svn r813) Push two tables from vehicle_gui.h into vehicle_gui.c - they were in the binary 48 (!) times.
tron
parents: 243
diff changeset
    83
	STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE,
1d5e770d2ce4 (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
    84
	STR_SORT_BY_RELIABILITY,
1d5e770d2ce4 (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
    85
	STR_SORT_BY_MAX_SPEED,
2965
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
    86
	STR_SORT_BY_MODEL,
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
    87
	STR_SORT_BY_VALUE,
505
1d5e770d2ce4 (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
	INVALID_STRING_ID
1d5e770d2ce4 (svn r813) Push two tables from vehicle_gui.h into vehicle_gui.c - they were in the binary 48 (!) times.
tron
parents: 243
diff changeset
    89
};
1d5e770d2ce4 (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
    90
6247
7d81e3a5d803 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6148
diff changeset
    91
void RebuildVehicleLists()
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
    92
{
5124
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
    93
	Window* const *wz;
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
    94
5124
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
    95
	FOR_ALL_WINDOWS(wz) {
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
    96
		Window *w = *wz;
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
    97
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
    98
		switch (w->window_class) {
5124
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
    99
			case WC_TRAINS_LIST:
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
   100
			case WC_ROADVEH_LIST:
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
   101
			case WC_SHIPS_LIST:
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
   102
			case WC_AIRCRAFT_LIST:
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
   103
				WP(w, vehiclelist_d).l.flags |= VL_REBUILD;
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
   104
				SetWindowDirty(w);
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
   105
				break;
5893
7e431a4abebb (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5847
diff changeset
   106
7e431a4abebb (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5847
diff changeset
   107
			default: break;
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   108
		}
5124
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
   109
	}
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   110
}
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   111
6247
7d81e3a5d803 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6148
diff changeset
   112
void ResortVehicleLists()
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   113
{
5124
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
   114
	Window* const *wz;
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   115
5124
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
   116
	FOR_ALL_WINDOWS(wz) {
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
   117
		Window *w = *wz;
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
   118
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   119
		switch (w->window_class) {
5124
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
   120
			case WC_TRAINS_LIST:
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
   121
			case WC_ROADVEH_LIST:
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
   122
			case WC_SHIPS_LIST:
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
   123
			case WC_AIRCRAFT_LIST:
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
   124
				WP(w, vehiclelist_d).l.flags |= VL_RESORT;
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
   125
				SetWindowDirty(w);
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
   126
				break;
5893
7e431a4abebb (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5847
diff changeset
   127
7e431a4abebb (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5847
diff changeset
   128
			default: break;
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   129
		}
5124
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
   130
	}
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   131
}
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   132
6643
f81bee57bc09 (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: 6638
diff changeset
   133
void BuildVehicleList(vehiclelist_d *vl, PlayerID owner, uint16 index, uint16 window_type)
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   134
{
4545
138a9195009a (svn r6377) -Codechange: Set up the widgets in the WE_CREATE instead of on every WE_PAINT
Darkvater
parents: 4542
diff changeset
   135
	if (!(vl->l.flags & VL_REBUILD)) return;
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   136
5747
ba5393ff957a (svn r8295) -Cleanup: merged arguments station, order and depot_airport_index for GenerateVehicleSortList() and BuildVehicleList() into one uint16 argument
bjarni
parents: 5745
diff changeset
   137
	DEBUG(misc, 3, "Building vehicle list for player %d at station %d", owner, index);
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   138
5747
ba5393ff957a (svn r8295) -Cleanup: merged arguments station, order and depot_airport_index for GenerateVehicleSortList() and BuildVehicleList() into one uint16 argument
bjarni
parents: 5745
diff changeset
   139
	vl->l.list_length = GenerateVehicleSortList(&vl->sort_list, &vl->length_of_sort_list, vl->vehicle_type, owner, index, window_type);
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   140
4545
138a9195009a (svn r6377) -Codechange: Set up the widgets in the WE_CREATE instead of on every WE_PAINT
Darkvater
parents: 4542
diff changeset
   141
	vl->l.flags &= ~VL_REBUILD;
138a9195009a (svn r6377) -Codechange: Set up the widgets in the WE_CREATE instead of on every WE_PAINT
Darkvater
parents: 4542
diff changeset
   142
	vl->l.flags |= VL_RESORT;
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   143
}
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   144
6643
f81bee57bc09 (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: 6638
diff changeset
   145
void SortVehicleList(vehiclelist_d *vl)
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   146
{
4545
138a9195009a (svn r6377) -Codechange: Set up the widgets in the WE_CREATE instead of on every WE_PAINT
Darkvater
parents: 4542
diff changeset
   147
	if (!(vl->l.flags & VL_RESORT)) return;
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   148
5587
167d9a91ef02 (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5584
diff changeset
   149
	_internal_sort_order = (vl->l.flags & VL_DESC) != 0;
4545
138a9195009a (svn r6377) -Codechange: Set up the widgets in the WE_CREATE instead of on every WE_PAINT
Darkvater
parents: 4542
diff changeset
   150
	qsort((void*)vl->sort_list, vl->l.list_length, sizeof(vl->sort_list[0]),
138a9195009a (svn r6377) -Codechange: Set up the widgets in the WE_CREATE instead of on every WE_PAINT
Darkvater
parents: 4542
diff changeset
   151
		_vehicle_sorter[vl->l.sort_type]);
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   152
4545
138a9195009a (svn r6377) -Codechange: Set up the widgets in the WE_CREATE instead of on every WE_PAINT
Darkvater
parents: 4542
diff changeset
   153
	vl->l.resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS;
138a9195009a (svn r6377) -Codechange: Set up the widgets in the WE_CREATE instead of on every WE_PAINT
Darkvater
parents: 4542
diff changeset
   154
	vl->l.flags &= ~VL_RESORT;
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   155
}
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   156
4740
953f60fa6d6a (svn r6652) -Feature: [depot window] depot lists are now sorted, so vehicle 1 is always first and so on
bjarni
parents: 4735
diff changeset
   157
void DepotSortList(Vehicle **v, uint16 length)
953f60fa6d6a (svn r6652) -Feature: [depot window] depot lists are now sorted, so vehicle 1 is always first and so on
bjarni
parents: 4735
diff changeset
   158
{
953f60fa6d6a (svn r6652) -Feature: [depot window] depot lists are now sorted, so vehicle 1 is always first and so on
bjarni
parents: 4735
diff changeset
   159
	_internal_sort_order = 0;
953f60fa6d6a (svn r6652) -Feature: [depot window] depot lists are now sorted, so vehicle 1 is always first and so on
bjarni
parents: 4735
diff changeset
   160
	qsort((void*)v, length, sizeof(v[0]), _vehicle_sorter[0]);
953f60fa6d6a (svn r6652) -Feature: [depot window] depot lists are now sorted, so vehicle 1 is always first and so on
bjarni
parents: 4735
diff changeset
   161
}
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   162
6423
8e10e79e0fd1 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6350
diff changeset
   163
/** draw the vehicle profit button in the vehicle list window. */
2436
7d5df545bd5d (svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents: 2375
diff changeset
   164
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
   165
{
5668
36b39f4a9032 (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5609
diff changeset
   166
	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
   167
6423
8e10e79e0fd1 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6350
diff changeset
   168
	/* draw profit-based colored icons */
2639
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   169
	if (v->age <= 365 * 2) {
5668
36b39f4a9032 (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5609
diff changeset
   170
		pal = PALETTE_TO_GREY;
2639
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   171
	} else if (v->profit_last_year < 0) {
5668
36b39f4a9032 (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5609
diff changeset
   172
		pal = PALETTE_TO_RED;
2639
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   173
	} else if (v->profit_last_year < 10000) {
5668
36b39f4a9032 (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5609
diff changeset
   174
		pal = PALETTE_TO_YELLOW;
2639
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   175
	} else {
5668
36b39f4a9032 (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5609
diff changeset
   176
		pal = PALETTE_TO_GREEN;
2639
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   177
	}
5668
36b39f4a9032 (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5609
diff changeset
   178
	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
   179
}
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
   180
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6247
diff changeset
   181
struct RefitOption {
4694
c917a3ad0dd2 (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 cargo;
c917a3ad0dd2 (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 subtype;
c917a3ad0dd2 (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
	uint16 value;
c917a3ad0dd2 (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
	EngineID engine;
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6247
diff changeset
   186
};
4694
c917a3ad0dd2 (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
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6247
diff changeset
   188
struct RefitList {
4694
c917a3ad0dd2 (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
	uint num_lines;
c917a3ad0dd2 (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
	RefitOption *items;
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6247
diff changeset
   191
};
4694
c917a3ad0dd2 (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
4695
3a5bf7ff066b (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
   193
static RefitList *BuildRefitList(const Vehicle *v)
4694
c917a3ad0dd2 (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
{
c917a3ad0dd2 (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
	uint max_lines = 256;
5609
dc6a58930ba4 (svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents: 5587
diff changeset
   196
	RefitOption *refit = CallocT<RefitOption>(max_lines);
dc6a58930ba4 (svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents: 5587
diff changeset
   197
	RefitList *list = CallocT<RefitList>(1);
4694
c917a3ad0dd2 (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
	Vehicle *u = (Vehicle*)v;
c917a3ad0dd2 (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
	uint num_lines = 0;
c917a3ad0dd2 (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   200
	uint i;
c917a3ad0dd2 (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
c917a3ad0dd2 (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
	do {
c917a3ad0dd2 (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
		uint32 cmask = EngInfo(u->engine_type)->refit_mask;
c917a3ad0dd2 (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
		byte callbackmask = EngInfo(u->engine_type)->callbackmask;
c917a3ad0dd2 (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   205
4933
0ae35137aeca (svn r6920) - Codechange: Ignore refit options of an engine if it has no capacity.
peter1138
parents: 4932
diff changeset
   206
		/* Skip this engine if it has no capacity */
0ae35137aeca (svn r6920) - Codechange: Ignore refit options of an engine if it has no capacity.
peter1138
parents: 4932
diff changeset
   207
		if (u->cargo_cap == 0) continue;
0ae35137aeca (svn r6920) - Codechange: Ignore refit options of an engine if it has no capacity.
peter1138
parents: 4932
diff changeset
   208
4694
c917a3ad0dd2 (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
		/* Loop through all cargos in the refit mask */
6350
04b19f551aec (svn r9388) -Codechange: variable scope and type, and standardify all CargoID loops.
peter1138
parents: 6259
diff changeset
   210
		for (CargoID cid = 0; cid < NUM_CARGO && num_lines < max_lines; cid++) {
4694
c917a3ad0dd2 (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
			/* Skip cargo type if it's not listed */
7928
63e18de69e50 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents: 7846
diff changeset
   212
			if (!HasBit(cmask, cid)) continue;
4776
c798a32e8bc7 (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
   213
4694
c917a3ad0dd2 (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
			/* Check the vehicle's callback mask for cargo suffixes */
7928
63e18de69e50 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents: 7846
diff changeset
   215
			if (HasBit(callbackmask, CBM_VEHICLE_CARGO_SUFFIX)) {
4694
c917a3ad0dd2 (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
				/* Make a note of the original cargo type. It has to be
c917a3ad0dd2 (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
				 * changed to test the cargo & subtype... */
c917a3ad0dd2 (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
				CargoID temp_cargo = u->cargo_type;
c917a3ad0dd2 (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
				byte temp_subtype  = u->cargo_subtype;
c917a3ad0dd2 (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   220
				byte refit_cyc;
c917a3ad0dd2 (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
6113
a10ede03ac58 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6091
diff changeset
   222
				u->cargo_type = cid;
4694
c917a3ad0dd2 (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
c917a3ad0dd2 (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   224
				for (refit_cyc = 0; refit_cyc < 16 && num_lines < max_lines; refit_cyc++) {
c917a3ad0dd2 (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
					bool duplicate = false;
c917a3ad0dd2 (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
					uint16 callback;
c917a3ad0dd2 (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
c917a3ad0dd2 (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
					u->cargo_subtype = refit_cyc;
c917a3ad0dd2 (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
					callback = GetVehicleCallback(CBID_VEHICLE_CARGO_SUFFIX, 0, 0, u->engine_type, u);
c917a3ad0dd2 (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
c917a3ad0dd2 (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
					if (callback == 0xFF) callback = CALLBACK_FAILED;
c917a3ad0dd2 (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   232
					if (refit_cyc != 0 && callback == CALLBACK_FAILED) break;
c917a3ad0dd2 (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
c917a3ad0dd2 (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
					/* Check if this cargo and subtype combination are listed */
c917a3ad0dd2 (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
					for (i = 0; i < num_lines && !duplicate; i++) {
6113
a10ede03ac58 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6091
diff changeset
   236
						if (refit[i].cargo == cid && refit[i].value == callback) duplicate = true;
4694
c917a3ad0dd2 (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
					}
c917a3ad0dd2 (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
c917a3ad0dd2 (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
					if (duplicate) continue;
c917a3ad0dd2 (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   240
6113
a10ede03ac58 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6091
diff changeset
   241
					refit[num_lines].cargo   = cid;
4694
c917a3ad0dd2 (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
   242
					refit[num_lines].subtype = refit_cyc;
c917a3ad0dd2 (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
   243
					refit[num_lines].value   = callback;
c917a3ad0dd2 (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
   244
					refit[num_lines].engine  = u->engine_type;
c917a3ad0dd2 (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
   245
					num_lines++;
c917a3ad0dd2 (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
   246
				}
c917a3ad0dd2 (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
   247
c917a3ad0dd2 (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
   248
				/* Reset the vehicle's cargo type */
c917a3ad0dd2 (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
   249
				u->cargo_type    = temp_cargo;
c917a3ad0dd2 (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
   250
				u->cargo_subtype = temp_subtype;
c917a3ad0dd2 (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
			} else {
c917a3ad0dd2 (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   252
				/* No cargo suffix callback -- use no subtype */
c917a3ad0dd2 (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
				bool duplicate = false;
c917a3ad0dd2 (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
c917a3ad0dd2 (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
				for (i = 0; i < num_lines && !duplicate; i++) {
6113
a10ede03ac58 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6091
diff changeset
   256
					if (refit[i].cargo == cid && refit[i].value == CALLBACK_FAILED) duplicate = true;
4694
c917a3ad0dd2 (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
				}
c917a3ad0dd2 (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   258
c917a3ad0dd2 (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
   259
				if (!duplicate) {
6113
a10ede03ac58 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6091
diff changeset
   260
					refit[num_lines].cargo   = cid;
4694
c917a3ad0dd2 (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   261
					refit[num_lines].subtype = 0;
c917a3ad0dd2 (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
   262
					refit[num_lines].value   = CALLBACK_FAILED;
c917a3ad0dd2 (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
					refit[num_lines].engine  = INVALID_ENGINE;
c917a3ad0dd2 (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   264
					num_lines++;
c917a3ad0dd2 (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
   265
				}
c917a3ad0dd2 (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
			}
c917a3ad0dd2 (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   267
		}
7492
35acee076719 (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: 7490
diff changeset
   268
	} while (v->type == VEH_TRAIN && (u = u->Next()) != NULL && num_lines < max_lines);
4694
c917a3ad0dd2 (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
c917a3ad0dd2 (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
	list->num_lines = num_lines;
c917a3ad0dd2 (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
	list->items = refit;
c917a3ad0dd2 (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   272
c917a3ad0dd2 (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
	return list;
c917a3ad0dd2 (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
}
c917a3ad0dd2 (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   275
1859
870dcb6fd65b (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
   276
/** Draw the list of available refit options for a consist.
1802
da61740cc1e7 (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
   277
 * Draw the list and highlight the selected refit option (if any)
6484
79156627e1ba (svn r9665) -Documentation: Doxygen corrections,errors, corrections of corrections...
belugas
parents: 6423
diff changeset
   278
 * @param *list first vehicle in consist to get the refit-options of
1802
da61740cc1e7 (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
   279
 * @param sel selected refit cargo-type in the window
6484
79156627e1ba (svn r9665) -Documentation: Doxygen corrections,errors, corrections of corrections...
belugas
parents: 6423
diff changeset
   280
 * @param pos position of the selected item in caller widow
79156627e1ba (svn r9665) -Documentation: Doxygen corrections,errors, corrections of corrections...
belugas
parents: 6423
diff changeset
   281
 * @param rows number of rows(capacity) in caller window
79156627e1ba (svn r9665) -Documentation: Doxygen corrections,errors, corrections of corrections...
belugas
parents: 6423
diff changeset
   282
 * @param delta step height in caller window
4695
3a5bf7ff066b (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
   283
 * @return the refit option that is hightlighted, NULL if none
1802
da61740cc1e7 (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
   284
 */
4695
3a5bf7ff066b (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
   285
static RefitOption *DrawVehicleRefitWindow(const RefitList *list, int sel, uint pos, uint rows, uint delta)
1802
da61740cc1e7 (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
   286
{
4694
c917a3ad0dd2 (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
   287
	RefitOption *refit = list->items;
4695
3a5bf7ff066b (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
   288
	RefitOption *selected = NULL;
4694
c917a3ad0dd2 (svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
peter1138
parents: 4686
diff changeset
   289
	uint num_lines = list->num_lines;
c917a3ad0dd2 (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
   290
	uint y = 31;
c917a3ad0dd2 (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
   291
	uint i;
1802
da61740cc1e7 (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
   292
4694
c917a3ad0dd2 (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
   293
	/* Draw the list, and find the selected cargo (by its position in list) */
4697
67032d30eab0 (svn r6607) - Fix (r6601): Fix selection of refit type when the list is scrolled.
peter1138
parents: 4695
diff changeset
   294
	for (i = 0; i < num_lines; i++) {
7824
5a63d41b59ea (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 7798
diff changeset
   295
		TextColour colour = TC_BLACK;
4694
c917a3ad0dd2 (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
   296
		if (sel == 0) {
4695
3a5bf7ff066b (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
   297
			selected = &refit[i];
7824
5a63d41b59ea (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 7798
diff changeset
   298
			colour = TC_WHITE;
4694
c917a3ad0dd2 (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
   299
		}
1859
870dcb6fd65b (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
   300
4697
67032d30eab0 (svn r6607) - Fix (r6601): Fix selection of refit type when the list is scrolled.
peter1138
parents: 4695
diff changeset
   301
		if (i >= pos && i < pos + rows) {
4694
c917a3ad0dd2 (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
   302
			/* Draw the cargo name */
6091
c8827d9ae04a (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: 6056
diff changeset
   303
			int last_x = DrawString(2, y, GetCargo(refit[i].cargo)->name, colour);
4694
c917a3ad0dd2 (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
   304
c917a3ad0dd2 (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
   305
			/* If the callback succeeded, draw the cargo suffix */
c917a3ad0dd2 (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
   306
			if (refit[i].value != CALLBACK_FAILED) {
c917a3ad0dd2 (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
   307
				DrawString(last_x + 1, y, GetGRFStringID(GetEngineGRFID(refit[i].engine), 0xD000 + refit[i].value), colour);
3025
9e60c370415c (svn r3605) - Remove silly macro and fix indenting in DrawVehicleRefitWindow()
peter1138
parents: 2989
diff changeset
   308
			}
4694
c917a3ad0dd2 (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
   309
			y += delta;
c917a3ad0dd2 (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
   310
		}
3025
9e60c370415c (svn r3605) - Remove silly macro and fix indenting in DrawVehicleRefitWindow()
peter1138
parents: 2989
diff changeset
   311
4694
c917a3ad0dd2 (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
   312
		sel--;
3025
9e60c370415c (svn r3605) - Remove silly macro and fix indenting in DrawVehicleRefitWindow()
peter1138
parents: 2989
diff changeset
   313
	}
9e60c370415c (svn r3605) - Remove silly macro and fix indenting in DrawVehicleRefitWindow()
peter1138
parents: 2989
diff changeset
   314
4695
3a5bf7ff066b (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
   315
	return selected;
1802
da61740cc1e7 (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
   316
}
da61740cc1e7 (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
   317
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   318
static void VehicleRefitWndProc(Window *w, WindowEvent *e)
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   319
{
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   320
	switch (e->event) {
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   321
		case WE_PAINT: {
4694
c917a3ad0dd2 (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
   322
			Vehicle *v = GetVehicle(w->window_number);
c917a3ad0dd2 (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
   323
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   324
			if (v->type == VEH_TRAIN) {
4694
c917a3ad0dd2 (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
   325
				uint length = CountVehiclesInChain(v);
c917a3ad0dd2 (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
   326
c917a3ad0dd2 (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
   327
				if (length != WP(w, refit_d).length) {
c917a3ad0dd2 (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
   328
					/* Consist length has changed, so rebuild the refit list */
c917a3ad0dd2 (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
   329
					free(WP(w, refit_d).list->items);
c917a3ad0dd2 (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
   330
					free(WP(w, refit_d).list);
c917a3ad0dd2 (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
   331
					WP(w, refit_d).list = BuildRefitList(v);
c917a3ad0dd2 (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
   332
					WP(w, refit_d).length = length;
c917a3ad0dd2 (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
   333
				}
c917a3ad0dd2 (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
   334
			}
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   335
4698
b787a418296f (svn r6608) - Fix (r6601): The scroll bar could fall out of the window... more gui-fu needed...
peter1138
parents: 4697
diff changeset
   336
			SetVScrollCount(w, WP(w, refit_d).list->num_lines);
b787a418296f (svn r6608) - Fix (r6601): The scroll bar could fall out of the window... more gui-fu needed...
peter1138
parents: 4697
diff changeset
   337
7049
0ebe47348074 (svn r10314) -Codechange: Refer to vehicle names by index
peter1138
parents: 7002
diff changeset
   338
			SetDParam(0, v->index);
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   339
			DrawWindowWidgets(w);
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   340
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6484
diff changeset
   341
			WP(w, refit_d).cargo = DrawVehicleRefitWindow(WP(w, refit_d).list, WP(w, refit_d).sel, w->vscroll.pos, w->vscroll.cap, w->resize.step_height);
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   342
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6484
diff changeset
   343
			if (WP(w, refit_d).cargo != NULL) {
6943
1914f26aee04 (svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents: 6643
diff changeset
   344
				CommandCost cost;
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   345
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6484
diff changeset
   346
				cost = DoCommand(v->tile, v->index, WP(w, refit_d).cargo->cargo | WP(w, refit_d).cargo->subtype << 8,
6056
56f51abb3b91 (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: 5955
diff changeset
   347
								 DC_QUERY_COST, GetCmdRefitVeh(GetVehicle(w->window_number)->type));
56f51abb3b91 (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: 5955
diff changeset
   348
6946
a48b23f1cc8a (svn r10200) -Codechange: add "shortcut" for !CmdFailed (CmdSucceeded).
rubidium
parents: 6943
diff changeset
   349
				if (CmdSucceeded(cost)) {
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6484
diff changeset
   350
					SetDParam(0, WP(w, refit_d).cargo->cargo);
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   351
					SetDParam(1, _returned_refit_capacity);
7002
1bf6a62b0fcb (svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents: 6991
diff changeset
   352
					SetDParam(2, cost.GetCost());
7824
5a63d41b59ea (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 7798
diff changeset
   353
					DrawString(2, w->widget[5].top + 1, STR_9840_NEW_CAPACITY_COST_OF_REFIT, TC_FROMSTRING);
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   354
				}
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   355
			}
6492
286a52449b54 (svn r9673) -Cleanup: remove spaces before tabs and replace non-indenting tabs with spaces.
rubidium
parents: 6491
diff changeset
   356
		} break;
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   357
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   358
		case WE_CLICK:
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   359
			switch (e->we.click.widget) {
4694
c917a3ad0dd2 (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
   360
				case 3: { // listbox
c917a3ad0dd2 (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
   361
					int y = e->we.click.pt.y - w->widget[3].top;
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   362
					if (y >= 0) {
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6484
diff changeset
   363
						WP(w, refit_d).sel = (y / (int)w->resize.step_height) + w->vscroll.pos;
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   364
						SetWindowDirty(w);
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   365
					}
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   366
				} break;
4694
c917a3ad0dd2 (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
   367
				case 6: // refit button
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6484
diff changeset
   368
					if (WP(w, refit_d).cargo != NULL) {
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   369
						const Vehicle *v = GetVehicle(w->window_number);
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   370
4712
4335ad42e163 (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
   371
						if (WP(w, refit_d).order == INVALID_VEH_ORDER_ID) {
4335ad42e163 (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
   372
							int command = 0;
4335ad42e163 (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
   373
4335ad42e163 (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
   374
							switch (v->type) {
6621
441559124aea (svn r9841) -Codechange: add a little more type strictness to the vehicle types.
rubidium
parents: 6492
diff changeset
   375
								default: NOT_REACHED();
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   376
								case VEH_TRAIN:    command = CMD_REFIT_RAIL_VEHICLE | CMD_MSG(STR_RAIL_CAN_T_REFIT_VEHICLE);  break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   377
								case VEH_ROAD:     command = CMD_REFIT_ROAD_VEH     | CMD_MSG(STR_REFIT_ROAD_VEHICLE_CAN_T);  break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   378
								case VEH_SHIP:     command = CMD_REFIT_SHIP         | CMD_MSG(STR_9841_CAN_T_REFIT_SHIP);     break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   379
								case VEH_AIRCRAFT: command = CMD_REFIT_AIRCRAFT     | CMD_MSG(STR_A042_CAN_T_REFIT_AIRCRAFT); break;
4712
4335ad42e163 (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
   380
							}
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6484
diff changeset
   381
							if (DoCommandP(v->tile, v->index, WP(w, refit_d).cargo->cargo | WP(w, refit_d).cargo->subtype << 8, NULL, command)) DeleteWindow(w);
4712
4335ad42e163 (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
   382
						} else {
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6484
diff changeset
   383
							if (DoCommandP(v->tile, v->index, WP(w, refit_d).cargo->cargo | WP(w, refit_d).cargo->subtype << 8 | WP(w, refit_d).order << 16, NULL, CMD_ORDER_REFIT)) DeleteWindow(w);
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   384
						}
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   385
					}
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   386
					break;
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   387
			}
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   388
			break;
4694
c917a3ad0dd2 (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
   389
c917a3ad0dd2 (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
   390
		case WE_RESIZE:
c917a3ad0dd2 (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
   391
			w->vscroll.cap += e->we.sizing.diff.y / (int)w->resize.step_height;
c917a3ad0dd2 (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
   392
			w->widget[3].data = (w->vscroll.cap << 8) + 1;
c917a3ad0dd2 (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
   393
			break;
c917a3ad0dd2 (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
   394
c917a3ad0dd2 (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
   395
		case WE_DESTROY:
c917a3ad0dd2 (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
   396
			free(WP(w, refit_d).list->items);
c917a3ad0dd2 (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
   397
			free(WP(w, refit_d).list);
c917a3ad0dd2 (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
   398
			break;
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   399
	}
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   400
}
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   401
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   402
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   403
static const Widget _vehicle_refit_widgets[] = {
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   404
	{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,                            STR_018B_CLOSE_WINDOW},
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   405
	{    WWT_CAPTION,   RESIZE_NONE,    14,    11,   239,     0,    13, STR_983B_REFIT,                      STR_018C_WINDOW_TITLE_DRAG_THIS},
4694
c917a3ad0dd2 (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
   406
	{    WWT_TEXTBTN,   RESIZE_NONE,    14,     0,   239,    14,    27, STR_983F_SELECT_CARGO_TYPE_TO_CARRY, STR_983D_SELECT_TYPE_OF_CARGO_FOR},
4775
1fb972035324 (svn r6689) -Fix: corrected vehicle type in tooltip for the list in the refit window
bjarni
parents: 4762
diff changeset
   407
	{     WWT_MATRIX, RESIZE_BOTTOM,    14,     0,   227,    28,   139, 0x801,                               STR_EMPTY},
4694
c917a3ad0dd2 (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
   408
	{  WWT_SCROLLBAR, RESIZE_BOTTOM,    14,   228,   239,    28,   139, 0x0,                                 STR_0190_SCROLL_BAR_SCROLLS_LIST},
4938
0447845fd1b3 (svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents: 4933
diff changeset
   409
	{      WWT_PANEL,     RESIZE_TB,    14,     0,   239,   140,   161, 0x0,                                 STR_NULL},
4694
c917a3ad0dd2 (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
   410
	{ WWT_PUSHTXTBTN,     RESIZE_TB,    14,     0,   227,   162,   173, 0x0,                                 STR_NULL},
c917a3ad0dd2 (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
   411
	{  WWT_RESIZEBOX,     RESIZE_TB,    14,   228,   239,   162,   173, 0x0,                                 STR_RESIZE_BUTTON},
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   412
	{   WIDGETS_END},
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   413
};
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   414
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   415
static const WindowDesc _vehicle_refit_desc = {
7341
02515d0d4ced (svn r10704) -Codechange: provide an infrastructure to have resizable windows that are smaller than the default window size.
rubidium
parents: 7072
diff changeset
   416
	WDP_AUTO, WDP_AUTO, 240, 174, 240, 174,
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6484
diff changeset
   417
	WC_VEHICLE_REFIT, WC_VEHICLE_VIEW,
4694
c917a3ad0dd2 (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
   418
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_RESIZABLE,
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   419
	_vehicle_refit_widgets,
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   420
	VehicleRefitWndProc,
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   421
};
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   422
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   423
/** Show the refit window for a vehicle
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   424
* @param *v The vehicle to show the refit window for
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6484
diff changeset
   425
* @param order of the vehicle ( ? )
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   426
*/
4712
4335ad42e163 (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
   427
void ShowVehicleRefitWindow(const Vehicle *v, VehicleOrderID order)
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   428
{
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   429
	Window *w;
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   430
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   431
	DeleteWindowById(WC_VEHICLE_REFIT, v->index);
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   432
5071
e28106dfcb6f (svn r7129) -Codechange: Get rid of a global variable that only sets a window's number.
Darkvater
parents: 5070
diff changeset
   433
	w = AllocateWindowDescFront(&_vehicle_refit_desc, v->index);
4712
4335ad42e163 (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
   434
	WP(w, refit_d).order = order;
4704
557cdcda0c47 (svn r6614) -Fix: added check to see if a newly opened refit window is different from NULL before assigning data to it
bjarni
parents: 4702
diff changeset
   435
557cdcda0c47 (svn r6614) -Fix: added check to see if a newly opened refit window is different from NULL before assigning data to it
bjarni
parents: 4702
diff changeset
   436
	if (w != NULL) {
557cdcda0c47 (svn r6614) -Fix: added check to see if a newly opened refit window is different from NULL before assigning data to it
bjarni
parents: 4702
diff changeset
   437
		w->caption_color = v->owner;
557cdcda0c47 (svn r6614) -Fix: added check to see if a newly opened refit window is different from NULL before assigning data to it
bjarni
parents: 4702
diff changeset
   438
		w->vscroll.cap = 8;
557cdcda0c47 (svn r6614) -Fix: added check to see if a newly opened refit window is different from NULL before assigning data to it
bjarni
parents: 4702
diff changeset
   439
		w->resize.step_height = 14;
557cdcda0c47 (svn r6614) -Fix: added check to see if a newly opened refit window is different from NULL before assigning data to it
bjarni
parents: 4702
diff changeset
   440
		WP(w, refit_d).sel  = -1;
557cdcda0c47 (svn r6614) -Fix: added check to see if a newly opened refit window is different from NULL before assigning data to it
bjarni
parents: 4702
diff changeset
   441
		WP(w, refit_d).list = BuildRefitList(v);
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   442
		if (v->type == VEH_TRAIN) WP(w, refit_d).length = CountVehiclesInChain(v);
4704
557cdcda0c47 (svn r6614) -Fix: added check to see if a newly opened refit window is different from NULL before assigning data to it
bjarni
parents: 4702
diff changeset
   443
		SetVScrollCount(w, WP(w, refit_d).list->num_lines);
557cdcda0c47 (svn r6614) -Fix: added check to see if a newly opened refit window is different from NULL before assigning data to it
bjarni
parents: 4702
diff changeset
   444
557cdcda0c47 (svn r6614) -Fix: added check to see if a newly opened refit window is different from NULL before assigning data to it
bjarni
parents: 4702
diff changeset
   445
		switch (v->type) {
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   446
			case VEH_TRAIN:
4775
1fb972035324 (svn r6689) -Fix: corrected vehicle type in tooltip for the list in the refit window
bjarni
parents: 4762
diff changeset
   447
				w->widget[3].tooltips = STR_RAIL_SELECT_TYPE_OF_CARGO_FOR;
4704
557cdcda0c47 (svn r6614) -Fix: added check to see if a newly opened refit window is different from NULL before assigning data to it
bjarni
parents: 4702
diff changeset
   448
				w->widget[6].data     = STR_RAIL_REFIT_VEHICLE;
557cdcda0c47 (svn r6614) -Fix: added check to see if a newly opened refit window is different from NULL before assigning data to it
bjarni
parents: 4702
diff changeset
   449
				w->widget[6].tooltips = STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED;
557cdcda0c47 (svn r6614) -Fix: added check to see if a newly opened refit window is different from NULL before assigning data to it
bjarni
parents: 4702
diff changeset
   450
				break;
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   451
			case VEH_ROAD:
4775
1fb972035324 (svn r6689) -Fix: corrected vehicle type in tooltip for the list in the refit window
bjarni
parents: 4762
diff changeset
   452
				w->widget[3].tooltips = STR_ROAD_SELECT_TYPE_OF_CARGO_FOR;
4704
557cdcda0c47 (svn r6614) -Fix: added check to see if a newly opened refit window is different from NULL before assigning data to it
bjarni
parents: 4702
diff changeset
   453
				w->widget[6].data     = STR_REFIT_ROAD_VEHICLE;
557cdcda0c47 (svn r6614) -Fix: added check to see if a newly opened refit window is different from NULL before assigning data to it
bjarni
parents: 4702
diff changeset
   454
				w->widget[6].tooltips = STR_REFIT_ROAD_VEHICLE_TO_CARRY_HIGHLIGHTED;
557cdcda0c47 (svn r6614) -Fix: added check to see if a newly opened refit window is different from NULL before assigning data to it
bjarni
parents: 4702
diff changeset
   455
				break;
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   456
			case VEH_SHIP:
4775
1fb972035324 (svn r6689) -Fix: corrected vehicle type in tooltip for the list in the refit window
bjarni
parents: 4762
diff changeset
   457
				w->widget[3].tooltips = STR_983D_SELECT_TYPE_OF_CARGO_FOR;
4704
557cdcda0c47 (svn r6614) -Fix: added check to see if a newly opened refit window is different from NULL before assigning data to it
bjarni
parents: 4702
diff changeset
   458
				w->widget[6].data     = STR_983C_REFIT_SHIP;
557cdcda0c47 (svn r6614) -Fix: added check to see if a newly opened refit window is different from NULL before assigning data to it
bjarni
parents: 4702
diff changeset
   459
				w->widget[6].tooltips = STR_983E_REFIT_SHIP_TO_CARRY_HIGHLIGHTED;
557cdcda0c47 (svn r6614) -Fix: added check to see if a newly opened refit window is different from NULL before assigning data to it
bjarni
parents: 4702
diff changeset
   460
				break;
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   461
			case VEH_AIRCRAFT:
4775
1fb972035324 (svn r6689) -Fix: corrected vehicle type in tooltip for the list in the refit window
bjarni
parents: 4762
diff changeset
   462
				w->widget[3].tooltips = STR_A03E_SELECT_TYPE_OF_CARGO_FOR;
4704
557cdcda0c47 (svn r6614) -Fix: added check to see if a newly opened refit window is different from NULL before assigning data to it
bjarni
parents: 4702
diff changeset
   463
				w->widget[6].data     = STR_A03D_REFIT_AIRCRAFT;
557cdcda0c47 (svn r6614) -Fix: added check to see if a newly opened refit window is different from NULL before assigning data to it
bjarni
parents: 4702
diff changeset
   464
				w->widget[6].tooltips = STR_A03F_REFIT_AIRCRAFT_TO_CARRY;
557cdcda0c47 (svn r6614) -Fix: added check to see if a newly opened refit window is different from NULL before assigning data to it
bjarni
parents: 4702
diff changeset
   465
				break;
557cdcda0c47 (svn r6614) -Fix: added check to see if a newly opened refit window is different from NULL before assigning data to it
bjarni
parents: 4702
diff changeset
   466
			default: NOT_REACHED();
557cdcda0c47 (svn r6614) -Fix: added check to see if a newly opened refit window is different from NULL before assigning data to it
bjarni
parents: 4702
diff changeset
   467
		}
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   468
	}
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   469
}
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   470
6423
8e10e79e0fd1 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6350
diff changeset
   471
/** Display additional text from NewGRF in the purchase information window */
4932
4bf213d0ed53 (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
uint ShowAdditionalText(int x, int y, uint w, EngineID engine)
3650
4dd8517bdcf6 (svn r4561) - NewGRF: implement most of callback 0x23: additional text in vehicle purchase windows.
peter1138
parents: 3492
diff changeset
   473
{
4dd8517bdcf6 (svn r4561) - NewGRF: implement most of callback 0x23: additional text in vehicle purchase windows.
peter1138
parents: 3492
diff changeset
   474
	uint16 callback = GetVehicleCallback(CBID_VEHICLE_ADDITIONAL_TEXT, 0, 0, engine, NULL);
4dd8517bdcf6 (svn r4561) - NewGRF: implement most of callback 0x23: additional text in vehicle purchase windows.
peter1138
parents: 3492
diff changeset
   475
	if (callback == CALLBACK_FAILED) return 0;
4dd8517bdcf6 (svn r4561) - NewGRF: implement most of callback 0x23: additional text in vehicle purchase windows.
peter1138
parents: 3492
diff changeset
   476
6423
8e10e79e0fd1 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6350
diff changeset
   477
	/* STR_02BD is used to start the string with {BLACK} */
4928
ff53f78c5a87 (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
   478
	SetDParam(0, GetGRFStringID(GetEngineGRFID(engine), 0xD000 + callback));
ff53f78c5a87 (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
   479
	return DrawStringMultiLine(x, y, STR_02BD, w);
3650
4dd8517bdcf6 (svn r4561) - NewGRF: implement most of callback 0x23: additional text in vehicle purchase windows.
peter1138
parents: 3492
diff changeset
   480
}
4dd8517bdcf6 (svn r4561) - NewGRF: implement most of callback 0x23: additional text in vehicle purchase windows.
peter1138
parents: 3492
diff changeset
   481
6423
8e10e79e0fd1 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6350
diff changeset
   482
/** Display list of cargo types of the engine, for the purchase information window */
4932
4bf213d0ed53 (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
uint ShowRefitOptionsList(int x, int y, uint w, EngineID engine)
4bf213d0ed53 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   484
{
4bf213d0ed53 (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
   485
	/* List of cargo types of this engine */
4bf213d0ed53 (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
	uint32 cmask = EngInfo(engine)->refit_mask;
4bf213d0ed53 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   487
	/* List of cargo types available in this climate */
6113
a10ede03ac58 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6091
diff changeset
   488
	uint32 lmask = _cargo_mask;
4932
4bf213d0ed53 (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
   489
	char *b = _userstring;
4bf213d0ed53 (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
   490
4bf213d0ed53 (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
   491
	/* Draw nothing if the engine is not refittable */
7832
60035eb28f08 (svn r11382) -Codechange: renamed COUNTBITS to CountBits, as it is no longer a macro (skidd13)
truelight
parents: 7824
diff changeset
   492
	if (CountBits(cmask) <= 1) return 0;
4932
4bf213d0ed53 (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
   493
4bf213d0ed53 (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
   494
	b = InlineString(b, STR_PURCHASE_INFO_REFITTABLE_TO);
4bf213d0ed53 (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
   495
4bf213d0ed53 (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
	if (cmask == lmask) {
4bf213d0ed53 (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
		/* Engine can be refitted to all types in this climate */
4bf213d0ed53 (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
		b = InlineString(b, STR_PURCHASE_INFO_ALL_TYPES);
4bf213d0ed53 (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
	} else {
4bf213d0ed53 (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
		/* Check if we are able to refit to more cargo types and unable to. If
4bf213d0ed53 (svn r6912) - Feature: Show a list of cargo types that a vehicle is refittable to in the purchase information window. (mart3p)
peter1138
parents: 4931
diff changeset
   501
		 * so, invert the cargo types to list those that we can't refit to. */
7832
60035eb28f08 (svn r11382) -Codechange: renamed COUNTBITS to CountBits, as it is no longer a macro (skidd13)
truelight
parents: 7824
diff changeset
   502
		if (CountBits(cmask ^ lmask) < CountBits(cmask)) {
4932
4bf213d0ed53 (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
   503
			cmask ^= lmask;
4bf213d0ed53 (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
   504
			b = InlineString(b, STR_PURCHASE_INFO_ALL_BUT);
4bf213d0ed53 (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
		}
4bf213d0ed53 (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
6113
a10ede03ac58 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6091
diff changeset
   507
		bool first = true;
a10ede03ac58 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6091
diff changeset
   508
4932
4bf213d0ed53 (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
   509
		/* Add each cargo type to the list */
6113
a10ede03ac58 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6091
diff changeset
   510
		for (CargoID cid = 0; cid < NUM_CARGO; cid++) {
7928
63e18de69e50 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents: 7846
diff changeset
   511
			if (!HasBit(cmask, cid)) continue;
6113
a10ede03ac58 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6091
diff changeset
   512
8041
9483d3e46b3e (svn r11601) -Codechange: more strict break conditions for _userstring, assert when it overflows anyway (eg. code change without proper check change)
smatz
parents: 7997
diff changeset
   513
			if (b >= lastof(_userstring) - (2 + 2 * 4)) break; // ", " and two calls to Utf8Encode()
9483d3e46b3e (svn r11601) -Codechange: more strict break conditions for _userstring, assert when it overflows anyway (eg. code change without proper check change)
smatz
parents: 7997
diff changeset
   514
6113
a10ede03ac58 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6091
diff changeset
   515
			if (!first) b = strecpy(b, ", ", lastof(_userstring));
a10ede03ac58 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6091
diff changeset
   516
			first = false;
a10ede03ac58 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6091
diff changeset
   517
a10ede03ac58 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6091
diff changeset
   518
			b = InlineString(b, GetCargo(cid)->name);
4932
4bf213d0ed53 (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
   519
		}
4bf213d0ed53 (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
   520
	}
4bf213d0ed53 (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
   521
4bf213d0ed53 (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
   522
	/* Terminate and display the completed string */
4bf213d0ed53 (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
   523
	*b = '\0';
8041
9483d3e46b3e (svn r11601) -Codechange: more strict break conditions for _userstring, assert when it overflows anyway (eg. code change without proper check change)
smatz
parents: 7997
diff changeset
   524
9483d3e46b3e (svn r11601) -Codechange: more strict break conditions for _userstring, assert when it overflows anyway (eg. code change without proper check change)
smatz
parents: 7997
diff changeset
   525
	/* Make sure we detect any buffer overflow */
9483d3e46b3e (svn r11601) -Codechange: more strict break conditions for _userstring, assert when it overflows anyway (eg. code change without proper check change)
smatz
parents: 7997
diff changeset
   526
	assert(b < endof(_userstring));
9483d3e46b3e (svn r11601) -Codechange: more strict break conditions for _userstring, assert when it overflows anyway (eg. code change without proper check change)
smatz
parents: 7997
diff changeset
   527
4932
4bf213d0ed53 (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
   528
	return DrawStringMultiLine(x, y, STR_SPEC_USERSTRING, w);
4bf213d0ed53 (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
   529
}
4bf213d0ed53 (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
   530
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   531
6423
8e10e79e0fd1 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6350
diff changeset
   532
/* 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
   533
#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
   534
2462
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   535
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
   536
{
4266
0de669884154 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   537
	const Vehicle* va = *(const Vehicle**)a;
0de669884154 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   538
	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
   539
	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
   540
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   541
	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
   542
}
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
   543
2462
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   544
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
   545
{
4863
c178519a8627 (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
   546
	static const Vehicle *last_vehicle[2] = { NULL, NULL };
c178519a8627 (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
   547
	static char           last_name[2][64] = { "", "" };
c178519a8627 (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
   548
4266
0de669884154 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   549
	const Vehicle* va = *(const Vehicle**)a;
0de669884154 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   550
	const Vehicle* vb = *(const Vehicle**)b;
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
	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
   552
4863
c178519a8627 (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
   553
	if (va != last_vehicle[0]) {
c178519a8627 (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
   554
		last_vehicle[0] = va;
c178519a8627 (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
   555
		if (IsCustomName(va->string_id)) {
4912
0f51b47cb983 (svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents: 4896
diff changeset
   556
			GetString(last_name[0], va->string_id, lastof(last_name[0]));
4863
c178519a8627 (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
   557
		} else {
c178519a8627 (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
   558
			last_name[0][0] = '\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
   559
		}
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
   560
	}
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
   561
4863
c178519a8627 (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
   562
	if (vb != last_vehicle[1]) {
c178519a8627 (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
   563
		last_vehicle[1] = vb;
c178519a8627 (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
   564
		if (IsCustomName(vb->string_id)) {
4912
0f51b47cb983 (svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents: 4896
diff changeset
   565
			GetString(last_name[1], vb->string_id, lastof(last_name[1]));
4863
c178519a8627 (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
   566
		} else {
c178519a8627 (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
   567
			last_name[1][0] = '\0';
c178519a8627 (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
   568
		}
c178519a8627 (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
   569
	}
c178519a8627 (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
   570
c178519a8627 (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
   571
	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
   572
243
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   573
	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
   574
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   575
	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
   576
}
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
   577
2462
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   578
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
   579
{
4266
0de669884154 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   580
	const Vehicle* va = *(const Vehicle**)a;
0de669884154 (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* 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
   582
	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
   583
243
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   584
	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
   585
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   586
	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
   587
}
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   588
2462
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   589
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
   590
{
4266
0de669884154 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   591
	const Vehicle* va = *(const Vehicle**)a;
0de669884154 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   592
	const Vehicle* vb = *(const Vehicle**)b;
6990
136a08baf0ed (svn r10246) -Fix (r10297): some forgotten money conversions and truncation issues. Thanks to benc for providing the patch.
rubidium
parents: 6950
diff changeset
   593
	int r = ClampToI32(va->profit_this_year - vb->profit_this_year);
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 171
diff changeset
   594
243
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   595
	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
   596
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   597
	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
   598
}
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   599
2462
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   600
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
   601
{
4266
0de669884154 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   602
	const Vehicle* va = *(const Vehicle**)a;
0de669884154 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   603
	const Vehicle* vb = *(const Vehicle**)b;
6990
136a08baf0ed (svn r10246) -Fix (r10297): some forgotten money conversions and truncation issues. Thanks to benc for providing the patch.
rubidium
parents: 6950
diff changeset
   604
	int r = ClampToI32(va->profit_last_year - vb->profit_last_year);
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   605
243
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   606
	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
   607
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   608
	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
   609
}
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   610
2462
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   611
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
   612
{
4266
0de669884154 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   613
	const Vehicle* va = *(const Vehicle**)a;
0de669884154 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   614
	const Vehicle* vb = *(const Vehicle**)b;
2549
5587f9a38563 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   615
	const Vehicle* v;
5587f9a38563 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   616
	AcceptedCargo cargoa;
5587f9a38563 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   617
	AcceptedCargo cargob;
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   618
	int r = 0;
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   619
2549
5587f9a38563 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   620
	memset(cargoa, 0, sizeof(cargoa));
5587f9a38563 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   621
	memset(cargob, 0, sizeof(cargob));
7492
35acee076719 (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: 7490
diff changeset
   622
	for (v = va; v != NULL; v = v->Next()) cargoa[v->cargo_type] += v->cargo_cap;
35acee076719 (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: 7490
diff changeset
   623
	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
   624
6350
04b19f551aec (svn r9388) -Codechange: variable scope and type, and standardify all CargoID loops.
peter1138
parents: 6259
diff changeset
   625
	for (CargoID i = 0; i < NUM_CARGO; i++) {
2549
5587f9a38563 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   626
		r = cargoa[i] - cargob[i];
5587f9a38563 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   627
		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
   628
	}
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
   629
594
1b51f81b4a77 (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
   630
	VEHICLEUNITNUMBERSORTER(r, va, vb);
1b51f81b4a77 (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
   631
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   632
	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
   633
}
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   634
2462
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   635
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
   636
{
4266
0de669884154 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   637
	const Vehicle* va = *(const Vehicle**)a;
0de669884154 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   638
	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
   639
	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
   640
243
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   641
	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
   642
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   643
	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
   644
}
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   645
2462
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   646
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
   647
{
4266
0de669884154 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   648
	const Vehicle* va = *(const Vehicle**)a;
0de669884154 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   649
	const Vehicle* vb = *(const Vehicle**)b;
1179
ce0a75460808 (svn r1681) -Feature: New realistic acceleration.
celestar
parents: 1178
diff changeset
   650
	int max_speed_a = 0xFFFF, max_speed_b = 0xFFFF;
ce0a75460808 (svn r1681) -Feature: New realistic acceleration.
celestar
parents: 1178
diff changeset
   651
	int r;
ce0a75460808 (svn r1681) -Feature: New realistic acceleration.
celestar
parents: 1178
diff changeset
   652
	const Vehicle *ua = va, *ub = vb;
ce0a75460808 (svn r1681) -Feature: New realistic acceleration.
celestar
parents: 1178
diff changeset
   653
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   654
	if (va->type == VEH_TRAIN && vb->type == VEH_TRAIN) {
1191
dc46f04aab3a (svn r1695) -Fix: I broke maximum speed sorting for anything but trains with the new acceleration. Sorry
Celestar
parents: 1182
diff changeset
   655
		do {
dc46f04aab3a (svn r1695) -Fix: I broke maximum speed sorting for anything but trains with the new acceleration. Sorry
Celestar
parents: 1182
diff changeset
   656
			if (RailVehInfo(ua->engine_type)->max_speed != 0)
dc46f04aab3a (svn r1695) -Fix: I broke maximum speed sorting for anything but trains with the new acceleration. Sorry
Celestar
parents: 1182
diff changeset
   657
				max_speed_a = min(max_speed_a, RailVehInfo(ua->engine_type)->max_speed);
7492
35acee076719 (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: 7490
diff changeset
   658
		} while ((ua = ua->Next()) != NULL);
1179
ce0a75460808 (svn r1681) -Feature: New realistic acceleration.
celestar
parents: 1178
diff changeset
   659
1191
dc46f04aab3a (svn r1695) -Fix: I broke maximum speed sorting for anything but trains with the new acceleration. Sorry
Celestar
parents: 1182
diff changeset
   660
		do {
dc46f04aab3a (svn r1695) -Fix: I broke maximum speed sorting for anything but trains with the new acceleration. Sorry
Celestar
parents: 1182
diff changeset
   661
			if (RailVehInfo(ub->engine_type)->max_speed != 0)
dc46f04aab3a (svn r1695) -Fix: I broke maximum speed sorting for anything but trains with the new acceleration. Sorry
Celestar
parents: 1182
diff changeset
   662
				max_speed_b = min(max_speed_b, RailVehInfo(ub->engine_type)->max_speed);
7492
35acee076719 (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: 7490
diff changeset
   663
		} while ((ub = ub->Next()) != NULL);
1191
dc46f04aab3a (svn r1695) -Fix: I broke maximum speed sorting for anything but trains with the new acceleration. Sorry
Celestar
parents: 1182
diff changeset
   664
dc46f04aab3a (svn r1695) -Fix: I broke maximum speed sorting for anything but trains with the new acceleration. Sorry
Celestar
parents: 1182
diff changeset
   665
		r = max_speed_a - max_speed_b;
dc46f04aab3a (svn r1695) -Fix: I broke maximum speed sorting for anything but trains with the new acceleration. Sorry
Celestar
parents: 1182
diff changeset
   666
	} else {
dc46f04aab3a (svn r1695) -Fix: I broke maximum speed sorting for anything but trains with the new acceleration. Sorry
Celestar
parents: 1182
diff changeset
   667
		r = va->max_speed - vb->max_speed;
dc46f04aab3a (svn r1695) -Fix: I broke maximum speed sorting for anything but trains with the new acceleration. Sorry
Celestar
parents: 1182
diff changeset
   668
	}
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   669
243
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   670
	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
   671
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   672
	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
   673
}
842
efc3546bc313 (svn r1323) Adding autoreplace feature
bjarni
parents: 594
diff changeset
   674
2965
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   675
static int CDECL VehicleModelSorter(const void *a, const void *b)
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   676
{
4266
0de669884154 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   677
	const Vehicle* va = *(const Vehicle**)a;
0de669884154 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   678
	const Vehicle* vb = *(const Vehicle**)b;
2965
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   679
	int r = va->engine_type - vb->engine_type;
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   680
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   681
	VEHICLEUNITNUMBERSORTER(r, va, vb);
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   682
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   683
	return (_internal_sort_order & 1) ? -r : r;
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   684
}
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   685
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   686
static int CDECL VehicleValueSorter(const void *a, const void *b)
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   687
{
4266
0de669884154 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   688
	const Vehicle* va = *(const Vehicle**)a;
0de669884154 (svn r5894) Remove a totally unnecessary indirection in the vehicle sorter code. Less code, less data, simply better
tron
parents: 4261
diff changeset
   689
	const Vehicle* vb = *(const Vehicle**)b;
2965
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   690
	const Vehicle *u;
6990
136a08baf0ed (svn r10246) -Fix (r10297): some forgotten money conversions and truncation issues. Thanks to benc for providing the patch.
rubidium
parents: 6950
diff changeset
   691
	Money valuea = 0, valueb = 0;
2965
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   692
7492
35acee076719 (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: 7490
diff changeset
   693
	for (u = va; u != NULL; u = u->Next()) valuea += u->value;
35acee076719 (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: 7490
diff changeset
   694
	for (u = vb; u != NULL; u = u->Next()) valueb += u->value;
2965
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   695
6990
136a08baf0ed (svn r10246) -Fix (r10297): some forgotten money conversions and truncation issues. Thanks to benc for providing the patch.
rubidium
parents: 6950
diff changeset
   696
	int r = ClampToI32(valuea - valueb);
2965
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   697
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   698
	VEHICLEUNITNUMBERSORTER(r, va, vb);
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   699
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   700
	return (_internal_sort_order & 1) ? -r : r;
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   701
}
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   702
6247
7d81e3a5d803 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6148
diff changeset
   703
void InitializeGUI()
1246
eb66ff34348f (svn r1750) - Feature: [ 1093261 ] Saving vehicle sorting criteria for each vehicle type (bociusz)
darkvater
parents: 1191
diff changeset
   704
{
eb66ff34348f (svn r1750) - Feature: [ 1093261 ] Saving vehicle sorting criteria for each vehicle type (bociusz)
darkvater
parents: 1191
diff changeset
   705
	memset(&_sorting, 0, sizeof(_sorting));
eb66ff34348f (svn r1750) - Feature: [ 1093261 ] Saving vehicle sorting criteria for each vehicle type (bociusz)
darkvater
parents: 1191
diff changeset
   706
}
2552
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   707
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   708
/** Assigns an already open vehicle window to a new vehicle.
2639
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   709
 * Assigns an already open vehicle window to a new vehicle. If the vehicle got
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   710
 * any sub window open (orders and so on) it will change owner too.
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   711
 * @param *from_v the current owner of the window
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   712
 * @param *to_v the new owner of the window
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   713
 */
2552
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   714
void ChangeVehicleViewWindow(const Vehicle *from_v, const Vehicle *to_v)
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   715
{
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   716
	Window *w;
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   717
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   718
	w = FindWindowById(WC_VEHICLE_VIEW, from_v->index);
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   719
	if (w != NULL) {
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   720
		w->window_number = to_v->index;
2639
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   721
		WP(w, vp_d).follow_vehicle = to_v->index;
2552
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   722
		SetWindowDirty(w);
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   723
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   724
		w = FindWindowById(WC_VEHICLE_ORDERS, from_v->index);
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   725
		if (w != NULL) {
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   726
			w->window_number = to_v->index;
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   727
			SetWindowDirty(w);
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   728
		}
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   729
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   730
		w = FindWindowById(WC_VEHICLE_REFIT, from_v->index);
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   731
		if (w != NULL) {
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   732
			w->window_number = to_v->index;
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   733
			SetWindowDirty(w);
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   734
		}
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   735
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   736
		w = FindWindowById(WC_VEHICLE_DETAILS, from_v->index);
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   737
		if (w != NULL) {
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   738
			w->window_number = to_v->index;
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   739
			SetWindowDirty(w);
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   740
		}
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   741
	}
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   742
}
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
   743
5269
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
   744
enum VehicleListWindowWidgets {
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   745
	VLW_WIDGET_CLOSEBOX = 0,
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   746
	VLW_WIDGET_CAPTION,
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   747
	VLW_WIDGET_STICKY,
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   748
	VLW_WIDGET_SORT_ORDER,
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   749
	VLW_WIDGET_SORT_BY_TEXT,
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   750
	VLW_WIDGET_SORT_BY_PULLDOWN,
5274
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   751
	VLW_WIDGET_EMPTY_TOP_RIGHT,
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   752
	VLW_WIDGET_LIST,
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   753
	VLW_WIDGET_SCROLLBAR,
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   754
	VLW_WIDGET_OTHER_PLAYER_FILLER,
5846
b4a666d80c88 (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: 5809
diff changeset
   755
	VLW_WIDGET_AVAILABLE_VEHICLES,
5274
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   756
	VLW_WIDGET_MANAGE_VEHICLES,
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   757
	VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN,
4673
3160067b8751 (svn r6570) -Feature: added "start all" and "stop all" buttons to the vehicle lists
bjarni
parents: 4669
diff changeset
   758
	VLW_WIDGET_STOP_ALL,
3160067b8751 (svn r6570) -Feature: added "start all" and "stop all" buttons to the vehicle lists
bjarni
parents: 4669
diff changeset
   759
	VLW_WIDGET_START_ALL,
5274
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   760
	VLW_WIDGET_EMPTY_BOTTOM_RIGHT,
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   761
	VLW_WIDGET_RESIZE,
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   762
};
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   763
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   764
static const Widget _vehicle_list_widgets[] = {
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   765
	{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,             STR_018B_CLOSE_WINDOW},
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   766
	{    WWT_CAPTION,  RESIZE_RIGHT,    14,    11,   247,     0,    13, 0x0,                  STR_018C_WINDOW_TITLE_DRAG_THIS},
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   767
	{  WWT_STICKYBOX,     RESIZE_LR,    14,   248,   259,     0,    13, 0x0,                  STR_STICKY_BUTTON},
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   768
	{ WWT_PUSHTXTBTN,   RESIZE_NONE,    14,     0,    80,    14,    25, STR_SORT_BY,          STR_SORT_ORDER_TIP},
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   769
	{      WWT_PANEL,   RESIZE_NONE,    14,    81,   235,    14,    25, 0x0,                  STR_SORT_CRITERIA_TIP},
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   770
	{    WWT_TEXTBTN,   RESIZE_NONE,    14,   236,   247,    14,    25, STR_0225,             STR_SORT_CRITERIA_TIP},
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   771
	{      WWT_PANEL,  RESIZE_RIGHT,    14,   248,   259,    14,    25, 0x0,                  STR_NULL},
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   772
	{     WWT_MATRIX,     RESIZE_RB,    14,     0,   247,    26,   169, 0x0,                  STR_NULL},
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   773
	{  WWT_SCROLLBAR,    RESIZE_LRB,    14,   248,   259,    26,   169, 0x0,                  STR_0190_SCROLL_BAR_SCROLLS_LIST},
5274
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   774
	/* Widget to be shown for other players hiding the following 6 widgets */
5282
361a10cbf4f3 (svn r7431) -Fix (r7418): GUI glitch when viewing other player's vehicle lists: bottom panel continued behind resize button.
peter1138
parents: 5274
diff changeset
   775
	{      WWT_PANEL,    RESIZE_RTB,    14,     0,   247,   170,   181, 0x0,                  STR_NULL},
5274
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   776
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   777
	{ WWT_PUSHTXTBTN,     RESIZE_TB,    14,     0,   105,   170,   181, 0x0,                  STR_AVAILABLE_ENGINES_TIP},
5286
079e9754c8a9 (svn r7435) -Fix (r7418): Add proper tooltips to the manage list button instead of the sort tip
Darkvater
parents: 5282
diff changeset
   778
	{    WWT_TEXTBTN,     RESIZE_TB,    14,   106,   211,   170,   181, STR_MANAGE_LIST,      STR_MANAGE_LIST_TIP},
079e9754c8a9 (svn r7435) -Fix (r7418): Add proper tooltips to the manage list button instead of the sort tip
Darkvater
parents: 5282
diff changeset
   779
	{    WWT_TEXTBTN,     RESIZE_TB,    14,   212,   223,   170,   181, STR_0225,             STR_MANAGE_LIST_TIP},
5274
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   780
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   781
	{ WWT_PUSHIMGBTN,     RESIZE_TB,    14,   224,   235,   170,   181, SPR_FLAG_VEH_STOPPED, STR_MASS_STOP_LIST_TIP},
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   782
	{ WWT_PUSHIMGBTN,     RESIZE_TB,    14,   236,   247,   170,   181, SPR_FLAG_VEH_RUNNING, STR_MASS_START_LIST_TIP},
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   783
	{      WWT_PANEL,    RESIZE_RTB,    14,   248,   247,   170,   181, 0x0,                  STR_NULL},
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   784
	{  WWT_RESIZEBOX,   RESIZE_LRTB,    14,   248,   259,   170,   181, 0x0,                  STR_RESIZE_BUTTON},
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   785
	{   WIDGETS_END},
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   786
};
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   787
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   788
static void CreateVehicleListWindow(Window *w)
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   789
{
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   790
	vehiclelist_d *vl = &WP(w, vehiclelist_d);
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   791
	uint16 window_type = w->window_number & VLW_MASK;
5587
167d9a91ef02 (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5584
diff changeset
   792
	PlayerID player = (PlayerID)GB(w->window_number, 0, 8);
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   793
6638
09c5d7bf69a5 (svn r9869) -Codechange: replace some bytes with VehicleType, i.e. more type strictness.
rubidium
parents: 6621
diff changeset
   794
	vl->vehicle_type = (VehicleType)GB(w->window_number, 11, 5);
4678
e5fe6e4aca39 (svn r6582) -Codechange: changed GenerateVehicleSortList() to reuse the same allocation over and over if possible (like BuildDepotVehicleList() )
bjarni
parents: 4677
diff changeset
   795
	vl->length_of_sort_list = 0;
e5fe6e4aca39 (svn r6582) -Codechange: changed GenerateVehicleSortList() to reuse the same allocation over and over if possible (like BuildDepotVehicleList() )
bjarni
parents: 4677
diff changeset
   796
	vl->sort_list = NULL;
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   797
	w->caption_color = player;
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   798
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   799
	/* Hide the widgets that we will not use in this window
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   800
	 * Some windows contains actions only fit for the owner */
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   801
	if (player == _local_player) {
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
   802
		w->HideWidget(VLW_WIDGET_OTHER_PLAYER_FILLER);
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
   803
		w->SetWidgetDisabledState(VLW_WIDGET_AVAILABLE_VEHICLES, window_type != VLW_STANDARD);
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   804
	} else {
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
   805
		w->SetWidgetsHiddenState(true,
5846
b4a666d80c88 (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: 5809
diff changeset
   806
			VLW_WIDGET_AVAILABLE_VEHICLES,
5274
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   807
			VLW_WIDGET_MANAGE_VEHICLES,
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   808
			VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN,
4758
090cf0f1b35e (svn r6672) -Codechange: [depot & vehicle windows] applied SetWindowWidgetsDisabledState() and SetWindowWidgetsHiddenState() to depot and vehicle windows
bjarni
parents: 4753
diff changeset
   809
			VLW_WIDGET_STOP_ALL,
090cf0f1b35e (svn r6672) -Codechange: [depot & vehicle windows] applied SetWindowWidgetsDisabledState() and SetWindowWidgetsHiddenState() to depot and vehicle windows
bjarni
parents: 4753
diff changeset
   810
			VLW_WIDGET_START_ALL,
5274
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   811
			VLW_WIDGET_EMPTY_BOTTOM_RIGHT,
4758
090cf0f1b35e (svn r6672) -Codechange: [depot & vehicle windows] applied SetWindowWidgetsDisabledState() and SetWindowWidgetsHiddenState() to depot and vehicle windows
bjarni
parents: 4753
diff changeset
   812
			WIDGET_LIST_END);
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   813
	}
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   814
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   815
	/* Set up the window widgets */
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   816
	switch (vl->vehicle_type) {
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   817
		case VEH_TRAIN:
4686
e438e8b2ab61 (svn r6591) -Codechange: changed strings that used the word "depot" into one for each vehicle type
bjarni
parents: 4681
diff changeset
   818
			w->widget[VLW_WIDGET_LIST].tooltips          = STR_883D_TRAINS_CLICK_ON_TRAIN_FOR;
5846
b4a666d80c88 (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: 5809
diff changeset
   819
			w->widget[VLW_WIDGET_AVAILABLE_VEHICLES].data = STR_AVAILABLE_TRAINS;
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   820
			break;
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   821
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   822
		case VEH_ROAD:
4686
e438e8b2ab61 (svn r6591) -Codechange: changed strings that used the word "depot" into one for each vehicle type
bjarni
parents: 4681
diff changeset
   823
			w->widget[VLW_WIDGET_LIST].tooltips          = STR_901A_ROAD_VEHICLES_CLICK_ON;
5847
96a8cef53137 (svn r8421) -Codechange (r8420): rename STR_AVAILABLE_VEHICLES to STR_AVAILABLE_ROAD_VEHICLES for clarificaton (Tron)
Darkvater
parents: 5846
diff changeset
   824
			w->widget[VLW_WIDGET_AVAILABLE_VEHICLES].data = STR_AVAILABLE_ROAD_VEHICLES;
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   825
			break;
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   826
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   827
		case VEH_SHIP:
4686
e438e8b2ab61 (svn r6591) -Codechange: changed strings that used the word "depot" into one for each vehicle type
bjarni
parents: 4681
diff changeset
   828
			w->widget[VLW_WIDGET_LIST].tooltips          = STR_9823_SHIPS_CLICK_ON_SHIP_FOR;
5846
b4a666d80c88 (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: 5809
diff changeset
   829
			w->widget[VLW_WIDGET_AVAILABLE_VEHICLES].data = STR_AVAILABLE_SHIPS;
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   830
			break;
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   831
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   832
		case VEH_AIRCRAFT:
4686
e438e8b2ab61 (svn r6591) -Codechange: changed strings that used the word "depot" into one for each vehicle type
bjarni
parents: 4681
diff changeset
   833
			w->widget[VLW_WIDGET_LIST].tooltips          = STR_A01F_AIRCRAFT_CLICK_ON_AIRCRAFT;
5846
b4a666d80c88 (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: 5809
diff changeset
   834
			w->widget[VLW_WIDGET_AVAILABLE_VEHICLES].data = STR_AVAILABLE_AIRCRAFT;
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   835
			break;
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   836
5274
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   837
		default: NOT_REACHED();
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   838
	}
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   839
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   840
	switch (window_type) {
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   841
		case VLW_SHARED_ORDERS:
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   842
			w->widget[VLW_WIDGET_CAPTION].data  = STR_VEH_WITH_SHARED_ORDERS_LIST;
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   843
			break;
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   844
		case VLW_STANDARD: /* Company Name - standard widget setup */
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   845
			switch (vl->vehicle_type) {
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   846
				case VEH_TRAIN:    w->widget[VLW_WIDGET_CAPTION].data = STR_881B_TRAINS;        break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   847
				case VEH_ROAD:     w->widget[VLW_WIDGET_CAPTION].data = STR_9001_ROAD_VEHICLES; break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   848
				case VEH_SHIP:     w->widget[VLW_WIDGET_CAPTION].data = STR_9805_SHIPS;         break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   849
				case VEH_AIRCRAFT: w->widget[VLW_WIDGET_CAPTION].data = STR_A009_AIRCRAFT;      break;
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   850
				default: NOT_REACHED(); break;
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   851
			}
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   852
			break;
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   853
		case VLW_STATION_LIST: /* Station Name */
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   854
			switch (vl->vehicle_type) {
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   855
				case VEH_TRAIN:    w->widget[VLW_WIDGET_CAPTION].data = STR_SCHEDULED_TRAINS;        break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   856
				case VEH_ROAD:     w->widget[VLW_WIDGET_CAPTION].data = STR_SCHEDULED_ROAD_VEHICLES; break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   857
				case VEH_SHIP:     w->widget[VLW_WIDGET_CAPTION].data = STR_SCHEDULED_SHIPS;         break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   858
				case VEH_AIRCRAFT: w->widget[VLW_WIDGET_CAPTION].data = STR_SCHEDULED_AIRCRAFT;      break;
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   859
				default: NOT_REACHED(); break;
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   860
			}
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   861
			break;
4681
bc077405e9a8 (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
   862
bc077405e9a8 (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
   863
		case VLW_DEPOT_LIST:
bc077405e9a8 (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
   864
			switch (vl->vehicle_type) {
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   865
				case VEH_TRAIN:    w->widget[VLW_WIDGET_CAPTION].data = STR_VEHICLE_LIST_TRAIN_DEPOT;    break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   866
				case VEH_ROAD:     w->widget[VLW_WIDGET_CAPTION].data = STR_VEHICLE_LIST_ROADVEH_DEPOT;  break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   867
				case VEH_SHIP:     w->widget[VLW_WIDGET_CAPTION].data = STR_VEHICLE_LIST_SHIP_DEPOT;     break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   868
				case VEH_AIRCRAFT: w->widget[VLW_WIDGET_CAPTION].data = STR_VEHICLE_LIST_AIRCRAFT_DEPOT; break;
4681
bc077405e9a8 (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
   869
				default: NOT_REACHED(); break;
bc077405e9a8 (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
   870
			}
bc077405e9a8 (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
   871
			break;
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   872
		default: NOT_REACHED(); break;
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   873
	}
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   874
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   875
	switch (vl->vehicle_type) {
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   876
		case VEH_TRAIN:
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   877
			w->resize.step_width = 1;
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   878
			/* Fallthrough */
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   879
		case VEH_ROAD:
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   880
			w->vscroll.cap = 7;
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   881
			w->resize.step_height = PLY_WND_PRC__SIZE_OF_ROW_SMALL;
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   882
			w->resize.height = 220 - (PLY_WND_PRC__SIZE_OF_ROW_SMALL * 3); // Minimum of 4 vehicles
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   883
			break;
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   884
		case VEH_SHIP:
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   885
		case VEH_AIRCRAFT:
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   886
			w->vscroll.cap = 4;
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   887
			w->resize.step_height = PLY_WND_PRC__SIZE_OF_ROW_BIG;
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   888
			break;
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   889
		default: NOT_REACHED();
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   890
	}
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   891
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   892
	w->widget[VLW_WIDGET_LIST].data = (w->vscroll.cap << 8) + 1;
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   893
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   894
	/* Set up sorting. Make the window-specific _sorting variable
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   895
		* point to the correct global _sorting struct so we are freed
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   896
		* from having conditionals during window operation */
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   897
	switch (vl->vehicle_type) {
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   898
		case VEH_TRAIN:    vl->_sorting = &_sorting.train; break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   899
		case VEH_ROAD:     vl->_sorting = &_sorting.roadveh; break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   900
		case VEH_SHIP:     vl->_sorting = &_sorting.ship; break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   901
		case VEH_AIRCRAFT: vl->_sorting = &_sorting.aircraft; break;
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   902
		default: NOT_REACHED(); break;
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   903
	}
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   904
5587
167d9a91ef02 (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5584
diff changeset
   905
	vl->l.flags = VL_REBUILD | (vl->_sorting->order ? VL_DESC : VL_NONE);
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   906
	vl->l.sort_type = vl->_sorting->criteria;
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   907
	vl->sort_list = NULL;
6492
286a52449b54 (svn r9673) -Cleanup: remove spaces before tabs and replace non-indenting tabs with spaces.
rubidium
parents: 6491
diff changeset
   908
	vl->l.resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS; // Set up resort timer
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   909
}
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   910
6643
f81bee57bc09 (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: 6638
diff changeset
   911
void DrawSmallOrderList(const Vehicle *v, int x, int y)
4734
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   912
{
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   913
	const Order *order;
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   914
	int sel, i = 0;
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   915
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   916
	sel = v->cur_order_index;
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   917
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   918
	FOR_VEHICLE_ORDERS(v, order) {
7824
5a63d41b59ea (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 7798
diff changeset
   919
		if (sel == 0) DrawString(x - 6, y, STR_SMALL_RIGHT_ARROW, TC_BLACK);
4734
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   920
		sel--;
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   921
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   922
		if (order->type == OT_GOTO_STATION) {
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   923
			if (v->type == VEH_SHIP && GetStation(order->dest)->IsBuoy()) continue;
4734
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   924
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   925
			SetDParam(0, order->dest);
7824
5a63d41b59ea (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 7798
diff changeset
   926
			DrawString(x, y, STR_A036, TC_FROMSTRING);
4734
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   927
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   928
			y += 6;
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   929
			if (++i == 4) break;
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   930
		}
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   931
	}
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   932
}
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   933
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   934
static void DrawVehicleListWindow(Window *w)
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   935
{
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   936
	vehiclelist_d *vl = &WP(w, vehiclelist_d);
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   937
	int x = 2;
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   938
	int y = PLY_WND_PRC__OFFSET_TOP_WIDGET;
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   939
	int max;
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   940
	int i;
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   941
	const PlayerID owner = (PlayerID)w->caption_color;
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   942
	const uint16 window_type = w->window_number & VLW_MASK;
5747
ba5393ff957a (svn r8295) -Cleanup: merged arguments station, order and depot_airport_index for GenerateVehicleSortList() and BuildVehicleList() into one uint16 argument
bjarni
parents: 5745
diff changeset
   943
	const uint16 index = GB(w->window_number, 16, 16);
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   944
5747
ba5393ff957a (svn r8295) -Cleanup: merged arguments station, order and depot_airport_index for GenerateVehicleSortList() and BuildVehicleList() into one uint16 argument
bjarni
parents: 5745
diff changeset
   945
	BuildVehicleList(vl, owner, index, window_type);
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   946
	SortVehicleList(vl);
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   947
	SetVScrollCount(w, vl->l.list_length);
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   948
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   949
	/* draw the widgets */
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   950
	switch (window_type) {
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   951
		case VLW_SHARED_ORDERS: /* Shared Orders */
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   952
			if (vl->l.list_length == 0) {
4735
632bb67a4c50 (svn r6647) -Fix: [vehicle list windows] Lists of shared orders are now no longer closed by a window event if the list is empty
bjarni
parents: 4734
diff changeset
   953
				/* We can't open this window without vehicles using this order
632bb67a4c50 (svn r6647) -Fix: [vehicle list windows] Lists of shared orders are now no longer closed by a window event if the list is empty
bjarni
parents: 4734
diff changeset
   954
				 * and we should close the window when deleting the order      */
632bb67a4c50 (svn r6647) -Fix: [vehicle list windows] Lists of shared orders are now no longer closed by a window event if the list is empty
bjarni
parents: 4734
diff changeset
   955
				NOT_REACHED();
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   956
			}
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   957
			SetDParam(0, w->vscroll.count);
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   958
			break;
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   959
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   960
		case VLW_STANDARD: /* Company Name */
8254
1496654ca5e7 (svn r11818) -Codechange: split player.h into smaller pieces.
rubidium
parents: 8224
diff changeset
   961
			SetDParam(0, owner);
7058
8105bb13ce3d (svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents: 7049
diff changeset
   962
			SetDParam(1, w->vscroll.count);
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   963
			break;
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   964
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   965
		case VLW_STATION_LIST: /* Station Name */
5747
ba5393ff957a (svn r8295) -Cleanup: merged arguments station, order and depot_airport_index for GenerateVehicleSortList() and BuildVehicleList() into one uint16 argument
bjarni
parents: 5745
diff changeset
   966
			SetDParam(0, index);
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   967
			SetDParam(1, w->vscroll.count);
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   968
			break;
4681
bc077405e9a8 (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
   969
bc077405e9a8 (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
   970
		case VLW_DEPOT_LIST:
bc077405e9a8 (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
   971
			switch (vl->vehicle_type) {
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   972
				case VEH_TRAIN:    SetDParam(0, STR_8800_TRAIN_DEPOT);        break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   973
				case VEH_ROAD:     SetDParam(0, STR_9003_ROAD_VEHICLE_DEPOT); break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   974
				case VEH_SHIP:     SetDParam(0, STR_9803_SHIP_DEPOT);         break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   975
				case VEH_AIRCRAFT: SetDParam(0, STR_A002_AIRCRAFT_HANGAR);    break;
4681
bc077405e9a8 (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
   976
				default: NOT_REACHED(); break;
bc077405e9a8 (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
   977
			}
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
   978
			if (vl->vehicle_type == VEH_AIRCRAFT) {
5747
ba5393ff957a (svn r8295) -Cleanup: merged arguments station, order and depot_airport_index for GenerateVehicleSortList() and BuildVehicleList() into one uint16 argument
bjarni
parents: 5745
diff changeset
   979
				SetDParam(1, index); // Airport name
4681
bc077405e9a8 (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
   980
			} else {
5747
ba5393ff957a (svn r8295) -Cleanup: merged arguments station, order and depot_airport_index for GenerateVehicleSortList() and BuildVehicleList() into one uint16 argument
bjarni
parents: 5745
diff changeset
   981
				SetDParam(1, GetDepot(index)->town_index);
4681
bc077405e9a8 (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
   982
			}
bc077405e9a8 (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
   983
			SetDParam(2, w->vscroll.count);
bc077405e9a8 (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
   984
			break;
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   985
		default: NOT_REACHED(); break;
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   986
	}
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   987
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
   988
	w->SetWidgetsDisabledState(vl->l.list_length == 0,
5274
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   989
		VLW_WIDGET_MANAGE_VEHICLES,
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   990
		VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN,
4758
090cf0f1b35e (svn r6672) -Codechange: [depot & vehicle windows] applied SetWindowWidgetsDisabledState() and SetWindowWidgetsHiddenState() to depot and vehicle windows
bjarni
parents: 4753
diff changeset
   991
		VLW_WIDGET_STOP_ALL,
090cf0f1b35e (svn r6672) -Codechange: [depot & vehicle windows] applied SetWindowWidgetsDisabledState() and SetWindowWidgetsHiddenState() to depot and vehicle windows
bjarni
parents: 4753
diff changeset
   992
		VLW_WIDGET_START_ALL,
090cf0f1b35e (svn r6672) -Codechange: [depot & vehicle windows] applied SetWindowWidgetsDisabledState() and SetWindowWidgetsHiddenState() to depot and vehicle windows
bjarni
parents: 4753
diff changeset
   993
		WIDGET_LIST_END);
4722
c9efab0020b9 (svn r6634) -Fix(r6377): Do not change a widget state after a DrawWindowWidgets, as it is a bit useless
belugas
parents: 4712
diff changeset
   994
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   995
	DrawWindowWidgets(w);
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   996
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   997
	/* draw sorting criteria string */
7824
5a63d41b59ea (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 7798
diff changeset
   998
	DrawString(85, 15, _vehicle_sort_listing[vl->l.sort_type], TC_BLACK);
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
   999
	/* draw arrow pointing up/down for ascending/descending sorting */
7824
5a63d41b59ea (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 7798
diff changeset
  1000
	DoDrawString(vl->l.flags & VL_DESC ? DOWNARROW : UPARROW, 69, 15, TC_BLACK);
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
  1001
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
  1002
	max = min(w->vscroll.pos + w->vscroll.cap, vl->l.list_length);
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
  1003
	for (i = w->vscroll.pos; i < max; ++i) {
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
  1004
		const Vehicle *v = vl->sort_list[i];
4734
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
  1005
		StringID str;
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
  1006
7002
1bf6a62b0fcb (svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents: 6991
diff changeset
  1007
		SetDParam(0, v->profit_this_year);
1bf6a62b0fcb (svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents: 6991
diff changeset
  1008
		SetDParam(1, v->profit_last_year);
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
  1009
8144
65cec0877b78 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8140
diff changeset
  1010
		DrawVehicleImage(v, x + 19, y + 6, INVALID_VEHICLE, w->widget[VLW_WIDGET_LIST].right - w->widget[VLW_WIDGET_LIST].left - 20, 0);
7824
5a63d41b59ea (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 7798
diff changeset
  1011
		DrawString(x + 19, y + w->resize.step_height - 8, STR_0198_PROFIT_THIS_YEAR_LAST_YEAR, TC_FROMSTRING);
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
  1012
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
  1013
		if ((v->type == VEH_TRAIN    && v->string_id != STR_SV_TRAIN_NAME)   ||
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
  1014
			(v->type == VEH_ROAD     && v->string_id != STR_SV_ROADVEH_NAME) ||
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
  1015
			(v->type == VEH_SHIP     && v->string_id != STR_SV_SHIP_NAME)    ||
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
  1016
			(v->type == VEH_AIRCRAFT && v->string_id != STR_SV_AIRCRAFT_NAME)) {
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
  1017
4734
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
  1018
			/* The vehicle got a name so we will print it */
7049
0ebe47348074 (svn r10314) -Codechange: Refer to vehicle names by index
peter1138
parents: 7002
diff changeset
  1019
			SetDParam(0, v->index);
7824
5a63d41b59ea (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 7798
diff changeset
  1020
			DrawString(x + 19, y, STR_01AB, TC_FROMSTRING);
4734
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
  1021
		}
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
  1022
4734
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
  1023
		if (w->resize.step_height == PLY_WND_PRC__SIZE_OF_ROW_BIG) DrawSmallOrderList(v, x + 138, y);
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
  1024
7490
bb27d92565d3 (svn r11001) -Codechange: unify the way to determine whether a vehicle is in a depot.
rubidium
parents: 7486
diff changeset
  1025
		if (v->IsInDepot()) {
4734
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
  1026
			str = STR_021F;
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
  1027
		} else {
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
  1028
			str = (v->age > v->max_age - 366) ? STR_00E3 : STR_00E2;
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
  1029
		}
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
  1030
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
  1031
		SetDParam(0, v->unitnumber);
7824
5a63d41b59ea (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 7798
diff changeset
  1032
		DrawString(x, y + 2, str, TC_FROMSTRING);
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
  1033
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
  1034
		DrawVehicleProfitButton(v, x, y + 13);
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
  1035
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
  1036
		y += w->resize.step_height;
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
  1037
	}
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
  1038
}
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
  1039
4449
820974aaa4a6 (svn r6227) -Codechange: added window type flags to use with PlayerVehWndProc
bjarni
parents: 4442
diff changeset
  1040
/*
820974aaa4a6 (svn r6227) -Codechange: added window type flags to use with PlayerVehWndProc
bjarni
parents: 4442
diff changeset
  1041
 * bitmask for w->window_number
820974aaa4a6 (svn r6227) -Codechange: added window type flags to use with PlayerVehWndProc
bjarni
parents: 4442
diff changeset
  1042
 * 0-7 PlayerID (owner)
820974aaa4a6 (svn r6227) -Codechange: added window type flags to use with PlayerVehWndProc
bjarni
parents: 4442
diff changeset
  1043
 * 8-10 window type (use flags in vehicle_gui.h)
820974aaa4a6 (svn r6227) -Codechange: added window type flags to use with PlayerVehWndProc
bjarni
parents: 4442
diff changeset
  1044
 * 11-15 vehicle type (using VEH_, but can be compressed to fewer bytes if needed)
820974aaa4a6 (svn r6227) -Codechange: added window type flags to use with PlayerVehWndProc
bjarni
parents: 4442
diff changeset
  1045
 * 16-31 StationID or OrderID depending on window type (bit 8-10)
820974aaa4a6 (svn r6227) -Codechange: added window type flags to use with PlayerVehWndProc
bjarni
parents: 4442
diff changeset
  1046
 **/
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1047
void PlayerVehWndProc(Window *w, WindowEvent *e)
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1048
{
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1049
	vehiclelist_d *vl = &WP(w, vehiclelist_d);
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1050
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1051
	switch (e->event) {
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
  1052
		case WE_CREATE:
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
  1053
			CreateVehicleListWindow(w);
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
  1054
			break;
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1055
4665
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
  1056
		case WE_PAINT:
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
  1057
			DrawVehicleListWindow(w);
d58f13102cc3 (svn r6559) -Codechange: [vehicle list windows] moved creation and drawing code into two new functions to make it easier to see what goes on where
bjarni
parents: 4661
diff changeset
  1058
			break;
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1059
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1060
		case WE_CLICK: {
4634
07699ac2bf37 (svn r6499) -Codechange: Finally, got "byte event" outside of the union WindowEvent, which is now a struct
belugas
parents: 4581
diff changeset
  1061
			switch (e->we.click.widget) {
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1062
				case VLW_WIDGET_SORT_ORDER: /* Flip sorting method ascending/descending */
4545
138a9195009a (svn r6377) -Codechange: Set up the widgets in the WE_CREATE instead of on every WE_PAINT
Darkvater
parents: 4542
diff changeset
  1063
					vl->l.flags ^= VL_DESC;
138a9195009a (svn r6377) -Codechange: Set up the widgets in the WE_CREATE instead of on every WE_PAINT
Darkvater
parents: 4542
diff changeset
  1064
					vl->l.flags |= VL_RESORT;
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1065
4545
138a9195009a (svn r6377) -Codechange: Set up the widgets in the WE_CREATE instead of on every WE_PAINT
Darkvater
parents: 4542
diff changeset
  1066
					vl->_sorting->order = !!(vl->l.flags & VL_DESC);
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1067
					SetWindowDirty(w);
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1068
					break;
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1069
				case VLW_WIDGET_SORT_BY_TEXT: case VLW_WIDGET_SORT_BY_PULLDOWN:/* Select sorting criteria dropdown menu */
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1070
					ShowDropDownMenu(w, _vehicle_sort_listing, vl->l.sort_type, VLW_WIDGET_SORT_BY_PULLDOWN, 0, 0);
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1071
					return;
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1072
				case VLW_WIDGET_LIST: { /* Matrix to show vehicles */
4634
07699ac2bf37 (svn r6499) -Codechange: Finally, got "byte event" outside of the union WindowEvent, which is now a struct
belugas
parents: 4581
diff changeset
  1073
					uint32 id_v = (e->we.click.pt.y - PLY_WND_PRC__OFFSET_TOP_WIDGET) / w->resize.step_height;
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1074
					const Vehicle *v;
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1075
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1076
					if (id_v >= w->vscroll.cap) return; // click out of bounds
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1077
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1078
					id_v += w->vscroll.pos;
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1079
4545
138a9195009a (svn r6377) -Codechange: Set up the widgets in the WE_CREATE instead of on every WE_PAINT
Darkvater
parents: 4542
diff changeset
  1080
					if (id_v >= vl->l.list_length) return; // click out of list bound
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1081
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1082
					v = vl->sort_list[id_v];
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1083
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1084
					ShowVehicleViewWindow(v);
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1085
				} break;
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1086
5846
b4a666d80c88 (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: 5809
diff changeset
  1087
				case VLW_WIDGET_AVAILABLE_VEHICLES:
5786
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5783
diff changeset
  1088
					ShowBuildVehicleWindow(0, vl->vehicle_type);
4506
e6a56518135c (svn r6291) -Feature: Vehicle lists from the station window now also got the goto depot button
bjarni
parents: 4498
diff changeset
  1089
					break;
4465
262c344f6f3d (svn r6249) -Fix: fixed assert when pressing goto depot in an empty list (forgot to disable the button in this condition)
bjarni
parents: 4463
diff changeset
  1090
5274
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1091
				case VLW_WIDGET_MANAGE_VEHICLES:
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1092
				case VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN: {
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1093
					static StringID action_str[] = {
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1094
						STR_REPLACE_VEHICLES,
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1095
						STR_SEND_FOR_SERVICING,
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1096
						STR_NULL,
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1097
						INVALID_STRING_ID
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1098
					};
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1099
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1100
					static const StringID depot_name[] = {
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1101
						STR_SEND_TRAIN_TO_DEPOT,
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1102
						STR_SEND_ROAD_VEHICLE_TO_DEPOT,
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1103
						STR_SEND_SHIP_TO_DEPOT,
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1104
						STR_SEND_AIRCRAFT_TO_HANGAR
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1105
					};
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1106
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1107
					/* XXX - Substite string since the dropdown cannot handle dynamic strings */
5955
fe61588d5188 (svn r8621) -Codechange: assigned new numbers to the VEH_(type) enum so that VEH_Train is 0, VEH_Road is 1 and so on
bjarni
parents: 5896
diff changeset
  1108
					action_str[2] = depot_name[vl->vehicle_type];
7072
624c4149cd1b (svn r10337) -Fix [FS#880]: Autoreplace is only valid for the standard vehicle list, not station or shared order lists.
peter1138
parents: 7058
diff changeset
  1109
					ShowDropDownMenu(w, action_str, 0, VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN, 0, (w->window_number & VLW_MASK) == VLW_STANDARD ? 0 : 1);
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1110
					break;
5274
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1111
				}
4673
3160067b8751 (svn r6570) -Feature: added "start all" and "stop all" buttons to the vehicle lists
bjarni
parents: 4669
diff changeset
  1112
3160067b8751 (svn r6570) -Feature: added "start all" and "stop all" buttons to the vehicle lists
bjarni
parents: 4669
diff changeset
  1113
				case VLW_WIDGET_STOP_ALL:
3160067b8751 (svn r6570) -Feature: added "start all" and "stop all" buttons to the vehicle lists
bjarni
parents: 4669
diff changeset
  1114
				case VLW_WIDGET_START_ALL:
4762
771ccf746531 (svn r6676) -Fix: [vehicle list windows] mass start/stop now works correctly in shared orders and station lists
bjarni
parents: 4758
diff changeset
  1115
					DoCommandP(0, GB(w->window_number, 16, 16), (w->window_number & VLW_MASK) | (1 << 6) | (e->we.click.widget == VLW_WIDGET_START_ALL ? (1 << 5) : 0) | vl->vehicle_type, NULL, CMD_MASS_START_STOP);
4673
3160067b8751 (svn r6570) -Feature: added "start all" and "stop all" buttons to the vehicle lists
bjarni
parents: 4669
diff changeset
  1116
					break;
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1117
			}
6492
286a52449b54 (svn r9673) -Cleanup: remove spaces before tabs and replace non-indenting tabs with spaces.
rubidium
parents: 6491
diff changeset
  1118
		} break;
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1119
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1120
		case WE_DROPDOWN_SELECT: /* we have selected a dropdown item in the list */
5274
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1121
			switch (e->we.dropdown.button) {
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1122
				case VLW_WIDGET_SORT_BY_PULLDOWN:
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1123
					if (vl->l.sort_type != e->we.dropdown.index) {
6423
8e10e79e0fd1 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6350
diff changeset
  1124
						/* value has changed -> resort */
5274
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1125
						vl->l.flags |= VL_RESORT;
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1126
						vl->l.sort_type = e->we.dropdown.index;
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1127
						vl->_sorting->criteria = vl->l.sort_type;
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1128
					}
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1129
					break;
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1130
				case VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN:
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1131
					assert(vl->l.list_length != 0);
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1132
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1133
					switch (e->we.dropdown.index) {
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1134
						case 0: /* Replace window */
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1135
							ShowReplaceVehicleWindow(vl->vehicle_type);
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1136
							break;
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1137
						case 1: /* Send for servicing */
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1138
							DoCommandP(0, GB(w->window_number, 16, 16) /* StationID or OrderID (depending on VLW) */,
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1139
								(w->window_number & VLW_MASK) | DEPOT_MASS_SEND | DEPOT_SERVICE,
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1140
								NULL,
5792
c4dad358b30b (svn r8349) -Codechange: replaced CMD_REFIT_VEH() and similar defines with real static inline functions
bjarni
parents: 5786
diff changeset
  1141
								GetCmdSendToDepot(vl->vehicle_type));
5274
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1142
							break;
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1143
						case 2: /* Send to Depots */
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1144
							DoCommandP(0, GB(w->window_number, 16, 16) /* StationID or OrderID (depending on VLW) */,
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1145
								(w->window_number & VLW_MASK) | DEPOT_MASS_SEND,
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1146
								NULL,
5792
c4dad358b30b (svn r8349) -Codechange: replaced CMD_REFIT_VEH() and similar defines with real static inline functions
bjarni
parents: 5786
diff changeset
  1147
								GetCmdSendToDepot(vl->vehicle_type));
5274
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1148
							break;
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1149
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1150
						default: NOT_REACHED();
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1151
					}
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1152
					break;
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1153
				default: NOT_REACHED();
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1154
			}
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1155
			SetWindowDirty(w);
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1156
			break;
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1157
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1158
		case WE_DESTROY:
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1159
			free((void*)vl->sort_list);
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1160
			break;
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1161
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1162
		case WE_TICK: /* resort the list every 20 seconds orso (10 days) */
8179
60c4282e6de6 (svn r11742) -Codechange [FS#1319]: Run window tick events when paused, so that news pop-ups and the about window still progress. For other windows the events are ignored when paused.
peter1138
parents: 8144
diff changeset
  1163
			if (_pause_game != 0) break;
4545
138a9195009a (svn r6377) -Codechange: Set up the widgets in the WE_CREATE instead of on every WE_PAINT
Darkvater
parents: 4542
diff changeset
  1164
			if (--vl->l.resort_timer == 0) {
4546
507b7d9bd834 (svn r6378) -Codechange: Rename VLW_FLAGS to VLW_MASK as it is a mask
Darkvater
parents: 4545
diff changeset
  1165
				StationID station = ((w->window_number & VLW_MASK) == VLW_STATION_LIST) ? GB(w->window_number, 16, 16) : INVALID_STATION;
4545
138a9195009a (svn r6377) -Codechange: Set up the widgets in the WE_CREATE instead of on every WE_PAINT
Darkvater
parents: 4542
diff changeset
  1166
				PlayerID owner = (PlayerID)w->caption_color;
138a9195009a (svn r6377) -Codechange: Set up the widgets in the WE_CREATE instead of on every WE_PAINT
Darkvater
parents: 4542
diff changeset
  1167
5380
8ea58542b6e0 (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5297
diff changeset
  1168
				DEBUG(misc, 3, "Periodic resort %d list player %d at station %d", vl->vehicle_type, owner, station);
4545
138a9195009a (svn r6377) -Codechange: Set up the widgets in the WE_CREATE instead of on every WE_PAINT
Darkvater
parents: 4542
diff changeset
  1169
				vl->l.resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS;
138a9195009a (svn r6377) -Codechange: Set up the widgets in the WE_CREATE instead of on every WE_PAINT
Darkvater
parents: 4542
diff changeset
  1170
				vl->l.flags |= VL_RESORT;
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1171
				SetWindowDirty(w);
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1172
			}
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1173
			break;
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1174
4542
f42ecc669275 (svn r6372) -Codechange: static, unneeded decleration in headers, superfluous header includes
Darkvater
parents: 4541
diff changeset
  1175
		case WE_RESIZE: /* Update the scroll + matrix */
4634
07699ac2bf37 (svn r6499) -Codechange: Finally, got "byte event" outside of the union WindowEvent, which is now a struct
belugas
parents: 4581
diff changeset
  1176
			w->vscroll.cap += e->we.sizing.diff.y / (int)w->resize.step_height;
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1177
			w->widget[VLW_WIDGET_LIST].data = (w->vscroll.cap << 8) + 1;
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1178
			break;
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1179
	}
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1180
}
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1181
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1182
static const WindowDesc _player_vehicle_list_train_desc = {
7341
02515d0d4ced (svn r10704) -Codechange: provide an infrastructure to have resizable windows that are smaller than the default window size.
rubidium
parents: 7072
diff changeset
  1183
	WDP_AUTO, WDP_AUTO, 260, 182, 260, 182,
5893
7e431a4abebb (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5847
diff changeset
  1184
	WC_TRAINS_LIST, WC_NONE,
5070
7f5b13b7e728 (svn r7128) -Codechange: Replace magic numbers by magic enums (windowdesc positioning WDP_AUTO = -1)
Darkvater
parents: 5005
diff changeset
  1185
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
7f5b13b7e728 (svn r7128) -Codechange: Replace magic numbers by magic enums (windowdesc positioning WDP_AUTO = -1)
Darkvater
parents: 5005
diff changeset
  1186
	_vehicle_list_widgets,
7f5b13b7e728 (svn r7128) -Codechange: Replace magic numbers by magic enums (windowdesc positioning WDP_AUTO = -1)
Darkvater
parents: 5005
diff changeset
  1187
	PlayerVehWndProc
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1188
};
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1189
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1190
static const WindowDesc _player_vehicle_list_road_veh_desc = {
7341
02515d0d4ced (svn r10704) -Codechange: provide an infrastructure to have resizable windows that are smaller than the default window size.
rubidium
parents: 7072
diff changeset
  1191
	WDP_AUTO, WDP_AUTO, 260, 182, 260, 182,
5893
7e431a4abebb (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5847
diff changeset
  1192
	WC_ROADVEH_LIST, WC_NONE,
4726
a609ab3ee4c7 (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
  1193
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
a609ab3ee4c7 (svn r6638) -Fix r5652: restored each vehicle list type to their type classes, so it's possible to redraw all lists of one vehicle type again (instead of all types)
bjarni
parents: 4723
diff changeset
  1194
	_vehicle_list_widgets,
a609ab3ee4c7 (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
  1195
	PlayerVehWndProc
a609ab3ee4c7 (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
};
a609ab3ee4c7 (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
  1197
a609ab3ee4c7 (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
  1198
static const WindowDesc _player_vehicle_list_ship_desc = {
7341
02515d0d4ced (svn r10704) -Codechange: provide an infrastructure to have resizable windows that are smaller than the default window size.
rubidium
parents: 7072
diff changeset
  1199
	WDP_AUTO, WDP_AUTO, 260, 182, 260, 182,
5893
7e431a4abebb (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5847
diff changeset
  1200
	WC_SHIPS_LIST, WC_NONE,
4726
a609ab3ee4c7 (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
  1201
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
a609ab3ee4c7 (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
  1202
	_vehicle_list_widgets,
a609ab3ee4c7 (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
  1203
	PlayerVehWndProc
a609ab3ee4c7 (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
  1204
};
a609ab3ee4c7 (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
  1205
a609ab3ee4c7 (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
  1206
static const WindowDesc _player_vehicle_list_aircraft_desc = {
7341
02515d0d4ced (svn r10704) -Codechange: provide an infrastructure to have resizable windows that are smaller than the default window size.
rubidium
parents: 7072
diff changeset
  1207
	WDP_AUTO, WDP_AUTO, 260, 182, 260, 182,
5893
7e431a4abebb (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5847
diff changeset
  1208
	WC_AIRCRAFT_LIST, WC_NONE,
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1209
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1210
	_vehicle_list_widgets,
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1211
	PlayerVehWndProc
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1212
};
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1213
6638
09c5d7bf69a5 (svn r9869) -Codechange: replace some bytes with VehicleType, i.e. more type strictness.
rubidium
parents: 6621
diff changeset
  1214
static void ShowVehicleListWindowLocal(PlayerID player, uint16 VLW_flag, VehicleType vehicle_type, uint16 unique_number)
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1215
{
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1216
	Window *w;
5005
f5086bd3945a (svn r7022) -Fix [FS#292]: Properly guard against viewing company-sensitive information from
Darkvater
parents: 4999
diff changeset
  1217
	WindowNumber num;
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1218
5005
f5086bd3945a (svn r7022) -Fix [FS#292]: Properly guard against viewing company-sensitive information from
Darkvater
parents: 4999
diff changeset
  1219
	if (!IsValidPlayer(player)) return;
f5086bd3945a (svn r7022) -Fix [FS#292]: Properly guard against viewing company-sensitive information from
Darkvater
parents: 4999
diff changeset
  1220
5745
c8069ea3af5d (svn r8293) -Codechange: overloaded ShowVehicleListWindow() so it can open all types of vehicle lists (depending on arguments)
bjarni
parents: 5668
diff changeset
  1221
	num = (unique_number << 16) | (vehicle_type << 11) | VLW_flag | player;
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1222
5269
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1223
	/* The vehicle list windows have been unified. Just some strings need
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1224
	 * to be changed which happens in the WE_CREATE event and resizing
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1225
	 * some of the windows to the correct size */
4726
a609ab3ee4c7 (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
  1226
	switch (vehicle_type) {
5752
dc401d3f5e71 (svn r8303) -Codechange (r8293): default is moved to the front of the switch in ShowVehicleListWindowLocal()
bjarni
parents: 5747
diff changeset
  1227
		default: NOT_REACHED();
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
  1228
		case VEH_TRAIN:
5269
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1229
			w = AllocateWindowDescFront(&_player_vehicle_list_train_desc, num);
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1230
			if (w != NULL) ResizeWindow(w, 65, 38);
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1231
			break;
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
  1232
		case VEH_ROAD:
5269
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1233
			w = AllocateWindowDescFront(&_player_vehicle_list_road_veh_desc, num);
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1234
			if (w != NULL) ResizeWindow(w, 0, 38);
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1235
			break;
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
  1236
		case VEH_SHIP:
5269
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1237
			w = AllocateWindowDescFront(&_player_vehicle_list_ship_desc, num);
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1238
			break;
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
  1239
		case VEH_AIRCRAFT:
5269
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1240
			w = AllocateWindowDescFront(&_player_vehicle_list_aircraft_desc, num);
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1241
			break;
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1242
	}
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1243
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1244
	if (w != NULL) {
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1245
		/* Set the minimum window size to the current window size */
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1246
		w->resize.width = w->width;
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1247
		w->resize.height = w->height;
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1248
	}
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1249
}
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1250
6638
09c5d7bf69a5 (svn r9869) -Codechange: replace some bytes with VehicleType, i.e. more type strictness.
rubidium
parents: 6621
diff changeset
  1251
void ShowVehicleListWindow(PlayerID player, VehicleType vehicle_type)
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1252
{
7547
93b6e6de2898 (svn r11067) -Codechange: also make it possible to use the advanced vehicle list for other players. Patch by SmatZ.
rubidium
parents: 7540
diff changeset
  1253
	/* If _patches.advanced_vehicle_list > 1, display the Advanced list
93b6e6de2898 (svn r11067) -Codechange: also make it possible to use the advanced vehicle list for other players. Patch by SmatZ.
rubidium
parents: 7540
diff changeset
  1254
	 * if _patches.advanced_vehicle_list == 1, display Advanced list only for local player
93b6e6de2898 (svn r11067) -Codechange: also make it possible to use the advanced vehicle list for other players. Patch by SmatZ.
rubidium
parents: 7540
diff changeset
  1255
	 * if _ctrl_pressed, do the opposite action (Advanced list x Normal list)
93b6e6de2898 (svn r11067) -Codechange: also make it possible to use the advanced vehicle list for other players. Patch by SmatZ.
rubidium
parents: 7540
diff changeset
  1256
	 */
93b6e6de2898 (svn r11067) -Codechange: also make it possible to use the advanced vehicle list for other players. Patch by SmatZ.
rubidium
parents: 7540
diff changeset
  1257
7563
305b8bdd94da (svn r11088) -Fix (r11063, r11067): MSVC warning C4804: '>' : unsafe use of type 'bool' in operation
glx
parents: 7547
diff changeset
  1258
	if ((_patches.advanced_vehicle_list > (uint)(player != _local_player)) != _ctrl_pressed) {
6643
f81bee57bc09 (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: 6638
diff changeset
  1259
		ShowPlayerGroup(player, vehicle_type);
f81bee57bc09 (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: 6638
diff changeset
  1260
	} else {
f81bee57bc09 (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: 6638
diff changeset
  1261
		ShowVehicleListWindowLocal(player, VLW_STANDARD, vehicle_type, 0);
f81bee57bc09 (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: 6638
diff changeset
  1262
	}
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1263
}
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1264
5745
c8069ea3af5d (svn r8293) -Codechange: overloaded ShowVehicleListWindow() so it can open all types of vehicle lists (depending on arguments)
bjarni
parents: 5668
diff changeset
  1265
void ShowVehicleListWindow(const Vehicle *v)
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1266
{
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1267
	if (v->orders == NULL) return; // no shared list to show
5745
c8069ea3af5d (svn r8293) -Codechange: overloaded ShowVehicleListWindow() so it can open all types of vehicle lists (depending on arguments)
bjarni
parents: 5668
diff changeset
  1268
	ShowVehicleListWindowLocal(v->owner, VLW_SHARED_ORDERS, v->type, v->orders->index);
4669
c66d137bdca1 (svn r6565) - Fix (r6562): Missing newline at EOF caused a compiler warning
peter1138
parents: 4668
diff changeset
  1269
}
4681
bc077405e9a8 (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
  1270
6638
09c5d7bf69a5 (svn r9869) -Codechange: replace some bytes with VehicleType, i.e. more type strictness.
rubidium
parents: 6621
diff changeset
  1271
void ShowVehicleListWindow(PlayerID player, VehicleType vehicle_type, StationID station)
5745
c8069ea3af5d (svn r8293) -Codechange: overloaded ShowVehicleListWindow() so it can open all types of vehicle lists (depending on arguments)
bjarni
parents: 5668
diff changeset
  1272
{
c8069ea3af5d (svn r8293) -Codechange: overloaded ShowVehicleListWindow() so it can open all types of vehicle lists (depending on arguments)
bjarni
parents: 5668
diff changeset
  1273
	ShowVehicleListWindowLocal(player, VLW_STATION_LIST, vehicle_type, station);
c8069ea3af5d (svn r8293) -Codechange: overloaded ShowVehicleListWindow() so it can open all types of vehicle lists (depending on arguments)
bjarni
parents: 5668
diff changeset
  1274
}
c8069ea3af5d (svn r8293) -Codechange: overloaded ShowVehicleListWindow() so it can open all types of vehicle lists (depending on arguments)
bjarni
parents: 5668
diff changeset
  1275
6638
09c5d7bf69a5 (svn r9869) -Codechange: replace some bytes with VehicleType, i.e. more type strictness.
rubidium
parents: 6621
diff changeset
  1276
void ShowVehicleListWindow(PlayerID player, VehicleType vehicle_type, TileIndex depot_tile)
4681
bc077405e9a8 (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
  1277
{
bc077405e9a8 (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
  1278
	uint16 depot_airport_index;
bc077405e9a8 (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
  1279
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6248
diff changeset
  1280
	if (vehicle_type == VEH_AIRCRAFT) {
4681
bc077405e9a8 (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
  1281
		depot_airport_index = GetStationIndex(depot_tile);
bc077405e9a8 (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
  1282
	} else {
bc077405e9a8 (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
  1283
		Depot *depot = GetDepotByTile(depot_tile);
bc077405e9a8 (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
  1284
		if (depot == NULL) return; // no depot to show
bc077405e9a8 (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
  1285
		depot_airport_index = depot->index;
bc077405e9a8 (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
  1286
	}
5745
c8069ea3af5d (svn r8293) -Codechange: overloaded ShowVehicleListWindow() so it can open all types of vehicle lists (depending on arguments)
bjarni
parents: 5668
diff changeset
  1287
	ShowVehicleListWindowLocal(player, VLW_DEPOT_LIST, vehicle_type, depot_airport_index);
4681
bc077405e9a8 (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
  1288
}
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1289
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1290
7530
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1291
/* Unified vehicle GUI - Vehicle Details Window */
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1292
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1293
/** Constants of vehicle details widget indices */
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1294
enum VehicleDetailsWindowWidgets {
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1295
	VLD_WIDGET_CLOSEBOX = 0,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1296
	VLD_WIDGET_CAPTION,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1297
	VLD_WIDGET_RENAME_VEHICLE,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1298
	VLD_WIDGET_TOP_DETAILS,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1299
	VLD_WIDGET_INCREASE_SERVICING_INTERVAL,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1300
	VLD_WIDGET_DECREASE_SERVICING_INTERVAL,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1301
	VLD_WIDGET_BOTTOM_RIGHT,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1302
	VLD_WIDGET_MIDDLE_DETAILS,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1303
	VLD_WIDGET_SCROLLBAR,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1304
	VLD_WIDGET_DETAILS_CARGO_CARRIED,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1305
	VLD_WIDGET_DETAILS_TRAIN_VEHICLES,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1306
	VLD_WIDGET_DETAILS_CAPACITY_OF_EACH,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1307
	VLD_WIDGET_DETAILS_TOTAL_CARGO,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1308
	VLD_WIDGET_RESIZE,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1309
};
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1310
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1311
/** Vehicle details widgets. */
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1312
static const Widget _vehicle_details_widgets[] = {
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1313
	{   WWT_CLOSEBOX,   RESIZE_NONE, 14,   0,  10,   0,  13, STR_00C5,             STR_018B_CLOSE_WINDOW},                  // VLD_WIDGET_CLOSEBOX
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1314
	{    WWT_CAPTION,  RESIZE_RIGHT, 14,  11, 364,   0,  13, 0x0,                  STR_018C_WINDOW_TITLE_DRAG_THIS},        // VLD_WIDGET_CAPTION
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1315
	{ WWT_PUSHTXTBTN,     RESIZE_LR, 14, 365, 404,   0,  13, STR_01AA_NAME,        STR_NULL /* filled in later */},         // VLD_WIDGET_RENAME_VEHICLE
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1316
	{      WWT_PANEL,  RESIZE_RIGHT, 14,   0, 404,  14,  55, 0x0,                  STR_NULL},                               // VLD_WIDGET_TOP_DETAILS
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1317
	{ WWT_PUSHTXTBTN,     RESIZE_TB, 14,   0,  10, 101, 106, STR_0188,             STR_884D_INCREASE_SERVICING_INTERVAL},   // VLD_WIDGET_INCREASE_SERVICING_INTERVAL
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1318
	{ WWT_PUSHTXTBTN,     RESIZE_TB, 14,   0,  10, 107, 112, STR_0189,             STR_884E_DECREASE_SERVICING_INTERVAL},   // VLD_WIDGET_DECREASE_SERVICING_INTERVAL
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1319
	{      WWT_PANEL,    RESIZE_RTB, 14,  11, 404, 101, 112, 0x0,                  STR_NULL},                               // VLD_WIDGET_BOTTOM_RIGHT
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1320
	{     WWT_MATRIX,     RESIZE_RB, 14,   0, 392,  56, 100, 0x701,                STR_NULL},                               // VLD_WIDGET_MIDDLE_DETAILS
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1321
	{  WWT_SCROLLBAR,    RESIZE_LRB, 14, 393, 404,  56, 100, 0x0,                  STR_0190_SCROLL_BAR_SCROLLS_LIST},       // VLD_WIDGET_SCROLLBAR
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1322
	{ WWT_PUSHTXTBTN,     RESIZE_TB, 14,   0,  95, 113, 124, STR_013C_CARGO,       STR_884F_SHOW_DETAILS_OF_CARGO_CARRIED}, // VLD_WIDGET_DETAILS_CARGO_CARRIED
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1323
	{ WWT_PUSHTXTBTN,     RESIZE_TB, 14,  96, 194, 113, 124, STR_013D_INFORMATION, STR_8850_SHOW_DETAILS_OF_TRAIN_VEHICLES},// VLD_WIDGET_DETAILS_TRAIN_VEHICLES
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1324
	{ WWT_PUSHTXTBTN,     RESIZE_TB, 14, 195, 293, 113, 124, STR_013E_CAPACITIES,  STR_8851_SHOW_CAPACITIES_OF_EACH},       // VLD_WIDGET_DETAILS_CAPACITY_OF_EACH
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1325
	{ WWT_PUSHTXTBTN,    RESIZE_RTB, 14, 294, 392, 113, 124, STR_013E_TOTAL_CARGO, STR_8852_SHOW_TOTAL_CARGO},              // VLD_WIDGET_DETAILS_TOTAL_CARGO
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1326
	{  WWT_RESIZEBOX,   RESIZE_LRTB, 14, 393, 404, 113, 124, 0x0,                  STR_RESIZE_BUTTON},                      // VLD_RESIZE
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1327
	{   WIDGETS_END},
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1328
};
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1329
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1330
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1331
/** Command indices for the _vehicle_command_translation_table. */
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1332
enum VehicleStringTranslation {
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1333
	VST_VEHICLE_AGE_RUNNING_COST_YR,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1334
	VST_VEHICLE_MAX_SPEED,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1335
	VST_VEHICLE_PROFIT_THIS_YEAR_LAST_YEAR,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1336
	VST_VEHICLE_RELIABILITY_BREAKDOWNS,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1337
};
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1338
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1339
/** Command codes for the shared buttons indexed by VehicleCommandTranslation and vehicle type. */
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1340
static const StringID _vehicle_translation_table[][4] = {
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1341
	{ // VST_VEHICLE_AGE_RUNNING_COST_YR
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1342
		STR_885D_AGE_RUNNING_COST_YR,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1343
		STR_900D_AGE_RUNNING_COST_YR,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1344
		STR_9812_AGE_RUNNING_COST_YR,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1345
		STR_A00D_AGE_RUNNING_COST_YR,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1346
	},
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1347
	{ // VST_VEHICLE_MAX_SPEED
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1348
		STR_NULL,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1349
		STR_900E_MAX_SPEED,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1350
		STR_9813_MAX_SPEED,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1351
		STR_A00E_MAX_SPEED,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1352
	},
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1353
	{ // VST_VEHICLE_PROFIT_THIS_YEAR_LAST_YEAR
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1354
		STR_885F_PROFIT_THIS_YEAR_LAST_YEAR,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1355
		STR_900F_PROFIT_THIS_YEAR_LAST_YEAR,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1356
		STR_9814_PROFIT_THIS_YEAR_LAST_YEAR,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1357
		STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1358
	},
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1359
	{ // VST_VEHICLE_RELIABILITY_BREAKDOWNS
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1360
		STR_8860_RELIABILITY_BREAKDOWNS,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1361
		STR_9010_RELIABILITY_BREAKDOWNS,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1362
		STR_9815_RELIABILITY_BREAKDOWNS,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1363
		STR_A010_RELIABILITY_BREAKDOWNS,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1364
	},
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1365
};
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1366
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1367
/** Initialize a newly created vehicle details window */
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1368
void CreateVehicleDetailsWindow(Window *w)
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1369
{
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1370
	const Vehicle *v = GetVehicle(w->window_number);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1371
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1372
	switch (v->type) {
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1373
		case VEH_TRAIN:
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1374
			ResizeWindow(w, 0, 39);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1375
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1376
			w->vscroll.cap = 6;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1377
			w->height += 12;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1378
			w->resize.step_height = 14;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1379
			w->resize.height = w->height - 14 * 2; // Minimum of 4 wagons in the display
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1380
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1381
			w->widget[VLD_WIDGET_RENAME_VEHICLE].tooltips = STR_8867_NAME_TRAIN;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1382
			w->widget[VLD_WIDGET_CAPTION].data = STR_8802_DETAILS;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1383
			break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1384
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1385
		case VEH_ROAD: {
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1386
			w->widget[VLD_WIDGET_CAPTION].data = STR_900C_DETAILS;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1387
			w->widget[VLD_WIDGET_RENAME_VEHICLE].tooltips = STR_902E_NAME_ROAD_VEHICLE;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1388
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1389
			if (!RoadVehHasArticPart(v)) break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1390
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1391
			/* Draw the text under the vehicle instead of next to it, minus the
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1392
			* height already allocated for the cargo of the first vehicle. */
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1393
			uint height_extension = 15 - 11;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1394
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1395
			/* Add space for the cargo amount for each part. */
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1396
			for (const Vehicle *u = v; u != NULL; u = u->Next()) {
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1397
				height_extension += 11;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1398
			}
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1399
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1400
			ResizeWindow(w, 0, height_extension);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1401
		} break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1402
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1403
		case VEH_SHIP:
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1404
			w->widget[VLD_WIDGET_RENAME_VEHICLE].tooltips = STR_982F_NAME_SHIP;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1405
			w->widget[VLD_WIDGET_CAPTION].data = STR_9811_DETAILS;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1406
			break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1407
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1408
		case VEH_AIRCRAFT:
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1409
			ResizeWindow(w, 0, 11);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1410
			w->widget[VLD_WIDGET_RENAME_VEHICLE].tooltips = STR_A032_NAME_AIRCRAFT;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1411
			w->widget[VLD_WIDGET_CAPTION].data = STR_A00C_DETAILS;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1412
			break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1413
		default: NOT_REACHED();
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1414
	}
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1415
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1416
	if (v->type != VEH_TRAIN) {
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1417
		w->vscroll.cap = 1;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1418
		w->widget[VLD_WIDGET_MIDDLE_DETAILS].right += 12;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1419
	}
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1420
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1421
	w->widget[VLD_WIDGET_MIDDLE_DETAILS].data = (w->vscroll.cap << 8) + 1;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1422
	w->caption_color = v->owner;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1423
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1424
	WP(w, vehicledetails_d).tab = 0;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1425
}
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1426
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1427
/** Checks whether service interval is enabled for the vehicle. */
7846
98f7b9595aab (svn r11396) -Fix: GCC 3.3 doesn't like 'static bool inline', should of course be 'static inline bool' (SmatZ)
truelight
parents: 7832
diff changeset
  1428
static inline bool IsVehicleServiceIntervalEnabled(const VehicleType vehicle_type)
7530
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1429
{
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1430
	switch (vehicle_type) {
7798
5ae2f0e61f1d (svn r11348) -Fix (r11049): [OSX] killed a warning (don't ask why only OSX showed this one)
bjarni
parents: 7759
diff changeset
  1431
		default: NOT_REACHED();
7530
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1432
		case VEH_TRAIN:    return _patches.servint_trains   != 0; break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1433
		case VEH_ROAD:     return _patches.servint_roadveh  != 0; break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1434
		case VEH_SHIP:     return _patches.servint_ships    != 0; break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1435
		case VEH_AIRCRAFT: return _patches.servint_aircraft != 0; break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1436
	}
7798
5ae2f0e61f1d (svn r11348) -Fix (r11049): [OSX] killed a warning (don't ask why only OSX showed this one)
bjarni
parents: 7759
diff changeset
  1437
	return false; // kill a compiler warning
7530
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1438
}
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1439
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1440
extern int GetTrainDetailsWndVScroll(VehicleID veh_id, byte det_tab);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1441
extern void DrawTrainDetails(const Vehicle *v, int x, int y, int vscroll_pos, uint16 vscroll_cap, byte det_tab);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1442
extern void DrawRoadVehDetails(const Vehicle *v, int x, int y);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1443
extern void DrawShipDetails(const Vehicle *v, int x, int y);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1444
extern void DrawAircraftDetails(const Vehicle *v, int x, int y);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1445
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1446
/**
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1447
* Draw the details for the given vehicle at the position (x,y) of the Details windows
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1448
*
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1449
* @param v current vehicle
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1450
* @param x The x coordinate
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1451
* @param y The y coordinate
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1452
* @param vscroll_pos (train only)
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1453
* @param vscroll_cap (train only)
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1454
* @param det_tab (train only)
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1455
*/
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1456
static inline void DrawVehicleDetails(const Vehicle *v, int x, int y, int vscroll_pos, uint vscroll_cap, byte det_tab)
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1457
{
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1458
	switch (v->type) {
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1459
		case VEH_TRAIN:    DrawTrainDetails(v, x, y, vscroll_pos, vscroll_cap, det_tab);  break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1460
		case VEH_ROAD:     DrawRoadVehDetails(v, x, y);  break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1461
		case VEH_SHIP:     DrawShipDetails(v, x, y);     break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1462
		case VEH_AIRCRAFT: DrawAircraftDetails(v, x, y); break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1463
		default: NOT_REACHED();
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1464
	}
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1465
}
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1466
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1467
/** Repaint vehicle details window. */
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1468
static void DrawVehicleDetailsWindow(Window *w)
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1469
{
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1470
	const Vehicle *v = GetVehicle(w->window_number);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1471
	byte det_tab = WP(w, vehicledetails_d).tab;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1472
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1473
	w->SetWidgetDisabledState(VLD_WIDGET_RENAME_VEHICLE, v->owner != _local_player);
7530
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1474
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1475
	if (v->type == VEH_TRAIN) {
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1476
		w->DisableWidget(det_tab + VLD_WIDGET_DETAILS_CARGO_CARRIED);
7530
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1477
		SetVScrollCount(w, GetTrainDetailsWndVScroll(v->index, det_tab));
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1478
	}
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1479
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1480
	w->SetWidgetsHiddenState(v->type != VEH_TRAIN,
7530
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1481
		VLD_WIDGET_SCROLLBAR,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1482
		VLD_WIDGET_DETAILS_CARGO_CARRIED,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1483
		VLD_WIDGET_DETAILS_TRAIN_VEHICLES,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1484
		VLD_WIDGET_DETAILS_CAPACITY_OF_EACH,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1485
		VLD_WIDGET_DETAILS_TOTAL_CARGO,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1486
		VLD_WIDGET_RESIZE,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1487
		WIDGET_LIST_END);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1488
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1489
	/* Disable service-scroller when interval is set to disabled */
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1490
	w->SetWidgetsDisabledState(!IsVehicleServiceIntervalEnabled(v->type),
7530
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1491
		VLD_WIDGET_INCREASE_SERVICING_INTERVAL,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1492
		VLD_WIDGET_DECREASE_SERVICING_INTERVAL,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1493
		WIDGET_LIST_END);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1494
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1495
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1496
	SetDParam(0, v->index);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1497
	DrawWindowWidgets(w);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1498
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1499
	/* Draw running cost */
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1500
	SetDParam(1, v->age / 366);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1501
	SetDParam(0, (v->age + 365 < v->max_age) ? STR_AGE : STR_AGE_RED);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1502
	SetDParam(2, v->max_age / 366);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1503
	SetDParam(3, v->GetDisplayRunningCost());
7824
5a63d41b59ea (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 7798
diff changeset
  1504
	DrawString(2, 15, _vehicle_translation_table[VST_VEHICLE_AGE_RUNNING_COST_YR][v->type], TC_FROMSTRING);
7530
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1505
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1506
	/* Draw max speed */
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1507
	switch (v->type) {
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1508
		case VEH_TRAIN:
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1509
			SetDParam(2, v->GetDisplayMaxSpeed());
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1510
			SetDParam(1, v->u.rail.cached_power);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1511
			SetDParam(0, v->u.rail.cached_weight);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1512
			SetDParam(3, v->u.rail.cached_max_te / 1000);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1513
			DrawString(2, 25, (_patches.realistic_acceleration && v->u.rail.railtype != RAILTYPE_MAGLEV) ?
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1514
				STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :
7824
5a63d41b59ea (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 7798
diff changeset
  1515
				STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED, TC_FROMSTRING);
7530
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1516
			break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1517
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1518
		case VEH_ROAD:
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1519
		case VEH_SHIP:
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1520
		case VEH_AIRCRAFT:
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1521
			SetDParam(0, v->GetDisplayMaxSpeed());
7824
5a63d41b59ea (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 7798
diff changeset
  1522
			DrawString(2, 25, _vehicle_translation_table[VST_VEHICLE_MAX_SPEED][v->type], TC_FROMSTRING);
7530
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1523
			break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1524
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1525
		default: NOT_REACHED();
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1526
	}
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1527
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1528
	/* Draw profit */
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1529
	SetDParam(0, v->profit_this_year);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1530
	SetDParam(1, v->profit_last_year);
7824
5a63d41b59ea (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 7798
diff changeset
  1531
	DrawString(2, 35, _vehicle_translation_table[VST_VEHICLE_PROFIT_THIS_YEAR_LAST_YEAR][v->type], TC_FROMSTRING);
7530
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1532
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1533
	/* Draw breakdown & reliability */
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1534
	SetDParam(0, v->reliability * 100 >> 16);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1535
	SetDParam(1, v->breakdowns_since_last_service);
7824
5a63d41b59ea (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 7798
diff changeset
  1536
	DrawString(2, 45, _vehicle_translation_table[VST_VEHICLE_RELIABILITY_BREAKDOWNS][v->type], TC_FROMSTRING);
7530
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1537
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1538
	/* Draw service interval text */
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1539
	SetDParam(0, v->service_interval);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1540
	SetDParam(1, v->date_of_last_service);
7824
5a63d41b59ea (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 7798
diff changeset
  1541
	DrawString(13, w->height - (v->type != VEH_TRAIN ? 11 : 23), _patches.servint_ispercent ? STR_SERVICING_INTERVAL_PERCENT : STR_883C_SERVICING_INTERVAL_DAYS, TC_FROMSTRING);
7530
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1542
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1543
	switch (v->type) {
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1544
		case VEH_TRAIN:
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1545
			DrawVehicleDetails(v, 2, 57, w->vscroll.pos, w->vscroll.cap, det_tab);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1546
			break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1547
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1548
		case VEH_ROAD:
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1549
		case VEH_SHIP:
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1550
		case VEH_AIRCRAFT:
8144
65cec0877b78 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8140
diff changeset
  1551
			DrawVehicleImage(v, 3, 57, INVALID_VEHICLE, 0, 0);
7530
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1552
			DrawVehicleDetails(v, 75, 57, w->vscroll.pos, w->vscroll.cap, det_tab);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1553
			break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1554
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1555
		default: NOT_REACHED();
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1556
	}
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1557
}
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1558
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1559
/** Message strings for renaming vehicles indexed by vehicle type. */
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1560
static const StringID _name_vehicle_title[] = {
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1561
	STR_8865_NAME_TRAIN,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1562
	STR_902C_NAME_ROAD_VEHICLE,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1563
	STR_9831_NAME_SHIP,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1564
	STR_A030_NAME_AIRCRAFT
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1565
};
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1566
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1567
/** Message strings for error while renaming indexed by vehicle type. */
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1568
static const StringID _name_vehicle_error[] = {
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1569
	STR_8866_CAN_T_NAME_TRAIN,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1570
	STR_902D_CAN_T_NAME_ROAD_VEHICLE,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1571
	STR_9832_CAN_T_NAME_SHIP,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1572
	STR_A031_CAN_T_NAME_AIRCRAFT
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1573
};
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1574
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1575
/** Window event hook for vehicle details. */
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1576
static void VehicleDetailsWndProc(Window *w, WindowEvent *e)
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1577
{
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1578
	switch (e->event) {
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1579
		case WE_CREATE:
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1580
			CreateVehicleDetailsWindow(w);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1581
			break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1582
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1583
		case WE_PAINT:
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1584
			DrawVehicleDetailsWindow(w);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1585
			break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1586
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1587
		case WE_CLICK: {
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1588
			switch (e->we.click.widget) {
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1589
				case VLD_WIDGET_RENAME_VEHICLE: {// rename
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1590
					const Vehicle *v = GetVehicle(w->window_number);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1591
					SetDParam(0, v->index);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1592
					ShowQueryString(STR_VEHICLE_NAME, _name_vehicle_title[v->type], 31, 150, w, CS_ALPHANUMERAL);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1593
				} break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1594
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1595
				case VLD_WIDGET_INCREASE_SERVICING_INTERVAL:   // increase int
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1596
				case VLD_WIDGET_DECREASE_SERVICING_INTERVAL: { // decrease int
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1597
					int mod = _ctrl_pressed ? 5 : 10;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1598
					const Vehicle *v = GetVehicle(w->window_number);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1599
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1600
					mod = (e->we.click.widget == VLD_WIDGET_DECREASE_SERVICING_INTERVAL) ? -mod : mod;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1601
					mod = GetServiceIntervalClamped(mod + v->service_interval);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1602
					if (mod == v->service_interval) return;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1603
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1604
					DoCommandP(v->tile, v->index, mod, NULL, CMD_CHANGE_SERVICE_INT | CMD_MSG(STR_018A_CAN_T_CHANGE_SERVICING));
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1605
				} break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1606
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1607
				case VLD_WIDGET_DETAILS_CARGO_CARRIED:
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1608
				case VLD_WIDGET_DETAILS_TRAIN_VEHICLES:
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1609
				case VLD_WIDGET_DETAILS_CAPACITY_OF_EACH:
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1610
				case VLD_WIDGET_DETAILS_TOTAL_CARGO:
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1611
					w->SetWidgetsDisabledState(false,
7530
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1612
						VLD_WIDGET_DETAILS_CARGO_CARRIED,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1613
						VLD_WIDGET_DETAILS_TRAIN_VEHICLES,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1614
						VLD_WIDGET_DETAILS_CAPACITY_OF_EACH,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1615
						VLD_WIDGET_DETAILS_TOTAL_CARGO,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1616
						e->we.click.widget,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1617
						WIDGET_LIST_END);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1618
7540
820fc73362ba (svn r11060) -Codechange: replace some magic numbers with the right enumified constants.
rubidium
parents: 7530
diff changeset
  1619
					WP(w, vehicledetails_d).tab = e->we.click.widget - VLD_WIDGET_DETAILS_CARGO_CARRIED;
7530
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1620
					SetWindowDirty(w);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1621
					break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1622
			}
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1623
		} break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1624
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1625
		case WE_ON_EDIT_TEXT:
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1626
			if (!StrEmpty(e->we.edittext.str)) {
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1627
				_cmd_text = e->we.edittext.str;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1628
				DoCommandP(0, w->window_number, 0, NULL, CMD_NAME_VEHICLE | CMD_MSG(_name_vehicle_error[GetVehicle(w->window_number)->type]));
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1629
			}
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1630
			break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1631
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1632
		case WE_RESIZE:
7540
820fc73362ba (svn r11060) -Codechange: replace some magic numbers with the right enumified constants.
rubidium
parents: 7530
diff changeset
  1633
			if (e->we.sizing.diff.x != 0) ResizeButtons(w, VLD_WIDGET_DETAILS_CARGO_CARRIED, VLD_WIDGET_DETAILS_TOTAL_CARGO);
7530
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1634
			if (e->we.sizing.diff.y == 0) break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1635
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1636
			w->vscroll.cap += e->we.sizing.diff.y / 14;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1637
			w->widget[VLD_WIDGET_MIDDLE_DETAILS].data = (w->vscroll.cap << 8) + 1;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1638
			break;
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1639
	}
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1640
}
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1641
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1642
/** Vehicle details window descriptor. */
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1643
static const WindowDesc _vehicle_details_desc = {
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1644
	WDP_AUTO, WDP_AUTO, 405, 113, 405, 113,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1645
	WC_VEHICLE_DETAILS, WC_VEHICLE_VIEW,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1646
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_RESIZABLE,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1647
	_vehicle_details_widgets,
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1648
	VehicleDetailsWndProc
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1649
};
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1650
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1651
/** Shows the vehicle details window of the given vehicle. */
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1652
static void ShowVehicleDetailsWindow(const Vehicle *v)
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1653
{
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1654
	DeleteWindowById(WC_VEHICLE_ORDERS, v->index);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1655
	DeleteWindowById(WC_VEHICLE_DETAILS, v->index);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1656
	AllocateWindowDescFront(&_vehicle_details_desc, v->index);
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1657
}
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1658
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1659
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1660
/* Unified vehicle GUI - Vehicle View Window */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1661
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1662
/** Constants of vehicle view widget indices */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1663
enum VehicleViewWindowWidgets {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1664
	VVW_WIDGET_CLOSEBOX = 0,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1665
	VVW_WIDGET_CAPTION,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1666
	VVW_WIDGET_STICKY,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1667
	VVW_WIDGET_PANEL,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1668
	VVW_WIDGET_VIEWPORT,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1669
	VVW_WIDGET_START_STOP_VEH,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1670
	VVW_WIDGET_CENTER_MAIN_VIEH,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1671
	VVW_WIDGET_GOTO_DEPOT,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1672
	VVW_WIDGET_REFIT_VEH,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1673
	VVW_WIDGET_SHOW_ORDERS,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1674
	VVW_WIDGET_SHOW_DETAILS,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1675
	VVW_WIDGET_CLONE_VEH,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1676
	VVW_WIDGET_EMPTY_BOTTOM_RIGHT,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1677
	VVW_WIDGET_RESIZE,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1678
	VVW_WIDGET_TURN_AROUND,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1679
	VVW_WIDGET_FORCE_PROCEED,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1680
};
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1681
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1682
/** Vehicle view widgets. */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1683
static const Widget _vehicle_view_widgets[] = {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1684
	{   WWT_CLOSEBOX,  RESIZE_NONE,  14,   0,  10,   0,  13, STR_00C5,                 STR_018B_CLOSE_WINDOW },           // VVW_WIDGET_CLOSEBOX
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1685
	{    WWT_CAPTION, RESIZE_RIGHT,  14,  11, 237,   0,  13, 0x0 /* filled later */,   STR_018C_WINDOW_TITLE_DRAG_THIS }, // VVW_WIDGET_CAPTION
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1686
	{  WWT_STICKYBOX,    RESIZE_LR,  14, 238, 249,   0,  13, 0x0,                      STR_STICKY_BUTTON },               // VVW_WIDGET_STICKY
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1687
	{      WWT_PANEL,    RESIZE_RB,  14,   0, 231,  14, 103, 0x0,                      STR_NULL },                        // VVW_WIDGET_PANEL
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1688
	{      WWT_INSET,    RESIZE_RB,  14,   2, 229,  16, 101, 0x0,                      STR_NULL },                        // VVW_WIDGET_VIEWPORT
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1689
	{    WWT_PUSHBTN,   RESIZE_RTB,  14,   0, 237, 104, 115, 0x0,                      0x0 /* filled later */ },          // VVW_WIDGET_START_STOP_VEH
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1690
	{ WWT_PUSHIMGBTN,    RESIZE_LR,  14, 232, 249,  14,  31, SPR_CENTRE_VIEW_VEHICLE,  0x0 /* filled later */ },          // VVW_WIDGET_CENTER_MAIN_VIEH
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1691
	{ WWT_PUSHIMGBTN,    RESIZE_LR,  14, 232, 249,  32,  49, 0x0 /* filled later */,   0x0 /* filled later */ },          // VVW_WIDGET_GOTO_DEPOT
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1692
	{ WWT_PUSHIMGBTN,    RESIZE_LR,  14, 232, 249,  50,  67, SPR_REFIT_VEHICLE,        0x0 /* filled later */ },          // VVW_WIDGET_REFIT_VEH
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1693
	{ WWT_PUSHIMGBTN,    RESIZE_LR,  14, 232, 249,  68,  85, SPR_SHOW_ORDERS,          0x0 /* filled later */ },          // VVW_WIDGET_SHOW_ORDERS
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1694
	{ WWT_PUSHIMGBTN,    RESIZE_LR,  14, 232, 249,  86, 103, SPR_SHOW_VEHICLE_DETAILS, 0x0 /* filled later */ },          // VVW_WIDGET_SHOW_DETAILS
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1695
	{ WWT_PUSHIMGBTN,    RESIZE_LR,  14, 232, 249,  32,  49, 0x0 /* filled later */,   0x0 /* filled later */ },          // VVW_WIDGET_CLONE_VEH
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1696
	{      WWT_PANEL,   RESIZE_LRB,  14, 232, 249, 104, 103, 0x0,                      STR_NULL },                        // VVW_WIDGET_EMPTY_BOTTOM_RIGHT
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1697
	{  WWT_RESIZEBOX,  RESIZE_LRTB,  14, 238, 249, 104, 115, 0x0,                      STR_NULL },                        // VVW_WIDGET_RESIZE
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1698
	{ WWT_PUSHIMGBTN,    RESIZE_LR,  14, 232, 249,  50,  67, SPR_FORCE_VEHICLE_TURN,   STR_9020_FORCE_VEHICLE_TO_TURN_AROUND }, // VVW_WIDGET_TURN_AROUND
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1699
	{ WWT_PUSHIMGBTN,    RESIZE_LR,  14, 232, 249,  50,  67, SPR_IGNORE_SIGNALS,       STR_884A_FORCE_TRAIN_TO_PROCEED },       // VVW_WIDGET_FORCE_PROCEED
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1700
{   WIDGETS_END},
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1701
};
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1702
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1703
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1704
static void VehicleViewWndProc(Window *w, WindowEvent *e);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1705
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1706
/** Vehicle view window descriptor for all vehicles but trains. */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1707
static const WindowDesc _vehicle_view_desc = {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1708
	WDP_AUTO, WDP_AUTO, 250, 116, 250, 116,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1709
	WC_VEHICLE_VIEW, WC_NONE,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1710
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1711
	_vehicle_view_widgets,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1712
	VehicleViewWndProc
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1713
};
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1714
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1715
/** Vehicle view window descriptor for trains. Only minimum_height and
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1716
 *  default_height are different for train view.
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1717
 */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1718
static const WindowDesc _train_view_desc = {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1719
	WDP_AUTO, WDP_AUTO, 250, 134, 250, 134,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1720
	WC_VEHICLE_VIEW, WC_NONE,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1721
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1722
	_vehicle_view_widgets,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1723
	VehicleViewWndProc
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1724
};
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1725
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1726
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1727
/* Just to make sure, nobody has changed the vehicle type constants, as we are
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1728
	 using them for array indexing in a number of places here. */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1729
assert_compile(VEH_TRAIN == 0);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1730
assert_compile(VEH_ROAD == 1);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1731
assert_compile(VEH_SHIP == 2);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1732
assert_compile(VEH_AIRCRAFT == 3);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1733
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1734
/** Zoom levels for vehicle views indexed by vehicle type. */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1735
static const ZoomLevel _vehicle_view_zoom_levels[] = {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1736
	ZOOM_LVL_TRAIN,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1737
	ZOOM_LVL_ROADVEH,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1738
	ZOOM_LVL_SHIP,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1739
	ZOOM_LVL_AIRCRAFT,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1740
};
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1741
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1742
/* Constants for geometry of vehicle view viewport */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1743
static const int VV_VIEWPORT_X = 3;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1744
static const int VV_VIEWPORT_Y = 17;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1745
static const int VV_INITIAL_VIEWPORT_WIDTH = 226;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1746
static const int VV_INITIAL_VIEWPORT_HEIGHT = 84;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1747
static const int VV_INITIAL_VIEWPORT_HEIGHT_TRAIN = 102;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1748
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1749
/** Shows the vehicle view window of the given vehicle. */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1750
void ShowVehicleViewWindow(const Vehicle *v)
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1751
{
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1752
	Window *w = AllocateWindowDescFront((v->type == VEH_TRAIN) ? &_train_view_desc : &_vehicle_view_desc, v->index);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1753
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1754
	if (w != NULL) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1755
		w->caption_color = v->owner;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1756
		AssignWindowViewport(w, VV_VIEWPORT_X, VV_VIEWPORT_Y, VV_INITIAL_VIEWPORT_WIDTH,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1757
												 (v->type == VEH_TRAIN) ? VV_INITIAL_VIEWPORT_HEIGHT_TRAIN : VV_INITIAL_VIEWPORT_HEIGHT,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1758
												 w->window_number | (1 << 31), _vehicle_view_zoom_levels[v->type]);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1759
	}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1760
}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1761
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1762
/** Initialize a newly created vehicle view window */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1763
static void CreateVehicleViewWindow(Window *w)
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1764
{
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1765
	const Vehicle *v = GetVehicle(w->window_number);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1766
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1767
	/*
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1768
	 * fill in data and tooltip codes for the widgets and
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1769
	 * move some of the buttons for trains
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1770
	 */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1771
	switch (v->type) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1772
		case VEH_TRAIN:
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1773
			w->widget[VVW_WIDGET_CAPTION].data = STR_882E;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1774
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1775
			w->widget[VVW_WIDGET_START_STOP_VEH].tooltips = STR_8846_CURRENT_TRAIN_ACTION_CLICK;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1776
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1777
			w->widget[VVW_WIDGET_CENTER_MAIN_VIEH].tooltips = STR_8848_CENTER_MAIN_VIEW_ON_TRAIN;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1778
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1779
			w->widget[VVW_WIDGET_GOTO_DEPOT].data = SPR_SEND_TRAIN_TODEPOT;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1780
			w->widget[VVW_WIDGET_GOTO_DEPOT].tooltips = STR_8849_SEND_TRAIN_TO_DEPOT;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1781
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1782
			w->widget[VVW_WIDGET_REFIT_VEH].tooltips = STR_RAIL_REFIT_VEHICLE_TO_CARRY;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1783
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1784
			w->widget[VVW_WIDGET_SHOW_ORDERS].tooltips = STR_8847_SHOW_TRAIN_S_ORDERS;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1785
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1786
			w->widget[VVW_WIDGET_SHOW_DETAILS].tooltips = STR_884C_SHOW_TRAIN_DETAILS;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1787
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1788
			w->widget[VVW_WIDGET_CLONE_VEH].data = SPR_CLONE_TRAIN;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1789
			w->widget[VVW_WIDGET_CLONE_VEH].tooltips = STR_CLONE_TRAIN_INFO;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1790
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1791
			w->widget[VVW_WIDGET_TURN_AROUND].tooltips = STR_884B_REVERSE_DIRECTION_OF_TRAIN;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1792
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1793
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1794
			/* due to more buttons we must modify the layout a bit for trains */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1795
			w->widget[VVW_WIDGET_PANEL].bottom = 121;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1796
			w->widget[VVW_WIDGET_VIEWPORT].bottom = 119;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1797
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1798
			w->widget[VVW_WIDGET_START_STOP_VEH].top = 122;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1799
			w->widget[VVW_WIDGET_START_STOP_VEH].bottom = 133;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1800
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1801
			w->widget[VVW_WIDGET_REFIT_VEH].top = 68;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1802
			w->widget[VVW_WIDGET_REFIT_VEH].bottom = 85;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1803
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1804
			w->widget[VVW_WIDGET_SHOW_ORDERS].top = 86;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1805
			w->widget[VVW_WIDGET_SHOW_ORDERS].bottom = 103;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1806
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1807
			w->widget[VVW_WIDGET_SHOW_DETAILS].top = 104;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1808
			w->widget[VVW_WIDGET_SHOW_DETAILS].bottom = 121;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1809
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1810
			w->widget[VVW_WIDGET_EMPTY_BOTTOM_RIGHT].top = 122;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1811
			w->widget[VVW_WIDGET_EMPTY_BOTTOM_RIGHT].bottom = 121;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1812
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1813
			w->widget[VVW_WIDGET_RESIZE].top = 122;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1814
			w->widget[VVW_WIDGET_RESIZE].bottom = 133;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1815
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1816
			w->widget[VVW_WIDGET_TURN_AROUND].top = 68;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1817
			w->widget[VVW_WIDGET_TURN_AROUND].bottom = 85;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1818
			break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1819
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1820
		case VEH_ROAD:
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1821
			w->widget[VVW_WIDGET_CAPTION].data = STR_9002;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1822
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1823
			w->widget[VVW_WIDGET_START_STOP_VEH].tooltips = STR_901C_CURRENT_VEHICLE_ACTION;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1824
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1825
			w->widget[VVW_WIDGET_CENTER_MAIN_VIEH].tooltips = STR_901E_CENTER_MAIN_VIEW_ON_VEHICLE;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1826
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1827
			w->widget[VVW_WIDGET_GOTO_DEPOT].data = SPR_SEND_ROADVEH_TODEPOT;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1828
			w->widget[VVW_WIDGET_GOTO_DEPOT].tooltips = STR_901F_SEND_VEHICLE_TO_DEPOT;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1829
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1830
			w->widget[VVW_WIDGET_REFIT_VEH].tooltips = STR_REFIT_ROAD_VEHICLE_TO_CARRY;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1831
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1832
			w->widget[VVW_WIDGET_SHOW_ORDERS].tooltips = STR_901D_SHOW_VEHICLE_S_ORDERS;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1833
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1834
			w->widget[VVW_WIDGET_SHOW_DETAILS].tooltips = STR_9021_SHOW_ROAD_VEHICLE_DETAILS;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1835
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1836
			w->widget[VVW_WIDGET_CLONE_VEH].data = SPR_CLONE_ROADVEH;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1837
			w->widget[VVW_WIDGET_CLONE_VEH].tooltips = STR_CLONE_ROAD_VEHICLE_INFO;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1838
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1839
			w->SetWidgetHiddenState(VVW_WIDGET_FORCE_PROCEED, true);
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1840
			break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1841
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1842
		case VEH_SHIP:
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1843
			w->widget[VVW_WIDGET_CAPTION].data = STR_980F;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1844
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1845
			w->widget[VVW_WIDGET_START_STOP_VEH].tooltips = STR_9827_CURRENT_SHIP_ACTION_CLICK;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1846
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1847
			w->widget[VVW_WIDGET_CENTER_MAIN_VIEH].tooltips = STR_9829_CENTER_MAIN_VIEW_ON_SHIP;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1848
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1849
			w->widget[VVW_WIDGET_GOTO_DEPOT].data = SPR_SEND_SHIP_TODEPOT;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1850
			w->widget[VVW_WIDGET_GOTO_DEPOT].tooltips = STR_982A_SEND_SHIP_TO_DEPOT;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1851
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1852
			w->widget[VVW_WIDGET_REFIT_VEH].tooltips = STR_983A_REFIT_CARGO_SHIP_TO_CARRY;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1853
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1854
			w->widget[VVW_WIDGET_SHOW_ORDERS].tooltips = STR_9828_SHOW_SHIP_S_ORDERS;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1855
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1856
			w->widget[VVW_WIDGET_SHOW_DETAILS].tooltips = STR_982B_SHOW_SHIP_DETAILS;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1857
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1858
			w->widget[VVW_WIDGET_CLONE_VEH].data = SPR_CLONE_SHIP;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1859
			w->widget[VVW_WIDGET_CLONE_VEH].tooltips = STR_CLONE_SHIP_INFO;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1860
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1861
			w->SetWidgetsHiddenState(true,
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1862
																	VVW_WIDGET_TURN_AROUND,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1863
																	VVW_WIDGET_FORCE_PROCEED,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1864
																	WIDGET_LIST_END);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1865
			break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1866
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1867
		case VEH_AIRCRAFT:
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1868
			w->widget[VVW_WIDGET_CAPTION].data = STR_A00A;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1869
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1870
			w->widget[VVW_WIDGET_START_STOP_VEH].tooltips = STR_A027_CURRENT_AIRCRAFT_ACTION;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1871
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1872
			w->widget[VVW_WIDGET_CENTER_MAIN_VIEH].tooltips = STR_A029_CENTER_MAIN_VIEW_ON_AIRCRAFT;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1873
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1874
			w->widget[VVW_WIDGET_GOTO_DEPOT].data = SPR_SEND_AIRCRAFT_TODEPOT;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1875
			w->widget[VVW_WIDGET_GOTO_DEPOT].tooltips = STR_A02A_SEND_AIRCRAFT_TO_HANGAR;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1876
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1877
			w->widget[VVW_WIDGET_REFIT_VEH].tooltips = STR_A03B_REFIT_AIRCRAFT_TO_CARRY;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1878
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1879
			w->widget[VVW_WIDGET_SHOW_ORDERS].tooltips = STR_A028_SHOW_AIRCRAFT_S_ORDERS;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1880
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1881
			w->widget[VVW_WIDGET_SHOW_DETAILS].tooltips = STR_A02B_SHOW_AIRCRAFT_DETAILS;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1882
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1883
			w->widget[VVW_WIDGET_CLONE_VEH].data = SPR_CLONE_AIRCRAFT;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1884
			w->widget[VVW_WIDGET_CLONE_VEH].tooltips = STR_CLONE_AIRCRAFT_INFO;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1885
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1886
			w->SetWidgetsHiddenState(true,
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1887
																	VVW_WIDGET_TURN_AROUND,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1888
																	VVW_WIDGET_FORCE_PROCEED,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1889
																	WIDGET_LIST_END);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1890
			break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1891
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1892
			default: NOT_REACHED();
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1893
	}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1894
}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1895
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1896
/** Checks whether the vehicle may be refitted at the moment.*/
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1897
static bool IsVehicleRefitable(const Vehicle *v)
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1898
{
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1899
	/* Why is this so different for different vehicles?
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1900
	 * Does maybe work one solution for all?
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1901
	 */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1902
	switch (v->type) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1903
		case VEH_TRAIN:    return false;
7490
bb27d92565d3 (svn r11001) -Codechange: unify the way to determine whether a vehicle is in a depot.
rubidium
parents: 7486
diff changeset
  1904
		case VEH_ROAD:     return EngInfo(v->engine_type)->refit_mask != 0 && v->IsStoppedInDepot();
bb27d92565d3 (svn r11001) -Codechange: unify the way to determine whether a vehicle is in a depot.
rubidium
parents: 7486
diff changeset
  1905
		case VEH_SHIP:     return ShipVehInfo(v->engine_type)->refittable && v->IsStoppedInDepot();
bb27d92565d3 (svn r11001) -Codechange: unify the way to determine whether a vehicle is in a depot.
rubidium
parents: 7486
diff changeset
  1906
		case VEH_AIRCRAFT: return v->IsStoppedInDepot();
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1907
		default: NOT_REACHED();
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1908
	}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1909
}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1910
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1911
/** Message strings for heading to depot indexed by vehicle type. */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1912
static const StringID _heading_for_depot_strings[] = {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1913
	STR_HEADING_FOR_TRAIN_DEPOT,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1914
	STR_HEADING_FOR_ROAD_DEPOT,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1915
	STR_HEADING_FOR_SHIP_DEPOT,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1916
	STR_HEADING_FOR_HANGAR,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1917
};
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1918
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1919
/** Message strings for heading to depot and servicing indexed by vehicle type. */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1920
static const StringID _heading_for_depot_service_strings[] = {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1921
	STR_HEADING_FOR_TRAIN_DEPOT_SERVICE,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1922
	STR_HEADING_FOR_ROAD_DEPOT_SERVICE,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1923
	STR_HEADING_FOR_SHIP_DEPOT_SERVICE,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1924
	STR_HEADING_FOR_HANGAR_SERVICE,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1925
};
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1926
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1927
/** Repaint vehicle view window. */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1928
static void DrawVehicleViewWindow(Window *w)
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1929
{
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1930
	const Vehicle *v = GetVehicle(w->window_number);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1931
	StringID str;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1932
	bool is_localplayer = v->owner == _local_player;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1933
	bool refitable_and_stopped_in_depot = IsVehicleRefitable(v);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1934
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1935
	w->SetWidgetDisabledState(VVW_WIDGET_GOTO_DEPOT, !is_localplayer);
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1936
	w->SetWidgetDisabledState(VVW_WIDGET_REFIT_VEH,
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1937
															 !refitable_and_stopped_in_depot || !is_localplayer);
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1938
	w->SetWidgetDisabledState(VVW_WIDGET_CLONE_VEH, !is_localplayer);
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1939
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1940
	if (v->type == VEH_TRAIN) {
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1941
		w->SetWidgetDisabledState(VVW_WIDGET_FORCE_PROCEED, !is_localplayer);
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1942
		w->SetWidgetDisabledState(VVW_WIDGET_TURN_AROUND, !is_localplayer);
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1943
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1944
		/* Cargo refit button is disabled, until we know we can enable it below. */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1945
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1946
		if (is_localplayer) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1947
			/* See if any vehicle can be refitted */
7492
35acee076719 (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: 7490
diff changeset
  1948
			for (const Vehicle *u = v; u != NULL; u = u->Next()) {
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1949
				if (EngInfo(u->engine_type)->refit_mask != 0 ||
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1950
						(RailVehInfo(v->engine_type)->railveh_type != RAILVEH_WAGON && v->cargo_cap != 0)) {
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1951
					w->EnableWidget(VVW_WIDGET_REFIT_VEH);
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1952
					/* We have a refittable carriage, bail out */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1953
					break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1954
				}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1955
			}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1956
		}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1957
	}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1958
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1959
	/* draw widgets & caption */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1960
	SetDParam(0, v->index);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1961
	DrawWindowWidgets(w);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1962
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1963
	if (v->vehstatus & VS_CRASHED) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1964
		str = STR_8863_CRASHED;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1965
	} else if (v->type != VEH_AIRCRAFT && v->breakdown_ctr == 1) { // check for aircraft necessary?
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1966
		str = STR_885C_BROKEN_DOWN;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1967
	} else if (v->vehstatus & VS_STOPPED) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1968
		if (v->type == VEH_TRAIN) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1969
			if (v->cur_speed == 0) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1970
				if (v->u.rail.cached_power == 0) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1971
					str = STR_TRAIN_NO_POWER;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1972
				} else {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1973
					str = STR_8861_STOPPED;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1974
				}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1975
			} else {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1976
				SetDParam(0, v->GetDisplaySpeed());
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1977
				str = STR_TRAIN_STOPPING + _patches.vehicle_speed;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1978
			}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1979
		} else { // no train
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1980
			str = STR_8861_STOPPED;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1981
		}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1982
	} else { // vehicle is in a "normal" state, show current order
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1983
		switch (v->current_order.type) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1984
			case OT_GOTO_STATION: {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1985
				SetDParam(0, v->current_order.dest);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1986
				SetDParam(1, v->GetDisplaySpeed());
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1987
				str = STR_HEADING_FOR_STATION + _patches.vehicle_speed;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1988
			} break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1989
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1990
			case OT_GOTO_DEPOT: {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1991
				if (v->type == VEH_AIRCRAFT) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1992
					/* Aircrafts always go to a station, even if you say depot */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1993
					SetDParam(0, v->current_order.dest);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1994
					SetDParam(1, v->GetDisplaySpeed());
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1995
				} else {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1996
					Depot *depot = GetDepot(v->current_order.dest);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1997
					SetDParam(0, depot->town_index);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1998
					SetDParam(1, v->GetDisplaySpeed());
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1999
				}
7928
63e18de69e50 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents: 7846
diff changeset
  2000
				if (HasBit(v->current_order.flags, OFB_HALT_IN_DEPOT) && !HasBit(v->current_order.flags, OFB_PART_OF_ORDERS)) {
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2001
					str = _heading_for_depot_strings[v->type] + _patches.vehicle_speed;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2002
				} else {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2003
					str = _heading_for_depot_service_strings[v->type] + _patches.vehicle_speed;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2004
				}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2005
			} break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2006
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2007
			case OT_LOADING:
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2008
				str = STR_882F_LOADING_UNLOADING;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2009
				break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2010
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2011
			case OT_GOTO_WAYPOINT: {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2012
				assert(v->type == VEH_TRAIN);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2013
				SetDParam(0, v->current_order.dest);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2014
				str = STR_HEADING_FOR_WAYPOINT + _patches.vehicle_speed;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2015
				SetDParam(1, v->GetDisplaySpeed());
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2016
				break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2017
			}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2018
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2019
			case OT_LEAVESTATION:
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2020
				if (v->type != VEH_AIRCRAFT) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2021
					str = STR_882F_LOADING_UNLOADING;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2022
					break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2023
				}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2024
				/* fall-through if aircraft. Does this even happen? */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2025
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2026
			default:
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2027
				if (v->num_orders == 0) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2028
					str = STR_NO_ORDERS + _patches.vehicle_speed;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2029
					SetDParam(0, v->GetDisplaySpeed());
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2030
				} else {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2031
					str = STR_EMPTY;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2032
				}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2033
				break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2034
		}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2035
	}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2036
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2037
	/* draw the flag plus orders */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2038
	DrawSprite(v->vehstatus & VS_STOPPED ? SPR_FLAG_VEH_STOPPED : SPR_FLAG_VEH_RUNNING, PAL_NONE, 2, w->widget[VVW_WIDGET_START_STOP_VEH].top + 1);
7824
5a63d41b59ea (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 7798
diff changeset
  2039
	DrawStringCenteredTruncated(w->widget[VVW_WIDGET_START_STOP_VEH].left + 8, w->widget[VVW_WIDGET_START_STOP_VEH].right, w->widget[VVW_WIDGET_START_STOP_VEH].top + 1, str, TC_FROMSTRING);
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2040
	DrawWindowViewport(w);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2041
}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2042
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2043
/** Command indices for the _vehicle_command_translation_table. */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2044
enum VehicleCommandTranslation {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2045
	VCT_CMD_START_STOP = 0,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2046
	VCT_CMD_GOTO_DEPOT,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2047
	VCT_CMD_CLONE_VEH,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2048
	VCT_CMD_TURN_AROUND,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2049
};
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2050
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2051
/** Command codes for the shared buttons indexed by VehicleCommandTranslation and vehicle type. */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2052
static const uint32 _vehicle_command_translation_table[][4] = {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2053
	{ // VCT_CMD_START_STOP
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2054
		CMD_START_STOP_TRAIN | CMD_MSG(STR_883B_CAN_T_STOP_START_TRAIN),
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2055
		CMD_START_STOP_ROADVEH | CMD_MSG(STR_9015_CAN_T_STOP_START_ROAD_VEHICLE),
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2056
		CMD_START_STOP_SHIP | CMD_MSG(STR_9818_CAN_T_STOP_START_SHIP),
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2057
		CMD_START_STOP_AIRCRAFT | CMD_MSG(STR_A016_CAN_T_STOP_START_AIRCRAFT)
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2058
	},
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2059
	{ // VCT_CMD_GOTO_DEPOT
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2060
		/* TrainGotoDepot has a nice randomizer in the pathfinder, which causes desyncs... */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2061
		CMD_SEND_TRAIN_TO_DEPOT | CMD_NO_TEST_IF_IN_NETWORK | CMD_MSG(STR_8830_CAN_T_SEND_TRAIN_TO_DEPOT),
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2062
		CMD_SEND_ROADVEH_TO_DEPOT | CMD_MSG(STR_9018_CAN_T_SEND_VEHICLE_TO_DEPOT),
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2063
		CMD_SEND_SHIP_TO_DEPOT | CMD_MSG(STR_9819_CAN_T_SEND_SHIP_TO_DEPOT),
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2064
		CMD_SEND_AIRCRAFT_TO_HANGAR | CMD_MSG(STR_A012_CAN_T_SEND_AIRCRAFT_TO)
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2065
	},
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2066
	{ // VCT_CMD_CLONE_VEH
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2067
		CMD_CLONE_VEHICLE | CMD_MSG(STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE),
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2068
		CMD_CLONE_VEHICLE | CMD_MSG(STR_9009_CAN_T_BUILD_ROAD_VEHICLE),
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2069
		CMD_CLONE_VEHICLE | CMD_MSG(STR_980D_CAN_T_BUILD_SHIP),
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2070
		CMD_CLONE_VEHICLE | CMD_MSG(STR_A008_CAN_T_BUILD_AIRCRAFT)
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2071
	},
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2072
	{ // VCT_CMD_TURN_AROUND
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2073
		CMD_REVERSE_TRAIN_DIRECTION | CMD_MSG(STR_8869_CAN_T_REVERSE_DIRECTION),
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2074
		CMD_TURN_ROADVEH | CMD_MSG(STR_9033_CAN_T_MAKE_VEHICLE_TURN),
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2075
		0xffffffff, // invalid for ships
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2076
		0xffffffff  // invalid for aircrafts
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2077
	},
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2078
};
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2079
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2080
/** Window event hook for vehicle view. */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2081
static void VehicleViewWndProc(Window *w, WindowEvent *e)
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2082
{
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2083
	switch (e->event) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2084
		case WE_CREATE:
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2085
			CreateVehicleViewWindow(w);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2086
			break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2087
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2088
		case WE_PAINT:
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2089
			DrawVehicleViewWindow(w);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2090
			break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2091
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2092
		case WE_CLICK: {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2093
			const Vehicle *v = GetVehicle(w->window_number);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2094
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2095
			switch (e->we.click.widget) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2096
				case VVW_WIDGET_START_STOP_VEH: /* start stop */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2097
					DoCommandP(v->tile, v->index, 0, NULL,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2098
										 _vehicle_command_translation_table[VCT_CMD_START_STOP][v->type]);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2099
					break;
7759
eb8f1b5b2883 (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: 7642
diff changeset
  2100
				case VVW_WIDGET_CENTER_MAIN_VIEH: {/* center main view */
eb8f1b5b2883 (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: 7642
diff changeset
  2101
					const Window *mainwindow = FindWindowById(WC_MAIN_WINDOW, 0);
eb8f1b5b2883 (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: 7642
diff changeset
  2102
					/* code to allow the main window to 'follow' the vehicle if the ctrl key is pressed */
eb8f1b5b2883 (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: 7642
diff changeset
  2103
					if (_ctrl_pressed && mainwindow->viewport->zoom == ZOOM_LVL_NORMAL) {
eb8f1b5b2883 (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: 7642
diff changeset
  2104
						WP(mainwindow, vp_d).follow_vehicle = v->index;
eb8f1b5b2883 (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: 7642
diff changeset
  2105
					} else {
eb8f1b5b2883 (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: 7642
diff changeset
  2106
						ScrollMainWindowTo(v->x_pos, v->y_pos);
eb8f1b5b2883 (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: 7642
diff changeset
  2107
					}
eb8f1b5b2883 (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: 7642
diff changeset
  2108
				} break;
eb8f1b5b2883 (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: 7642
diff changeset
  2109
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2110
				case VVW_WIDGET_GOTO_DEPOT: /* goto hangar */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2111
					DoCommandP(v->tile, v->index, _ctrl_pressed ? DEPOT_SERVICE : 0, NULL,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2112
						_vehicle_command_translation_table[VCT_CMD_GOTO_DEPOT][v->type]);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2113
					break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2114
				case VVW_WIDGET_REFIT_VEH: /* refit */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2115
					ShowVehicleRefitWindow(v, INVALID_VEH_ORDER_ID);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2116
					break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2117
				case VVW_WIDGET_SHOW_ORDERS: /* show orders */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2118
					ShowOrdersWindow(v);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2119
					break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2120
				case VVW_WIDGET_SHOW_DETAILS: /* show details */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2121
					ShowVehicleDetailsWindow(v);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2122
					break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2123
				case VVW_WIDGET_CLONE_VEH: /* clone vehicle */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2124
					DoCommandP(v->tile, v->index, _ctrl_pressed ? 1 : 0, CcCloneVehicle,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2125
										 _vehicle_command_translation_table[VCT_CMD_CLONE_VEH][v->type]);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2126
					break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2127
				case VVW_WIDGET_TURN_AROUND: /* turn around */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2128
					assert(v->type == VEH_TRAIN || v->type == VEH_ROAD);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2129
					DoCommandP(v->tile, v->index, 0, NULL,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2130
										 _vehicle_command_translation_table[VCT_CMD_TURN_AROUND][v->type]);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2131
					break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2132
				case VVW_WIDGET_FORCE_PROCEED: /* force proceed */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2133
					assert(v->type == VEH_TRAIN);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2134
					DoCommandP(v->tile, v->index, 0, NULL, CMD_FORCE_TRAIN_PROCEED | CMD_MSG(STR_8862_CAN_T_MAKE_TRAIN_PASS_SIGNAL));
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2135
					break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2136
			}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2137
		} break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2138
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2139
		case WE_RESIZE:
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2140
			w->viewport->width          += e->we.sizing.diff.x;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2141
			w->viewport->height         += e->we.sizing.diff.y;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2142
			w->viewport->virtual_width  += e->we.sizing.diff.x;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2143
			w->viewport->virtual_height += e->we.sizing.diff.y;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2144
			break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2145
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2146
		case WE_DESTROY:
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2147
			DeleteWindowById(WC_VEHICLE_ORDERS, w->window_number);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2148
			DeleteWindowById(WC_VEHICLE_REFIT, w->window_number);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2149
			DeleteWindowById(WC_VEHICLE_DETAILS, w->window_number);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2150
			DeleteWindowById(WC_VEHICLE_TIMETABLE, w->window_number);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2151
			break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2152
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2153
		case WE_MOUSELOOP: {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2154
			const Vehicle *v = GetVehicle(w->window_number);
7490
bb27d92565d3 (svn r11001) -Codechange: unify the way to determine whether a vehicle is in a depot.
rubidium
parents: 7486
diff changeset
  2155
			bool veh_stopped = v->IsStoppedInDepot();
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2156
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2157
			/* Widget VVW_WIDGET_GOTO_DEPOT must be hidden if the vehicle is already
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2158
			 * stopped in depot.
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2159
			 * Widget VVW_WIDGET_CLONE_VEH should then be shown, since cloning is
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2160
			 * allowed only while in depot and stopped.
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2161
			 * This sytem allows to have two buttons, on top of each other.
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2162
			 * The same system applies to widget VVW_WIDGET_REFIT_VEH and VVW_WIDGET_TURN_AROUND.*/
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  2163
			if (veh_stopped != w->IsWidgetHidden(VVW_WIDGET_GOTO_DEPOT) || veh_stopped == w->IsWidgetHidden(VVW_WIDGET_CLONE_VEH)) {
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  2164
				w->SetWidgetHiddenState( VVW_WIDGET_GOTO_DEPOT, veh_stopped);  // send to depot
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  2165
				w->SetWidgetHiddenState(VVW_WIDGET_CLONE_VEH, !veh_stopped); // clone
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2166
				if (v->type == VEH_ROAD || v->type == VEH_TRAIN) {
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  2167
					w->SetWidgetHiddenState( VVW_WIDGET_REFIT_VEH, !veh_stopped); // refit
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  2168
					w->SetWidgetHiddenState(VVW_WIDGET_TURN_AROUND, veh_stopped);  // force turn around
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2169
				}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2170
				SetWindowDirty(w);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2171
			}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2172
		} break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2173
	}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2174
}
8144
65cec0877b78 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8140
diff changeset
  2175
65cec0877b78 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8140
diff changeset
  2176
void DrawVehicleImage(const Vehicle *v, int x, int y, VehicleID selection, int count, int skip)
65cec0877b78 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8140
diff changeset
  2177
{
65cec0877b78 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8140
diff changeset
  2178
	switch (v->type) {
65cec0877b78 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8140
diff changeset
  2179
		case VEH_TRAIN:    DrawTrainImage(v, x, y, selection, count, skip); break;
65cec0877b78 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8140
diff changeset
  2180
		case VEH_ROAD:     DrawRoadVehImage(v, x, y, selection, count);     break;
65cec0877b78 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8140
diff changeset
  2181
		case VEH_SHIP:     DrawShipImage(v, x, y, selection);               break;
65cec0877b78 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8140
diff changeset
  2182
		case VEH_AIRCRAFT: DrawAircraftImage(v, x, y, selection);           break;
65cec0877b78 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8140
diff changeset
  2183
		default: NOT_REACHED();
65cec0877b78 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8140
diff changeset
  2184
	}
65cec0877b78 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8140
diff changeset
  2185
}