src/vehicle_gui.cpp
author rubidium
Sat, 22 Dec 2007 23:30:28 +0000
changeset 8121 3bc6351e7369
parent 8116 8da76dcb3287
child 8130 d2eb7d04f6e1
permissions -rw-r--r--
(svn r11682) -Codechange: move some 'generic' geometry related types into a single file and do not include gfx.h everywhere to get a Point type.
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"
2163
b17b313113a0 (svn r2673) Include functions.h directly, not globally via openttd.h
tron
parents: 2159
diff changeset
     8
#include "functions.h"
2154
f86c59e73a16 (svn r2664) Remove depedency on player.h from variables.h
tron
parents: 1926
diff changeset
     9
#include "player.h"
2466
1aa260b43faa (svn r2992) Use PlayerID, StationID and INVALID_STATION instead of int, int and -1
tron
parents: 2462
diff changeset
    10
#include "station.h"
1363
775a7ee52369 (svn r1867) Include tables/sprites.h only in files which need it
tron
parents: 1309
diff changeset
    11
#include "table/sprites.h"
507
04b5403aaf6b (svn r815) Include strings.h only in the files which need it.
tron
parents: 505
diff changeset
    12
#include "table/strings.h"
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
    13
#include "vehicle.h"
842
efc3546bc313 (svn r1323) Adding autoreplace feature
bjarni
parents: 594
diff changeset
    14
#include "engine.h"
efc3546bc313 (svn r1323) Adding autoreplace feature
bjarni
parents: 594
diff changeset
    15
#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
    16
#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
    17
#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
    18
#include "command_func.h"
2159
f6284cf5fab0 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2154
diff changeset
    19
#include "variables.h"
f6284cf5fab0 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2154
diff changeset
    20
#include "vehicle_gui.h"
2552
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
    21
#include "viewport.h"
2676
59b65b4fb480 (svn r3218) -Feature: Multiheaded train engines will now stay in the same train
bjarni
parents: 2639
diff changeset
    22
#include "train.h"
3650
4dd8517bdcf6 (svn r4561) - NewGRF: implement most of callback 0x23: additional text in vehicle purchase windows.
peter1138
parents: 3492
diff changeset
    23
#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
    24
#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
    25
#include "newgrf_text.h"
4261
28670f743746 (svn r5887) -Cleanup: move date related functions, defines and variables to date.[ch]
rubidium
parents: 4243
diff changeset
    26
#include "date.h"
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
    27
#include "ship.h"
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
    28
#include "aircraft.h"
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
    29
#include "roadveh.h"
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
    30
#include "depot.h"
5587
167d9a91ef02 (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5584
diff changeset
    31
#include "helpers.hpp"
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
    32
#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
    33
#include "group.h"
8111
02d19f43eea6 (svn r11672) -Codechange: refactor some stuff out of gui.h.
rubidium
parents: 8107
diff changeset
    34
#include "group_gui.h"
8114
dd6d21dc99c1 (svn r11675) -Codechange: split the string types from the string functions.
rubidium
parents: 8111
diff changeset
    35
#include "strings_func.h"
2159
f6284cf5fab0 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2154
diff changeset
    36
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6247
diff changeset
    37
struct Sorting {
4542
f42ecc669275 (svn r6372) -Codechange: static, unneeded decleration in headers, superfluous header includes
Darkvater
parents: 4541
diff changeset
    38
	Listing aircraft;
f42ecc669275 (svn r6372) -Codechange: static, unneeded decleration in headers, superfluous header includes
Darkvater
parents: 4541
diff changeset
    39
	Listing roadveh;
f42ecc669275 (svn r6372) -Codechange: static, unneeded decleration in headers, superfluous header includes
Darkvater
parents: 4541
diff changeset
    40
	Listing ship;
f42ecc669275 (svn r6372) -Codechange: static, unneeded decleration in headers, superfluous header includes
Darkvater
parents: 4541
diff changeset
    41
	Listing train;
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6247
diff changeset
    42
};
4542
f42ecc669275 (svn r6372) -Codechange: static, unneeded decleration in headers, superfluous header includes
Darkvater
parents: 4541
diff changeset
    43
f42ecc669275 (svn r6372) -Codechange: static, unneeded decleration in headers, superfluous header includes
Darkvater
parents: 4541
diff changeset
    44
static Sorting _sorting;
f42ecc669275 (svn r6372) -Codechange: static, unneeded decleration in headers, superfluous header includes
Darkvater
parents: 4541
diff changeset
    45
2159
f6284cf5fab0 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2154
diff changeset
    46
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
    47
2462
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    48
typedef int CDECL VehicleSortListingTypeFunction(const void*, const void*);
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    49
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    50
static VehicleSortListingTypeFunction VehicleNumberSorter;
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    51
static VehicleSortListingTypeFunction VehicleNameSorter;
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    52
static VehicleSortListingTypeFunction VehicleAgeSorter;
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    53
static VehicleSortListingTypeFunction VehicleProfitThisYearSorter;
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    54
static VehicleSortListingTypeFunction VehicleProfitLastYearSorter;
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    55
static VehicleSortListingTypeFunction VehicleCargoSorter;
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    56
static VehicleSortListingTypeFunction VehicleReliabilitySorter;
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    57
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
    58
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
    59
static VehicleSortListingTypeFunction VehicleValueSorter;
2462
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    60
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
    61
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
    62
	&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
    63
	&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
    64
	&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
    65
	&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
    66
	&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
    67
	&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
    68
	&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
    69
	&VehicleMaxSpeedSorter,
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
    70
	&VehicleModelSorter,
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
    71
	&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
    72
};
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
    73
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
    74
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
    75
	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
    76
	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
    77
	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
    78
	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
    79
	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
    80
	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
    81
	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
    82
	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
    83
	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
    84
	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
    85
	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
    86
};
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
    87
6247
7d81e3a5d803 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6148
diff changeset
    88
void RebuildVehicleLists()
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
    89
{
5124
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
    90
	Window* const *wz;
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
    91
5124
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
    92
	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
    93
		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
    94
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
    95
		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
    96
			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
    97
			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
    98
			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
    99
			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
   100
				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
   101
				SetWindowDirty(w);
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
   102
				break;
5893
7e431a4abebb (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5847
diff changeset
   103
7e431a4abebb (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5847
diff changeset
   104
			default: break;
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   105
		}
5124
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
   106
	}
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   107
}
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   108
6247
7d81e3a5d803 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6148
diff changeset
   109
void ResortVehicleLists()
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   110
{
5124
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
   111
	Window* const *wz;
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   112
5124
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
   113
	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
   114
		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
   115
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   116
		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
   117
			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
   118
			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
   119
			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
   120
			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
   121
				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
   122
				SetWindowDirty(w);
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
   123
				break;
5893
7e431a4abebb (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5847
diff changeset
   124
7e431a4abebb (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5847
diff changeset
   125
			default: break;
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   126
		}
5124
2ca62776430e (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5071
diff changeset
   127
	}
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   128
}
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   129
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
   130
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
   131
{
4545
138a9195009a (svn r6377) -Codechange: Set up the widgets in the WE_CREATE instead of on every WE_PAINT
Darkvater
parents: 4542
diff changeset
   132
	if (!(vl->l.flags & VL_REBUILD)) return;
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   133
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
   134
	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
   135
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
   136
	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
   137
4545
138a9195009a (svn r6377) -Codechange: Set up the widgets in the WE_CREATE instead of on every WE_PAINT
Darkvater
parents: 4542
diff changeset
   138
	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
   139
	vl->l.flags |= VL_RESORT;
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   140
}
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   141
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
   142
void SortVehicleList(vehiclelist_d *vl)
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   143
{
4545
138a9195009a (svn r6377) -Codechange: Set up the widgets in the WE_CREATE instead of on every WE_PAINT
Darkvater
parents: 4542
diff changeset
   144
	if (!(vl->l.flags & VL_RESORT)) return;
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   145
5587
167d9a91ef02 (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5584
diff changeset
   146
	_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
   147
	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
   148
		_vehicle_sorter[vl->l.sort_type]);
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   149
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
	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
   151
	vl->l.flags &= ~VL_RESORT;
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   152
}
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   153
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
   154
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
   155
{
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
   156
	_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
   157
	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
   158
}
588
03521b270f62 (svn r1009) -Feature: per-station vehicle lists
tron
parents: 579
diff changeset
   159
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
   160
/** 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
   161
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
   162
{
5668
36b39f4a9032 (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5609
diff changeset
   163
	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
   164
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
   165
	/* draw profit-based colored icons */
2639
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   166
	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
   167
		pal = PALETTE_TO_GREY;
2639
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   168
	} 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
   169
		pal = PALETTE_TO_RED;
