src/build_vehicle_gui.cpp
author rubidium
Mon, 14 Jul 2008 17:31:41 +0000
changeset 11141 38a15a29725b
parent 11138 7a4428077a35
permissions -rw-r--r--
(svn r13699) -Fix: handle SETX(Y) properly when truncating a string instead of ignoring it and returning a too long string.
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
     1
/* $Id$ */
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
     2
10429
1b99254f9607 (svn r12971) -Documentation: add @file in files that missed them and add something more than whitespace as description of files that don't have a description.
rubidium
parents: 10382
diff changeset
     3
/** @file build_vehicle_gui.cpp GUI for building vehicles. */
6449
e520244dc71e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6417
diff changeset
     4
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
     5
#include "stdafx.h"
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
     6
#include "openttd.h"
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
     7
#include "train.h"
6037
7409c8f581e1 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 6036
diff changeset
     8
#include "roadveh.h"
6034
89a7d10fa75b (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 6033
diff changeset
     9
#include "ship.h"
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    10
#include "aircraft.h"
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    11
#include "debug.h"
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    12
#include "gui.h"
7268
9c77f6baef3b (svn r10008) -Codechange: Move a couple of functions related to articulated vehicles to a file of their own.
maedhros
parents: 7181
diff changeset
    13
#include "articulated_vehicles.h"
8603
88c5ce6a5215 (svn r11668) -Codechange: more refactoring aimed at reducing compile time and making it more logic where function definitions can be found.
rubidium
parents: 8602
diff changeset
    14
#include "textbuf_gui.h"
8612
6414fc21c2f3 (svn r11677) -Codechange: move price and command related types/functions to their respective places.
rubidium
parents: 8610
diff changeset
    15
#include "command_func.h"
8750
fdd6054e7bae (svn r11818) -Codechange: split player.h into smaller pieces.
rubidium
parents: 8720
diff changeset
    16
#include "player_func.h"
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    17
#include "airport.h"
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    18
#include "vehicle_gui.h"
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    19
#include "newgrf_engine.h"
6417
26acff62d001 (svn r8826) -Codechange: Replace _cargoc's separate arrays with a regular struct array (with accessor) and implement new initialization method using cargo labels.
peter1138
parents: 6413
diff changeset
    20
#include "cargotype.h"
7139
4ae3ab180d05 (svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents: 7134
diff changeset
    21
#include "group.h"
7181
f966d75af3a6 (svn r9917) -Codechange: prepare some more areas for more road types.
rubidium
parents: 7139
diff changeset
    22
#include "road_map.h"
8610
17cc343a23dd (svn r11675) -Codechange: split the string types from the string functions.
rubidium
parents: 8603
diff changeset
    23
#include "strings_func.h"
8627
448ebf3a8291 (svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents: 8617
diff changeset
    24
#include "window_func.h"
8636
2b158acb649c (svn r11702) -Codechange: move all date related stuff to date*.
rubidium
parents: 8627
diff changeset
    25
#include "date_func.h"
8640
1e93b81e96d2 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8636
diff changeset
    26
#include "vehicle_func.h"
8707
55835d8fbfcd (svn r11774) -Change: do not include variables.h in a header when it is not needed.
rubidium
parents: 8644
diff changeset
    27
#include "settings_type.h"
8720
4e60c30e2006 (svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium
parents: 8718
diff changeset
    28
#include "gfx_func.h"
8780
6f3f3ec6c69a (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents: 8760
diff changeset
    29
#include "widgets/dropdown_func.h"
10484
e8beb2845f13 (svn r13027) -Codechange: use StrEmpty instead of arr[0] == '\0' and remove the need for WE_ON_EDIT_TEXT_CANCEL.
rubidium
parents: 10476
diff changeset
    30
#include "string_func.h"
10596
0ee9eba64c9c (svn r13140) -Codechange: move the gui-list-sorting out of window_gui.h so window_gui.h only needs to be included in *_gui.cpp.
rubidium
parents: 10595
diff changeset
    31
#include "window_gui.h"
10737
0f704b9afd93 (svn r13287) -Codechange: move engine list gui code away from engine.cpp (and its headers) to engine_gui.cpp
peter1138
parents: 10703
diff changeset
    32
#include "engine_gui.h"
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    33
8760
ce0891c412ce (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8750
diff changeset
    34
#include "table/sprites.h"
ce0891c412ce (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8750
diff changeset
    35
#include "table/strings.h"
ce0891c412ce (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8750
diff changeset
    36
5273
5fde4b8c94c4 (svn r7415) -Codechange: Don't use typedef enum for simple widget enumerators when we will never use
Darkvater
parents: 5215
diff changeset
    37
enum BuildVehicleWidgets {
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    38
	BUILD_VEHICLE_WIDGET_CLOSEBOX = 0,
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    39
	BUILD_VEHICLE_WIDGET_CAPTION,
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    40
	BUILD_VEHICLE_WIDGET_SORT_ASSENDING_DESCENDING,
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    41
	BUILD_VEHICLE_WIDGET_SORT_DROPDOWN,
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    42
	BUILD_VEHICLE_WIDGET_LIST,
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    43
	BUILD_VEHICLE_WIDGET_SCROLLBAR,
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    44
	BUILD_VEHICLE_WIDGET_PANEL,
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    45
	BUILD_VEHICLE_WIDGET_BUILD,
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    46
	BUILD_VEHICLE_WIDGET_RENAME,
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    47
	BUILD_VEHICLE_WIDGET_RESIZE,
6711
02a4b7b630bc (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6710
diff changeset
    48
	BUILD_VEHICLE_WIDGET_END
5273
5fde4b8c94c4 (svn r7415) -Codechange: Don't use typedef enum for simple widget enumerators when we will never use
Darkvater
parents: 5215
diff changeset
    49
};
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    50
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    51
static const Widget _build_vehicle_widgets[] = {
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    52
	{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,                STR_018B_CLOSE_WINDOW },
6712
d100bbf7f752 (svn r9476) -Codechange: Make build windows for all vehicle types the same width.
maedhros
parents: 6711
diff changeset
    53
	{    WWT_CAPTION,  RESIZE_RIGHT,    14,    11,   239,     0,    13, 0x0,                     STR_018C_WINDOW_TITLE_DRAG_THIS },
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    54
	{ WWT_PUSHTXTBTN,   RESIZE_NONE,    14,     0,    80,    14,    25, STR_SORT_BY,             STR_SORT_ORDER_TIP},
8834
ef15cacd6894 (svn r11904) -Codechange: use dropdown widget in 3 more windows, build vehicle, group vehicle list and station list.
peter1138
parents: 8780
diff changeset
    55
	{   WWT_DROPDOWN,  RESIZE_RIGHT,    14,    81,   239,    14,    25, 0x0,                     STR_SORT_CRITERIA_TIP},
7864
9b1e7d04aafa (svn r10731) -Codechange: allow smaller initial "build <vehicle type>" windows.
rubidium
parents: 7837
diff changeset
    56
	{     WWT_MATRIX,     RESIZE_RB,    14,     0,   227,    26,    39, 0x101,                   STR_NULL },
9b1e7d04aafa (svn r10731) -Codechange: allow smaller initial "build <vehicle type>" windows.
rubidium
parents: 7837
diff changeset
    57
	{  WWT_SCROLLBAR,    RESIZE_LRB,    14,   228,   239,    26,    39, 0x0,                     STR_0190_SCROLL_BAR_SCROLLS_LIST },
9b1e7d04aafa (svn r10731) -Codechange: allow smaller initial "build <vehicle type>" windows.
rubidium
parents: 7837
diff changeset
    58
	{      WWT_PANEL,    RESIZE_RTB,    14,     0,   239,    40,   161, 0x0,                     STR_NULL },
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    59
7864
9b1e7d04aafa (svn r10731) -Codechange: allow smaller initial "build <vehicle type>" windows.
rubidium
parents: 7837
diff changeset
    60
	{ WWT_PUSHTXTBTN,     RESIZE_TB,    14,     0,   114,   162,   173, 0x0,                     STR_NULL },
9b1e7d04aafa (svn r10731) -Codechange: allow smaller initial "build <vehicle type>" windows.
rubidium
parents: 7837
diff changeset
    61
	{ WWT_PUSHTXTBTN,    RESIZE_RTB,    14,   115,   227,   162,   173, 0x0,                     STR_NULL },
9b1e7d04aafa (svn r10731) -Codechange: allow smaller initial "build <vehicle type>" windows.
rubidium
parents: 7837
diff changeset
    62
	{  WWT_RESIZEBOX,   RESIZE_LRTB,    14,   228,   239,   162,   173, 0x0,                     STR_RESIZE_BUTTON },
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    63
	{   WIDGETS_END},
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    64
};
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    65
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    66
static bool _internal_sort_order; // descending/ascending
6035
7c56c182a490 (svn r8336) -Codechange: added function to translate vehicle types to 0,1,2... for use for index to arrays
bjarni
parents: 6034
diff changeset
    67
static byte _last_sort_criteria[]    = {0, 0, 0, 0};
7c56c182a490 (svn r8336) -Codechange: added function to translate vehicle types to 0,1,2... for use for index to arrays
bjarni
parents: 6034
diff changeset
    68
static bool _last_sort_order[]       = {false, false, false, false};
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    69
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    70
static int CDECL EngineNumberSorter(const void *a, const void *b)
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    71
{
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    72
	const EngineID va = *(const EngineID*)a;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    73
	const EngineID vb = *(const EngineID*)b;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    74
	int r = va - vb;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    75
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    76
	return _internal_sort_order ? -r : r;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    77
}
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    78
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    79
static int CDECL EngineIntroDateSorter(const void *a, const void *b)
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    80
{
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    81
	const int va = GetEngine(*(const EngineID*)a)->intro_date;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    82
	const int vb = GetEngine(*(const EngineID*)b)->intro_date;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    83
	const int r = va - vb;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    84
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    85
	if (r == 0) {
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    86
		/* Use EngineID to sort instead since we want consistent sorting */
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    87
		return EngineNumberSorter(a, b);
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    88
	}
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    89
	return _internal_sort_order ? -r : r;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    90
}
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    91
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    92
static int CDECL EngineNameSorter(const void *a, const void *b)
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    93
{
4804
74d2003d6f9b (svn r6726) -Codechange: [vehicle build window] cleaned up the name sorter (mainly by peter1138)
bjarni
parents: 4800
diff changeset
    94
	static EngineID last_engine[2] = { INVALID_ENGINE, INVALID_ENGINE };
74d2003d6f9b (svn r6726) -Codechange: [vehicle build window] cleaned up the name sorter (mainly by peter1138)
bjarni
parents: 4800
diff changeset
    95
	static char     last_name[2][64] = { "\0", "\0" };
74d2003d6f9b (svn r6726) -Codechange: [vehicle build window] cleaned up the name sorter (mainly by peter1138)
bjarni
parents: 4800
diff changeset
    96
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    97
	const EngineID va = *(const EngineID*)a;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    98
	const EngineID vb = *(const EngineID*)b;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    99
	int r;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   100
4804
74d2003d6f9b (svn r6726) -Codechange: [vehicle build window] cleaned up the name sorter (mainly by peter1138)
bjarni
parents: 4800
diff changeset
   101
	if (va != last_engine[0]) {
74d2003d6f9b (svn r6726) -Codechange: [vehicle build window] cleaned up the name sorter (mainly by peter1138)
bjarni
parents: 4800
diff changeset
   102
		last_engine[0] = va;
7555
e20900912fa2 (svn r10324) -Codechange: reference engine names by index
peter1138
parents: 7505
diff changeset
   103
		SetDParam(0, va);
e20900912fa2 (svn r10324) -Codechange: reference engine names by index
peter1138
parents: 7505
diff changeset
   104
		GetString(last_name[0], STR_ENGINE_NAME, lastof(last_name[0]));
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   105
	}
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   106
4804
74d2003d6f9b (svn r6726) -Codechange: [vehicle build window] cleaned up the name sorter (mainly by peter1138)
bjarni
parents: 4800
diff changeset
   107
	if (vb != last_engine[1]) {
74d2003d6f9b (svn r6726) -Codechange: [vehicle build window] cleaned up the name sorter (mainly by peter1138)
bjarni
parents: 4800
diff changeset
   108
		last_engine[1] = vb;
7555
e20900912fa2 (svn r10324) -Codechange: reference engine names by index
peter1138
parents: 7505
diff changeset
   109
		SetDParam(0, vb);
e20900912fa2 (svn r10324) -Codechange: reference engine names by index
peter1138
parents: 7505
diff changeset
   110
		GetString(last_name[1], STR_ENGINE_NAME, lastof(last_name[1]));
4804
74d2003d6f9b (svn r6726) -Codechange: [vehicle build window] cleaned up the name sorter (mainly by peter1138)
bjarni
parents: 4800
diff changeset
   111
	}
74d2003d6f9b (svn r6726) -Codechange: [vehicle build window] cleaned up the name sorter (mainly by peter1138)
bjarni
parents: 4800
diff changeset
   112
74d2003d6f9b (svn r6726) -Codechange: [vehicle build window] cleaned up the name sorter (mainly by peter1138)
bjarni
parents: 4800
diff changeset
   113
	r = strcmp(last_name[0], last_name[1]); // sort by name
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   114
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   115
	if (r == 0) {
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   116
		/* Use EngineID to sort instead since we want consistent sorting */
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   117
		return EngineNumberSorter(a, b);
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   118
	}
4804
74d2003d6f9b (svn r6726) -Codechange: [vehicle build window] cleaned up the name sorter (mainly by peter1138)
bjarni
parents: 4800
diff changeset
   119
	return _internal_sort_order ? -r : r;
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   120
}
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   121
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   122
static int CDECL EngineReliabilitySorter(const void *a, const void *b)
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   123
{
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   124
	const int va = GetEngine(*(const EngineID*)a)->reliability;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   125
	const int vb = GetEngine(*(const EngineID*)b)->reliability;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   126
	const int r = va - vb;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   127
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   128
	if (r == 0) {
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   129
		/* Use EngineID to sort instead since we want consistent sorting */
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   130
		return EngineNumberSorter(a, b);
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   131
	}
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   132
	return _internal_sort_order ? -r : r;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   133
}
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   134
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   135
/* Train sorting functions */
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   136
static int CDECL TrainEngineCostSorter(const void *a, const void *b)
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   137
{
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   138
	int va = RailVehInfo(*(const EngineID*)a)->base_cost;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   139
	int vb = RailVehInfo(*(const EngineID*)b)->base_cost;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   140
	int r = va - vb;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   141
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   142
	return _internal_sort_order ? -r : r;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   143
}
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   144
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   145
static int CDECL TrainEngineSpeedSorter(const void *a, const void *b)
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   146
{
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   147
	int va = RailVehInfo(*(const EngineID*)a)->max_speed;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   148
	int vb = RailVehInfo(*(const EngineID*)b)->max_speed;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   149
	int r = va - vb;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   150
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   151
	return _internal_sort_order ? -r : r;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   152
}
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   153
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   154
static int CDECL TrainEnginePowerSorter(const void *a, const void *b)
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   155
{
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   156
	const RailVehicleInfo *rvi_a = RailVehInfo(*(const EngineID*)a);
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   157
	const RailVehicleInfo *rvi_b = RailVehInfo(*(const EngineID*)b);
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   158
10530
d5b0caeac2d7 (svn r13074) -Fix: For multiheaded engines, halve power and running cost when used instead of when loading, to allow callback values to work properly.
peter1138
parents: 10525
diff changeset
   159
	int va = rvi_a->power;
d5b0caeac2d7 (svn r13074) -Fix: For multiheaded engines, halve power and running cost when used instead of when loading, to allow callback values to work properly.
peter1138
parents: 10525
diff changeset
   160
	int vb = rvi_b->power;
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   161
	int r = va - vb;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   162
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   163
	return _internal_sort_order ? -r : r;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   164
}
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   165
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   166
static int CDECL TrainEngineRunningCostSorter(const void *a, const void *b)
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   167
{
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   168
	const RailVehicleInfo *rvi_a = RailVehInfo(*(const EngineID*)a);
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   169
	const RailVehicleInfo *rvi_b = RailVehInfo(*(const EngineID*)b);
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   170
9122
bc3651767850 (svn r12209) -Fix: [NewGRF] Support using any base price for rail and road vehicles' running cost, and show running cost of wagons if they have it.
peter1138
parents: 9118
diff changeset
   171
	Money va = rvi_a->running_cost * GetPriceByIndex(rvi_a->running_cost_class) * (rvi_a->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
bc3651767850 (svn r12209) -Fix: [NewGRF] Support using any base price for rail and road vehicles' running cost, and show running cost of wagons if they have it.
peter1138
parents: 9118
diff changeset
   172
	Money vb = rvi_b->running_cost * GetPriceByIndex(rvi_b->running_cost_class) * (rvi_b->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
7486
d130c10f4dab (svn r10246) -Fix (r10297): some forgotten money conversions and truncation issues. Thanks to benc for providing the patch.
rubidium
parents: 7283
diff changeset
   173
	int r = ClampToI32(va - vb);
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   174
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   175
	return _internal_sort_order ? -r : r;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   176
}
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   177
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   178
static int CDECL TrainEnginePowerVsRunningCostSorter(const void *a, const void *b)
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   179
{
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   180
	const RailVehicleInfo *rvi_a = RailVehInfo(*(const EngineID*)a);
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   181
	const RailVehicleInfo *rvi_b = RailVehInfo(*(const EngineID*)b);
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   182
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   183
	/* Here we are using a few tricks to get the right sort.
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   184
		* We want power/running cost, but since we usually got higher running cost than power and we store the result in an int,
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   185
		* we will actually calculate cunning cost/power (to make it more than 1).
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   186
		* Because of this, the return value have to be reversed as well and we return b - a instead of a - b.
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   187
		* Another thing is that both power and running costs should be doubled for multiheaded engines.
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   188
		* Since it would be multipling with 2 in both numerator and denumerator, it will even themselves out and we skip checking for multiheaded. */
9122
bc3651767850 (svn r12209) -Fix: [NewGRF] Support using any base price for rail and road vehicles' running cost, and show running cost of wagons if they have it.
peter1138
parents: 9118
diff changeset
   189
	Money va = (rvi_a->running_cost * GetPriceByIndex(rvi_a->running_cost_class)) / max(1U, (uint)rvi_a->power);
bc3651767850 (svn r12209) -Fix: [NewGRF] Support using any base price for rail and road vehicles' running cost, and show running cost of wagons if they have it.
peter1138
parents: 9118
diff changeset
   190
	Money vb = (rvi_b->running_cost * GetPriceByIndex(rvi_b->running_cost_class)) / max(1U, (uint)rvi_b->power);
7486
d130c10f4dab (svn r10246) -Fix (r10297): some forgotten money conversions and truncation issues. Thanks to benc for providing the patch.
rubidium
parents: 7283
diff changeset
   191
	int r = ClampToI32(vb - va);
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   192
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   193
	return _internal_sort_order ? -r : r;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   194
}
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   195
6349
c22327023623 (svn r8746) -Regression r8331: build train window could sort incorrectly by EngineID with certain newGRF sets
bjarni
parents: 6206
diff changeset
   196
static int CDECL TrainEngineNumberSorter(const void *a, const void *b)
c22327023623 (svn r8746) -Regression r8331: build train window could sort incorrectly by EngineID with certain newGRF sets
bjarni
parents: 6206
diff changeset
   197
{
c22327023623 (svn r8746) -Regression r8331: build train window could sort incorrectly by EngineID with certain newGRF sets
bjarni
parents: 6206
diff changeset
   198
	const EngineID va = *(const EngineID*)a;
c22327023623 (svn r8746) -Regression r8331: build train window could sort incorrectly by EngineID with certain newGRF sets
bjarni
parents: 6206
diff changeset
   199
	const EngineID vb = *(const EngineID*)b;
c22327023623 (svn r8746) -Regression r8331: build train window could sort incorrectly by EngineID with certain newGRF sets
bjarni
parents: 6206
diff changeset
   200
	int r = ListPositionOfEngine(va) - ListPositionOfEngine(vb);
c22327023623 (svn r8746) -Regression r8331: build train window could sort incorrectly by EngineID with certain newGRF sets
bjarni
parents: 6206
diff changeset
   201
c22327023623 (svn r8746) -Regression r8331: build train window could sort incorrectly by EngineID with certain newGRF sets
bjarni
parents: 6206
diff changeset
   202
	return _internal_sort_order ? -r : r;
c22327023623 (svn r8746) -Regression r8331: build train window could sort incorrectly by EngineID with certain newGRF sets
bjarni
parents: 6206
diff changeset
   203
}
c22327023623 (svn r8746) -Regression r8331: build train window could sort incorrectly by EngineID with certain newGRF sets
bjarni
parents: 6206
diff changeset
   204
7282
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   205
static int CDECL TrainEngineCapacitySorter(const void *a, const void *b)
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   206
{
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   207
	int va = RailVehInfo(*(const EngineID*)a)->capacity;
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   208
	int vb = RailVehInfo(*(const EngineID*)b)->capacity;
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   209
	int r = va - vb;
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   210
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   211
	if (r == 0) {
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   212
		/* Use EngineID to sort instead since we want consistent sorting */
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   213
		return EngineNumberSorter(a, b);
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   214
	}
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   215
	return _internal_sort_order ? -r : r;
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   216
}
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   217
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   218
static int CDECL TrainEnginesThenWagonsSorter(const void *a, const void *b)
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   219
{
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   220
	EngineID va = *(const EngineID*)a;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   221
	EngineID vb = *(const EngineID*)b;
6122
33ce525e85ff (svn r8460) -Fix (r8455): the build train window put locomotives and wagons in appeantly random order
bjarni
parents: 6119
diff changeset
   222
	int val_a = (RailVehInfo(va)->railveh_type == RAILVEH_WAGON ? 1 : 0);
33ce525e85ff (svn r8460) -Fix (r8455): the build train window put locomotives and wagons in appeantly random order
bjarni
parents: 6119
diff changeset
   223
	int val_b = (RailVehInfo(vb)->railveh_type == RAILVEH_WAGON ? 1 : 0);
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   224
	int r = val_a - val_b;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   225
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   226
	/* Use EngineID to sort instead since we want consistent sorting */
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   227
	if (r == 0) return EngineNumberSorter(a, b);
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   228
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   229
	return _internal_sort_order ? -r : r;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   230
}
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   231
8644
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   232
/* Road vehicle sorting functions */
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   233
static int CDECL RoadVehEngineCostSorter(const void *a, const void *b)
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   234
{
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   235
	int va = RoadVehInfo(*(const EngineID*)a)->base_cost;
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   236
	int vb = RoadVehInfo(*(const EngineID*)b)->base_cost;
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   237
	int r = va - vb;
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   238
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   239
	return _internal_sort_order ? -r : r;
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   240
}
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   241
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   242
static int CDECL RoadVehEngineSpeedSorter(const void *a, const void *b)
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   243
{
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   244
	int va = RoadVehInfo(*(const EngineID*)a)->max_speed;
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   245
	int vb = RoadVehInfo(*(const EngineID*)b)->max_speed;
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   246
	int r = va - vb;
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   247
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   248
	return _internal_sort_order ? -r : r;
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   249
}
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   250
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   251
static int CDECL RoadVehEngineRunningCostSorter(const void *a, const void *b)
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   252
{
9122
bc3651767850 (svn r12209) -Fix: [NewGRF] Support using any base price for rail and road vehicles' running cost, and show running cost of wagons if they have it.
peter1138
parents: 9118
diff changeset
   253
	const RoadVehicleInfo *rvi_a = RoadVehInfo(*(const EngineID*)a);
bc3651767850 (svn r12209) -Fix: [NewGRF] Support using any base price for rail and road vehicles' running cost, and show running cost of wagons if they have it.
peter1138
parents: 9118
diff changeset
   254
	const RoadVehicleInfo *rvi_b = RoadVehInfo(*(const EngineID*)b);
bc3651767850 (svn r12209) -Fix: [NewGRF] Support using any base price for rail and road vehicles' running cost, and show running cost of wagons if they have it.
peter1138
parents: 9118
diff changeset
   255
bc3651767850 (svn r12209) -Fix: [NewGRF] Support using any base price for rail and road vehicles' running cost, and show running cost of wagons if they have it.
peter1138
parents: 9118
diff changeset
   256
	Money va = rvi_a->running_cost * GetPriceByIndex(rvi_a->running_cost_class);
bc3651767850 (svn r12209) -Fix: [NewGRF] Support using any base price for rail and road vehicles' running cost, and show running cost of wagons if they have it.
peter1138
parents: 9118
diff changeset
   257
	Money vb = rvi_b->running_cost * GetPriceByIndex(rvi_b->running_cost_class);
bc3651767850 (svn r12209) -Fix: [NewGRF] Support using any base price for rail and road vehicles' running cost, and show running cost of wagons if they have it.
peter1138
parents: 9118
diff changeset
   258
	int r = ClampToI32(va - vb);
8644
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   259
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   260
	if (r == 0) {
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   261
		/* Use EngineID to sort instead since we want consistent sorting */
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   262
		return EngineNumberSorter(a, b);
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   263
	}
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   264
	return _internal_sort_order ? -r : r;
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   265
}
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   266
7282
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   267
static int CDECL RoadVehEngineCapacitySorter(const void *a, const void *b)
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   268
{
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   269
	int va = RoadVehInfo(*(const EngineID*)a)->capacity;
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   270
	int vb = RoadVehInfo(*(const EngineID*)b)->capacity;
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   271
	int r = va - vb;
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   272
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   273
	if (r == 0) {
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   274
		/* Use EngineID to sort instead since we want consistent sorting */
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   275
		return EngineNumberSorter(a, b);
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   276
	}
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   277
	return _internal_sort_order ? -r : r;
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   278
}
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   279
8644
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   280
/* Road vehicle sorting functions */
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   281
static int CDECL ShipEngineCostSorter(const void *a, const void *b)
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   282
{
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   283
	int va = ShipVehInfo(*(const EngineID*)a)->base_cost;
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   284
	int vb = ShipVehInfo(*(const EngineID*)b)->base_cost;
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   285
	int r = va - vb;
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   286
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   287
	return _internal_sort_order ? -r : r;
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   288
}
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   289
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   290
static int CDECL ShipEngineSpeedSorter(const void *a, const void *b)
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   291
{
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   292
	int va = ShipVehInfo(*(const EngineID*)a)->max_speed;
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   293
	int vb = ShipVehInfo(*(const EngineID*)b)->max_speed;
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   294
	int r = va - vb;
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   295
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   296
	return _internal_sort_order ? -r : r;
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   297
}
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   298
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   299
static int CDECL ShipEngineRunningCostSorter(const void *a, const void *b)
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   300
{
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   301
	const int va = ShipVehInfo(*(const EngineID*)a)->running_cost;
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   302
	const int vb = ShipVehInfo(*(const EngineID*)b)->running_cost;
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   303
	const int r = va - vb;
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   304
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   305
	if (r == 0) {
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   306
		/* Use EngineID to sort instead since we want consistent sorting */
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   307
		return EngineNumberSorter(a, b);
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   308
	}
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   309
	return _internal_sort_order ? -r : r;
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   310
}
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   311
7282
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   312
static int CDECL ShipEngineCapacitySorter(const void *a, const void *b)
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   313
{
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   314
	int va = ShipVehInfo(*(const EngineID*)a)->capacity;
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   315
	int vb = ShipVehInfo(*(const EngineID*)b)->capacity;
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   316
	int r = va - vb;
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   317
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   318
	if (r == 0) {
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   319
		/* Use EngineID to sort instead since we want consistent sorting */
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   320
		return EngineNumberSorter(a, b);
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   321
	}
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   322
	return _internal_sort_order ? -r : r;
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   323
}
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   324
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   325
/* Aircraft sorting functions */
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   326
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   327
static int CDECL AircraftEngineCostSorter(const void *a, const void *b)
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   328
{
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   329
	const int va = AircraftVehInfo(*(const EngineID*)a)->base_cost;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   330
	const int vb = AircraftVehInfo(*(const EngineID*)b)->base_cost;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   331
	int r = va - vb;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   332
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   333
	return _internal_sort_order ? -r : r;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   334
}
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   335
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   336
static int CDECL AircraftEngineSpeedSorter(const void *a, const void *b)
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   337
{
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   338
	const int va = AircraftVehInfo(*(const EngineID*)a)->max_speed;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   339
	const int vb = AircraftVehInfo(*(const EngineID*)b)->max_speed;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   340
	const int r = va - vb;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   341
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   342
	if (r == 0) {
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   343
		/* Use EngineID to sort instead since we want consistent sorting */
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   344
		return EngineNumberSorter(a, b);
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   345
	}
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   346
	return _internal_sort_order ? -r : r;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   347
}
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   348
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   349
static int CDECL AircraftEngineRunningCostSorter(const void *a, const void *b)
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   350
{
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   351
	const int va = AircraftVehInfo(*(const EngineID*)a)->running_cost;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   352
	const int vb = AircraftVehInfo(*(const EngineID*)b)->running_cost;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   353
	const int r = va - vb;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   354
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   355
	if (r == 0) {
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   356
		/* Use EngineID to sort instead since we want consistent sorting */
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   357
		return EngineNumberSorter(a, b);
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   358
	}
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   359
	return _internal_sort_order ? -r : r;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   360
}
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   361
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   362
static int CDECL AircraftEngineCargoSorter(const void *a, const void *b)
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   363
{
7283
3f3b3828b412 (svn r10025) -Fix: [build windows] sorting planes for capacity didn't check mail capacity. Now mail capacity is used if passenger capacity is the same
bjarni
parents: 7282
diff changeset
   364
	int va = AircraftVehInfo(*(const EngineID*)a)->passenger_capacity;
3f3b3828b412 (svn r10025) -Fix: [build windows] sorting planes for capacity didn't check mail capacity. Now mail capacity is used if passenger capacity is the same
bjarni
parents: 7282
diff changeset
   365
	int vb = AircraftVehInfo(*(const EngineID*)b)->passenger_capacity;
3f3b3828b412 (svn r10025) -Fix: [build windows] sorting planes for capacity didn't check mail capacity. Now mail capacity is used if passenger capacity is the same
bjarni
parents: 7282
diff changeset
   366
	int r = va - vb;
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   367
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   368
	if (r == 0) {
7283
3f3b3828b412 (svn r10025) -Fix: [build windows] sorting planes for capacity didn't check mail capacity. Now mail capacity is used if passenger capacity is the same
bjarni
parents: 7282
diff changeset
   369
		/* The planes has the same passenger capacity. Check mail capacity instead */
3f3b3828b412 (svn r10025) -Fix: [build windows] sorting planes for capacity didn't check mail capacity. Now mail capacity is used if passenger capacity is the same
bjarni
parents: 7282
diff changeset
   370
		va = AircraftVehInfo(*(const EngineID*)a)->mail_capacity;
3f3b3828b412 (svn r10025) -Fix: [build windows] sorting planes for capacity didn't check mail capacity. Now mail capacity is used if passenger capacity is the same
bjarni
parents: 7282
diff changeset
   371
		vb = AircraftVehInfo(*(const EngineID*)b)->mail_capacity;
3f3b3828b412 (svn r10025) -Fix: [build windows] sorting planes for capacity didn't check mail capacity. Now mail capacity is used if passenger capacity is the same
bjarni
parents: 7282
diff changeset
   372
		r = va - vb;
3f3b3828b412 (svn r10025) -Fix: [build windows] sorting planes for capacity didn't check mail capacity. Now mail capacity is used if passenger capacity is the same
bjarni
parents: 7282
diff changeset
   373
3f3b3828b412 (svn r10025) -Fix: [build windows] sorting planes for capacity didn't check mail capacity. Now mail capacity is used if passenger capacity is the same
bjarni
parents: 7282
diff changeset
   374
		if (r == 0) {
3f3b3828b412 (svn r10025) -Fix: [build windows] sorting planes for capacity didn't check mail capacity. Now mail capacity is used if passenger capacity is the same
bjarni
parents: 7282
diff changeset
   375
			/* Use EngineID to sort instead since we want consistent sorting */
3f3b3828b412 (svn r10025) -Fix: [build windows] sorting planes for capacity didn't check mail capacity. Now mail capacity is used if passenger capacity is the same
bjarni
parents: 7282
diff changeset
   376
			return EngineNumberSorter(a, b);
3f3b3828b412 (svn r10025) -Fix: [build windows] sorting planes for capacity didn't check mail capacity. Now mail capacity is used if passenger capacity is the same
bjarni
parents: 7282
diff changeset
   377
		}
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   378
	}
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   379
	return _internal_sort_order ? -r : r;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   380
}
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   381
7282
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   382
static EngList_SortTypeFunction * const _sorter[][10] = {{
6041
c1c8b674d756 (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 6038
diff changeset
   383
	/* Trains */
6349
c22327023623 (svn r8746) -Regression r8331: build train window could sort incorrectly by EngineID with certain newGRF sets
bjarni
parents: 6206
diff changeset
   384
	&TrainEngineNumberSorter,
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   385
	&TrainEngineCostSorter,
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   386
	&TrainEngineSpeedSorter,
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   387
	&TrainEnginePowerSorter,
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   388
	&EngineIntroDateSorter,
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   389
	&EngineNameSorter,
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   390
	&TrainEngineRunningCostSorter,
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   391
	&TrainEnginePowerVsRunningCostSorter,
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   392
	&EngineReliabilitySorter,
7282
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   393
	&TrainEngineCapacitySorter,
6987
b0f13039bda2 (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6712
diff changeset
   394
}, {
6041
c1c8b674d756 (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 6038
diff changeset
   395
	/* Road vehicles */
6036
2775343bd5d5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 6035
diff changeset
   396
	&EngineNumberSorter,
8644
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   397
	&RoadVehEngineCostSorter,
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   398
	&RoadVehEngineSpeedSorter,
6036
2775343bd5d5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 6035
diff changeset
   399
	&EngineIntroDateSorter,
2775343bd5d5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 6035
diff changeset
   400
	&EngineNameSorter,
8644
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   401
	&RoadVehEngineRunningCostSorter,
6036
2775343bd5d5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 6035
diff changeset
   402
	&EngineReliabilitySorter,
7282
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   403
	&RoadVehEngineCapacitySorter,
6987
b0f13039bda2 (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6712
diff changeset
   404
}, {
6041
c1c8b674d756 (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 6038
diff changeset
   405
	/* Ships */
6036
2775343bd5d5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 6035
diff changeset
   406
	&EngineNumberSorter,
8644
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   407
	&ShipEngineCostSorter,
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   408
	&ShipEngineSpeedSorter,
6036
2775343bd5d5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 6035
diff changeset
   409
	&EngineIntroDateSorter,
2775343bd5d5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 6035
diff changeset
   410
	&EngineNameSorter,
8644
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   411
	&ShipEngineRunningCostSorter,
6036
2775343bd5d5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 6035
diff changeset
   412
	&EngineReliabilitySorter,
7282
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   413
	&ShipEngineCapacitySorter,
6987
b0f13039bda2 (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6712
diff changeset
   414
}, {
6041
c1c8b674d756 (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 6038
diff changeset
   415
	/* Aircraft */
6036
2775343bd5d5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 6035
diff changeset
   416
	&EngineNumberSorter,
2775343bd5d5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 6035
diff changeset
   417
	&AircraftEngineCostSorter,
2775343bd5d5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 6035
diff changeset
   418
	&AircraftEngineSpeedSorter,
2775343bd5d5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 6035
diff changeset
   419
	&EngineIntroDateSorter,
2775343bd5d5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 6035
diff changeset
   420
	&EngineNameSorter,
2775343bd5d5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 6035
diff changeset
   421
	&AircraftEngineRunningCostSorter,
2775343bd5d5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 6035
diff changeset
   422
	&EngineReliabilitySorter,
2775343bd5d5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 6035
diff changeset
   423
	&AircraftEngineCargoSorter,
2775343bd5d5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 6035
diff changeset
   424
}};
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   425
7282
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   426
static const StringID _sort_listing[][11] = {{
6041
c1c8b674d756 (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 6038
diff changeset
   427
	/* Trains */
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   428
	STR_ENGINE_SORT_ENGINE_ID,
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   429
	STR_ENGINE_SORT_COST,
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   430
	STR_SORT_BY_MAX_SPEED,
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   431
	STR_ENGINE_SORT_POWER,
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   432
	STR_ENGINE_SORT_INTRO_DATE,
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   433
	STR_SORT_BY_DROPDOWN_NAME,
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   434
	STR_ENGINE_SORT_RUNNING_COST,
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   435
	STR_ENGINE_SORT_POWER_VS_RUNNING_COST,
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   436
	STR_SORT_BY_RELIABILITY,
7282
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   437
	STR_ENGINE_SORT_CARGO_CAPACITY,
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   438
	INVALID_STRING_ID
6987
b0f13039bda2 (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6712
diff changeset
   439
}, {
6041
c1c8b674d756 (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 6038
diff changeset
   440
	/* Road vehicles */
6034
89a7d10fa75b (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 6033
diff changeset
   441
	STR_ENGINE_SORT_ENGINE_ID,
8644
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   442
	STR_ENGINE_SORT_COST,
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   443
	STR_SORT_BY_MAX_SPEED,
6034
89a7d10fa75b (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 6033
diff changeset
   444
	STR_ENGINE_SORT_INTRO_DATE,
89a7d10fa75b (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 6033
diff changeset
   445
	STR_SORT_BY_DROPDOWN_NAME,
8644
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   446
	STR_ENGINE_SORT_RUNNING_COST,
6034
89a7d10fa75b (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 6033
diff changeset
   447
	STR_SORT_BY_RELIABILITY,
7282
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   448
	STR_ENGINE_SORT_CARGO_CAPACITY,
6034
89a7d10fa75b (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 6033
diff changeset
   449
	INVALID_STRING_ID
6987
b0f13039bda2 (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6712
diff changeset
   450
}, {
6041
c1c8b674d756 (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 6038
diff changeset
   451
	/* Ships */
6036
2775343bd5d5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 6035
diff changeset
   452
	STR_ENGINE_SORT_ENGINE_ID,
8644
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   453
	STR_ENGINE_SORT_COST,
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   454
	STR_SORT_BY_MAX_SPEED,
6036
2775343bd5d5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 6035
diff changeset
   455
	STR_ENGINE_SORT_INTRO_DATE,
2775343bd5d5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 6035
diff changeset
   456
	STR_SORT_BY_DROPDOWN_NAME,
8644
7c12bf33e220 (svn r11710) -Feature: [build vehicles windows] added sorting for cost, running costs and speed to road vehicles and ships build windows
bjarni
parents: 8640
diff changeset
   457
	STR_ENGINE_SORT_RUNNING_COST,
6036
2775343bd5d5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 6035
diff changeset
   458
	STR_SORT_BY_RELIABILITY,
7282
e8bb56823496 (svn r10024) -Feature: [build windows] trains, road vehicles and ships can now be sorted by cargo capacity (planes already had this option)
bjarni
parents: 7268
diff changeset
   459
	STR_ENGINE_SORT_CARGO_CAPACITY,
6036
2775343bd5d5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 6035
diff changeset
   460
	INVALID_STRING_ID
6987
b0f13039bda2 (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6712
diff changeset
   461
}, {
6041
c1c8b674d756 (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 6038
diff changeset
   462
	/* Aircraft */
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   463
	STR_ENGINE_SORT_ENGINE_ID,
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   464
	STR_ENGINE_SORT_COST,
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   465
	STR_SORT_BY_MAX_SPEED,
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   466
	STR_ENGINE_SORT_INTRO_DATE,
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   467
	STR_SORT_BY_DROPDOWN_NAME,
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   468
	STR_ENGINE_SORT_RUNNING_COST,
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   469
	STR_SORT_BY_RELIABILITY,
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   470
	STR_ENGINE_SORT_CARGO_CAPACITY,
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   471
	INVALID_STRING_ID
6036
2775343bd5d5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 6035
diff changeset
   472
}};
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   473
9055
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   474
static int DrawCargoCapacityInfo(int x, int y, EngineID engine, VehicleType type, bool refittable)
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   475
{
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   476
	uint16 *cap = GetCapacityOfArticulatedParts(engine, type);
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   477
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   478
	for (uint c = 0; c < NUM_CARGO; c++) {
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   479
		if (cap[c] == 0) continue;
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   480
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   481
		SetDParam(0, c);
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   482
		SetDParam(1, cap[c]);
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   483
		SetDParam(2, refittable ? STR_9842_REFITTABLE : STR_EMPTY);
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   484
		DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, TC_FROMSTRING);
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   485
		y += 10;
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   486
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   487
		/* Only show as refittable once */
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   488
		refittable = false;
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   489
	}
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   490
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   491
	return y;
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   492
}
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   493
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   494
/* Draw rail wagon specific details */
6068
286d4dfa1d39 (svn r8379) -Cleanup: [build vehicle window] removed overloading with DrawVehiclePurchaseInfo() and renamed them into type specific names
bjarni
parents: 6067
diff changeset
   495
static int DrawRailWagonPurchaseInfo(int x, int y, EngineID engine_number, const RailVehicleInfo *rvi)
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   496
{
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   497
	/* Purchase cost */
7498
ce6588257e8d (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: 7487
diff changeset
   498
	SetDParam(0, (GetEngineProperty(engine_number, 0x17, rvi->base_cost) * _price.build_railwagon) >> 8);
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8259
diff changeset
   499
	DrawString(x, y, STR_PURCHASE_INFO_COST, TC_FROMSTRING);
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   500
	y += 10;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   501
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   502
	/* Wagon weight - (including cargo) */
7091
ebc570e995c4 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 7088
diff changeset
   503
	uint weight = GetEngineProperty(engine_number, 0x16, rvi->weight);
ebc570e995c4 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 7088
diff changeset
   504
	SetDParam(0, weight);
7104
59f24cd8470b (svn r9828) -Codechange: [NewGRF] Add support for changing cargo capacity with callback 36. This is set on construction for ships and roadvehicles, and whenever carriages are attached for trains.
peter1138
parents: 7091
diff changeset
   505
	SetDParam(1, (GetCargo(rvi->cargo_type)->weight * GetEngineProperty(engine_number, 0x14, rvi->capacity) >> 4) + weight);
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8259
diff changeset
   506
	DrawString(x, y, STR_PURCHASE_INFO_WEIGHT_CWEIGHT, TC_FROMSTRING);
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   507
	y += 10;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   508
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   509
	/* Wagon speed limit, displayed if above zero */
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10764
diff changeset
   510
	if (_settings_game.vehicle.wagon_speed_limits) {
7091
ebc570e995c4 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 7088
diff changeset
   511
		uint max_speed = GetEngineProperty(engine_number, 0x09, rvi->max_speed);
ebc570e995c4 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 7088
diff changeset
   512
		if (max_speed > 0) {
ebc570e995c4 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 7088
diff changeset
   513
			SetDParam(0, max_speed * 10 / 16);
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8259
diff changeset
   514
			DrawString(x, y, STR_PURCHASE_INFO_SPEED, TC_FROMSTRING);
7091
ebc570e995c4 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 7088
diff changeset
   515
			y += 10;
ebc570e995c4 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 7088
diff changeset
   516
		}
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   517
	}
9122
bc3651767850 (svn r12209) -Fix: [NewGRF] Support using any base price for rail and road vehicles' running cost, and show running cost of wagons if they have it.
peter1138
parents: 9118
diff changeset
   518
bc3651767850 (svn r12209) -Fix: [NewGRF] Support using any base price for rail and road vehicles' running cost, and show running cost of wagons if they have it.
peter1138
parents: 9118
diff changeset
   519
	/* Running cost */
bc3651767850 (svn r12209) -Fix: [NewGRF] Support using any base price for rail and road vehicles' running cost, and show running cost of wagons if they have it.
peter1138
parents: 9118
diff changeset
   520
	if (rvi->running_cost_class != 0xFF) {
bc3651767850 (svn r12209) -Fix: [NewGRF] Support using any base price for rail and road vehicles' running cost, and show running cost of wagons if they have it.
peter1138
parents: 9118
diff changeset
   521
		SetDParam(0, GetEngineProperty(engine_number, 0x0D, rvi->running_cost) * GetPriceByIndex(rvi->running_cost_class) >> 8);
bc3651767850 (svn r12209) -Fix: [NewGRF] Support using any base price for rail and road vehicles' running cost, and show running cost of wagons if they have it.
peter1138
parents: 9118
diff changeset
   522
		DrawString(x, y, STR_PURCHASE_INFO_RUNNINGCOST, TC_FROMSTRING);
bc3651767850 (svn r12209) -Fix: [NewGRF] Support using any base price for rail and road vehicles' running cost, and show running cost of wagons if they have it.
peter1138
parents: 9118
diff changeset
   523
		y += 10;
bc3651767850 (svn r12209) -Fix: [NewGRF] Support using any base price for rail and road vehicles' running cost, and show running cost of wagons if they have it.
peter1138
parents: 9118
diff changeset
   524
	}
bc3651767850 (svn r12209) -Fix: [NewGRF] Support using any base price for rail and road vehicles' running cost, and show running cost of wagons if they have it.
peter1138
parents: 9118
diff changeset
   525
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   526
	return y;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   527
}
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   528
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   529
/* Draw locomotive specific details */
6074
e70d63ef4d62 (svn r8385) -Fix
tron
parents: 6073
diff changeset
   530
static int DrawRailEnginePurchaseInfo(int x, int y, EngineID engine_number, const RailVehicleInfo *rvi)
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   531
{
6119
b47985557d1e (svn r8455) -Codechange: Give a more meaningful name (railveh_type)to member flags of RailVehInfo, as well as changing the code to reflect the fact that it was not a flag but rather a one value only variable. Doing so, some evaluations have been simplified.
belugas
parents: 6075
diff changeset
   532
	int multihead = (rvi->railveh_type == RAILVEH_MULTIHEAD ? 1 : 0);
7091
ebc570e995c4 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 7088
diff changeset
   533
	uint weight = GetEngineProperty(engine_number, 0x16, rvi->weight);
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   534
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   535
	/* Purchase Cost - Engine weight */
7498
ce6588257e8d (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: 7487
diff changeset
   536
	SetDParam(0, GetEngineProperty(engine_number, 0x17, rvi->base_cost) * (_price.build_railvehicle >> 3) >> 5);
7091
ebc570e995c4 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 7088
diff changeset
   537
	SetDParam(1, weight << multihead);
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8259
diff changeset
   538
	DrawString(x, y, STR_PURCHASE_INFO_COST_WEIGHT, TC_FROMSTRING);
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   539
	y += 10;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   540
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   541
	/* Max speed - Engine power */
7091
ebc570e995c4 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 7088
diff changeset
   542
	SetDParam(0, GetEngineProperty(engine_number, 0x09, rvi->max_speed) * 10 / 16);
10530
d5b0caeac2d7 (svn r13074) -Fix: For multiheaded engines, halve power and running cost when used instead of when loading, to allow callback values to work properly.
peter1138
parents: 10525
diff changeset
   543
	SetDParam(1, GetEngineProperty(engine_number, 0x0B, rvi->power));
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8259
diff changeset
   544
	DrawString(x, y, STR_PURCHASE_INFO_SPEED_POWER, TC_FROMSTRING);
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   545
	y += 10;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   546
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   547
	/* Max tractive effort - not applicable if old acceleration or maglev */
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10764
diff changeset
   548
	if (_settings_game.vehicle.realistic_acceleration && rvi->railtype != RAILTYPE_MAGLEV) {
7091
ebc570e995c4 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 7088
diff changeset
   549
		SetDParam(0, ((weight << multihead) * 10 * GetEngineProperty(engine_number, 0x1F, rvi->tractive_effort)) / 256);
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8259
diff changeset
   550
		DrawString(x, y, STR_PURCHASE_INFO_MAX_TE, TC_FROMSTRING);
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   551
		y += 10;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   552
	}
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   553
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   554
	/* Running cost */
9122
bc3651767850 (svn r12209) -Fix: [NewGRF] Support using any base price for rail and road vehicles' running cost, and show running cost of wagons if they have it.
peter1138
parents: 9118
diff changeset
   555
	if (rvi->running_cost_class != 0xFF) {
10530
d5b0caeac2d7 (svn r13074) -Fix: For multiheaded engines, halve power and running cost when used instead of when loading, to allow callback values to work properly.
peter1138
parents: 10525
diff changeset
   556
		SetDParam(0, GetEngineProperty(engine_number, 0x0D, rvi->running_cost) * GetPriceByIndex(rvi->running_cost_class) >> 8);
9122
bc3651767850 (svn r12209) -Fix: [NewGRF] Support using any base price for rail and road vehicles' running cost, and show running cost of wagons if they have it.
peter1138
parents: 9118
diff changeset
   557
		DrawString(x, y, STR_PURCHASE_INFO_RUNNINGCOST, TC_FROMSTRING);
bc3651767850 (svn r12209) -Fix: [NewGRF] Support using any base price for rail and road vehicles' running cost, and show running cost of wagons if they have it.
peter1138
parents: 9118
diff changeset
   558
		y += 10;
bc3651767850 (svn r12209) -Fix: [NewGRF] Support using any base price for rail and road vehicles' running cost, and show running cost of wagons if they have it.
peter1138
parents: 9118
diff changeset
   559
	}
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   560
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   561
	/* Powered wagons power - Powered wagons extra weight */
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   562
	if (rvi->pow_wag_power != 0) {
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   563
		SetDParam(0, rvi->pow_wag_power);
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   564
		SetDParam(1, rvi->pow_wag_weight);
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8259
diff changeset
   565
		DrawString(x, y, STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT, TC_FROMSTRING);
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   566
		y += 10;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   567
	};
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   568
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   569
	return y;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   570
}
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   571
6037
7409c8f581e1 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 6036
diff changeset
   572
/* Draw road vehicle specific details */
6068
286d4dfa1d39 (svn r8379) -Cleanup: [build vehicle window] removed overloading with DrawVehiclePurchaseInfo() and renamed them into type specific names
bjarni
parents: 6067
diff changeset
   573
static int DrawRoadVehPurchaseInfo(int x, int y, EngineID engine_number, const RoadVehicleInfo *rvi)
6037
7409c8f581e1 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 6036
diff changeset
   574
{
7769
33ec8ba894ef (svn r10603) -Codechange: avoid direct access to _engine_info
peter1138
parents: 7754
diff changeset
   575
	bool refittable = (EngInfo(engine_number)->refit_mask != 0);
6037
7409c8f581e1 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 6036
diff changeset
   576
7409c8f581e1 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 6036
diff changeset
   577
	/* Purchase cost - Max speed */
7498
ce6588257e8d (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: 7487
diff changeset
   578
	SetDParam(0, GetEngineProperty(engine_number, 0x11, rvi->base_cost) * (_price.roadveh_base >> 3) >> 5);
6125
492a1c0440af (svn r8464) -Revert (r4322): Change back to converting to mph in the GUI code, as 1 mph == 1.6 km/h is too far out for some people.
peter1138
parents: 6122
diff changeset
   579
	SetDParam(1, rvi->max_speed * 10 / 32);
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8259
diff changeset
   580
	DrawString(x, y, STR_PURCHASE_INFO_COST_SPEED, TC_FROMSTRING);
6037
7409c8f581e1 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 6036
diff changeset
   581
	y += 10;
7409c8f581e1 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 6036
diff changeset
   582
7409c8f581e1 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 6036
diff changeset
   583
	/* Running cost */
9122
bc3651767850 (svn r12209) -Fix: [NewGRF] Support using any base price for rail and road vehicles' running cost, and show running cost of wagons if they have it.
peter1138
parents: 9118
diff changeset
   584
	SetDParam(0, rvi->running_cost * GetPriceByIndex(rvi->running_cost_class) >> 8);
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8259
diff changeset
   585
	DrawString(x, y, STR_PURCHASE_INFO_RUNNINGCOST, TC_FROMSTRING);
6037
7409c8f581e1 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 6036
diff changeset
   586
	y += 10;
7409c8f581e1 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 6036
diff changeset
   587
7409c8f581e1 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 6036
diff changeset
   588
	/* Cargo type + capacity */
9055
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   589
	return DrawCargoCapacityInfo(x, y, engine_number, VEH_ROAD, refittable);
6037
7409c8f581e1 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 6036
diff changeset
   590
}
7409c8f581e1 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 6036
diff changeset
   591
6034
89a7d10fa75b (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 6033
diff changeset
   592
/* Draw ship specific details */
6068
286d4dfa1d39 (svn r8379) -Cleanup: [build vehicle window] removed overloading with DrawVehiclePurchaseInfo() and renamed them into type specific names
bjarni
parents: 6067
diff changeset
   593
static int DrawShipPurchaseInfo(int x, int y, EngineID engine_number, const ShipVehicleInfo *svi)
6034
89a7d10fa75b (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 6033
diff changeset
   594
{
89a7d10fa75b (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 6033
diff changeset
   595
	/* Purchase cost - Max speed */
7498
ce6588257e8d (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: 7487
diff changeset
   596
	SetDParam(0, GetEngineProperty(engine_number, 0x0A, svi->base_cost) * (_price.ship_base >> 3) >> 5);
7091
ebc570e995c4 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 7088
diff changeset
   597
	SetDParam(1, GetEngineProperty(engine_number, 0x0B, svi->max_speed) * 10 / 32);
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8259
diff changeset
   598
	DrawString(x, y, STR_PURCHASE_INFO_COST_SPEED, TC_FROMSTRING);
6034
89a7d10fa75b (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 6033
diff changeset
   599
	y += 10;
89a7d10fa75b (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 6033
diff changeset
   600
89a7d10fa75b (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 6033
diff changeset
   601
	/* Cargo type + capacity */
89a7d10fa75b (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 6033
diff changeset
   602
	SetDParam(0, svi->cargo_type);
7104
59f24cd8470b (svn r9828) -Codechange: [NewGRF] Add support for changing cargo capacity with callback 36. This is set on construction for ships and roadvehicles, and whenever carriages are attached for trains.
peter1138
parents: 7091
diff changeset
   603
	SetDParam(1, GetEngineProperty(engine_number, 0x0D, svi->capacity));
6034
89a7d10fa75b (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 6033
diff changeset
   604
	SetDParam(2, svi->refittable ? STR_9842_REFITTABLE : STR_EMPTY);
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8259
diff changeset
   605
	DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, TC_FROMSTRING);
6034
89a7d10fa75b (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 6033
diff changeset
   606
	y += 10;
89a7d10fa75b (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 6033
diff changeset
   607
89a7d10fa75b (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 6033
diff changeset
   608
	/* Running cost */
7498
ce6588257e8d (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: 7487
diff changeset
   609
	SetDParam(0, GetEngineProperty(engine_number, 0x0F, svi->running_cost) * _price.ship_running >> 8);
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8259
diff changeset
   610
	DrawString(x, y, STR_PURCHASE_INFO_RUNNINGCOST, TC_FROMSTRING);
6034
89a7d10fa75b (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 6033
diff changeset
   611
	y += 10;
89a7d10fa75b (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 6033
diff changeset
   612
89a7d10fa75b (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 6033
diff changeset
   613
	return y;
89a7d10fa75b (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 6033
diff changeset
   614
}
89a7d10fa75b (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 6033
diff changeset
   615
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   616
/* Draw aircraft specific details */
6068
286d4dfa1d39 (svn r8379) -Cleanup: [build vehicle window] removed overloading with DrawVehiclePurchaseInfo() and renamed them into type specific names
bjarni
parents: 6067
diff changeset
   617
static int DrawAircraftPurchaseInfo(int x, int y, EngineID engine_number, const AircraftVehicleInfo *avi)
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   618
{
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   619
	CargoID cargo;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   620
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   621
	/* Purchase cost - Max speed */
7498
ce6588257e8d (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: 7487
diff changeset
   622
	SetDParam(0, GetEngineProperty(engine_number, 0x0B, avi->base_cost) * (_price.aircraft_base >> 3) >> 5);
6519
367d6f96e23f (svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents: 6449
diff changeset
   623
	SetDParam(1, avi->max_speed * 10 / 16);
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8259
diff changeset
   624
	DrawString(x, y, STR_PURCHASE_INFO_COST_SPEED, TC_FROMSTRING);
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   625
	y += 10;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   626
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   627
	/* Cargo capacity */
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   628
	cargo = FindFirstRefittableCargo(engine_number);
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   629
	if (cargo == CT_INVALID || cargo == CT_PASSENGERS) {
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   630
		SetDParam(0, avi->passenger_capacity);
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   631
		SetDParam(1, avi->mail_capacity);
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8259
diff changeset
   632
		DrawString(x, y, STR_PURCHASE_INFO_AIRCRAFT_CAPACITY, TC_FROMSTRING);
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   633
	} else {
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   634
		/* Note, if the default capacity is selected by the refit capacity
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   635
		* callback, then the capacity shown is likely to be incorrect. */
4896
72d7a8614580 (svn r6855) - Codechange: When displaying a "quantity of cargo" string, use the {CARGO} command and supply the cargo type and quantity, instead of manually looking up the cargo type's string.
peter1138
parents: 4807
diff changeset
   636
		SetDParam(0, cargo);
6413
3d660a812fbd (svn r8822) -Fix
tron
parents: 6383
diff changeset
   637
		SetDParam(1, AircraftDefaultCargoCapacity(cargo, avi));
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   638
		SetDParam(2, STR_9842_REFITTABLE);
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8259
diff changeset
   639
		DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, TC_FROMSTRING);
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   640
	}
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   641
	y += 10;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   642
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   643
	/* Running cost */
7498
ce6588257e8d (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: 7487
diff changeset
   644
	SetDParam(0, GetEngineProperty(engine_number, 0x0E, avi->running_cost) * _price.aircraft_running >> 8);
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8259
diff changeset
   645
	DrawString(x, y, STR_PURCHASE_INFO_RUNNINGCOST, TC_FROMSTRING);
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   646
	y += 10;
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   647
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   648
	return y;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   649
}
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   650
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   651
/**
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   652
 * Draw the purchase info details of a vehicle at a given location.
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   653
 * @param x,y location where to draw the info
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   654
 * @param w how wide are the text allowed to be (size of widget/window to Draw in)
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   655
 * @param engine_number the engine of which to draw the info of
6711
02a4b7b630bc (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6710
diff changeset
   656
 * @return y after drawing all the text
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   657
 */
6711
02a4b7b630bc (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6710
diff changeset
   658
int DrawVehiclePurchaseInfo(int x, int y, uint w, EngineID engine_number)
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   659
{
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   660
	const Engine *e = GetEngine(engine_number);
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   661
	YearMonthDay ymd;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   662
	ConvertDateToYMD(e->intro_date, &ymd);
6041
c1c8b674d756 (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 6038
diff changeset
   663
	bool refitable = false;
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   664
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   665
	switch (e->type) {
7134
c5a90dd41166 (svn r9869) -Codechange: replace some bytes with VehicleType, i.e. more type strictness.
rubidium
parents: 7104
diff changeset
   666
		default: NOT_REACHED();
6585
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6563
diff changeset
   667
		case VEH_TRAIN: {
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   668
			const RailVehicleInfo *rvi = RailVehInfo(engine_number);
7104
59f24cd8470b (svn r9828) -Codechange: [NewGRF] Add support for changing cargo capacity with callback 36. This is set on construction for ships and roadvehicles, and whenever carriages are attached for trains.
peter1138
parents: 7091
diff changeset
   669
			uint capacity = GetEngineProperty(engine_number, 0x14, rvi->capacity);
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   670
9079
cd6e8c7ebcb7 (svn r12164) -Fix (r12137, FS#1775]: Variable scope bug crept in
peter1138
parents: 9055
diff changeset
   671
			refitable = (EngInfo(engine_number)->refit_mask != 0) && (capacity > 0);
6070
e5a6d7b94c63 (svn r8381) -Fix (r8377): [build vehicle window] cleaned up the train refitable detection. It had two variables doing the same thing, but not always set to the same (oops)
bjarni
parents: 6068
diff changeset
   672
6119
b47985557d1e (svn r8455) -Codechange: Give a more meaningful name (railveh_type)to member flags of RailVehInfo, as well as changing the code to reflect the fact that it was not a flag but rather a one value only variable. Doing so, some evaluations have been simplified.
belugas
parents: 6075
diff changeset
   673
			if (rvi->railveh_type == RAILVEH_WAGON) {
6068
286d4dfa1d39 (svn r8379) -Cleanup: [build vehicle window] removed overloading with DrawVehiclePurchaseInfo() and renamed them into type specific names
bjarni
parents: 6067
diff changeset
   674
				y = DrawRailWagonPurchaseInfo(x, y, engine_number, rvi);
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   675
			} else {
6074
e70d63ef4d62 (svn r8385) -Fix
tron
parents: 6073
diff changeset
   676
				y = DrawRailEnginePurchaseInfo(x, y, engine_number, rvi);
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   677
			}
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   678
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   679
			/* Cargo type + capacity, or N/A */
9055
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   680
			int new_y = DrawCargoCapacityInfo(x, y, engine_number, VEH_TRAIN, refitable);
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   681
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   682
			if (new_y == y) {
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   683
				SetDParam(0, CT_INVALID);
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   684
				SetDParam(2, STR_EMPTY);
9055
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   685
				DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, TC_FROMSTRING);
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   686
				y += 10;
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   687
			} else {
9055
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   688
				y = new_y;
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   689
			}
9055
386250fe46b2 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
peter1138
parents: 8975
diff changeset
   690
			break;
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   691
		}
6585
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6563
diff changeset
   692
		case VEH_ROAD:
6068
286d4dfa1d39 (svn r8379) -Cleanup: [build vehicle window] removed overloading with DrawVehiclePurchaseInfo() and renamed them into type specific names
bjarni
parents: 6067
diff changeset
   693
			y = DrawRoadVehPurchaseInfo(x, y, engine_number, RoadVehInfo(engine_number));
6041
c1c8b674d756 (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 6038
diff changeset
   694
			refitable = true;
6037
7409c8f581e1 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 6036
diff changeset
   695
			break;
6585
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6563
diff changeset
   696
		case VEH_SHIP: {
6041
c1c8b674d756 (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 6038
diff changeset
   697
			const ShipVehicleInfo *svi = ShipVehInfo(engine_number);
6068
286d4dfa1d39 (svn r8379) -Cleanup: [build vehicle window] removed overloading with DrawVehiclePurchaseInfo() and renamed them into type specific names
bjarni
parents: 6067
diff changeset
   698
			y = DrawShipPurchaseInfo(x, y, engine_number, svi);
6041
c1c8b674d756 (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 6038
diff changeset
   699
			refitable = svi->refittable;
c1c8b674d756 (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 6038
diff changeset
   700
		} break;
6585
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6563
diff changeset
   701
		case VEH_AIRCRAFT:
6068
286d4dfa1d39 (svn r8379) -Cleanup: [build vehicle window] removed overloading with DrawVehiclePurchaseInfo() and renamed them into type specific names
bjarni
parents: 6067
diff changeset
   702
			y = DrawAircraftPurchaseInfo(x, y, engine_number, AircraftVehInfo(engine_number));
6041
c1c8b674d756 (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 6038
diff changeset
   703
			refitable = true;
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   704
			break;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   705
	}
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   706
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   707
	/* Draw details, that applies to all types except rail wagons */
6585
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6563
diff changeset
   708
	if (e->type != VEH_TRAIN || RailVehInfo(engine_number)->railveh_type != RAILVEH_WAGON) {
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   709
		/* Design date - Life length */
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   710
		SetDParam(0, ymd.year);
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   711
		SetDParam(1, e->lifelength);
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8259
diff changeset
   712
		DrawString(x, y, STR_PURCHASE_INFO_DESIGNED_LIFE, TC_FROMSTRING);
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   713
		y += 10;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   714
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   715
		/* Reliability */
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   716
		SetDParam(0, e->reliability * 100 >> 16);
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8259
diff changeset
   717
		DrawString(x, y, STR_PURCHASE_INFO_RELIABILITY, TC_FROMSTRING);
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   718
		y += 10;
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
   719
	}
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   720
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   721
	/* Additional text from NewGRF */
4930
fd91a88d6ef6 (svn r6910) - Codechange: Supply width of area when drawing purchase info instead of using hardcoded values. (mart3p)
peter1138
parents: 4912
diff changeset
   722
	y += ShowAdditionalText(x, y, w, engine_number);
6041
c1c8b674d756 (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 6038
diff changeset
   723
	if (refitable) y += ShowRefitOptionsList(x, y, w, engine_number);
6711
02a4b7b630bc (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6710
diff changeset
   724
02a4b7b630bc (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6710
diff changeset
   725
	return y;
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   726
}
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   727
8975
303deb99982d (svn r12054) -Cleanup: Use VehicleType instead of byte for vehicle types...
peter1138
parents: 8914
diff changeset
   728
static void DrawVehicleEngine(VehicleType type, int x, int y, EngineID engine, SpriteID pal)
6051
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   729
{
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   730
	switch (type) {
6585
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6563
diff changeset
   731
		case VEH_TRAIN:    DrawTrainEngine(   x, y, engine, pal); break;
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6563
diff changeset
   732
		case VEH_ROAD:     DrawRoadVehEngine( x, y, engine, pal); break;
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6563
diff changeset
   733
		case VEH_SHIP:     DrawShipEngine(    x, y, engine, pal); break;
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6563
diff changeset
   734
		case VEH_AIRCRAFT: DrawAircraftEngine(x, y, engine, pal); break;
6051
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   735
		default: NOT_REACHED();
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   736
	}
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   737
}
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   738
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   739
/** Engine drawing loop
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   740
 * @param type Type of vehicle (VEH_*)
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   741
 * @param x,y Where should the list start
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   742
 * @param eng_list What engines to draw
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   743
 * @param min where to start in the list
6053
bec24ee21ccb (svn r8364) -Codechange (r8362): added an assert to catch conditions where a request wants to draw more vehicles than the list contains
bjarni
parents: 6051
diff changeset
   744
 * @param max where in the list to end
6051
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   745
 * @param selected_id what engine to highlight as selected, if any
10302
f24c62a9927c (svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents: 10222
diff changeset
   746
 * @param count_location Offset to print the engine count (used by autoreplace). 0 means it's off
6051
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   747
 */
10764
e46596b87826 (svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents: 10756
diff changeset
   748
void DrawEngineList(VehicleType type, int x, int y, const GUIEngineList *eng_list, uint16 min, uint16 max, EngineID selected_id, int count_location, GroupID selected_group)
6051
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   749
{
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   750
	byte step_size = GetVehicleListHeight(type);
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   751
	byte x_offset = 0;
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   752
	byte y_offset = 0;
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   753
10764
e46596b87826 (svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents: 10756
diff changeset
   754
	assert(max <= eng_list->Length());
6053
bec24ee21ccb (svn r8364) -Codechange (r8362): added an assert to catch conditions where a request wants to draw more vehicles than the list contains
bjarni
parents: 6051
diff changeset
   755
6051
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   756
	switch (type) {
6585
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6563
diff changeset
   757
		case VEH_TRAIN:
6051
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   758
			x++; // train and road vehicles use the same offset, except trains are one more pixel to the right
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   759
			/* Fallthough */
6585
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6563
diff changeset
   760
		case VEH_ROAD:
6051
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   761
			x += 26;
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   762
			x_offset = 30;
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   763
			y += 2;
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   764
			y_offset = 4;
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   765
			break;
6585
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6563
diff changeset
   766
		case VEH_SHIP:
6051
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   767
			x += 35;
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   768
			x_offset = 40;
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   769
			y += 7;
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   770
			y_offset = 3;
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   771
			break;
6585
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6563
diff changeset
   772
		case VEH_AIRCRAFT:
6051
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   773
			x += 27;
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   774
			x_offset = 33;
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   775
			y += 7;
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   776
			y_offset = 3;
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   777
			break;
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   778
		default: NOT_REACHED();
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   779
	}
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   780
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   781
	for (; min < max; min++, y += step_size) {
10756
5392e3de5700 (svn r13306) -Fix (r8362): Pass engine list by pointer instead of making a copy of it.
peter1138
parents: 10737
diff changeset
   782
		const EngineID engine = (*eng_list)[min];
7977
b10b1a884892 (svn r10992) -Fix [FS#1132]: huge amount of vehicles in the "ungrouped" group. Patch by frosch.
rubidium
parents: 7864
diff changeset
   783
		/* Note: num_engines is only used in the autoreplace GUI, so it is correct to use _local_player here. */
b10b1a884892 (svn r10992) -Fix [FS#1132]: huge amount of vehicles in the "ungrouped" group. Patch by frosch.
rubidium
parents: 7864
diff changeset
   784
		const uint num_engines = GetGroupNumEngines(_local_player, selected_group, engine);
6051
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   785
7555
e20900912fa2 (svn r10324) -Codechange: reference engine names by index
peter1138
parents: 7505
diff changeset
   786
		SetDParam(0, engine);
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8259
diff changeset
   787
		DrawString(x + x_offset, y, STR_ENGINE_NAME, engine == selected_id ? TC_WHITE : TC_BLACK);
10302
f24c62a9927c (svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents: 10222
diff changeset
   788
		DrawVehicleEngine(type, x, y + y_offset, engine, (count_location != 0 && num_engines == 0) ? PALETTE_CRASH : GetEnginePalette(engine, _local_player));
f24c62a9927c (svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents: 10222
diff changeset
   789
		if (count_location != 0) {
7139
4ae3ab180d05 (svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents: 7134
diff changeset
   790
			SetDParam(0, num_engines);
10302
f24c62a9927c (svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents: 10222
diff changeset
   791
			DrawStringRightAligned(count_location, y + (GetVehicleListHeight(type) == 14 ? 3 : 8), STR_TINY_BLACK, TC_FROMSTRING);
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   792
		}
6051
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   793
	}
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   794
}
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   795
8834
ef15cacd6894 (svn r11904) -Codechange: use dropdown widget in 3 more windows, build vehicle, group vehicle list and station list.
peter1138
parents: 8780
diff changeset
   796
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   797
struct BuildVehicleWindow : Window {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   798
	VehicleType vehicle_type;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   799
	union {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   800
		RailTypeByte railtype;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   801
		AirportFTAClass::Flags flags;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   802
		RoadTypes roadtypes;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   803
	} filter;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   804
	bool descending_sort_order;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   805
	byte sort_criteria;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   806
	bool regenerate_list;
11138
7a4428077a35 (svn r13696) -Fix[GUI]: The Build button of the vehicle list is now hidden, instead of just disabled. It will be only visible when called from the Depot Building Window.
belugas
parents: 11136
diff changeset
   807
	bool listview_mode;
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   808
	EngineID sel_engine;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   809
	EngineID rename_engine;
10764
e46596b87826 (svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents: 10756
diff changeset
   810
	GUIEngineList eng_list;
6037
7409c8f581e1 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 6036
diff changeset
   811
10525
da5bc725cda4 (svn r13069) -Codechange: it is no longer needed to pass a void *data pointer with the WE_CREATE message because nothing uses it anymore.
rubidium
parents: 10524
diff changeset
   812
	BuildVehicleWindow(const WindowDesc *desc, TileIndex tile, VehicleType type) : Window(desc, tile == 0 ? (int)type : tile)
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   813
	{
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   814
		this->vehicle_type = type;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   815
		int vlh = GetVehicleListHeight(this->vehicle_type);
6711
02a4b7b630bc (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6710
diff changeset
   816
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   817
		ResizeWindow(this, 0, vlh - 14);
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   818
		this->resize.step_height = vlh;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   819
		this->vscroll.cap = 1;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   820
		this->widget[BUILD_VEHICLE_WIDGET_LIST].data = 0x101;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   821
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   822
		this->resize.width  = this->width;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   823
		this->resize.height = this->height;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   824
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   825
		this->caption_color = (tile != 0) ? GetTileOwner(tile) : _local_player;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   826
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   827
		this->sel_engine      = INVALID_ENGINE;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   828
		this->regenerate_list = false;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   829
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   830
		this->sort_criteria         = _last_sort_criteria[type];
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   831
		this->descending_sort_order = _last_sort_order[type];
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   832
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   833
		switch (type) {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   834
			default: NOT_REACHED();
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   835
			case VEH_TRAIN:
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   836
				this->filter.railtype = (tile == 0) ? RAILTYPE_END : GetRailType(tile);
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   837
				break;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   838
			case VEH_ROAD:
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   839
				this->filter.roadtypes = (tile == 0) ? ROADTYPES_ALL : GetRoadTypes(tile);
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   840
			case VEH_SHIP:
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   841
				break;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   842
			case VEH_AIRCRAFT:
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   843
				this->filter.flags =
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   844
					tile == 0 ? AirportFTAClass::ALL : GetStationByTile(tile)->Airport()->flags;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   845
				break;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   846
		}
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   847
		this->SetupWindowStrings(type);
11138
7a4428077a35 (svn r13696) -Fix[GUI]: The Build button of the vehicle list is now hidden, instead of just disabled. It will be only visible when called from the Depot Building Window.
belugas
parents: 11136
diff changeset
   848
7a4428077a35 (svn r13696) -Fix[GUI]: The Build button of the vehicle list is now hidden, instead of just disabled. It will be only visible when called from the Depot Building Window.
belugas
parents: 11136
diff changeset
   849
		this->listview_mode = (this->window_number <= VEH_END);
7a4428077a35 (svn r13696) -Fix[GUI]: The Build button of the vehicle list is now hidden, instead of just disabled. It will be only visible when called from the Depot Building Window.
belugas
parents: 11136
diff changeset
   850
		/* If we are just viewing the list of vehicles, we do not need the Build button.
7a4428077a35 (svn r13696) -Fix[GUI]: The Build button of the vehicle list is now hidden, instead of just disabled. It will be only visible when called from the Depot Building Window.
belugas
parents: 11136
diff changeset
   851
		 * So we just hide it, and enlarge the Rename buton by the now vacant place. */
7a4428077a35 (svn r13696) -Fix[GUI]: The Build button of the vehicle list is now hidden, instead of just disabled. It will be only visible when called from the Depot Building Window.
belugas
parents: 11136
diff changeset
   852
		if (this->listview_mode) {
7a4428077a35 (svn r13696) -Fix[GUI]: The Build button of the vehicle list is now hidden, instead of just disabled. It will be only visible when called from the Depot Building Window.
belugas
parents: 11136
diff changeset
   853
			this->HideWidget(BUILD_VEHICLE_WIDGET_BUILD);
7a4428077a35 (svn r13696) -Fix[GUI]: The Build button of the vehicle list is now hidden, instead of just disabled. It will be only visible when called from the Depot Building Window.
belugas
parents: 11136
diff changeset
   854
			this->widget[BUILD_VEHICLE_WIDGET_RENAME].left = this->widget[BUILD_VEHICLE_WIDGET_BUILD].left;
7a4428077a35 (svn r13696) -Fix[GUI]: The Build button of the vehicle list is now hidden, instead of just disabled. It will be only visible when called from the Depot Building Window.
belugas
parents: 11136
diff changeset
   855
		} else {
7a4428077a35 (svn r13696) -Fix[GUI]: The Build button of the vehicle list is now hidden, instead of just disabled. It will be only visible when called from the Depot Building Window.
belugas
parents: 11136
diff changeset
   856
			/* Both are visible, adjust the size of each */
7a4428077a35 (svn r13696) -Fix[GUI]: The Build button of the vehicle list is now hidden, instead of just disabled. It will be only visible when called from the Depot Building Window.
belugas
parents: 11136
diff changeset
   857
			ResizeButtons(this, BUILD_VEHICLE_WIDGET_BUILD, BUILD_VEHICLE_WIDGET_RENAME);
7a4428077a35 (svn r13696) -Fix[GUI]: The Build button of the vehicle list is now hidden, instead of just disabled. It will be only visible when called from the Depot Building Window.
belugas
parents: 11136
diff changeset
   858
		}
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   859
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   860
		this->GenerateBuildList(); // generate the list, since we need it in the next line
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   861
		/* Select the first engine in the list as default when opening the window */
10764
e46596b87826 (svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents: 10756
diff changeset
   862
		if (this->eng_list.Length() > 0) this->sel_engine = this->eng_list[0];
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   863
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   864
		this->FindWindowPlacementAndResize(desc);
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   865
	}
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   866
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   867
	/* Setup widget strings to fit the different types of vehicles */
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   868
	void SetupWindowStrings(VehicleType type)
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   869
	{
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   870
		switch (type) {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   871
			default: NOT_REACHED();
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   872
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   873
			case VEH_TRAIN:
11138
7a4428077a35 (svn r13696) -Fix[GUI]: The Build button of the vehicle list is now hidden, instead of just disabled. It will be only visible when called from the Depot Building Window.
belugas
parents: 11136
diff changeset
   874
				this->widget[BUILD_VEHICLE_WIDGET_CAPTION].data    = this->listview_mode ? STR_AVAILABLE_TRAINS : STR_JUST_STRING;
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   875
				this->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips   = STR_8843_TRAIN_VEHICLE_SELECTION;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   876
				this->widget[BUILD_VEHICLE_WIDGET_BUILD].data      = STR_881F_BUILD_VEHICLE;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   877
				this->widget[BUILD_VEHICLE_WIDGET_BUILD].tooltips  = STR_8844_BUILD_THE_HIGHLIGHTED_TRAIN;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   878
				this->widget[BUILD_VEHICLE_WIDGET_RENAME].data     = STR_8820_RENAME;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   879
				this->widget[BUILD_VEHICLE_WIDGET_RENAME].tooltips = STR_8845_RENAME_TRAIN_VEHICLE_TYPE;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   880
				break;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   881
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   882
			case VEH_ROAD:
11138
7a4428077a35 (svn r13696) -Fix[GUI]: The Build button of the vehicle list is now hidden, instead of just disabled. It will be only visible when called from the Depot Building Window.
belugas
parents: 11136
diff changeset
   883
				this->widget[BUILD_VEHICLE_WIDGET_CAPTION].data    = this->listview_mode ? STR_AVAILABLE_ROAD_VEHICLES : STR_9006_NEW_ROAD_VEHICLES;
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   884
				this->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips   = STR_9026_ROAD_VEHICLE_SELECTION;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   885
				this->widget[BUILD_VEHICLE_WIDGET_BUILD].data      = STR_9007_BUILD_VEHICLE;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   886
				this->widget[BUILD_VEHICLE_WIDGET_BUILD].tooltips  = STR_9027_BUILD_THE_HIGHLIGHTED_ROAD;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   887
				this->widget[BUILD_VEHICLE_WIDGET_RENAME].data     = STR_9034_RENAME;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   888
				this->widget[BUILD_VEHICLE_WIDGET_RENAME].tooltips = STR_9035_RENAME_ROAD_VEHICLE_TYPE;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   889
				break;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   890
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   891
			case VEH_SHIP:
11138
7a4428077a35 (svn r13696) -Fix[GUI]: The Build button of the vehicle list is now hidden, instead of just disabled. It will be only visible when called from the Depot Building Window.
belugas
parents: 11136
diff changeset
   892
				this->widget[BUILD_VEHICLE_WIDGET_CAPTION].data    = this->listview_mode ? STR_AVAILABLE_SHIPS : STR_9808_NEW_SHIPS;
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   893
				this->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips   = STR_9825_SHIP_SELECTION_LIST_CLICK;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   894
				this->widget[BUILD_VEHICLE_WIDGET_BUILD].data      = STR_9809_BUILD_SHIP;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   895
				this->widget[BUILD_VEHICLE_WIDGET_BUILD].tooltips  = STR_9826_BUILD_THE_HIGHLIGHTED_SHIP;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   896
				this->widget[BUILD_VEHICLE_WIDGET_RENAME].data     = STR_9836_RENAME;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   897
				this->widget[BUILD_VEHICLE_WIDGET_RENAME].tooltips = STR_9837_RENAME_SHIP_TYPE;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   898
				break;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   899
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   900
			case VEH_AIRCRAFT:
11138
7a4428077a35 (svn r13696) -Fix[GUI]: The Build button of the vehicle list is now hidden, instead of just disabled. It will be only visible when called from the Depot Building Window.
belugas
parents: 11136
diff changeset
   901
				this->widget[BUILD_VEHICLE_WIDGET_CAPTION].data    = this->listview_mode ? STR_AVAILABLE_AIRCRAFT : STR_A005_NEW_AIRCRAFT;
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   902
				this->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips   = STR_A025_AIRCRAFT_SELECTION_LIST;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   903
				this->widget[BUILD_VEHICLE_WIDGET_BUILD].data      = STR_A006_BUILD_AIRCRAFT;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   904
				this->widget[BUILD_VEHICLE_WIDGET_BUILD].tooltips  = STR_A026_BUILD_THE_HIGHLIGHTED_AIRCRAFT;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   905
				this->widget[BUILD_VEHICLE_WIDGET_RENAME].data     = STR_A037_RENAME;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   906
				this->widget[BUILD_VEHICLE_WIDGET_RENAME].tooltips = STR_A038_RENAME_AIRCRAFT_TYPE;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   907
				break;
8914
6ebaa4b4eb2b (svn r11988) -Codechange: Add a generic way of changing a widget's size and adjust the widgets around it to suit.
peter1138
parents: 8885
diff changeset
   908
		}
6051
3fdc90c44643 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 6041
diff changeset
   909
	}
6034
89a7d10fa75b (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 6033
diff changeset
   910
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   911
	/* Figure out what train EngineIDs to put in the list */
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   912
	void GenerateBuildTrainList()
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   913
	{
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   914
		EngineID sel_id = INVALID_ENGINE;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   915
		int num_engines = 0;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   916
		int num_wagons  = 0;
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   917
11138
7a4428077a35 (svn r13696) -Fix[GUI]: The Build button of the vehicle list is now hidden, instead of just disabled. It will be only visible when called from the Depot Building Window.
belugas
parents: 11136
diff changeset
   918
		this->filter.railtype = (this->listview_mode) ? RAILTYPE_END : GetRailType(this->window_number);
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   919
10764
e46596b87826 (svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents: 10756
diff changeset
   920
		this->eng_list.Clear();
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   921
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   922
		/* Make list of all available train engines and wagons.
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   923
		* Also check to see if the previously selected engine is still available,
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   924
		* and if not, reset selection to INVALID_ENGINE. This could be the case
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   925
		* when engines become obsolete and are removed */
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   926
		const Engine *e;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   927
		FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   928
			EngineID eid = e->index;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   929
			const RailVehicleInfo *rvi = &e->u.rail;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   930
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   931
			if (this->filter.railtype != RAILTYPE_END && !HasPowerOnRail(rvi->railtype, this->filter.railtype)) continue;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   932
			if (!IsEngineBuildable(eid, VEH_TRAIN, _local_player)) continue;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   933
10764
e46596b87826 (svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents: 10756
diff changeset
   934
			*this->eng_list.Append() = eid;
e46596b87826 (svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents: 10756
diff changeset
   935
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   936
			if (rvi->railveh_type != RAILVEH_WAGON) {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   937
				num_engines++;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   938
			} else {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   939
				num_wagons++;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   940
			}
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   941
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   942
			if (eid == this->sel_engine) sel_id = eid;
5187
d1f4e447a7eb (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   943
		}
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   944
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   945
		this->sel_engine = sel_id;
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   946
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   947
		/* make engines first, and then wagons, sorted by ListPositionOfEngine() */
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   948
		_internal_sort_order = false;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   949
		EngList_Sort(&this->eng_list, TrainEnginesThenWagonsSorter);
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   950
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   951
		/* and then sort engines */
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   952
		_internal_sort_order = this->descending_sort_order;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   953
		EngList_SortPartial(&this->eng_list, _sorter[0][this->sort_criteria], 0, num_engines);
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   954
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   955
		/* and finally sort wagons */
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   956
		EngList_SortPartial(&this->eng_list, _sorter[0][this->sort_criteria], num_engines, num_wagons);
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   957
	}
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   958
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   959
	/* Figure out what road vehicle EngineIDs to put in the list */
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   960
	void GenerateBuildRoadVehList()
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   961
	{
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   962
		EngineID sel_id = INVALID_ENGINE;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   963
10764
e46596b87826 (svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents: 10756
diff changeset
   964
		this->eng_list.Clear();
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   965
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   966
		const Engine *e;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   967
		FOR_ALL_ENGINES_OF_TYPE(e, VEH_ROAD) {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   968
			EngineID eid = e->index;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   969
			if (!IsEngineBuildable(eid, VEH_ROAD, _local_player)) continue;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   970
			if (!HasBit(this->filter.roadtypes, HasBit(EngInfo(eid)->misc_flags, EF_ROAD_TRAM) ? ROADTYPE_TRAM : ROADTYPE_ROAD)) continue;
10764
e46596b87826 (svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents: 10756
diff changeset
   971
			*this->eng_list.Append() = eid;
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   972
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   973
			if (eid == this->sel_engine) sel_id = eid;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   974
		}
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   975
		this->sel_engine = sel_id;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   976
	}
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   977
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   978
	/* Figure out what ship EngineIDs to put in the list */
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   979
	void GenerateBuildShipList()
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   980
	{
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   981
		EngineID sel_id = INVALID_ENGINE;
10764
e46596b87826 (svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents: 10756
diff changeset
   982
		this->eng_list.Clear();
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   983
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   984
		const Engine *e;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   985
		FOR_ALL_ENGINES_OF_TYPE(e, VEH_SHIP) {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   986
			EngineID eid = e->index;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   987
			if (!IsEngineBuildable(eid, VEH_SHIP, _local_player)) continue;
10764
e46596b87826 (svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents: 10756
diff changeset
   988
			*this->eng_list.Append() = eid;
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   989
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   990
			if (eid == this->sel_engine) sel_id = eid;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   991
		}
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   992
		this->sel_engine = sel_id;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   993
	}
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   994
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   995
	/* Figure out what aircraft EngineIDs to put in the list */
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   996
	void GenerateBuildAircraftList()
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   997
	{
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   998
		EngineID sel_id = INVALID_ENGINE;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
   999
10764
e46596b87826 (svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents: 10756
diff changeset
  1000
		this->eng_list.Clear();
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1001
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1002
		/* Make list of all available planes.
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1003
		* Also check to see if the previously selected plane is still available,
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1004
		* and if not, reset selection to INVALID_ENGINE. This could be the case
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1005
		* when planes become obsolete and are removed */
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1006
		const Engine *e;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1007
		FOR_ALL_ENGINES_OF_TYPE(e, VEH_AIRCRAFT) {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1008
			EngineID eid = e->index;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1009
			if (!IsEngineBuildable(eid, VEH_AIRCRAFT, _local_player)) continue;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1010
			/* First VEH_END window_numbers are fake to allow a window open for all different types at once */
11138
7a4428077a35 (svn r13696) -Fix[GUI]: The Build button of the vehicle list is now hidden, instead of just disabled. It will be only visible when called from the Depot Building Window.
belugas
parents: 11136
diff changeset
  1011
			if (!this->listview_mode && !CanAircraftUseStation(eid, this->window_number)) continue;
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1012
10764
e46596b87826 (svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents: 10756
diff changeset
  1013
			*this->eng_list.Append() = eid;
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1014
			if (eid == this->sel_engine) sel_id = eid;
5187
d1f4e447a7eb (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
  1015
		}
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
  1016
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1017
		this->sel_engine = sel_id;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1018
	}
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
  1019
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1020
	/* Generate the list of vehicles */
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1021
	void GenerateBuildList()
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1022
	{
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1023
		switch (this->vehicle_type) {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1024
			default: NOT_REACHED();
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1025
			case VEH_TRAIN:
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1026
				this->GenerateBuildTrainList();
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1027
				return; // trains should not reach the last sorting
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1028
			case VEH_ROAD:
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1029
				this->GenerateBuildRoadVehList();
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1030
				break;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1031
			case VEH_SHIP:
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1032
				this->GenerateBuildShipList();
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1033
				break;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1034
			case VEH_AIRCRAFT:
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1035
				this->GenerateBuildAircraftList();
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1036
				break;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1037
		}
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1038
		_internal_sort_order = this->descending_sort_order;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1039
		EngList_Sort(&this->eng_list, _sorter[this->vehicle_type][this->sort_criteria]);
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1040
	}
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1041
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1042
	void OnClick(Point pt, int widget)
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1043
	{
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1044
		switch (widget) {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1045
			case BUILD_VEHICLE_WIDGET_SORT_ASSENDING_DESCENDING:
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1046
				this->descending_sort_order ^= true;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1047
				_last_sort_order[this->vehicle_type] = this->descending_sort_order;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1048
				this->regenerate_list = true;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1049
				this->SetDirty();
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1050
				break;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1051
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1052
			case BUILD_VEHICLE_WIDGET_LIST: {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1053
				uint i = (pt.y - this->widget[BUILD_VEHICLE_WIDGET_LIST].top) / GetVehicleListHeight(this->vehicle_type) + this->vscroll.pos;
10764
e46596b87826 (svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents: 10756
diff changeset
  1054
				size_t num_items = this->eng_list.Length();
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1055
				this->sel_engine = (i < num_items) ? this->eng_list[i] : INVALID_ENGINE;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1056
				this->SetDirty();
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1057
				break;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1058
			}
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1059
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1060
			case BUILD_VEHICLE_WIDGET_SORT_DROPDOWN: // Select sorting criteria dropdown menu
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1061
				ShowDropDownMenu(this, _sort_listing[this->vehicle_type], this->sort_criteria, BUILD_VEHICLE_WIDGET_SORT_DROPDOWN, 0, 0);
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1062
				break;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1063
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1064
			case BUILD_VEHICLE_WIDGET_BUILD: {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1065
				EngineID sel_eng = this->sel_engine;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1066
				if (sel_eng != INVALID_ENGINE) {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1067
					switch (this->vehicle_type) {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1068
						default: NOT_REACHED();
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1069
						case VEH_TRAIN:
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1070
							DoCommandP(this->window_number, sel_eng, 0, (RailVehInfo(sel_eng)->railveh_type == RAILVEH_WAGON) ? CcBuildWagon : CcBuildLoco,
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1071
										CMD_BUILD_RAIL_VEHICLE | CMD_MSG(STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE));
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1072
							break;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1073
						case VEH_ROAD:
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1074
							DoCommandP(this->window_number, sel_eng, 0, CcBuildRoadVeh, CMD_BUILD_ROAD_VEH | CMD_MSG(STR_9009_CAN_T_BUILD_ROAD_VEHICLE));
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1075
							break;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1076
						case VEH_SHIP:
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1077
							DoCommandP(this->window_number, sel_eng, 0, CcBuildShip, CMD_BUILD_SHIP | CMD_MSG(STR_980D_CAN_T_BUILD_SHIP));
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1078
							break;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1079
						case VEH_AIRCRAFT:
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1080
							DoCommandP(this->window_number, sel_eng, 0, CcBuildAircraft, CMD_BUILD_AIRCRAFT | CMD_MSG(STR_A008_CAN_T_BUILD_AIRCRAFT));
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1081
							break;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1082
					}
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
  1083
				}
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1084
				break;
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
  1085
			}
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1086
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1087
			case BUILD_VEHICLE_WIDGET_RENAME: {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1088
				EngineID sel_eng = this->sel_engine;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1089
				if (sel_eng != INVALID_ENGINE) {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1090
					StringID str = STR_NULL;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1091
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1092
					this->rename_engine = sel_eng;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1093
					switch (this->vehicle_type) {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1094
						default: NOT_REACHED();
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1095
						case VEH_TRAIN:    str = STR_886A_RENAME_TRAIN_VEHICLE_TYPE; break;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1096
						case VEH_ROAD:     str = STR_9036_RENAME_ROAD_VEHICLE_TYPE;  break;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1097
						case VEH_SHIP:     str = STR_9838_RENAME_SHIP_TYPE;          break;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1098
						case VEH_AIRCRAFT: str = STR_A039_RENAME_AIRCRAFT_TYPE;      break;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1099
					}
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1100
					SetDParam(0, sel_eng);
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1101
					ShowQueryString(STR_ENGINE_NAME, str, 31, 160, this, CS_ALPHANUMERAL);
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1102
				}
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1103
				break;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1104
			}
5187
d1f4e447a7eb (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
  1105
		}
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
  1106
	}
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
  1107
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1108
	virtual void OnInvalidateData(int data)
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1109
	{
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1110
		this->regenerate_list = true;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1111
	}
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
  1112
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1113
	virtual void OnPaint()
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1114
	{
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1115
		if (this->regenerate_list) {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1116
			this->regenerate_list = false;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1117
			this->GenerateBuildList();
5187
d1f4e447a7eb (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
  1118
		}
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
  1119
10764
e46596b87826 (svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents: 10756
diff changeset
  1120
		uint max = min(this->vscroll.pos + this->vscroll.cap, this->eng_list.Length());
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
  1121
10764
e46596b87826 (svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents: 10756
diff changeset
  1122
		SetVScrollCount(this, this->eng_list.Length());
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1123
		SetDParam(0, this->filter.railtype + STR_881C_NEW_RAIL_VEHICLES); // This should only affect rail vehicles
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1124
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1125
		/* Set text of sort by dropdown */
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1126
		this->widget[BUILD_VEHICLE_WIDGET_SORT_DROPDOWN].data = _sort_listing[this->vehicle_type][this->sort_criteria];
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1127
10595
7957c71b0dfe (svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium
parents: 10530
diff changeset
  1128
		this->DrawWidgets();
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1129
10756
5392e3de5700 (svn r13306) -Fix (r8362): Pass engine list by pointer instead of making a copy of it.
peter1138
parents: 10737
diff changeset
  1130
		DrawEngineList(this->vehicle_type, this->widget[BUILD_VEHICLE_WIDGET_LIST].left + 2, this->widget[BUILD_VEHICLE_WIDGET_LIST].top + 1, &this->eng_list, this->vscroll.pos, max, this->sel_engine, 0, DEFAULT_GROUP);
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1131
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1132
		if (this->sel_engine != INVALID_ENGINE) {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1133
			const Widget *wi = &this->widget[BUILD_VEHICLE_WIDGET_PANEL];
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1134
			int text_end = DrawVehiclePurchaseInfo(2, wi->top + 1, wi->right - wi->left - 2, this->sel_engine);
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1135
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1136
			if (text_end > wi->bottom) {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1137
				this->SetDirty();
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1138
				ResizeWindowForWidget(this, BUILD_VEHICLE_WIDGET_PANEL, 0, text_end - wi->bottom);
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1139
				this->SetDirty();
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1140
			}
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1141
		}
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1142
10595
7957c71b0dfe (svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium
parents: 10530
diff changeset
  1143
		this->DrawSortButtonState(BUILD_VEHICLE_WIDGET_SORT_ASSENDING_DESCENDING, this->descending_sort_order ? SBS_DOWN : SBS_UP);
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
  1144
	}
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1145
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1146
	virtual void OnDoubleClick(Point pt, int widget)
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1147
	{
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1148
		if (widget == BUILD_VEHICLE_WIDGET_LIST) {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1149
			/* When double clicking, we want to buy a vehicle */
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1150
			this->OnClick(pt, BUILD_VEHICLE_WIDGET_BUILD);
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1151
		}
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1152
	}
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1153
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1154
	virtual void OnQueryTextFinished(char *str)
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1155
	{
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1156
		if (!StrEmpty(str)) {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1157
			StringID err_str = STR_NULL;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1158
			_cmd_text = str;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1159
			switch (this->vehicle_type) {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1160
				default: NOT_REACHED();
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1161
				case VEH_TRAIN:    err_str = STR_886B_CAN_T_RENAME_TRAIN_VEHICLE; break;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1162
				case VEH_ROAD:     err_str = STR_9037_CAN_T_RENAME_ROAD_VEHICLE;  break;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1163
				case VEH_SHIP:     err_str = STR_9839_CAN_T_RENAME_SHIP_TYPE;     break;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1164
				case VEH_AIRCRAFT: err_str = STR_A03A_CAN_T_RENAME_AIRCRAFT_TYPE; break;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1165
			}
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1166
			DoCommandP(0, this->rename_engine, 0, NULL, CMD_RENAME_ENGINE | CMD_MSG(err_str));
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1167
		}
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1168
	}
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1169
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1170
	virtual void OnDropdownSelect(int widget, int index)
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1171
	{
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1172
		if (this->sort_criteria != index) {
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1173
			this->sort_criteria = index;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1174
			_last_sort_criteria[this->vehicle_type] = this->sort_criteria;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1175
			this->regenerate_list = true;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1176
		}
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1177
		this->SetDirty();
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1178
	}
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1179
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1180
	virtual void OnResize(Point new_size, Point delta)
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1181
	{
11138
7a4428077a35 (svn r13696) -Fix[GUI]: The Build button of the vehicle list is now hidden, instead of just disabled. It will be only visible when called from the Depot Building Window.
belugas
parents: 11136
diff changeset
  1182
		if (delta.x != 0 && !this->listview_mode) {
7a4428077a35 (svn r13696) -Fix[GUI]: The Build button of the vehicle list is now hidden, instead of just disabled. It will be only visible when called from the Depot Building Window.
belugas
parents: 11136
diff changeset
  1183
			ResizeButtons(this, BUILD_VEHICLE_WIDGET_BUILD, BUILD_VEHICLE_WIDGET_RENAME);
7a4428077a35 (svn r13696) -Fix[GUI]: The Build button of the vehicle list is now hidden, instead of just disabled. It will be only visible when called from the Depot Building Window.
belugas
parents: 11136
diff changeset
  1184
		}
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1185
		if (delta.y == 0) return;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1186
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1187
		this->vscroll.cap += delta.y / (int)GetVehicleListHeight(this->vehicle_type);
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1188
		this->widget[BUILD_VEHICLE_WIDGET_LIST].data = (this->vscroll.cap << 8) + 1;
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1189
	}
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1190
};
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
  1191
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
  1192
static const WindowDesc _build_vehicle_desc = {
7864
9b1e7d04aafa (svn r10731) -Codechange: allow smaller initial "build <vehicle type>" windows.
rubidium
parents: 7837
diff changeset
  1193
	WDP_AUTO, WDP_AUTO, 240, 174, 240, 256,
6144
5a0ffbf27ced (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 6125
diff changeset
  1194
	WC_BUILD_VEHICLE, WC_NONE,
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
  1195
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_RESIZABLE,
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
  1196
	_build_vehicle_widgets,
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
  1197
};
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
  1198
7134
c5a90dd41166 (svn r9869) -Codechange: replace some bytes with VehicleType, i.e. more type strictness.
rubidium
parents: 7104
diff changeset
  1199
void ShowBuildVehicleWindow(TileIndex tile, VehicleType type)
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
  1200
{
7742
f40cca82d948 (svn r10546) -Fix [FS#1026]: you can now have both Available Train as Available Ship window open
truelight
parents: 7555
diff changeset
  1201
	/* We want to be able to open both Available Train as Available Ships,
f40cca82d948 (svn r10546) -Fix [FS#1026]: you can now have both Available Train as Available Ship window open
truelight
parents: 7555
diff changeset
  1202
	 *  so if tile == 0 (Available XXX Window), use 'type' as unique number.
f40cca82d948 (svn r10546) -Fix [FS#1026]: you can now have both Available Train as Available Ship window open
truelight
parents: 7555
diff changeset
  1203
	 *  As it always is a low value, it won't collide with any real tile
f40cca82d948 (svn r10546) -Fix [FS#1026]: you can now have both Available Train as Available Ship window open
truelight
parents: 7555
diff changeset
  1204
	 *  number. */
f40cca82d948 (svn r10546) -Fix [FS#1026]: you can now have both Available Train as Available Ship window open
truelight
parents: 7555
diff changeset
  1205
	uint num = (tile == 0) ? (int)type : tile;
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
  1206
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
  1207
	assert(IsPlayerBuildableVehicleType(type));
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
  1208
7742
f40cca82d948 (svn r10546) -Fix [FS#1026]: you can now have both Available Train as Available Ship window open
truelight
parents: 7555
diff changeset
  1209
	DeleteWindowById(WC_BUILD_VEHICLE, num);
6030
70686dbed756 (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5919
diff changeset
  1210
10524
82b909f4bc5e (svn r13068) -Codechange: make a class of the BuildVehicleWindow.
rubidium
parents: 10484
diff changeset
  1211
	new BuildVehicleWindow(&_build_vehicle_desc, tile, type);
4800
009e3c6cea8a (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
  1212
}