2639
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   170
	} 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
   171
		pal = PALETTE_TO_YELLOW;
2639
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   172
	} else {
5668
36b39f4a9032 (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5609
diff changeset
   173
		pal = PALETTE_TO_GREEN;
2639
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   174
	}
5668
36b39f4a9032 (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5609
diff changeset
   175
	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
   176
}
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
   177
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6247
diff changeset
   178
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
   179
	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
   180
	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
   181
	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
   182
	EngineID engine;
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6247
diff changeset
   183
};
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
   184
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6247
diff changeset
   185
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
   186
	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
   187
	RefitOption *items;
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6247
diff changeset
   188
};
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
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
   190
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
   191
{
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
	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
   193
	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
   194
	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
   195
	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
   196
	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
   197
	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
   198
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
	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
   200
		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
   201
		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
   202
4933
0ae35137aeca (svn r6920) - Codechange: Ignore refit options of an engine if it has no capacity.
peter1138
parents: 4932
diff changeset
   203
		/* 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
   204
		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
   205
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
   206
		/* 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
   207
		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
   208
			/* 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
   209
			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
   210
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
			/* 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
   212
			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
   213
				/* 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
   214
				 * 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
   215
				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
   216
				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
   217
				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
   218
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
   219
				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
   220
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
				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
   222
					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
   223
					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
   224
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
					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
   226
					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
   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
					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
   229
					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
   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
					/* 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
   232
					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
   233
						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
   234
					}
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
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
   236
					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
   237
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
   238
					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
   239
					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
   240
					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
   241
					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
   242
					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
   243
				}
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
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
				/* 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
   246
				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
   247
				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
   248
			} 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
   249
				/* 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
   250
				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
   251
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
				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
   253
					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
   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
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
   256
				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
   257
					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
   258
					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
   259
					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
   260
					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
   261
					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
   262
				}
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
			}
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
		}
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
   265
	} 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
   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
	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
   268
	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
   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
	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
   271
}
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
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
   273
/** 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
   274
 * 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
   275
 * @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
   276
 * @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
   277
 * @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
   278
 * @param rows number of rows(capacity) in caller window
79156627e1ba (svn r9665) -Documentation: Doxygen corrections,errors, corrections of corrections...
belugas
parents: 6423
diff changeset
   279
 * @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
   280
 * @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
   281
 */
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
   282
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
   283
{
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
   284
	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
   285
	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
   286
	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
   287
	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
   288
	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
   289
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
   290
	/* 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
   291
	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
   292
		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
   293
		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
   294
			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
   295
			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
   296
		}
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
   297
4697
67032d30eab0 (svn r6607) - Fix (r6601): Fix selection of refit type when the list is scrolled.
peter1138
parents: 4695
diff changeset
   298
		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
   299
			/* 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
   300
			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
   301
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
			/* 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
   303
			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
   304
				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
   305
			}
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
   306
			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
   307
		}
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
		sel--;
3025
9e60c370415c (svn r3605) - Remove silly macro and fix indenting in DrawVehicleRefitWindow()
peter1138
parents: 2989
diff changeset
   310
	}
9e60c370415c (svn r3605) - Remove silly macro and fix indenting in DrawVehicleRefitWindow()
peter1138
parents: 2989
diff changeset
   311
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
   312
	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
   313
}
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
   314
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   315
static void VehicleRefitWndProc(Window *w, WindowEvent *e)
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   316
{
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   317
	switch (e->event) {
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   318
		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
   319
			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
   320
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
   321
			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
   322
				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
   323
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
   324
				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
   325
					/* 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
   326
					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
   327
					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
   328
					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
   329
					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
   330
				}
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
			}
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   332
4698
b787a418296f (svn r6608) - Fix (r6601): The scroll bar could fall out of the window... more gui-fu needed...
peter1138
parents: 4697
diff changeset
   333
			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
   334
7049
0ebe47348074 (svn r10314) -Codechange: Refer to vehicle names by index
peter1138
parents: 7002
diff changeset
   335
			SetDParam(0, v->index);
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   336
			DrawWindowWidgets(w);
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   337
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6484
diff changeset
   338
			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
   339
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6484
diff changeset
   340
			if (WP(w, refit_d).cargo != NULL) {
6943
1914f26aee04 (svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents: 6643
diff changeset
   341
				CommandCost cost;
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
				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
   344
								 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
   345
6946
a48b23f1cc8a (svn r10200) -Codechange: add "shortcut" for !CmdFailed (CmdSucceeded).
rubidium
parents: 6943
diff changeset
   346
				if (CmdSucceeded(cost)) {
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6484
diff changeset
   347
					SetDParam(0, WP(w, refit_d).cargo->cargo);
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   348
					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
   349
					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
   350
					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
   351
				}
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   352
			}
6492
286a52449b54 (svn r9673) -Cleanup: remove spaces before tabs and replace non-indenting tabs with spaces.
rubidium
parents: 6491
diff changeset
   353
		} break;
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
		case WE_CLICK:
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   356
			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
   357
				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
   358
					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
   359
					if (y >= 0) {
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6484
diff changeset
   360
						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
   361
						SetWindowDirty(w);
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   362
					}
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   363
				} 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
   364
				case 6: // refit button
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6484
diff changeset
   365
					if (WP(w, refit_d).cargo != NULL) {
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   366
						const Vehicle *v = GetVehicle(w->window_number);
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   367
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
   368
						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
   369
							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
   370
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
							switch (v->type) {
6621
441559124aea (svn r9841) -Codechange: add a little more type strictness to the vehicle types.
rubidium
parents: 6492
diff changeset
   372
								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
   373
								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
   374
								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
   375
								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
   376
								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
   377
							}
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6484
diff changeset
   378
							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
   379
						} else {
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6484
diff changeset
   380
							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
   381
						}
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   382
					}
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   383
					break;
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
			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
   386
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
   387
		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
   388
			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
   389
			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
   390
			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
   391
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
		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
   393
			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
   394
			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
   395
			break;
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   396
	}
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   397
}
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   398
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
static const Widget _vehicle_refit_widgets[] = {
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   401
	{   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
   402
	{    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
   403
	{    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
   404
	{     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
   405
	{  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
   406
	{      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
   407
	{ 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
   408
	{  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
   409
	{   WIDGETS_END},
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   410
};
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   411
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   412
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
   413
	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
   414
	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
   415
	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
   416
	_vehicle_refit_widgets,
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   417
	VehicleRefitWndProc,
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   418
};
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   419
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   420
/** Show the refit window for a vehicle
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   421
* @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
   422
* @param order of the vehicle ( ? )
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   423
*/
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
   424
void ShowVehicleRefitWindow(const Vehicle *v, VehicleOrderID order)
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   425
{
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   426
	Window *w;
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   427
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   428
	DeleteWindowById(WC_VEHICLE_REFIT, v->index);
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   429
5071
e28106dfcb6f (svn r7129) -Codechange: Get rid of a global variable that only sets a window's number.
Darkvater
parents: 5070
diff changeset
   430
	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
   431
	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
   432
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
   433
	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
   434
		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
   435
		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
   436
		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
   437
		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
   438
		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
   439
		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
   440
		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
   441
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
   442
		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
   443
			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
   444
				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
   445
				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
   446
				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
   447
				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
   448
			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
   449
				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
   450
				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
   451
				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
   452
				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
   453
			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
   454
				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
   455
				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
   456
				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
   457
				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
   458
			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
   459
				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
   460
				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
   461
				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
   462
				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
   463
			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
   464
		}
4642
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   465
	}
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   466
}
e27b0f7e89e9 (svn r6518) -Codechange: unified the vehicle refit windows
bjarni
parents: 4634
diff changeset
   467
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
   468
/** 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
   469
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
   470
{
4dd8517bdcf6 (svn r4561) - NewGRF: implement most of callback 0x23: additional text in vehicle purchase windows.
peter1138
parents: 3492
diff changeset
   471
	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
   472
	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
   473
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
   474
	/* 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
   475
	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
   476
	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
   477
}
4dd8517bdcf6 (svn r4561) - NewGRF: implement most of callback 0x23: additional text in vehicle purchase windows.
peter1138
parents: 3492
diff changeset
   478
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
   479
/** 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
   480
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
   481
{
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
   482
	/* 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
   483
	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
   484
	/* 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
   485
	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
   486
	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
   487
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
   488
	/* 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
   489
	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
   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
	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
   492
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
	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
   494
		/* 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
   495
		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
   496
	} 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
   497
		/* 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
   498
		 * 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
   499
		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
   500
			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
   501
			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
   502
		}
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
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
   504
		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
   505
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
   506
		/* 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
   507
		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
   508
			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
   509
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
   510
			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
   511
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
			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
   513
			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
   514
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
			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
   516
		}
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
   517
	}
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
   518
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
	/* 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
   520
	*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
   521
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
   522
	/* 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
   523
	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
   524
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
   525
	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
   526
}
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
   527
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   528
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
   529
/* 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
   530
#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
   531
2462
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   532
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
   533
{
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
   534
	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
   535
	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
   536
	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
   537
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   538
	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
   539
}
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
   540
2462
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   541
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
   542
{
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
   543
	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
   544
	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
   545
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
   546
	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
   547
	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
   548
	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
   549
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
   550
	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
   551
		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
   552
		if (IsCustomName(va->string_id)) {
4912
0f51b47cb983 (svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents: 4896
diff changeset
   553
			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
   554
		} 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
   555
			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
   556
		}
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
   557
	}
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
   558
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
   559
	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
   560
		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
   561
		if (IsCustomName(vb->string_id)) {
4912
0f51b47cb983 (svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents: 4896
diff changeset
   562
			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
   563
		} 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
   564
			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
   565
		}
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
	}
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
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
	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
   569
243
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   570
	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
   571
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   572
	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
   573
}
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
   574
2462
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   575
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
   576
{
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
   577
	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
   578
	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
   579
	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
   580
243
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   581
	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
   582
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   583
	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
   584
}
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   585
2462
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   586
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
   587
{
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
   588
	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
   589
	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
   590
	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
   591
243
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   592
	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
   593
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   594
	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
   595
}
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   596
2462
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   597
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
   598
{
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
   599
	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
   600
	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
   601
	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
   602
243
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   603
	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
   604
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   605
	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
   606
}
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   607
2462
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   608
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
   609
{
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
   610
	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
   611
	const Vehicle* vb = *(const Vehicle**)b;
2549
5587f9a38563 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   612
	const Vehicle* v;
5587f9a38563 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   613
	AcceptedCargo cargoa;
5587f9a38563 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   614
	AcceptedCargo cargob;
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   615
	int r = 0;
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   616
2549
5587f9a38563 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   617
	memset(cargoa, 0, sizeof(cargoa));
5587f9a38563 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   618
	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
   619
	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
   620
	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
   621
6350
04b19f551aec (svn r9388) -Codechange: variable scope and type, and standardify all CargoID loops.
peter1138
parents: 6259
diff changeset
   622
	for (CargoID i = 0; i < NUM_CARGO; i++) {
2549
5587f9a38563 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   623
		r = cargoa[i] - cargob[i];
5587f9a38563 (svn r3078) Some more stuff, which piled up:
tron
parents: 2530
diff changeset
   624
		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
   625
	}
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
   626
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
   627
	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
   628
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   629
	return (_internal_sort_order & 1) ? -r : r;
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
   630
}
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   631
2462
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   632
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
   633
{
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
   634
	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
   635
	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
   636
	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
   637
243
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   638
	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
   639
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   640
	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
   641
}
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   642
2462
2f90bb70fb00 (svn r2988) static where static is due
tron
parents: 2448
diff changeset
   643
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
   644
{
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
   645
	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
   646
	const Vehicle* vb = *(const Vehicle**)b;
1179
ce0a75460808 (svn r1681) -Feature: New realistic acceleration.
celestar
parents: 1178
diff changeset
   647
	int max_speed_a = 0xFFFF, max_speed_b = 0xFFFF;
ce0a75460808 (svn r1681) -Feature: New realistic acceleration.
celestar
parents: 1178
diff changeset
   648
	int r;
ce0a75460808 (svn r1681) -Feature: New realistic acceleration.
celestar
parents: 1178
diff changeset
   649
	const Vehicle *ua = va, *ub = vb;
ce0a75460808 (svn r1681) -Feature: New realistic acceleration.
celestar
parents: 1178
diff changeset
   650
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
   651
	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
   652
		do {
dc46f04aab3a (svn r1695) -Fix: I broke maximum speed sorting for anything but trains with the new acceleration. Sorry
Celestar
parents: 1182
diff changeset
   653
			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
   654
				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
   655
		} while ((ua = ua->Next()) != NULL);
1179
ce0a75460808 (svn r1681) -Feature: New realistic acceleration.
celestar
parents: 1178
diff changeset
   656
1191
dc46f04aab3a (svn r1695) -Fix: I broke maximum speed sorting for anything but trains with the new acceleration. Sorry
Celestar
parents: 1182
diff changeset
   657
		do {
dc46f04aab3a (svn r1695) -Fix: I broke maximum speed sorting for anything but trains with the new acceleration. Sorry
Celestar
parents: 1182
diff changeset
   658
			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
   659
				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
   660
		} 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
   661
dc46f04aab3a (svn r1695) -Fix: I broke maximum speed sorting for anything but trains with the new acceleration. Sorry
Celestar
parents: 1182
diff changeset
   662
		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
   663
	} else {
dc46f04aab3a (svn r1695) -Fix: I broke maximum speed sorting for anything but trains with the new acceleration. Sorry
Celestar
parents: 1182
diff changeset
   664
		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
   665
	}
168
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   666
243
9a40daa560ae (svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents: 193
diff changeset
   667
	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
   668
79f9ed5b23e6 (svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents: 164
diff changeset
   669
	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
   670
}
842
efc3546bc313 (svn r1323) Adding autoreplace feature
bjarni
parents: 594
diff changeset
   671
2965
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   672
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
   673
{
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
   674
	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
   675
	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
   676
	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
   677
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   678
	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
   679
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   680
	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
   681
}
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
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
   684
{
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
   685
	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
   686
	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
   687
	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
   688
	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
   689
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
   690
	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
   691
	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
   692
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
   693
	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
   694
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   695
	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
   696
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   697
	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
   698
}
3eb140bd49a3 (svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
peter1138
parents: 2962
diff changeset
   699
6247
7d81e3a5d803 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6148
diff changeset
   700
void InitializeGUI()
1246
eb66ff34348f (svn r1750) - Feature: [ 1093261 ] Saving vehicle sorting criteria for each vehicle type (bociusz)
darkvater
parents: 1191
diff changeset
   701
{
eb66ff34348f (svn r1750) - Feature: [ 1093261 ] Saving vehicle sorting criteria for each vehicle type (bociusz)
darkvater
parents: 1191
diff changeset
   702
	memset(&_sorting, 0, sizeof(_sorting));
eb66ff34348f (svn r1750) - Feature: [ 1093261 ] Saving vehicle sorting criteria for each vehicle type (bociusz)
darkvater
parents: 1191
diff changeset
   703
}
2552
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   704
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   705
/** Assigns an already open vehicle window to a new vehicle.
2639
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   706
 * Assigns an already open vehicle window to a new vehicle. If the vehicle got
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   707
 * any sub window open (orders and so on) it will change owner too.
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   708
 * @param *from_v the current owner of the window
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   709
 * @param *to_v the new owner of the window
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   710
 */
2552
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   711
void ChangeVehicleViewWindow(const Vehicle *from_v, const Vehicle *to_v)
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   712
{
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   713
	Window *w;
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   714
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   715
	w = FindWindowById(WC_VEHICLE_VIEW, from_v->index);
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   716
	if (w != NULL) {
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   717
		w->window_number = to_v->index;
2639
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2630
diff changeset
   718
		WP(w, vp_d).follow_vehicle = to_v->index;
2552
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   719
		SetWindowDirty(w);
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   720
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   721
		w = FindWindowById(WC_VEHICLE_ORDERS, from_v->index);
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   722
		if (w != NULL) {
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   723
			w->window_number = to_v->index;
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   724
			SetWindowDirty(w);
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   725
		}
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   726
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   727
		w = FindWindowById(WC_VEHICLE_REFIT, from_v->index);
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   728
		if (w != NULL) {
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   729
			w->window_number = to_v->index;
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   730
			SetWindowDirty(w);
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   731
		}
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   732
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   733
		w = FindWindowById(WC_VEHICLE_DETAILS, from_v->index);
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   734
		if (w != NULL) {
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   735
			w->window_number = to_v->index;
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   736
			SetWindowDirty(w);
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   737
		}
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   738
	}
5b586a545665 (svn r3081) -Codechange: [autoreplace] complete rewrite of autoreplace
bjarni
parents: 2549
diff changeset
   739
}
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
   740
5269
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
   741
enum VehicleListWindowWidgets {
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   742
	VLW_WIDGET_CLOSEBOX = 0,
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   743
	VLW_WIDGET_CAPTION,
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   744
	VLW_WIDGET_STICKY,
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   745
	VLW_WIDGET_SORT_ORDER,
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   746
	VLW_WIDGET_SORT_BY_TEXT,
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   747
	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
   748
	VLW_WIDGET_EMPTY_TOP_RIGHT,
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   749
	VLW_WIDGET_LIST,
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   750
	VLW_WIDGET_SCROLLBAR,
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   751
	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
   752
	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
   753
	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
   754
	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
   755
	VLW_WIDGET_STOP_ALL,
3160067b8751 (svn r6570) -Feature: added "start all" and "stop all" buttons to the vehicle lists
bjarni
parents: 4669
diff changeset
   756
	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
   757
	VLW_WIDGET_EMPTY_BOTTOM_RIGHT,
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   758
	VLW_WIDGET_RESIZE,
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   759
};
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   760
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   761
static const Widget _vehicle_list_widgets[] = {
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   762
	{   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
   763
	{    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
   764
	{  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
   765
	{ 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
   766
	{      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
   767
	{    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
   768
	{      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
   769
	{     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
   770
	{  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
   771
	/* 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
   772
	{      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
   773
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   774
	{ 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
   775
	{    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
   776
	{    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
   777
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   778
	{ 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
   779
	{ 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
   780
	{      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
   781
	{  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
   782
	{   WIDGETS_END},
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   783
};
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   784
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
   785
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
   786
{
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
   787
	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
   788
	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
   789
	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
   790
6638
09c5d7bf69a5 (svn r9869) -Codechange: replace some bytes with VehicleType, i.e. more type strictness.
rubidium
parents: 6621
diff changeset
   791
	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
   792
	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
   793
	vl->sort_list = NULL;
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   794
	w->caption_color = player;
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   795
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   796
	/* 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
   797
	 * 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
   798
	if (player == _local_player) {
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
   799
		w->HideWidget(VLW_WIDGET_OTHER_PLAYER_FILLER);
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
   800
		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
   801
	} else {
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
   802
		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
   803
			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
   804
			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
   805
			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
   806
			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
   807
			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
   808
			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
   809
			WIDGET_LIST_END);
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   810
	}
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
   811
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
   812
	/* Set up the window widgets */
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   813
	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
   814
		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
   815
			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
   816
			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
   817
			break;
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   818
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
   819
		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
   820
			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
   821
			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
   822
			break;
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   823
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
   824
		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
   825
			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
   826
			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
   827
			break;
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   828
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
   829
		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
   830
			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
   831
			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
   832
			break;
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   833
5274
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
   834
		default: NOT_REACHED();
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   835
	}
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   836
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
   837
	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
   838
		case VLW_SHARED_ORDERS:
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   839
			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
   840
			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
   841
		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
   842
			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
   843
				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
   844
				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
   845
				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
   846
				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
   847
				default: NOT_REACHED(); break;
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   848
			}
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
   849
			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
   850
		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
   851
			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
   852
				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
   853
				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
   854
				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
   855
				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
   856
				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
   857
			}
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
   858
			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
   859
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
   860
		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
   861
			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
   862
				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
   863
				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
   864
				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
   865
				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
   866
				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
   867
			}
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
   868
			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
   869
		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
   870
	}
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
   871
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
	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
   873
		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
   874
			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
   875
			/* 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
   876
		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
   877
			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
   878
			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
   879
			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
   880
			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
   881
		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
   882
		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
   883
			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
   884
			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
   885
			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
   886
		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
   887
	}
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
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   889
	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
   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
	/* 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
   892
		* 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
   893
		* 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
   894
	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
   895
		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
   896
		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
   897
		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
   898
		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
   899
		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
   900
	}
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
   901
5587
167d9a91ef02 (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5584
diff changeset
   902
	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
   903
	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
   904
	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
   905
	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
   906
}
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
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
   908
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
   909
{
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   910
	const Order *order;
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   911
	int sel, i = 0;
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
	sel = v->cur_order_index;
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   914
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   915
	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
   916
		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
   917
		sel--;
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   918
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   919
		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
   920
			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
   921
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   922
			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
   923
			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
   924
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   925
			y += 6;
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   926
			if (++i == 4) break;
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
	}
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   929
}
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
   930
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
   931
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
   932
{
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
   933
	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
   934
	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
   935
	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
   936
	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
   937
	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
   938
	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
   939
	const Player *p = GetPlayer(owner);
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
	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
   941
	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
   942
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
	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
   944
	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
   945
	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
   946
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
	/* 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
   948
	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
   949
		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
   950
			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
   951
				/* 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
   952
				 * 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
   953
				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
   954
			}
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
   955
			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
   956
			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
   957
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
		case VLW_STANDARD: /* Company Name */
7058
8105bb13ce3d (svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents: 7049
diff changeset
   959
			SetDParam(0, p->index);
8105bb13ce3d (svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents: 7049
diff changeset
   960
			SetDParam(1, w->vscroll.count);
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   961
			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
   962
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   963
		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
   964
			SetDParam(0, index);
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   965
			SetDParam(1, w->vscroll.count);
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   966
			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
   967
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
   968
		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
   969
			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
   970
				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
   971
				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
   972
				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
   973
				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
   974
				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
   975
			}
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
   976
			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
   977
				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
   978
			} 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
   979
				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
   980
			}
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
   981
			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
   982
			break;
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
   983
		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
   984
	}
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
   985
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
   986
	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
   987
		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
   988
		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
   989
		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
   990
		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
   991
		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
   992
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
   993
	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
   994
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
	/* 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
   996
	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
   997
	/* 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
   998
	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
   999
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
  1000
	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
  1001
	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
  1002
		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
  1003
		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
  1004
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
  1005
		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
  1006
		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
  1007
4753
58daf74cb14f (svn r6667) - Codechange: The vehicle list has no horizontal scroll bar, so don't use it to store data; instead, just get the widget's width.
peter1138
parents: 4740
diff changeset
  1008
		DrawVehicleImage(v, x + 19, y + 6, w->widget[VLW_WIDGET_LIST].right - w->widget[VLW_WIDGET_LIST].left - 20, 0, INVALID_VEHICLE);
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
  1009
		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
  1010
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
  1011
		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
  1012
			(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
  1013
			(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
  1014
			(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
  1015
4734
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
  1016
			/* 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
  1017
			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
  1018
			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
  1019
		}
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
  1020
4734
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
  1021
		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
  1022
7490
bb27d92565d3 (svn r11001) -Codechange: unify the way to determine whether a vehicle is in a depot.
rubidium
parents: 7486
diff changeset
  1023
		if (v->IsInDepot()) {
4734
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
  1024
			str = STR_021F;
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
  1025
		} else {
24b34218c5ce (svn r6646) -Codechange: [vehicle list window] Cleaned up the drawing code
bjarni
parents: 4726
diff changeset
  1026
			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
  1027
		}
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
  1028
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
  1029
		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
  1030
		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
  1031
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
  1032
		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
  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
		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
  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
}
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
4449
820974aaa4a6 (svn r6227) -Codechange: added window type flags to use with PlayerVehWndProc
bjarni
parents: 4442
diff changeset
  1038
/*
820974aaa4a6 (svn r6227) -Codechange: added window type flags to use with PlayerVehWndProc
bjarni
parents: 4442
diff changeset
  1039
 * bitmask for w->window_number
820974aaa4a6 (svn r6227) -Codechange: added window type flags to use with PlayerVehWndProc
bjarni
parents: 4442
diff changeset
  1040
 * 0-7 PlayerID (owner)
820974aaa4a6 (svn r6227) -Codechange: added window type flags to use with PlayerVehWndProc
bjarni
parents: 4442
diff changeset
  1041
 * 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
  1042
 * 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
  1043
 * 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
  1044
 **/
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1045
void PlayerVehWndProc(Window *w, WindowEvent *e)
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1046
{
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1047
	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
  1048
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1049
	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
  1050
		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
  1051
			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
  1052
			break;
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1053
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
  1054
		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
  1055
			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
  1056
			break;
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1057
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1058
		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
  1059
			switch (e->we.click.widget) {
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1060
				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
  1061
					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
  1062
					vl->l.flags |= VL_RESORT;
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1063
4545
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->_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
  1065
					SetWindowDirty(w);
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1066
					break;
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1067
				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
  1068
					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
  1069
					return;
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1070
				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
  1071
					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
  1072
					const Vehicle *v;
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1073
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1074
					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
  1075
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1076
					id_v += w->vscroll.pos;
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1077
4545
138a9195009a (svn r6377) -Codechange: Set up the widgets in the WE_CREATE instead of on every WE_PAINT
Darkvater
parents: 4542
diff changeset
  1078
					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
  1079
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1080
					v = vl->sort_list[id_v];
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1081
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1082
					ShowVehicleViewWindow(v);
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1083
				} break;
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1084
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
  1085
				case VLW_WIDGET_AVAILABLE_VEHICLES:
5786
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5783
diff changeset
  1086
					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
  1087
					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
  1088
5274
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1089
				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
  1090
				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
  1091
					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
  1092
						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
  1093
						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
  1094
						STR_NULL,
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1095
						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
  1096
					};
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1097
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1098
					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
  1099
						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
  1100
						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
  1101
						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
  1102
						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
  1103
					};
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1104
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1105
					/* 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
  1106
					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
  1107
					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
  1108
					break;
5274
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1109
				}
4673
3160067b8751 (svn r6570) -Feature: added "start all" and "stop all" buttons to the vehicle lists
bjarni
parents: 4669
diff changeset
  1110
3160067b8751 (svn r6570) -Feature: added "start all" and "stop all" buttons to the vehicle lists
bjarni
parents: 4669
diff changeset
  1111
				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
  1112
				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
  1113
					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
  1114
					break;
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1115
			}
6492
286a52449b54 (svn r9673) -Cleanup: remove spaces before tabs and replace non-indenting tabs with spaces.
rubidium
parents: 6491
diff changeset
  1116
		} break;
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1117
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1118
		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
  1119
			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
  1120
				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
  1121
					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
  1122
						/* 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
  1123
						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
  1124
						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
  1125
						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
  1126
					}
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1127
					break;
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1128
				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
  1129
					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
  1130
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1131
					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
  1132
						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
  1133
							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
  1134
							break;
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1135
						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
  1136
							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
  1137
								(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
  1138
								NULL,
5792
c4dad358b30b (svn r8349) -Codechange: replaced CMD_REFIT_VEH() and similar defines with real static inline functions
bjarni
parents: 5786
diff changeset
  1139
								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
  1140
							break;
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1141
						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
  1142
							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
  1143
								(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
  1144
								NULL,
5792
c4dad358b30b (svn r8349) -Codechange: replaced CMD_REFIT_VEH() and similar defines with real static inline functions
bjarni
parents: 5786
diff changeset
  1145
								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
  1146
							break;
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1147
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1148
						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
  1149
					}
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1150
					break;
8bd7e4c00956 (svn r7418) -Codechange/Feature: Put back the 'New Vehicles' button in the vehicle list window. As
Darkvater
parents: 5269
diff changeset
  1151
				default: NOT_REACHED();
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1152
			}
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1153
			SetWindowDirty(w);
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1154
			break;
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1155
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1156
		case WE_DESTROY:
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1157
			free((void*)vl->sort_list);
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1158
			break;
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1159
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1160
		case WE_TICK: /* resort the list every 20 seconds orso (10 days) */
4545
138a9195009a (svn r6377) -Codechange: Set up the widgets in the WE_CREATE instead of on every WE_PAINT
Darkvater
parents: 4542
diff changeset
  1161
			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
  1162
				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
  1163
				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
  1164
5380
8ea58542b6e0 (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5297
diff changeset
  1165
				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
  1166
				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
  1167
				vl->l.flags |= VL_RESORT;
4442
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1168
				SetWindowDirty(w);
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1169
			}
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1170
			break;
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1171
4542
f42ecc669275 (svn r6372) -Codechange: static, unneeded decleration in headers, superfluous header includes
Darkvater
parents: 4541
diff changeset
  1172
		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
  1173
			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
  1174
			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
  1175
			break;
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1176
	}
9f8bb348d58f (svn r6215) -Codechange: [vehicle list windows] unified Player(vehicle)WndProc into PlayerVehWndProc
bjarni
parents: 4434
diff changeset
  1177
}
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1178
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1179
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
  1180
	WDP_AUTO, WDP_AUTO, 260, 182, 260, 182,
5893
7e431a4abebb (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5847
diff changeset
  1181
	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
  1182
	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
  1183
	_vehicle_list_widgets,
7f5b13b7e728 (svn r7128) -Codechange: Replace magic numbers by magic enums (windowdesc positioning WDP_AUTO = -1)
Darkvater
parents: 5005
diff changeset
  1184
	PlayerVehWndProc
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1185
};
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1186
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1187
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
  1188
	WDP_AUTO, WDP_AUTO, 260, 182, 260, 182,
5893
7e431a4abebb (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5847
diff changeset
  1189
	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
  1190
	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
  1191
	_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
  1192
	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
  1193
};
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
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
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
  1196
	WDP_AUTO, WDP_AUTO, 260, 182, 260, 182,
5893
7e431a4abebb (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5847
diff changeset
  1197
	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
  1198
	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
  1199
	_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
  1200
	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
  1201
};
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
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
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
  1204
	WDP_AUTO, WDP_AUTO, 260, 182, 260, 182,
5893
7e431a4abebb (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5847
diff changeset
  1205
	WC_AIRCRAFT_LIST, WC_NONE,
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1206
	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
  1207
	_vehicle_list_widgets,
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1208
	PlayerVehWndProc
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1209
};
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1210
6638
09c5d7bf69a5 (svn r9869) -Codechange: replace some bytes with VehicleType, i.e. more type strictness.
rubidium
parents: 6621
diff changeset
  1211
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
  1212
{
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1213
	Window *w;
5005
f5086bd3945a (svn r7022) -Fix [FS#292]: Properly guard against viewing company-sensitive information from
Darkvater
parents: 4999
diff changeset
  1214
	WindowNumber num;
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1215
5005
f5086bd3945a (svn r7022) -Fix [FS#292]: Properly guard against viewing company-sensitive information from
Darkvater
parents: 4999
diff changeset
  1216
	if (!IsValidPlayer(player)) return;
f5086bd3945a (svn r7022) -Fix [FS#292]: Properly guard against viewing company-sensitive information from
Darkvater
parents: 4999
diff changeset
  1217
5745
c8069ea3af5d (svn r8293) -Codechange: overloaded ShowVehicleListWindow() so it can open all types of vehicle lists (depending on arguments)
bjarni
parents: 5668
diff changeset
  1218
	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
  1219
5269
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1220
	/* 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
  1221
	 * 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
  1222
	 * 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
  1223
	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
  1224
		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
  1225
		case VEH_TRAIN:
5269
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1226
			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
  1227
			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
  1228
			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
  1229
		case VEH_ROAD:
5269
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1230
			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
  1231
			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
  1232
			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
  1233
		case VEH_SHIP:
5269
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1234
			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
  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_AIRCRAFT:
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_aircraft_desc, num);
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1238
			break;
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1239
	}
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1240
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1241
	if (w != NULL) {
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1242
		/* 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
  1243
		w->resize.width = w->width;
4b50973b21f6 (svn r7410) -Codechange/Fix: Remove useless and unfollowable programmatic-resize, and implement it
Darkvater
parents: 5125
diff changeset
  1244
		w->resize.height = w->height;
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1245
	}
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1246
}
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1247
6638
09c5d7bf69a5 (svn r9869) -Codechange: replace some bytes with VehicleType, i.e. more type strictness.
rubidium
parents: 6621
diff changeset
  1248
void ShowVehicleListWindow(PlayerID player, VehicleType vehicle_type)
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1249
{
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
  1250
	/* 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
  1251
	 * 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
  1252
	 * 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
  1253
	 */
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
7563
305b8bdd94da (svn r11088) -Fix (r11063, r11067): MSVC warning C4804: '>' : unsafe use of type 'bool' in operation
glx
parents: 7547
diff changeset
  1255
	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
  1256
		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
  1257
	} 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
  1258
		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
  1259
	}
4668
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1260
}
f7256d0e7682 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4665
diff changeset
  1261
5745
c8069ea3af5d (svn r8293) -Codechange: overloaded ShowVehicleListWindow() so it can open all types of vehicle lists (depending on arguments)
bjarni
parents: 5668
diff changeset
  1262
void ShowVehicleListWindow(const Vehicle *v)
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
	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
  1265
	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
  1266
}
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
  1267
6638
09c5d7bf69a5 (svn r9869) -Codechange: replace some bytes with VehicleType, i.e. more type strictness.
rubidium
parents: 6621
diff changeset
  1268
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
  1269
{
c8069ea3af5d (svn r8293) -Codechange: overloaded ShowVehicleListWindow() so it can open all types of vehicle lists (depending on arguments)
bjarni
parents: 5668
diff changeset
  1270
	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
  1271
}
c8069ea3af5d (svn r8293) -Codechange: overloaded ShowVehicleListWindow() so it can open all types of vehicle lists (depending on arguments)
bjarni
parents: 5668
diff changeset
  1272
6638
09c5d7bf69a5 (svn r9869) -Codechange: replace some bytes with VehicleType, i.e. more type strictness.
rubidium
parents: 6621
diff changeset
  1273
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
  1274
{
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
  1275
	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
  1276
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
  1277
	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
  1278
		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
  1279
	} 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
  1280
		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
  1281
		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
  1282
		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
  1283
	}
5745
c8069ea3af5d (svn r8293) -Codechange: overloaded ShowVehicleListWindow() so it can open all types of vehicle lists (depending on arguments)
bjarni
parents: 5668
diff changeset
  1284
	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
  1285
}
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1286
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1287
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
  1288
/* 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
  1289
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1290
/** 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
  1291
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
  1292
	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
  1293
	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
  1294
	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
  1295
	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
  1296
	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
  1297
	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
  1298
	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
  1299
	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
  1300
	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
  1301
	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
  1302
	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
  1303
	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
  1304
	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
  1305
	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
  1306
};
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
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
/** 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
  1309
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
  1310
	{   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
  1311
	{    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
  1312
	{ 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
  1313
	{      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
  1314
	{ 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
  1315
	{ 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
  1316
	{      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
  1317
	{     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
  1318
	{  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
  1319
	{ 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
  1320
	{ 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
  1321
	{ 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
  1322
	{ 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
  1323
	{  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
  1324
	{   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
  1325
};
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
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
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
/** 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
  1329
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
  1330
	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
  1331
	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
  1332
	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
  1333
	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
  1334
};
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
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
/** 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
  1337
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
  1338
	{ // 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
  1339
		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
  1340
		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
  1341
		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
  1342
		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
  1343
	},
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
	{ // 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
  1345
		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
  1346
		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
  1347
		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
  1348
		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
  1349
	},
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
	{ // 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
  1351
		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
  1352
		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
  1353
		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
  1354
		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
  1355
	},
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
	{ // 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
  1357
		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
  1358
		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
  1359
		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
  1360
		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
  1361
	},
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
};
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
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
/** 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
  1365
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
  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
	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
  1368
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
	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
  1370
		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
  1371
			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
  1372
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
			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
  1374
			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
  1375
			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
  1376
			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
  1377
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->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
  1379
			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
  1380
			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
  1381
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
		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
  1383
			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
  1384
			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
  1385
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
			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
  1387
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
			/* 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
  1389
			* 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
  1390
			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
  1391
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
			/* 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
  1393
			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
  1394
				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
  1395
			}
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
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
			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
  1398
		} 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
  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
		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
  1401
			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
  1402
			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
  1403
			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
  1404
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
		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
  1406
			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
  1407
			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
  1408
			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
  1409
			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
  1410
		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
  1411
	}
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
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
	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
  1414
		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
  1415
		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
  1416
	}
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
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].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
  1419
	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
  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
	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
  1422
}
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
/** 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
  1425
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
  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
	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
  1428
		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
  1429
		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
  1430
		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
  1431
		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
  1432
		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
  1433
	}
7798
5ae2f0e61f1d (svn r11348) -Fix (r11049): [OSX] killed a warning (don't ask why only OSX showed this one)
bjarni
parents: 7759
diff changeset
  1434
	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
  1435
}
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
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1437
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
  1438
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
  1439
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
  1440
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
  1441
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
  1442
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
/**
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
* 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
  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
* @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
  1447
* @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
  1448
* @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
  1449
* @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
  1450
* @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
  1451
* @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
  1452
*/
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
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
  1454
{
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
	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
  1456
		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
  1457
		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
  1458
		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
  1459
		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
  1460
		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
  1461
	}
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
}
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
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
/** 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
  1465
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
  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
	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
  1468
	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
  1469
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1470
	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
  1471
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
	if (v->type == VEH_TRAIN) {
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1473
		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
  1474
		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
  1475
	}
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1476
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1477
	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
  1478
		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
  1479
		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
  1480
		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
  1481
		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
  1482
		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
  1483
		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
  1484
		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
  1485
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
	/* 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
  1487
	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
  1488
		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
  1489
		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
  1490
		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
  1491
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
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
	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
  1494
	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
  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
	/* 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
  1497
	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
  1498
	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
  1499
	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
  1500
	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
  1501
	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
  1502
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
	/* 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
  1504
	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
  1505
		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
  1506
			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
  1507
			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
  1508
			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
  1509
			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
  1510
			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
  1511
				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
  1512
				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
  1513
			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
  1514
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1515
		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
  1516
		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
  1517
		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
  1518
			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
  1519
			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
  1520
			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
  1521
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1522
		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
  1523
	}
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
	/* 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
  1526
	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
  1527
	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
  1528
	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
  1529
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
	/* 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
  1531
	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
  1532
	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
  1533
	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
  1534
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
	/* 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
  1536
	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
  1537
	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
  1538
	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
  1539
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
	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
  1541
		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
  1542
			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
  1543
			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
  1544
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
		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
  1546
		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
  1547
		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
  1548
			DrawVehicleImage(v, 3, 57, 0, 0, INVALID_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
  1549
			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
  1550
			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
  1551
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
		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
  1553
	}
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
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
/** 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
  1557
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
  1558
	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
  1559
	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
  1560
	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
  1561
	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
  1562
};
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
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
/** 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
  1565
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
  1566
	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
  1567
	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
  1568
	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
  1569
	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
  1570
};
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
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
/** 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
  1573
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
  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
	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
  1576
		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
  1577
			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
  1578
			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
  1579
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
		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
  1581
			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
  1582
			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
  1583
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
		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
  1585
			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
  1586
				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
  1587
					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
  1588
					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
  1589
					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
  1590
				} 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
  1591
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
				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
  1593
				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
  1594
					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
  1595
					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
  1596
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
					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
  1598
					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
  1599
					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
  1600
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
					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
  1602
				} 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
  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
				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
  1605
				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
  1606
				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
  1607
				case VLD_WIDGET_DETAILS_TOTAL_CARGO:
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1608
					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
  1609
						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
  1610
						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
  1611
						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
  1612
						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
  1613
						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
  1614
						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
  1615
7540
820fc73362ba (svn r11060) -Codechange: replace some magic numbers with the right enumified constants.
rubidium
parents: 7530
diff changeset
  1616
					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
  1617
					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
  1618
					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
  1619
			}
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
		} 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
  1621
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
		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
  1623
			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
  1624
				_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
  1625
				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
  1626
			}
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
			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
  1628
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
		case WE_RESIZE:
7540
820fc73362ba (svn r11060) -Codechange: replace some magic numbers with the right enumified constants.
rubidium
parents: 7530
diff changeset
  1630
			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
  1631
			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
  1632
bfeada535347 (svn r11049) -Codechange: unify a large part of the vehicle details window. Based on a patch by nycom.
rubidium
parents: 7516
diff changeset
  1633
			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
  1634
			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
  1635
			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
  1636
	}
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
}
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
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
/** 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
  1640
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
  1641
	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
  1642
	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
  1643
	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
  1644
	_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
  1645
	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
  1646
};
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
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
/** 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
  1649
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
  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
	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
  1652
	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
  1653
	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
  1654
}
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
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
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1657
/* Unified vehicle GUI - Vehicle View Window */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1658
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1659
/** Constants of vehicle view widget indices */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1660
enum VehicleViewWindowWidgets {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1661
	VVW_WIDGET_CLOSEBOX = 0,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1662
	VVW_WIDGET_CAPTION,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1663
	VVW_WIDGET_STICKY,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1664
	VVW_WIDGET_PANEL,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1665
	VVW_WIDGET_VIEWPORT,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1666
	VVW_WIDGET_START_STOP_VEH,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1667
	VVW_WIDGET_CENTER_MAIN_VIEH,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1668
	VVW_WIDGET_GOTO_DEPOT,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1669
	VVW_WIDGET_REFIT_VEH,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1670
	VVW_WIDGET_SHOW_ORDERS,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1671
	VVW_WIDGET_SHOW_DETAILS,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1672
	VVW_WIDGET_CLONE_VEH,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1673
	VVW_WIDGET_EMPTY_BOTTOM_RIGHT,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1674
	VVW_WIDGET_RESIZE,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1675
	VVW_WIDGET_TURN_AROUND,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1676
	VVW_WIDGET_FORCE_PROCEED,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1677
};
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1678
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1679
/** Vehicle view widgets. */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1680
static const Widget _vehicle_view_widgets[] = {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1681
	{   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
  1682
	{    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
  1683
	{  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
  1684
	{      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
  1685
	{      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
  1686
	{    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
  1687
	{ 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
  1688
	{ 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
  1689
	{ 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
  1690
	{ 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
  1691
	{ 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
  1692
	{ 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
  1693
	{      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
  1694
	{  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
  1695
	{ 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
  1696
	{ 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
  1697
{   WIDGETS_END},
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1698
};
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1699
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1700
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1701
static void VehicleViewWndProc(Window *w, WindowEvent *e);
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
/** 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
  1704
static const WindowDesc _vehicle_view_desc = {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1705
	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
  1706
	WC_VEHICLE_VIEW, WC_NONE,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1707
	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
  1708
	_vehicle_view_widgets,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1709
	VehicleViewWndProc
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1710
};
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1711
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1712
/** 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
  1713
 *  default_height are different for train view.
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
static const WindowDesc _train_view_desc = {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1716
	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
  1717
	WC_VEHICLE_VIEW, WC_NONE,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1718
	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
  1719
	_vehicle_view_widgets,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1720
	VehicleViewWndProc
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1721
};
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1722
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1723
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1724
/* 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
  1725
	 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
  1726
assert_compile(VEH_TRAIN == 0);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1727
assert_compile(VEH_ROAD == 1);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1728
assert_compile(VEH_SHIP == 2);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1729
assert_compile(VEH_AIRCRAFT == 3);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1730
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1731
/** 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
  1732
static const ZoomLevel _vehicle_view_zoom_levels[] = {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1733
	ZOOM_LVL_TRAIN,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1734
	ZOOM_LVL_ROADVEH,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1735
	ZOOM_LVL_SHIP,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1736
	ZOOM_LVL_AIRCRAFT,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1737
};
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1738
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1739
/* Constants for geometry of vehicle view viewport */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1740
static const int VV_VIEWPORT_X = 3;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1741
static const int VV_VIEWPORT_Y = 17;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1742
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
  1743
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
  1744
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
  1745
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1746
/** 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
  1747
void ShowVehicleViewWindow(const Vehicle *v)
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
	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
  1750
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1751
	if (w != NULL) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1752
		w->caption_color = v->owner;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1753
		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
  1754
												 (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
  1755
												 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
  1756
	}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1757
}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1758
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1759
/** Initialize a newly created vehicle view window */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1760
static void CreateVehicleViewWindow(Window *w)
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
	const Vehicle *v = GetVehicle(w->window_number);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1763
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
	 * 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
  1766
	 * move some of the buttons for trains
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
	switch (v->type) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1769
		case VEH_TRAIN:
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1770
			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
  1771
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1772
			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
  1773
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1774
			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
  1775
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1776
			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
  1777
			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
  1778
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1779
			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
  1780
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1781
			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
  1782
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1783
			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
  1784
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1785
			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
  1786
			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
  1787
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1788
			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
  1789
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
			/* 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
  1792
			w->widget[VVW_WIDGET_PANEL].bottom = 121;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1793
			w->widget[VVW_WIDGET_VIEWPORT].bottom = 119;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1794
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1795
			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
  1796
			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
  1797
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1798
			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
  1799
			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
  1800
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1801
			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
  1802
			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
  1803
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1804
			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
  1805
			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
  1806
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1807
			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
  1808
			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
  1809
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1810
			w->widget[VVW_WIDGET_RESIZE].top = 122;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1811
			w->widget[VVW_WIDGET_RESIZE].bottom = 133;
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_TURN_AROUND].top = 68;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1814
			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
  1815
			break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1816
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1817
		case VEH_ROAD:
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1818
			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
  1819
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1820
			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
  1821
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1822
			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
  1823
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1824
			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
  1825
			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
  1826
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1827
			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
  1828
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1829
			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
  1830
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1831
			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
  1832
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1833
			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
  1834
			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
  1835
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1836
			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
  1837
			break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1838
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1839
		case VEH_SHIP:
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1840
			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
  1841
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1842
			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
  1843
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1844
			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
  1845
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1846
			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
  1847
			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
  1848
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1849
			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
  1850
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1851
			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
  1852
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1853
			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
  1854
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1855
			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
  1856
			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
  1857
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1858
			w->SetWidgetsHiddenState(true,
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1859
																	VVW_WIDGET_TURN_AROUND,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1860
																	VVW_WIDGET_FORCE_PROCEED,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1861
																	WIDGET_LIST_END);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1862
			break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1863
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1864
		case VEH_AIRCRAFT:
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1865
			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
  1866
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1867
			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
  1868
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1869
			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
  1870
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1871
			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
  1872
			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
  1873
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1874
			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
  1875
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1876
			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
  1877
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1878
			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
  1879
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1880
			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
  1881
			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
  1882
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1883
			w->SetWidgetsHiddenState(true,
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1884
																	VVW_WIDGET_TURN_AROUND,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1885
																	VVW_WIDGET_FORCE_PROCEED,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1886
																	WIDGET_LIST_END);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1887
			break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1888
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1889
			default: NOT_REACHED();
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1890
	}
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
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1893
/** 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
  1894
static bool IsVehicleRefitable(const Vehicle *v)
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
	/* 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
  1897
	 * Does maybe work one solution for all?
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
	switch (v->type) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1900
		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
  1901
		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
  1902
		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
  1903
		case VEH_AIRCRAFT: return v->IsStoppedInDepot();
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1904
		default: NOT_REACHED();
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1905
	}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1906
}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1907
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1908
/** 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
  1909
static const StringID _heading_for_depot_strings[] = {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1910
	STR_HEADING_FOR_TRAIN_DEPOT,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1911
	STR_HEADING_FOR_ROAD_DEPOT,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1912
	STR_HEADING_FOR_SHIP_DEPOT,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1913
	STR_HEADING_FOR_HANGAR,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1914
};
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1915
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1916
/** 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
  1917
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
  1918
	STR_HEADING_FOR_TRAIN_DEPOT_SERVICE,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1919
	STR_HEADING_FOR_ROAD_DEPOT_SERVICE,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1920
	STR_HEADING_FOR_SHIP_DEPOT_SERVICE,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1921
	STR_HEADING_FOR_HANGAR_SERVICE,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1922
};
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1923
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1924
/** Repaint vehicle view window. */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1925
static void DrawVehicleViewWindow(Window *w)
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
	const Vehicle *v = GetVehicle(w->window_number);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1928
	StringID str;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1929
	bool is_localplayer = v->owner == _local_player;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1930
	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
  1931
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1932
	w->SetWidgetDisabledState(VVW_WIDGET_GOTO_DEPOT, !is_localplayer);
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1933
	w->SetWidgetDisabledState(VVW_WIDGET_REFIT_VEH,
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1934
															 !refitable_and_stopped_in_depot || !is_localplayer);
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1935
	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
  1936
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1937
	if (v->type == VEH_TRAIN) {
7997
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1938
		w->SetWidgetDisabledState(VVW_WIDGET_FORCE_PROCEED, !is_localplayer);
df87ccd00a96 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 7928
diff changeset
  1939
		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
  1940
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1941
		/* 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
  1942
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1943
		if (is_localplayer) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1944
			/* 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
  1945
			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
  1946
				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
  1947
						(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
  1948
					w->EnableWidget(VVW_WIDGET_REFIT_VEH);
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1949
					/* We have a refittable carriage, bail out */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1950
					break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1951
				}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1952
			}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1953
		}
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
	/* draw widgets & caption */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1957
	SetDParam(0, v->index);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1958
	DrawWindowWidgets(w);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1959
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1960
	if (v->vehstatus & VS_CRASHED) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1961
		str = STR_8863_CRASHED;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1962
	} 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
  1963
		str = STR_885C_BROKEN_DOWN;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1964
	} else if (v->vehstatus & VS_STOPPED) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1965
		if (v->type == VEH_TRAIN) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1966
			if (v->cur_speed == 0) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1967
				if (v->u.rail.cached_power == 0) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1968
					str = STR_TRAIN_NO_POWER;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1969
				} else {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1970
					str = STR_8861_STOPPED;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1971
				}
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
				SetDParam(0, v->GetDisplaySpeed());
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1974
				str = STR_TRAIN_STOPPING + _patches.vehicle_speed;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1975
			}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1976
		} else { // no train
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1977
			str = STR_8861_STOPPED;
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 { // 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
  1980
		switch (v->current_order.type) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1981
			case OT_GOTO_STATION: {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1982
				SetDParam(0, v->current_order.dest);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1983
				SetDParam(1, v->GetDisplaySpeed());
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1984
				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
  1985
			} break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1986
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1987
			case OT_GOTO_DEPOT: {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1988
				if (v->type == VEH_AIRCRAFT) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1989
					/* 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
  1990
					SetDParam(0, v->current_order.dest);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1991
					SetDParam(1, v->GetDisplaySpeed());
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1992
				} else {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1993
					Depot *depot = GetDepot(v->current_order.dest);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1994
					SetDParam(0, depot->town_index);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1995
					SetDParam(1, v->GetDisplaySpeed());
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  1996
				}
7928
63e18de69e50 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents: 7846
diff changeset
  1997
				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
  1998
					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
  1999
				} else {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2000
					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
  2001
				}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2002
			} break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2003
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2004
			case OT_LOADING:
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2005
				str = STR_882F_LOADING_UNLOADING;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2006
				break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2007
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2008
			case OT_GOTO_WAYPOINT: {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2009
				assert(v->type == VEH_TRAIN);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2010
				SetDParam(0, v->current_order.dest);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2011
				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
  2012
				SetDParam(1, v->GetDisplaySpeed());
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2013
				break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2014
			}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2015
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2016
			case OT_LEAVESTATION:
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2017
				if (v->type != VEH_AIRCRAFT) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2018
					str = STR_882F_LOADING_UNLOADING;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2019
					break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2020
				}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2021
				/* 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
  2022
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2023
			default:
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2024
				if (v->num_orders == 0) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2025
					str = STR_NO_ORDERS + _patches.vehicle_speed;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2026
					SetDParam(0, v->GetDisplaySpeed());
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2027
				} else {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2028
					str = STR_EMPTY;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2029
				}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2030
				break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2031
		}
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
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2034
	/* draw the flag plus orders */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2035
	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
  2036
	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
  2037
	DrawWindowViewport(w);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2038
}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2039
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2040
/** 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
  2041
enum VehicleCommandTranslation {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2042
	VCT_CMD_START_STOP = 0,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2043
	VCT_CMD_GOTO_DEPOT,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2044
	VCT_CMD_CLONE_VEH,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2045
	VCT_CMD_TURN_AROUND,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2046
};
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2047
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2048
/** 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
  2049
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
  2050
	{ // VCT_CMD_START_STOP
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2051
		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
  2052
		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
  2053
		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
  2054
		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
  2055
	},
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2056
	{ // VCT_CMD_GOTO_DEPOT
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2057
		/* 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
  2058
		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
  2059
		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
  2060
		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
  2061
		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
  2062
	},
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2063
	{ // VCT_CMD_CLONE_VEH
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2064
		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
  2065
		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
  2066
		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
  2067
		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
  2068
	},
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2069
	{ // VCT_CMD_TURN_AROUND
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2070
		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
  2071
		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
  2072
		0xffffffff, // invalid for ships
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2073
		0xffffffff  // invalid for aircrafts
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2074
	},
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2075
};
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2076
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2077
/** Window event hook for vehicle view. */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2078
static void VehicleViewWndProc(Window *w, WindowEvent *e)
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
	switch (e->event) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2081
		case WE_CREATE:
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2082
			CreateVehicleViewWindow(w);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2083
			break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2084
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2085
		case WE_PAINT:
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2086
			DrawVehicleViewWindow(w);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2087
			break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2088
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2089
		case WE_CLICK: {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2090
			const Vehicle *v = GetVehicle(w->window_number);
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
			switch (e->we.click.widget) {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2093
				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
  2094
					DoCommandP(v->tile, v->index, 0, NULL,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2095
										 _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
  2096
					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
  2097
				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
  2098
					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
  2099
					/* 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
  2100
					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
  2101
						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
  2102
					} 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
  2103
						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
  2104
					}
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
				} 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
  2106
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2107
				case VVW_WIDGET_GOTO_DEPOT: /* goto hangar */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2108
					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
  2109
						_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
  2110
					break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2111
				case VVW_WIDGET_REFIT_VEH: /* refit */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2112
					ShowVehicleRefitWindow(v, INVALID_VEH_ORDER_ID);
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_SHOW_ORDERS: /* show orders */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2115
					ShowOrdersWindow(v);
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_DETAILS: /* show details */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2118
					ShowVehicleDetailsWindow(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_CLONE_VEH: /* clone vehicle */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2121
					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
  2122
										 _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
  2123
					break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2124
				case VVW_WIDGET_TURN_AROUND: /* turn around */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2125
					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
  2126
					DoCommandP(v->tile, v->index, 0, NULL,
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2127
										 _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
  2128
					break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2129
				case VVW_WIDGET_FORCE_PROCEED: /* force proceed */
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2130
					assert(v->type == VEH_TRAIN);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2131
					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
  2132
					break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2133
			}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2134
		} break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2135
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2136
		case WE_RESIZE:
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2137
			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
  2138
			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
  2139
			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
  2140
			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
  2141
			break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2142
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2143
		case WE_DESTROY:
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2144
			DeleteWindowById(WC_VEHICLE_ORDERS, w->window_number);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2145
			DeleteWindowById(WC_VEHICLE_REFIT, w->window_number);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2146
			DeleteWindowById(WC_VEHICLE_DETAILS, w->window_number);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2147
			DeleteWindowById(WC_VEHICLE_TIMETABLE, w->window_number);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2148
			break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2149
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2150
		case WE_MOUSELOOP: {
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2151
			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
  2152
			bool veh_stopped = v->IsStoppedInDepot();
7486
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2153
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2154
			/* 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
  2155
			 * stopped in depot.
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2156
			 * 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
  2157
			 * allowed only while in depot and stopped.
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2158
			 * 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
  2159
			 * 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
  2160
			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
  2161
				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
  2162
				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
  2163
				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
  2164
					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
  2165
					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
  2166
				}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2167
				SetWindowDirty(w);
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2168
			}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2169
		} break;
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2170
	}
bf6a94009823 (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7341
diff changeset
  2171
}