src/build_vehicle_gui.cpp
author peter1138
Mon, 07 May 2007 16:38:21 +0000
changeset 6595 5239d6e72066
parent 6592 858b2cfd266b
child 6608 dc0b009642a4
permissions -rw-r--r--
(svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
     1
/* $Id$ */
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
     2
6123
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6091
diff changeset
     3
/** @file build_vehicle_gui.cpp */
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6091
diff changeset
     4
4800
5afc1bfc7a85 (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"
5afc1bfc7a85 (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"
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
     7
#include "train.h"
5786
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
     8
#include "roadveh.h"
5783
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
     9
#include "ship.h"
4800
5afc1bfc7a85 (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"
5afc1bfc7a85 (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"
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    12
#include "functions.h"
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    13
#include "table/sprites.h"
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    14
#include "table/strings.h"
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    15
#include "window.h"
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    16
#include "gui.h"
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    17
#include "vehicle.h"
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    18
#include "gfx.h"
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    19
#include "station.h"
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    20
#include "command.h"
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    21
#include "engine.h"
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    22
#include "player.h"
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    23
#include "depot.h"
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    24
#include "airport.h"
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    25
#include "vehicle_gui.h"
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    26
#include "newgrf_engine.h"
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    27
#include "date.h"
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    28
#include "strings.h"
6091
c8827d9ae04a (svn r8826) -Codechange: Replace _cargoc's separate arrays with a regular struct array (with accessor) and implement new initialization method using cargo labels.
peter1138
parents: 6087
diff changeset
    29
#include "cargotype.h"
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    30
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    31
5273
d9f707aa36a6 (svn r7415) -Codechange: Don't use typedef enum for simple widget enumerators when we will never use
Darkvater
parents: 5215
diff changeset
    32
enum BuildVehicleWidgets {
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    33
	BUILD_VEHICLE_WIDGET_CLOSEBOX = 0,
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    34
	BUILD_VEHICLE_WIDGET_CAPTION,
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    35
	BUILD_VEHICLE_WIDGET_SORT_ASSENDING_DESCENDING,
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    36
	BUILD_VEHICLE_WIDGET_SORT_TEXT,
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    37
	BUILD_VEHICLE_WIDGET_SORT_DROPDOWN,
5afc1bfc7a85 (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_LIST,
5afc1bfc7a85 (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_SCROLLBAR,
5afc1bfc7a85 (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_PANEL,
5afc1bfc7a85 (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_BUILD,
5afc1bfc7a85 (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_RENAME,
5afc1bfc7a85 (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_RESIZE,
6385
78f5307ce501 (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6384
diff changeset
    44
	BUILD_VEHICLE_WIDGET_END
5273
d9f707aa36a6 (svn r7415) -Codechange: Don't use typedef enum for simple widget enumerators when we will never use
Darkvater
parents: 5215
diff changeset
    45
};
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    46
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    47
static const Widget _build_vehicle_widgets[] = {
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    48
	{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,                STR_018B_CLOSE_WINDOW },
6386
bc26d1d67aa2 (svn r9476) -Codechange: Make build windows for all vehicle types the same width.
maedhros
parents: 6385
diff changeset
    49
	{    WWT_CAPTION,  RESIZE_RIGHT,    14,    11,   239,     0,    13, 0x0,                     STR_018C_WINDOW_TITLE_DRAG_THIS },
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    50
	{ WWT_PUSHTXTBTN,   RESIZE_NONE,    14,     0,    80,    14,    25, STR_SORT_BY,             STR_SORT_ORDER_TIP},
6386
bc26d1d67aa2 (svn r9476) -Codechange: Make build windows for all vehicle types the same width.
maedhros
parents: 6385
diff changeset
    51
	{      WWT_PANEL,  RESIZE_RIGHT,    14,    81,   227,    14,    25, 0x0,                     STR_SORT_CRITERIA_TIP},
bc26d1d67aa2 (svn r9476) -Codechange: Make build windows for all vehicle types the same width.
maedhros
parents: 6385
diff changeset
    52
	{    WWT_TEXTBTN,     RESIZE_LR,    14,   228,   239,    14,    25, STR_0225,                STR_SORT_CRITERIA_TIP},
bc26d1d67aa2 (svn r9476) -Codechange: Make build windows for all vehicle types the same width.
maedhros
parents: 6385
diff changeset
    53
	{     WWT_MATRIX,     RESIZE_RB,    14,     0,   227,    26,   121, 0x0,                     STR_NULL },
bc26d1d67aa2 (svn r9476) -Codechange: Make build windows for all vehicle types the same width.
maedhros
parents: 6385
diff changeset
    54
	{  WWT_SCROLLBAR,    RESIZE_LRB,    14,   228,   239,    26,   121, 0x0,                     STR_0190_SCROLL_BAR_SCROLLS_LIST },
bc26d1d67aa2 (svn r9476) -Codechange: Make build windows for all vehicle types the same width.
maedhros
parents: 6385
diff changeset
    55
	{      WWT_PANEL,    RESIZE_RTB,    14,     0,   239,   122,   243, 0x0,                     STR_NULL },
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    56
6384
15179597944c (svn r9474) -Fix (r8378): Expand the details widget in the vehicle build windows again to make room for all the text.
maedhros
parents: 6259
diff changeset
    57
	{ WWT_PUSHTXTBTN,     RESIZE_TB,    14,     0,   114,   244,   255, 0x0,                     STR_NULL },
6386
bc26d1d67aa2 (svn r9476) -Codechange: Make build windows for all vehicle types the same width.
maedhros
parents: 6385
diff changeset
    58
	{ WWT_PUSHTXTBTN,    RESIZE_RTB,    14,   115,   227,   244,   255, 0x0,                     STR_NULL },
bc26d1d67aa2 (svn r9476) -Codechange: Make build windows for all vehicle types the same width.
maedhros
parents: 6385
diff changeset
    59
	{  WWT_RESIZEBOX,   RESIZE_LRTB,    14,   228,   239,   244,   255, 0x0,                     STR_RESIZE_BUTTON },
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    60
	{   WIDGETS_END},
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    61
};
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
    62
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
    63
/* Setup widget strings to fit the different types of vehicles */
5790
d4a732968bda (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 5787
diff changeset
    64
static void SetupWindowStrings(Window *w, byte type)
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
    65
{
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
    66
	switch (type) {
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
    67
		case VEH_TRAIN:
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
    68
			w->widget[BUILD_VEHICLE_WIDGET_CAPTION].data    = STR_JUST_STRING;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
    69
			w->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips   = STR_8843_TRAIN_VEHICLE_SELECTION;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
    70
			w->widget[BUILD_VEHICLE_WIDGET_BUILD].data      = STR_881F_BUILD_VEHICLE;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
    71
			w->widget[BUILD_VEHICLE_WIDGET_BUILD].tooltips  = STR_8844_BUILD_THE_HIGHLIGHTED_TRAIN;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
    72
			w->widget[BUILD_VEHICLE_WIDGET_RENAME].data     = STR_8820_RENAME;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
    73
			w->widget[BUILD_VEHICLE_WIDGET_RENAME].tooltips = STR_8845_RENAME_TRAIN_VEHICLE_TYPE;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
    74
			break;
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
    75
		case VEH_ROAD:
5786
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
    76
			w->widget[BUILD_VEHICLE_WIDGET_CAPTION].data    = STR_9006_NEW_ROAD_VEHICLES;
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
    77
			w->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips   = STR_9026_ROAD_VEHICLE_SELECTION;
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
    78
			w->widget[BUILD_VEHICLE_WIDGET_BUILD].data      = STR_9007_BUILD_VEHICLE;
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
    79
			w->widget[BUILD_VEHICLE_WIDGET_BUILD].tooltips  = STR_9027_BUILD_THE_HIGHLIGHTED_ROAD;
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
    80
			w->widget[BUILD_VEHICLE_WIDGET_RENAME].data     = STR_9034_RENAME;
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
    81
			w->widget[BUILD_VEHICLE_WIDGET_RENAME].tooltips = STR_9035_RENAME_ROAD_VEHICLE_TYPE;
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
    82
			break;
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
    83
		case VEH_SHIP:
5783
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
    84
			w->widget[BUILD_VEHICLE_WIDGET_CAPTION].data    = STR_9808_NEW_SHIPS;
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
    85
			w->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips   = STR_9825_SHIP_SELECTION_LIST_CLICK;
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
    86
			w->widget[BUILD_VEHICLE_WIDGET_BUILD].data      = STR_9809_BUILD_SHIP;
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
    87
			w->widget[BUILD_VEHICLE_WIDGET_BUILD].tooltips  = STR_9826_BUILD_THE_HIGHLIGHTED_SHIP;
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
    88
			w->widget[BUILD_VEHICLE_WIDGET_RENAME].data     = STR_9836_RENAME;
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
    89
			w->widget[BUILD_VEHICLE_WIDGET_RENAME].tooltips = STR_9837_RENAME_SHIP_TYPE;
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
    90
			break;
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
    91
		case VEH_AIRCRAFT:
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
    92
			w->widget[BUILD_VEHICLE_WIDGET_CAPTION].data    = STR_A005_NEW_AIRCRAFT;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
    93
			w->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips   = STR_A025_AIRCRAFT_SELECTION_LIST;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
    94
			w->widget[BUILD_VEHICLE_WIDGET_BUILD].data      = STR_A006_BUILD_AIRCRAFT;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
    95
			w->widget[BUILD_VEHICLE_WIDGET_BUILD].tooltips  = STR_A026_BUILD_THE_HIGHLIGHTED_AIRCRAFT;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
    96
			w->widget[BUILD_VEHICLE_WIDGET_RENAME].data     = STR_A037_RENAME;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
    97
			w->widget[BUILD_VEHICLE_WIDGET_RENAME].tooltips = STR_A038_RENAME_AIRCRAFT_TYPE;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
    98
			break;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
    99
	}
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   100
}
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   101
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   102
static bool _internal_sort_order; // descending/ascending
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   103
5784
a3b23f0fc794 (svn r8336) -Codechange: added function to translate vehicle types to 0,1,2... for use for index to arrays
bjarni
parents: 5783
diff changeset
   104
static byte _last_sort_criteria[]    = {0, 0, 0, 0};
a3b23f0fc794 (svn r8336) -Codechange: added function to translate vehicle types to 0,1,2... for use for index to arrays
bjarni
parents: 5783
diff changeset
   105
static bool _last_sort_order[]       = {false, false, false, false};
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   106
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   107
static int CDECL EngineNumberSorter(const void *a, const void *b)
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   108
{
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   109
	const EngineID va = *(const EngineID*)a;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   110
	const EngineID vb = *(const EngineID*)b;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   111
	int r = va - vb;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   112
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   113
	return _internal_sort_order ? -r : r;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   114
}
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   115
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   116
static int CDECL EngineIntroDateSorter(const void *a, const void *b)
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   117
{
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   118
	const int va = GetEngine(*(const EngineID*)a)->intro_date;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   119
	const int vb = GetEngine(*(const EngineID*)b)->intro_date;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   120
	const int r = va - vb;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   121
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   122
	if (r == 0) {
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   123
		/* Use EngineID to sort instead since we want consistent sorting */
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   124
		return EngineNumberSorter(a, b);
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   125
	}
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   126
	return _internal_sort_order ? -r : r;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   127
}
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   128
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   129
static int CDECL EngineNameSorter(const void *a, const void *b)
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   130
{
4804
bfa7a5b5ad15 (svn r6726) -Codechange: [vehicle build window] cleaned up the name sorter (mainly by peter1138)
bjarni
parents: 4800
diff changeset
   131
	static EngineID last_engine[2] = { INVALID_ENGINE, INVALID_ENGINE };
bfa7a5b5ad15 (svn r6726) -Codechange: [vehicle build window] cleaned up the name sorter (mainly by peter1138)
bjarni
parents: 4800
diff changeset
   132
	static char     last_name[2][64] = { "\0", "\0" };
bfa7a5b5ad15 (svn r6726) -Codechange: [vehicle build window] cleaned up the name sorter (mainly by peter1138)
bjarni
parents: 4800
diff changeset
   133
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   134
	const EngineID va = *(const EngineID*)a;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   135
	const EngineID vb = *(const EngineID*)b;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   136
	int r;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   137
4804
bfa7a5b5ad15 (svn r6726) -Codechange: [vehicle build window] cleaned up the name sorter (mainly by peter1138)
bjarni
parents: 4800
diff changeset
   138
	if (va != last_engine[0]) {
bfa7a5b5ad15 (svn r6726) -Codechange: [vehicle build window] cleaned up the name sorter (mainly by peter1138)
bjarni
parents: 4800
diff changeset
   139
		last_engine[0] = va;
4912
0f51b47cb983 (svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents: 4896
diff changeset
   140
		GetString(last_name[0], GetCustomEngineName(va), lastof(last_name[0]));
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   141
	}
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   142
4804
bfa7a5b5ad15 (svn r6726) -Codechange: [vehicle build window] cleaned up the name sorter (mainly by peter1138)
bjarni
parents: 4800
diff changeset
   143
	if (vb != last_engine[1]) {
bfa7a5b5ad15 (svn r6726) -Codechange: [vehicle build window] cleaned up the name sorter (mainly by peter1138)
bjarni
parents: 4800
diff changeset
   144
		last_engine[1] = vb;
4912
0f51b47cb983 (svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents: 4896
diff changeset
   145
		GetString(last_name[1], GetCustomEngineName(vb), lastof(last_name[1]));
4804
bfa7a5b5ad15 (svn r6726) -Codechange: [vehicle build window] cleaned up the name sorter (mainly by peter1138)
bjarni
parents: 4800
diff changeset
   146
	}
bfa7a5b5ad15 (svn r6726) -Codechange: [vehicle build window] cleaned up the name sorter (mainly by peter1138)
bjarni
parents: 4800
diff changeset
   147
bfa7a5b5ad15 (svn r6726) -Codechange: [vehicle build window] cleaned up the name sorter (mainly by peter1138)
bjarni
parents: 4800
diff changeset
   148
	r = strcmp(last_name[0], last_name[1]); // sort by name
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   149
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   150
	if (r == 0) {
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   151
		/* Use EngineID to sort instead since we want consistent sorting */
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   152
		return EngineNumberSorter(a, b);
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   153
	}
4804
bfa7a5b5ad15 (svn r6726) -Codechange: [vehicle build window] cleaned up the name sorter (mainly by peter1138)
bjarni
parents: 4800
diff changeset
   154
	return _internal_sort_order ? -r : r;
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   155
}
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   156
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   157
static int CDECL EngineReliabilitySorter(const void *a, const void *b)
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   158
{
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   159
	const int va = GetEngine(*(const EngineID*)a)->reliability;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   160
	const int vb = GetEngine(*(const EngineID*)b)->reliability;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   161
	const int r = va - vb;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   162
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   163
	if (r == 0) {
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   164
		/* Use EngineID to sort instead since we want consistent sorting */
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   165
		return EngineNumberSorter(a, b);
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   166
	}
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   167
	return _internal_sort_order ? -r : r;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   168
}
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   169
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   170
/* Train sorting functions */
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   171
static int CDECL TrainEngineCostSorter(const void *a, const void *b)
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   172
{
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   173
	int va = RailVehInfo(*(const EngineID*)a)->base_cost;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   174
	int vb = RailVehInfo(*(const EngineID*)b)->base_cost;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   175
	int r = va - vb;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   176
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   177
	return _internal_sort_order ? -r : r;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   178
}
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   179
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   180
static int CDECL TrainEngineSpeedSorter(const void *a, const void *b)
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   181
{
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   182
	int va = RailVehInfo(*(const EngineID*)a)->max_speed;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   183
	int vb = RailVehInfo(*(const EngineID*)b)->max_speed;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   184
	int r = va - vb;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   185
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   186
	return _internal_sort_order ? -r : r;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   187
}
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   188
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   189
static int CDECL TrainEnginePowerSorter(const void *a, const void *b)
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   190
{
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   191
	const RailVehicleInfo *rvi_a = RailVehInfo(*(const EngineID*)a);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   192
	const RailVehicleInfo *rvi_b = RailVehInfo(*(const EngineID*)b);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   193
5868
94430141c189 (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: 5824
diff changeset
   194
	int va = rvi_a->power << (rvi_a->railveh_type == RAILVEH_MULTIHEAD ? 1 : 0);
94430141c189 (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: 5824
diff changeset
   195
	int vb = rvi_b->power << (rvi_b->railveh_type == RAILVEH_MULTIHEAD ? 1 : 0);
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   196
	int r = va - vb;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   197
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   198
	return _internal_sort_order ? -r : r;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   199
}
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   200
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   201
static int CDECL TrainEngineRunningCostSorter(const void *a, const void *b)
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   202
{
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   203
	const RailVehicleInfo *rvi_a = RailVehInfo(*(const EngineID*)a);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   204
	const RailVehicleInfo *rvi_b = RailVehInfo(*(const EngineID*)b);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   205
5868
94430141c189 (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: 5824
diff changeset
   206
	int va = rvi_a->running_cost_base * _price.running_rail[rvi_a->running_cost_class] * (rvi_a->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
94430141c189 (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: 5824
diff changeset
   207
	int vb = rvi_b->running_cost_base * _price.running_rail[rvi_b->running_cost_class] * (rvi_b->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   208
	int r = va - vb;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   209
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   210
	return _internal_sort_order ? -r : r;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   211
}
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   212
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   213
static int CDECL TrainEnginePowerVsRunningCostSorter(const void *a, const void *b)
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   214
{
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   215
	const RailVehicleInfo *rvi_a = RailVehInfo(*(const EngineID*)a);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   216
	const RailVehicleInfo *rvi_b = RailVehInfo(*(const EngineID*)b);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   217
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   218
	/* Here we are using a few tricks to get the right sort.
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   219
		* We want power/running cost, but since we usually got higher running cost than power and we store the result in an int,
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   220
		* we will actually calculate cunning cost/power (to make it more than 1).
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   221
		* Because of this, the return value have to be reversed as well and we return b - a instead of a - b.
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   222
		* Another thing is that both power and running costs should be doubled for multiheaded engines.
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   223
		* Since it would be multipling with 2 in both numerator and denumerator, it will even themselves out and we skip checking for multiheaded. */
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   224
	int va = (rvi_a->running_cost_base * _price.running_rail[rvi_a->running_cost_class]) / max((uint16)1, rvi_a->power);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   225
	int vb = (rvi_b->running_cost_base * _price.running_rail[rvi_b->running_cost_class]) / max((uint16)1, rvi_b->power);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   226
	int r = vb - va;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   227
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   228
	return _internal_sort_order ? -r : r;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   229
}
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   230
6023
0ef69a935adc (svn r8746) -Regression r8331: build train window could sort incorrectly by EngineID with certain newGRF sets
bjarni
parents: 5955
diff changeset
   231
static int CDECL TrainEngineNumberSorter(const void *a, const void *b)
0ef69a935adc (svn r8746) -Regression r8331: build train window could sort incorrectly by EngineID with certain newGRF sets
bjarni
parents: 5955
diff changeset
   232
{
0ef69a935adc (svn r8746) -Regression r8331: build train window could sort incorrectly by EngineID with certain newGRF sets
bjarni
parents: 5955
diff changeset
   233
	const EngineID va = *(const EngineID*)a;
0ef69a935adc (svn r8746) -Regression r8331: build train window could sort incorrectly by EngineID with certain newGRF sets
bjarni
parents: 5955
diff changeset
   234
	const EngineID vb = *(const EngineID*)b;
0ef69a935adc (svn r8746) -Regression r8331: build train window could sort incorrectly by EngineID with certain newGRF sets
bjarni
parents: 5955
diff changeset
   235
	int r = ListPositionOfEngine(va) - ListPositionOfEngine(vb);
0ef69a935adc (svn r8746) -Regression r8331: build train window could sort incorrectly by EngineID with certain newGRF sets
bjarni
parents: 5955
diff changeset
   236
0ef69a935adc (svn r8746) -Regression r8331: build train window could sort incorrectly by EngineID with certain newGRF sets
bjarni
parents: 5955
diff changeset
   237
	return _internal_sort_order ? -r : r;
0ef69a935adc (svn r8746) -Regression r8331: build train window could sort incorrectly by EngineID with certain newGRF sets
bjarni
parents: 5955
diff changeset
   238
}
0ef69a935adc (svn r8746) -Regression r8331: build train window could sort incorrectly by EngineID with certain newGRF sets
bjarni
parents: 5955
diff changeset
   239
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   240
static int CDECL TrainEnginesThenWagonsSorter(const void *a, const void *b)
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   241
{
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   242
	EngineID va = *(const EngineID*)a;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   243
	EngineID vb = *(const EngineID*)b;
5871
a98c86408de4 (svn r8460) -Fix (r8455): the build train window put locomotives and wagons in appeantly random order
bjarni
parents: 5868
diff changeset
   244
	int val_a = (RailVehInfo(va)->railveh_type == RAILVEH_WAGON ? 1 : 0);
a98c86408de4 (svn r8460) -Fix (r8455): the build train window put locomotives and wagons in appeantly random order
bjarni
parents: 5868
diff changeset
   245
	int val_b = (RailVehInfo(vb)->railveh_type == RAILVEH_WAGON ? 1 : 0);
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   246
	int r = val_a - val_b;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   247
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   248
	/* Use EngineID to sort instead since we want consistent sorting */
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   249
	if (r == 0) return EngineNumberSorter(a, b);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   250
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   251
	return _internal_sort_order ? -r : r;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   252
}
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   253
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   254
/* Aircraft sorting functions */
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   255
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   256
static int CDECL AircraftEngineCostSorter(const void *a, const void *b)
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   257
{
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   258
	const int va = AircraftVehInfo(*(const EngineID*)a)->base_cost;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   259
	const int vb = AircraftVehInfo(*(const EngineID*)b)->base_cost;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   260
	int r = va - vb;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   261
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   262
	return _internal_sort_order ? -r : r;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   263
}
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   264
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   265
static int CDECL AircraftEngineSpeedSorter(const void *a, const void *b)
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   266
{
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   267
	const int va = AircraftVehInfo(*(const EngineID*)a)->max_speed;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   268
	const int vb = AircraftVehInfo(*(const EngineID*)b)->max_speed;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   269
	const int r = va - vb;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   270
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   271
	if (r == 0) {
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   272
		/* Use EngineID to sort instead since we want consistent sorting */
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   273
		return EngineNumberSorter(a, b);
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   274
	}
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   275
	return _internal_sort_order ? -r : r;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   276
}
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   277
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   278
static int CDECL AircraftEngineRunningCostSorter(const void *a, const void *b)
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   279
{
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   280
	const int va = AircraftVehInfo(*(const EngineID*)a)->running_cost;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   281
	const int vb = AircraftVehInfo(*(const EngineID*)b)->running_cost;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   282
	const int r = va - vb;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   283
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   284
	if (r == 0) {
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   285
		/* Use EngineID to sort instead since we want consistent sorting */
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   286
		return EngineNumberSorter(a, b);
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   287
	}
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   288
	return _internal_sort_order ? -r : r;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   289
}
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   290
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   291
static int CDECL AircraftEngineCargoSorter(const void *a, const void *b)
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   292
{
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   293
	const int va = AircraftVehInfo(*(const EngineID*)a)->passenger_capacity;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   294
	const int vb = AircraftVehInfo(*(const EngineID*)b)->passenger_capacity;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   295
	const int r = va - vb;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   296
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   297
	if (r == 0) {
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   298
		/* Use EngineID to sort instead since we want consistent sorting */
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   299
		return EngineNumberSorter(a, b);
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   300
	}
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   301
	return _internal_sort_order ? -r : r;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   302
}
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   303
5785
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   304
static EngList_SortTypeFunction * const _sorter[][9] = {{
5790
d4a732968bda (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 5787
diff changeset
   305
	/* Trains */
6023
0ef69a935adc (svn r8746) -Regression r8331: build train window could sort incorrectly by EngineID with certain newGRF sets
bjarni
parents: 5955
diff changeset
   306
	&TrainEngineNumberSorter,
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   307
	&TrainEngineCostSorter,
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   308
	&TrainEngineSpeedSorter,
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   309
	&TrainEnginePowerSorter,
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   310
	&EngineIntroDateSorter,
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   311
	&EngineNameSorter,
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   312
	&TrainEngineRunningCostSorter,
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   313
	&TrainEnginePowerVsRunningCostSorter,
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   314
	&EngineReliabilitySorter,
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6386
diff changeset
   315
}, {
5790
d4a732968bda (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 5787
diff changeset
   316
	/* Road vehicles */
5785
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   317
	&EngineNumberSorter,
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   318
	&EngineIntroDateSorter,
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   319
	&EngineNameSorter,
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   320
	&EngineReliabilitySorter,
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6386
diff changeset
   321
}, {
5790
d4a732968bda (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 5787
diff changeset
   322
	/* Ships */
5785
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   323
	&EngineNumberSorter,
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   324
	&EngineIntroDateSorter,
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   325
	&EngineNameSorter,
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   326
	&EngineReliabilitySorter,
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6386
diff changeset
   327
}, {
5790
d4a732968bda (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 5787
diff changeset
   328
	/* Aircraft */
5785
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   329
	&EngineNumberSorter,
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   330
	&AircraftEngineCostSorter,
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   331
	&AircraftEngineSpeedSorter,
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   332
	&EngineIntroDateSorter,
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   333
	&EngineNameSorter,
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   334
	&AircraftEngineRunningCostSorter,
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   335
	&EngineReliabilitySorter,
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   336
	&AircraftEngineCargoSorter,
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   337
}};
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   338
5785
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   339
static const StringID _sort_listing[][10] = {{
5790
d4a732968bda (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 5787
diff changeset
   340
	/* Trains */
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   341
	STR_ENGINE_SORT_ENGINE_ID,
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   342
	STR_ENGINE_SORT_COST,
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   343
	STR_SORT_BY_MAX_SPEED,
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   344
	STR_ENGINE_SORT_POWER,
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   345
	STR_ENGINE_SORT_INTRO_DATE,
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   346
	STR_SORT_BY_DROPDOWN_NAME,
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   347
	STR_ENGINE_SORT_RUNNING_COST,
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   348
	STR_ENGINE_SORT_POWER_VS_RUNNING_COST,
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   349
	STR_SORT_BY_RELIABILITY,
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   350
	INVALID_STRING_ID
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6386
diff changeset
   351
}, {
5790
d4a732968bda (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 5787
diff changeset
   352
	/* Road vehicles */
5783
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   353
	STR_ENGINE_SORT_ENGINE_ID,
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   354
	STR_ENGINE_SORT_INTRO_DATE,
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   355
	STR_SORT_BY_DROPDOWN_NAME,
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   356
	STR_SORT_BY_RELIABILITY,
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   357
	INVALID_STRING_ID
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6386
diff changeset
   358
}, {
5790
d4a732968bda (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 5787
diff changeset
   359
	/* Ships */
5785
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   360
	STR_ENGINE_SORT_ENGINE_ID,
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   361
	STR_ENGINE_SORT_INTRO_DATE,
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   362
	STR_SORT_BY_DROPDOWN_NAME,
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   363
	STR_SORT_BY_RELIABILITY,
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   364
	INVALID_STRING_ID
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6386
diff changeset
   365
}, {
5790
d4a732968bda (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 5787
diff changeset
   366
	/* Aircraft */
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   367
	STR_ENGINE_SORT_ENGINE_ID,
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   368
	STR_ENGINE_SORT_COST,
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   369
	STR_SORT_BY_MAX_SPEED,
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   370
	STR_ENGINE_SORT_INTRO_DATE,
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   371
	STR_SORT_BY_DROPDOWN_NAME,
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   372
	STR_ENGINE_SORT_RUNNING_COST,
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   373
	STR_SORT_BY_RELIABILITY,
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   374
	STR_ENGINE_SORT_CARGO_CAPACITY,
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   375
	INVALID_STRING_ID
5785
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   376
}};
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   377
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   378
/* Draw rail wagon specific details */
5817
0bd3e66ece83 (svn r8379) -Cleanup: [build vehicle window] removed overloading with DrawVehiclePurchaseInfo() and renamed them into type specific names
bjarni
parents: 5816
diff changeset
   379
static int DrawRailWagonPurchaseInfo(int x, int y, EngineID engine_number, const RailVehicleInfo *rvi)
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   380
{
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   381
	/* Purchase cost */
6592
858b2cfd266b (svn r9806) -Codechange: [NewGRF] Add callback 36 support for purchase cost, for all vehicle types.
peter1138
parents: 6517
diff changeset
   382
	SetDParam(0, (GetEngineProperty(engine_number, 0x17, rvi->base_cost) * _price.build_railwagon) >> 8);
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   383
	DrawString(x, y, STR_PURCHASE_INFO_COST, 0);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   384
	y += 10;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   385
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   386
	/* Wagon weight - (including cargo) */
6595
5239d6e72066 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 6592
diff changeset
   387
	uint weight = GetEngineProperty(engine_number, 0x16, rvi->weight);
5239d6e72066 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 6592
diff changeset
   388
	SetDParam(0, weight);
5239d6e72066 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 6592
diff changeset
   389
	SetDParam(1, (GetCargo(rvi->cargo_type)->weight * rvi->capacity >> 4) + weight);
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   390
	DrawString(x, y, STR_PURCHASE_INFO_WEIGHT_CWEIGHT, 0);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   391
	y += 10;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   392
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   393
	/* Wagon speed limit, displayed if above zero */
6595
5239d6e72066 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 6592
diff changeset
   394
	if (_patches.wagon_speed_limits) {
5239d6e72066 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 6592
diff changeset
   395
		uint max_speed = GetEngineProperty(engine_number, 0x09, rvi->max_speed);
5239d6e72066 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 6592
diff changeset
   396
		if (max_speed > 0) {
5239d6e72066 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 6592
diff changeset
   397
			SetDParam(0, max_speed * 10 / 16);
5239d6e72066 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 6592
diff changeset
   398
			DrawString(x, y, STR_PURCHASE_INFO_SPEED, 0);
5239d6e72066 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 6592
diff changeset
   399
			y += 10;
5239d6e72066 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 6592
diff changeset
   400
		}
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   401
	}
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   402
	return y;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   403
}
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   404
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   405
/* Draw locomotive specific details */
5823
7aa8c2312103 (svn r8385) -Fix
tron
parents: 5822
diff changeset
   406
static int DrawRailEnginePurchaseInfo(int x, int y, EngineID engine_number, const RailVehicleInfo *rvi)
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   407
{
5868
94430141c189 (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: 5824
diff changeset
   408
	int multihead = (rvi->railveh_type == RAILVEH_MULTIHEAD ? 1 : 0);
6595
5239d6e72066 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 6592
diff changeset
   409
	uint weight = GetEngineProperty(engine_number, 0x16, rvi->weight);
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   410
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   411
	/* Purchase Cost - Engine weight */
6592
858b2cfd266b (svn r9806) -Codechange: [NewGRF] Add callback 36 support for purchase cost, for all vehicle types.
peter1138
parents: 6517
diff changeset
   412
	SetDParam(0, GetEngineProperty(engine_number, 0x17, rvi->base_cost) * (_price.build_railvehicle >> 3) >> 5);
6595
5239d6e72066 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 6592
diff changeset
   413
	SetDParam(1, weight << multihead);
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6386
diff changeset
   414
	DrawString(x, y, STR_PURCHASE_INFO_COST_WEIGHT, 0);
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   415
	y += 10;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   416
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   417
	/* Max speed - Engine power */
6595
5239d6e72066 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 6592
diff changeset
   418
	SetDParam(0, GetEngineProperty(engine_number, 0x09, rvi->max_speed) * 10 / 16);
5239d6e72066 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 6592
diff changeset
   419
	SetDParam(1, GetEngineProperty(engine_number, 0x0B, rvi->power) << multihead);
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6386
diff changeset
   420
	DrawString(x, y, STR_PURCHASE_INFO_SPEED_POWER, 0);
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   421
	y += 10;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   422
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   423
	/* Max tractive effort - not applicable if old acceleration or maglev */
5823
7aa8c2312103 (svn r8385) -Fix
tron
parents: 5822
diff changeset
   424
	if (_patches.realistic_acceleration && rvi->railtype != RAILTYPE_MAGLEV) {
6595
5239d6e72066 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 6592
diff changeset
   425
		SetDParam(0, ((weight << multihead) * 10 * GetEngineProperty(engine_number, 0x1F, rvi->tractive_effort)) / 256);
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   426
		DrawString(x, y, STR_PURCHASE_INFO_MAX_TE, 0);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   427
		y += 10;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   428
	}
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   429
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   430
	/* Running cost */
6517
295b16f8fa7d (svn r9703) -Codechange: support callback 36 in vehicle purchase lists
peter1138
parents: 6491
diff changeset
   431
	SetDParam(0, (GetEngineProperty(engine_number, 0x0D, rvi->running_cost_base) * _price.running_rail[rvi->running_cost_class] >> 8) << multihead);
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6386
diff changeset
   432
	DrawString(x, y, STR_PURCHASE_INFO_RUNNINGCOST, 0);
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   433
	y += 10;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   434
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   435
	/* Powered wagons power - Powered wagons extra weight */
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   436
	if (rvi->pow_wag_power != 0) {
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   437
		SetDParam(0, rvi->pow_wag_power);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   438
		SetDParam(1, rvi->pow_wag_weight);
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6386
diff changeset
   439
		DrawString(x, y, STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT, 0);
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   440
		y += 10;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   441
	};
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   442
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   443
	return y;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   444
}
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   445
5786
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   446
/* Draw road vehicle specific details */
5817
0bd3e66ece83 (svn r8379) -Cleanup: [build vehicle window] removed overloading with DrawVehiclePurchaseInfo() and renamed them into type specific names
bjarni
parents: 5816
diff changeset
   447
static int DrawRoadVehPurchaseInfo(int x, int y, EngineID engine_number, const RoadVehicleInfo *rvi)
5786
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   448
{
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   449
	bool refittable = (_engine_info[engine_number].refit_mask != 0);
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   450
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   451
	/* Purchase cost - Max speed */
6592
858b2cfd266b (svn r9806) -Codechange: [NewGRF] Add callback 36 support for purchase cost, for all vehicle types.
peter1138
parents: 6517
diff changeset
   452
	SetDParam(0, GetEngineProperty(engine_number, 0x11, rvi->base_cost) * (_price.roadveh_base >> 3) >> 5);
5874
2db89a640b7a (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: 5871
diff changeset
   453
	SetDParam(1, rvi->max_speed * 10 / 32);
5786
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   454
	DrawString(x, y, STR_PURCHASE_INFO_COST_SPEED, 0);
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   455
	y += 10;
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   456
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   457
	/* Running cost */
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   458
	SetDParam(0, rvi->running_cost * _price.roadveh_running >> 8);
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   459
	DrawString(x, y, STR_PURCHASE_INFO_RUNNINGCOST, 0);
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   460
	y += 10;
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   461
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   462
	/* Cargo type + capacity */
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   463
	SetDParam(0, rvi->cargo_type);
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   464
	SetDParam(1, rvi->capacity);
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   465
	SetDParam(2, refittable ? STR_9842_REFITTABLE : STR_EMPTY);
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   466
	DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, 0);
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   467
	y += 10;
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   468
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   469
	return y;
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   470
}
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   471
5783
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   472
/* Draw ship specific details */
5817
0bd3e66ece83 (svn r8379) -Cleanup: [build vehicle window] removed overloading with DrawVehiclePurchaseInfo() and renamed them into type specific names
bjarni
parents: 5816
diff changeset
   473
static int DrawShipPurchaseInfo(int x, int y, EngineID engine_number, const ShipVehicleInfo *svi)
5783
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   474
{
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   475
	/* Purchase cost - Max speed */
6592
858b2cfd266b (svn r9806) -Codechange: [NewGRF] Add callback 36 support for purchase cost, for all vehicle types.
peter1138
parents: 6517
diff changeset
   476
	SetDParam(0, GetEngineProperty(engine_number, 0x0A, svi->base_cost) * (_price.ship_base >> 3) >> 5);
6595
5239d6e72066 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 6592
diff changeset
   477
	SetDParam(1, GetEngineProperty(engine_number, 0x0B, svi->max_speed) * 10 / 32);
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6386
diff changeset
   478
	DrawString(x, y, STR_PURCHASE_INFO_COST_SPEED, 0);
5783
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   479
	y += 10;
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   480
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   481
	/* Cargo type + capacity */
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   482
	SetDParam(0, svi->cargo_type);
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   483
	SetDParam(1, svi->capacity);
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   484
	SetDParam(2, svi->refittable ? STR_9842_REFITTABLE : STR_EMPTY);
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6386
diff changeset
   485
	DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, 0);
5783
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   486
	y += 10;
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   487
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   488
	/* Running cost */
6595
5239d6e72066 (svn r9809) -Codechange: [NewGRF] Add callback 36 properties to purchase lists and add running cost changing for ships.
peter1138
parents: 6592
diff changeset
   489
	SetDParam(0, GetEngineProperty(engine_number, 0x0F, svi->running_cost) * _price.ship_running >> 8);
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6386
diff changeset
   490
	DrawString(x, y, STR_PURCHASE_INFO_RUNNINGCOST, 0);
5783
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   491
	y += 10;
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   492
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   493
	return y;
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   494
}
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   495
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   496
/* Draw aircraft specific details */
5817
0bd3e66ece83 (svn r8379) -Cleanup: [build vehicle window] removed overloading with DrawVehiclePurchaseInfo() and renamed them into type specific names
bjarni
parents: 5816
diff changeset
   497
static int DrawAircraftPurchaseInfo(int x, int y, EngineID engine_number, const AircraftVehicleInfo *avi)
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   498
{
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   499
	CargoID cargo;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   500
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   501
	/* Purchase cost - Max speed */
6592
858b2cfd266b (svn r9806) -Codechange: [NewGRF] Add callback 36 support for purchase cost, for all vehicle types.
peter1138
parents: 6517
diff changeset
   502
	SetDParam(0, GetEngineProperty(engine_number, 0x0B, avi->base_cost) * (_price.aircraft_base >> 3) >> 5);
6193
6f20de9e4f1b (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: 6123
diff changeset
   503
	SetDParam(1, avi->max_speed * 10 / 16);
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   504
	DrawString(x, y, STR_PURCHASE_INFO_COST_SPEED, 0);
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   505
	y += 10;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   506
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   507
	/* Cargo capacity */
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   508
	cargo = FindFirstRefittableCargo(engine_number);
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   509
	if (cargo == CT_INVALID || cargo == CT_PASSENGERS) {
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   510
		SetDParam(0, avi->passenger_capacity);
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   511
		SetDParam(1, avi->mail_capacity);
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   512
		DrawString(x, y, STR_PURCHASE_INFO_AIRCRAFT_CAPACITY, 0);
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   513
	} else {
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   514
		/* Note, if the default capacity is selected by the refit capacity
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   515
		* callback, then the capacity shown is likely to be incorrect. */
4896
f86350aaaaa5 (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
   516
		SetDParam(0, cargo);
6087
bfa159e740d9 (svn r8822) -Fix
tron
parents: 6057
diff changeset
   517
		SetDParam(1, AircraftDefaultCargoCapacity(cargo, avi));
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   518
		SetDParam(2, STR_9842_REFITTABLE);
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   519
		DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, 0);
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   520
	}
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   521
	y += 10;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   522
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   523
	/* Running cost */
6517
295b16f8fa7d (svn r9703) -Codechange: support callback 36 in vehicle purchase lists
peter1138
parents: 6491
diff changeset
   524
	SetDParam(0, GetEngineProperty(engine_number, 0x0E, avi->running_cost) * _price.aircraft_running >> 8);
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   525
	DrawString(x, y, STR_PURCHASE_INFO_RUNNINGCOST, 0);
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   526
	y += 10;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   527
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   528
	return y;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   529
}
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   530
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   531
/**
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   532
 * Draw the purchase info details of a vehicle at a given location.
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   533
 * @param x,y location where to draw the info
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   534
 * @param w how wide are the text allowed to be (size of widget/window to Draw in)
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   535
 * @param engine_number the engine of which to draw the info of
6385
78f5307ce501 (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6384
diff changeset
   536
 * @return y after drawing all the text
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   537
 */
6385
78f5307ce501 (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6384
diff changeset
   538
int DrawVehiclePurchaseInfo(int x, int y, uint w, EngineID engine_number)
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   539
{
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   540
	const Engine *e = GetEngine(engine_number);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   541
	YearMonthDay ymd;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   542
	ConvertDateToYMD(e->intro_date, &ymd);
5790
d4a732968bda (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 5787
diff changeset
   543
	bool refitable = false;
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   544
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   545
	switch (e->type) {
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   546
		case VEH_TRAIN: {
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   547
			const RailVehicleInfo *rvi = RailVehInfo(engine_number);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   548
5819
77fa0b7a6065 (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: 5817
diff changeset
   549
			refitable = (EngInfo(engine_number)->refit_mask != 0) && (rvi->capacity > 0);
77fa0b7a6065 (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: 5817
diff changeset
   550
5868
94430141c189 (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: 5824
diff changeset
   551
			if (rvi->railveh_type == RAILVEH_WAGON) {
5817
0bd3e66ece83 (svn r8379) -Cleanup: [build vehicle window] removed overloading with DrawVehiclePurchaseInfo() and renamed them into type specific names
bjarni
parents: 5816
diff changeset
   552
				y = DrawRailWagonPurchaseInfo(x, y, engine_number, rvi);
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   553
			} else {
5823
7aa8c2312103 (svn r8385) -Fix
tron
parents: 5822
diff changeset
   554
				y = DrawRailEnginePurchaseInfo(x, y, engine_number, rvi);
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   555
			}
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   556
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   557
			/* Cargo type + capacity, or N/A */
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   558
			if (rvi->capacity == 0) {
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   559
				SetDParam(0, CT_INVALID);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   560
				SetDParam(2, STR_EMPTY);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   561
			} else {
5868
94430141c189 (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: 5824
diff changeset
   562
				int multihead = (rvi->railveh_type == RAILVEH_MULTIHEAD ? 1 : 0);
5815
1af8b7c2f257 (svn r8377) -Fix (r8331): [build vehicle window] train cargo capacity now only add "(refitable)" if the engine in question is refitable
bjarni
parents: 5802
diff changeset
   563
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   564
				SetDParam(0, rvi->cargo_type);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   565
				SetDParam(1, (rvi->capacity * (CountArticulatedParts(engine_number) + 1)) << multihead);
5819
77fa0b7a6065 (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: 5817
diff changeset
   566
				SetDParam(2, refitable ? STR_9842_REFITTABLE : STR_EMPTY);
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   567
			}
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6386
diff changeset
   568
			DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, 0);
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   569
			y += 10;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   570
		}
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   571
			break;
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   572
		case VEH_ROAD:
5817
0bd3e66ece83 (svn r8379) -Cleanup: [build vehicle window] removed overloading with DrawVehiclePurchaseInfo() and renamed them into type specific names
bjarni
parents: 5816
diff changeset
   573
			y = DrawRoadVehPurchaseInfo(x, y, engine_number, RoadVehInfo(engine_number));
5790
d4a732968bda (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 5787
diff changeset
   574
			refitable = true;
5786
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   575
			break;
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   576
		case VEH_SHIP: {
5790
d4a732968bda (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 5787
diff changeset
   577
			const ShipVehicleInfo *svi = ShipVehInfo(engine_number);
5817
0bd3e66ece83 (svn r8379) -Cleanup: [build vehicle window] removed overloading with DrawVehiclePurchaseInfo() and renamed them into type specific names
bjarni
parents: 5816
diff changeset
   578
			y = DrawShipPurchaseInfo(x, y, engine_number, svi);
5790
d4a732968bda (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 5787
diff changeset
   579
			refitable = svi->refittable;
d4a732968bda (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 5787
diff changeset
   580
		} break;
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   581
		case VEH_AIRCRAFT:
5817
0bd3e66ece83 (svn r8379) -Cleanup: [build vehicle window] removed overloading with DrawVehiclePurchaseInfo() and renamed them into type specific names
bjarni
parents: 5816
diff changeset
   582
			y = DrawAircraftPurchaseInfo(x, y, engine_number, AircraftVehInfo(engine_number));
5790
d4a732968bda (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 5787
diff changeset
   583
			refitable = true;
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   584
			break;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   585
	}
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   586
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   587
	/* Draw details, that applies to all types except rail wagons */
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   588
	if (e->type != VEH_TRAIN || RailVehInfo(engine_number)->railveh_type != RAILVEH_WAGON) {
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   589
		/* Design date - Life length */
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   590
		SetDParam(0, ymd.year);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   591
		SetDParam(1, e->lifelength);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   592
		DrawString(x, y, STR_PURCHASE_INFO_DESIGNED_LIFE, 0);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   593
		y += 10;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   594
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   595
		/* Reliability */
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   596
		SetDParam(0, e->reliability * 100 >> 16);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   597
		DrawString(x, y, STR_PURCHASE_INFO_RELIABILITY, 0);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   598
		y += 10;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   599
	}
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   600
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   601
	/* Additional text from NewGRF */
4930
708801d486c6 (svn r6910) - Codechange: Supply width of area when drawing purchase info instead of using hardcoded values. (mart3p)
peter1138
parents: 4912
diff changeset
   602
	y += ShowAdditionalText(x, y, w, engine_number);
5790
d4a732968bda (svn r8343) -Cleanup: [build vehicle windows] added a few comments and removed two switch-cases, that we can do without
bjarni
parents: 5787
diff changeset
   603
	if (refitable) y += ShowRefitOptionsList(x, y, w, engine_number);
6385
78f5307ce501 (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6384
diff changeset
   604
78f5307ce501 (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6384
diff changeset
   605
	return y;
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   606
}
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   607
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   608
/* Figure out what train EngineIDs to put in the list */
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   609
static void GenerateBuildTrainList(Window *w)
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   610
{
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   611
	EngineID eid, sel_id;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   612
	int num_engines = 0;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   613
	int num_wagons  = 0;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   614
	buildvehicle_d *bv = &WP(w, buildvehicle_d);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   615
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   616
	bv->filter.railtype = (w->window_number == 0) ? RAILTYPE_END : GetRailType(w->window_number);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   617
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   618
	EngList_RemoveAll(&bv->eng_list);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   619
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   620
	/* Make list of all available train engines and wagons.
6123
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6091
diff changeset
   621
	 * Also check to see if the previously selected engine is still available,
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6091
diff changeset
   622
	 * and if not, reset selection to INVALID_ENGINE. This could be the case
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6091
diff changeset
   623
	 * when engines become obsolete and are removed */
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   624
	for (sel_id = INVALID_ENGINE, eid = 0; eid < NUM_TRAIN_ENGINES; eid++) {
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   625
		const RailVehicleInfo *rvi = RailVehInfo(eid);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   626
5823
7aa8c2312103 (svn r8385) -Fix
tron
parents: 5822
diff changeset
   627
		if (bv->filter.railtype != RAILTYPE_END && !HasPowerOnRail(rvi->railtype, bv->filter.railtype)) continue;
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   628
		if (!IsEngineBuildable(eid, VEH_TRAIN, _local_player)) continue;
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   629
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   630
		EngList_Add(&bv->eng_list, eid);
5868
94430141c189 (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: 5824
diff changeset
   631
		if (rvi->railveh_type != RAILVEH_WAGON) {
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   632
			num_engines++;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   633
		} else {
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   634
			num_wagons++;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   635
		}
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   636
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   637
		if (eid == bv->sel_engine) sel_id = eid;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   638
	}
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   639
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   640
	bv->sel_engine = sel_id;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   641
6123
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6091
diff changeset
   642
	/* make engines first, and then wagons, sorted by ListPositionOfEngine() */
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   643
	_internal_sort_order = false;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   644
	EngList_Sort(&bv->eng_list, TrainEnginesThenWagonsSorter);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   645
6123
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6091
diff changeset
   646
	/* and then sort engines */
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   647
	_internal_sort_order = bv->descending_sort_order;
5785
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   648
	EngList_SortPartial(&bv->eng_list, _sorter[0][bv->sort_criteria], 0, num_engines);
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   649
6123
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6091
diff changeset
   650
	/* and finally sort wagons */
5785
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   651
	EngList_SortPartial(&bv->eng_list, _sorter[0][bv->sort_criteria], num_engines, num_wagons);
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   652
}
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   653
5786
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   654
/* Figure out what road vehicle EngineIDs to put in the list */
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   655
static void GenerateBuildRoadVehList(Window *w)
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   656
{
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   657
	EngineID eid, sel_id;
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   658
	buildvehicle_d *bv = &WP(w, buildvehicle_d);
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   659
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   660
	EngList_RemoveAll(&bv->eng_list);
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   661
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   662
	sel_id = INVALID_ENGINE;
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   663
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   664
	for (eid = ROAD_ENGINES_INDEX; eid < ROAD_ENGINES_INDEX + NUM_ROAD_ENGINES; eid++) {
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   665
		if (!IsEngineBuildable(eid, VEH_ROAD, _local_player)) continue;
5786
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   666
		EngList_Add(&bv->eng_list, eid);
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   667
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   668
		if (eid == bv->sel_engine) sel_id = eid;
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   669
	}
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   670
	bv->sel_engine = sel_id;
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   671
}
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   672
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   673
/* Figure out what ship EngineIDs to put in the list */
5783
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   674
static void GenerateBuildShipList(Window *w)
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   675
{
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   676
	EngineID eid, sel_id;
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   677
	buildvehicle_d *bv = &WP(w, buildvehicle_d);
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   678
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   679
	EngList_RemoveAll(&bv->eng_list);
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   680
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   681
	sel_id = INVALID_ENGINE;
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   682
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   683
	for (eid = SHIP_ENGINES_INDEX; eid < SHIP_ENGINES_INDEX + NUM_SHIP_ENGINES; eid++) {
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   684
		if (!IsEngineBuildable(eid, VEH_SHIP, _local_player)) continue;
5783
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   685
		EngList_Add(&bv->eng_list, eid);
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   686
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   687
		if (eid == bv->sel_engine) sel_id = eid;
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   688
	}
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   689
	bv->sel_engine = sel_id;
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   690
}
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   691
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   692
/* Figure out what aircraft EngineIDs to put in the list */
5187
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   693
static void GenerateBuildAircraftList(Window *w)
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   694
{
5200
dfd31d4f2410 (svn r7315) -Fix: Have the first engine in the list be selected once again when the window is opened
Darkvater
parents: 5199
diff changeset
   695
	EngineID eid, sel_id;
5187
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   696
	buildvehicle_d *bv = &WP(w, buildvehicle_d);
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   697
5187
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   698
	EngList_RemoveAll(&bv->eng_list);
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   699
5200
dfd31d4f2410 (svn r7315) -Fix: Have the first engine in the list be selected once again when the window is opened
Darkvater
parents: 5199
diff changeset
   700
	/* Make list of all available planes.
dfd31d4f2410 (svn r7315) -Fix: Have the first engine in the list be selected once again when the window is opened
Darkvater
parents: 5199
diff changeset
   701
	 * Also check to see if the previously selected plane is still available,
dfd31d4f2410 (svn r7315) -Fix: Have the first engine in the list be selected once again when the window is opened
Darkvater
parents: 5199
diff changeset
   702
	 * and if not, reset selection to INVALID_ENGINE. This could be the case
dfd31d4f2410 (svn r7315) -Fix: Have the first engine in the list be selected once again when the window is opened
Darkvater
parents: 5199
diff changeset
   703
	 * when planes become obsolete and are removed */
dfd31d4f2410 (svn r7315) -Fix: Have the first engine in the list be selected once again when the window is opened
Darkvater
parents: 5199
diff changeset
   704
	sel_id = INVALID_ENGINE;
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   705
	for (eid = AIRCRAFT_ENGINES_INDEX; eid < AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES; eid++) {
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   706
		if (!IsEngineBuildable(eid, VEH_AIRCRAFT, _local_player)) continue;
6237
69427b23257f (svn r9040) -Codechange: the build window and CmdBuildAircraft() now shares the code to figure out if an aircraft is buildable in the hangar in question
bjarni
parents: 6193
diff changeset
   707
		if (w->window_number != 0 && !IsAircraftBuildableAtStation(eid, w->window_number)) continue;
6044
e9e318238ad6 (svn r8771) -Fix r8343: build aircraft windows will no longer show aircraft that can't use the airport in question
bjarni
parents: 6032
diff changeset
   708
6237
69427b23257f (svn r9040) -Codechange: the build window and CmdBuildAircraft() now shares the code to figure out if an aircraft is buildable in the hangar in question
bjarni
parents: 6193
diff changeset
   709
		EngList_Add(&bv->eng_list, eid);
69427b23257f (svn r9040) -Codechange: the build window and CmdBuildAircraft() now shares the code to figure out if an aircraft is buildable in the hangar in question
bjarni
parents: 6193
diff changeset
   710
		if (eid == bv->sel_engine) sel_id = eid;
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   711
	}
5200
dfd31d4f2410 (svn r7315) -Fix: Have the first engine in the list be selected once again when the window is opened
Darkvater
parents: 5199
diff changeset
   712
dfd31d4f2410 (svn r7315) -Fix: Have the first engine in the list be selected once again when the window is opened
Darkvater
parents: 5199
diff changeset
   713
	bv->sel_engine = sel_id;
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   714
}
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   715
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   716
/* Generate the list of vehicles */
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   717
static void GenerateBuildList(Window *w)
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   718
{
5187
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   719
	buildvehicle_d *bv = &WP(w, buildvehicle_d);
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   720
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   721
	switch (bv->vehicle_type) {
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   722
		case VEH_TRAIN:
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   723
			GenerateBuildTrainList(w);
5785
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   724
			return; // trains should not reach the last sorting
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   725
		case VEH_ROAD:
5786
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   726
			GenerateBuildRoadVehList(w);
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   727
			break;
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   728
		case VEH_SHIP:
5783
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   729
			GenerateBuildShipList(w);
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   730
			break;
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   731
		case VEH_AIRCRAFT:
5187
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   732
			GenerateBuildAircraftList(w);
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   733
			break;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   734
	}
5785
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   735
	_internal_sort_order = bv->descending_sort_order;
5955
fe61588d5188 (svn r8621) -Codechange: assigned new numbers to the VEH_(type) enum so that VEH_Train is 0, VEH_Road is 1 and so on
bjarni
parents: 5944
diff changeset
   736
	EngList_Sort(&bv->eng_list, _sorter[bv->vehicle_type][bv->sort_criteria]);
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   737
}
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   738
5800
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   739
static void DrawVehicleEngine(byte type, int x, int y, EngineID engine, SpriteID pal)
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   740
{
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   741
	switch (type) {
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   742
		case VEH_TRAIN:    DrawTrainEngine(   x, y, engine, pal); break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   743
		case VEH_ROAD:     DrawRoadVehEngine( x, y, engine, pal); break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   744
		case VEH_SHIP:     DrawShipEngine(    x, y, engine, pal); break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   745
		case VEH_AIRCRAFT: DrawAircraftEngine(x, y, engine, pal); break;
5800
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   746
		default: NOT_REACHED();
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   747
	}
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   748
}
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   749
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   750
/** Engine drawing loop
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   751
 * @param type Type of vehicle (VEH_*)
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   752
 * @param x,y Where should the list start
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   753
 * @param eng_list What engines to draw
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   754
 * @param min where to start in the list
5802
e770857f092f (svn r8364) -Codechange (r8362): added an assert to catch conditions where a request wants to draw more vehicles than the list contains
bjarni
parents: 5800
diff changeset
   755
 * @param max where in the list to end
5800
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   756
 * @param selected_id what engine to highlight as selected, if any
5944
6d059cc8662b (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 5893
diff changeset
   757
 * @param show_count Display the number of vehicles (used by autoreplace)
5800
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   758
 */
5944
6d059cc8662b (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 5893
diff changeset
   759
void DrawEngineList(byte type, int x, int y, const EngineList eng_list, uint16 min, uint16 max, EngineID selected_id, bool show_count)
5800
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   760
{
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   761
	byte step_size = GetVehicleListHeight(type);
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   762
	byte x_offset = 0;
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   763
	byte y_offset = 0;
5944
6d059cc8662b (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 5893
diff changeset
   764
	Player *p = GetPlayer(_local_player);
5800
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   765
5802
e770857f092f (svn r8364) -Codechange (r8362): added an assert to catch conditions where a request wants to draw more vehicles than the list contains
bjarni
parents: 5800
diff changeset
   766
	assert(max <= EngList_Count(&eng_list));
e770857f092f (svn r8364) -Codechange (r8362): added an assert to catch conditions where a request wants to draw more vehicles than the list contains
bjarni
parents: 5800
diff changeset
   767
5800
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   768
	switch (type) {
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   769
		case VEH_TRAIN:
5800
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   770
			x++; // train and road vehicles use the same offset, except trains are one more pixel to the right
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   771
			/* Fallthough */
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   772
		case VEH_ROAD:
5800
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   773
			x += 26;
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   774
			x_offset = 30;
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   775
			y += 2;
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   776
			y_offset = 4;
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   777
			break;
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   778
		case VEH_SHIP:
5800
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   779
			x += 35;
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   780
			x_offset = 40;
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   781
			y += 7;
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   782
			y_offset = 3;
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   783
			break;
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   784
		case VEH_AIRCRAFT:
5800
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   785
			x += 27;
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   786
			x_offset = 33;
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   787
			y += 7;
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   788
			y_offset = 3;
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   789
			break;
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   790
		default: NOT_REACHED();
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   791
	}
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   792
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   793
	for (; min < max; min++, y += step_size) {
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   794
		const EngineID engine = eng_list[min];
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   795
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   796
		DrawString(x + x_offset, y, GetCustomEngineName(engine), engine == selected_id ? 0xC : 0x10);
5944
6d059cc8662b (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 5893
diff changeset
   797
		DrawVehicleEngine(type, x, y + y_offset, engine, (show_count && p->num_engines[engine] == 0) ? PALETTE_CRASH : GetEnginePalette(engine, _local_player));
6d059cc8662b (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 5893
diff changeset
   798
		if (show_count) {
6d059cc8662b (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 5893
diff changeset
   799
			SetDParam(0, p->num_engines[engine]);
6d059cc8662b (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 5893
diff changeset
   800
			DrawStringRightAligned(213, y + (GetVehicleListHeight(type) == 14 ? 3 : 8), STR_TINY_BLACK, 0);
6d059cc8662b (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 5893
diff changeset
   801
		}
5800
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   802
	}
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   803
}
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   804
6385
78f5307ce501 (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6384
diff changeset
   805
static void ExpandPurchaseInfoWidget(Window *w, int expand_by)
78f5307ce501 (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6384
diff changeset
   806
{
78f5307ce501 (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6384
diff changeset
   807
	Widget *wi = &w->widget[BUILD_VEHICLE_WIDGET_PANEL];
78f5307ce501 (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6384
diff changeset
   808
78f5307ce501 (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6384
diff changeset
   809
	SetWindowDirty(w);
78f5307ce501 (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6384
diff changeset
   810
	wi->bottom += expand_by;
78f5307ce501 (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6384
diff changeset
   811
78f5307ce501 (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6384
diff changeset
   812
	for (uint i = BUILD_VEHICLE_WIDGET_BUILD; i < BUILD_VEHICLE_WIDGET_END; i++) {
78f5307ce501 (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6384
diff changeset
   813
		wi = &w->widget[i];
78f5307ce501 (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6384
diff changeset
   814
		wi->top += expand_by;
78f5307ce501 (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6384
diff changeset
   815
		wi->bottom += expand_by;
78f5307ce501 (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6384
diff changeset
   816
	}
78f5307ce501 (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6384
diff changeset
   817
78f5307ce501 (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6384
diff changeset
   818
	w->height += expand_by;
78f5307ce501 (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6384
diff changeset
   819
	SetWindowDirty(w);
78f5307ce501 (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6384
diff changeset
   820
}
78f5307ce501 (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6384
diff changeset
   821
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   822
static void DrawBuildVehicleWindow(Window *w)
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   823
{
5200
dfd31d4f2410 (svn r7315) -Fix: Have the first engine in the list be selected once again when the window is opened
Darkvater
parents: 5199
diff changeset
   824
	const buildvehicle_d *bv = &WP(w, buildvehicle_d);
5800
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   825
	uint max = min(w->vscroll.pos + w->vscroll.cap, EngList_Count(&bv->eng_list));
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   826
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   827
	SetWindowWidgetDisabledState(w, BUILD_VEHICLE_WIDGET_BUILD, w->window_number == 0);
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   828
5201
a4279a8884ea (svn r7316) -Codechange: Make train-build-gui and aircraft-build-gui (unified) look more alike.
Darkvater
parents: 5200
diff changeset
   829
	SetVScrollCount(w, EngList_Count(&bv->eng_list));
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   830
	SetDParam(0, bv->filter.railtype + STR_881C_NEW_RAIL_VEHICLES); // This should only affect rail vehicles
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   831
	DrawWindowWidgets(w);
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   832
5944
6d059cc8662b (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 5893
diff changeset
   833
	DrawEngineList(bv->vehicle_type, 2, 27, bv->eng_list, w->vscroll.pos, max, bv->sel_engine, false);
5786
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   834
5800
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   835
	if (bv->sel_engine != INVALID_ENGINE) {
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   836
		const Widget *wi = &w->widget[BUILD_VEHICLE_WIDGET_PANEL];
6385
78f5307ce501 (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6384
diff changeset
   837
		int text_end = DrawVehiclePurchaseInfo(2, wi->top + 1, wi->right - wi->left - 2, bv->sel_engine);
78f5307ce501 (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6384
diff changeset
   838
78f5307ce501 (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text.
maedhros
parents: 6384
diff changeset
   839
		if (text_end > wi->bottom) ExpandPurchaseInfoWidget(w, text_end - wi->bottom);
5800
672266389034 (svn r8362) -Codechange: [vehicle build window] moved the engine drawing loop to a function of it's own
bjarni
parents: 5790
diff changeset
   840
	}
5783
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   841
5955
fe61588d5188 (svn r8621) -Codechange: assigned new numbers to the VEH_(type) enum so that VEH_Train is 0, VEH_Road is 1 and so on
bjarni
parents: 5944
diff changeset
   842
	DrawString(85, 15, _sort_listing[bv->vehicle_type][bv->sort_criteria], 0x10);
5785
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   843
	DoDrawString(bv->descending_sort_order ? DOWNARROW : UPARROW, 69, 15, 0x10);
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   844
}
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   845
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   846
static void BuildVehicleClickEvent(Window *w, WindowEvent *e)
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   847
{
5187
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   848
	buildvehicle_d *bv = &WP(w, buildvehicle_d);
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   849
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   850
	switch (e->we.click.widget) {
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   851
		case BUILD_VEHICLE_WIDGET_SORT_ASSENDING_DESCENDING:
5199
9a75b853ad22 (svn r7314) -Cleanup: const, whitespace, coding style and variable usage.
Darkvater
parents: 5198
diff changeset
   852
			bv->descending_sort_order ^= true;
5955
fe61588d5188 (svn r8621) -Codechange: assigned new numbers to the VEH_(type) enum so that VEH_Train is 0, VEH_Road is 1 and so on
bjarni
parents: 5944
diff changeset
   853
			_last_sort_order[bv->vehicle_type] = bv->descending_sort_order;
5781
404262bfa03d (svn r8333) -Codechange: when invalidating a build window list, set a flag instead of rebuilding the list and then rebuild it the next time it's redrawn
bjarni
parents: 5780
diff changeset
   854
			bv->regenerate_list = true;
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   855
			SetWindowDirty(w);
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   856
			break;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   857
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   858
		case BUILD_VEHICLE_WIDGET_LIST: {
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   859
			uint i = (e->we.click.pt.y - 26) / GetVehicleListHeight(bv->vehicle_type) + w->vscroll.pos;
5201
a4279a8884ea (svn r7316) -Codechange: Make train-build-gui and aircraft-build-gui (unified) look more alike.
Darkvater
parents: 5200
diff changeset
   860
			uint num_items = EngList_Count(&bv->eng_list);
a4279a8884ea (svn r7316) -Codechange: Make train-build-gui and aircraft-build-gui (unified) look more alike.
Darkvater
parents: 5200
diff changeset
   861
			bv->sel_engine = (i < num_items) ? bv->eng_list[i] : INVALID_ENGINE;
a4279a8884ea (svn r7316) -Codechange: Make train-build-gui and aircraft-build-gui (unified) look more alike.
Darkvater
parents: 5200
diff changeset
   862
			SetWindowDirty(w);
5187
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   863
			break;
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   864
		}
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   865
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   866
		case BUILD_VEHICLE_WIDGET_SORT_TEXT: case BUILD_VEHICLE_WIDGET_SORT_DROPDOWN: // Select sorting criteria dropdown menu
5955
fe61588d5188 (svn r8621) -Codechange: assigned new numbers to the VEH_(type) enum so that VEH_Train is 0, VEH_Road is 1 and so on
bjarni
parents: 5944
diff changeset
   867
			ShowDropDownMenu(w, _sort_listing[bv->vehicle_type], bv->sort_criteria, BUILD_VEHICLE_WIDGET_SORT_DROPDOWN, 0, 0);
5785
5205f8b7fef5 (svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
bjarni
parents: 5784
diff changeset
   868
			break;
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   869
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   870
		case BUILD_VEHICLE_WIDGET_BUILD: {
5187
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   871
			EngineID sel_eng = bv->sel_engine;
5192
771a8421a4cc (svn r7305) -Codestyle: Indentation fixes
peter1138
parents: 5187
diff changeset
   872
			if (sel_eng != INVALID_ENGINE) {
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   873
				switch (bv->vehicle_type) {
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   874
					case VEH_TRAIN:
5868
94430141c189 (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: 5824
diff changeset
   875
						DoCommandP(w->window_number, sel_eng, 0, (RailVehInfo(sel_eng)->railveh_type == RAILVEH_WAGON) ? CcBuildWagon : CcBuildLoco,
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   876
								   CMD_BUILD_RAIL_VEHICLE | CMD_MSG(STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE));
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   877
						break;
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   878
					case VEH_ROAD:
5786
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   879
						DoCommandP(w->window_number, sel_eng, 0, CcBuildRoadVeh, CMD_BUILD_ROAD_VEH | CMD_MSG(STR_9009_CAN_T_BUILD_ROAD_VEHICLE));
9bbd2d7f2a30 (svn r8338) -Codechange: merged road vehicle build window into the other ones
bjarni
parents: 5785
diff changeset
   880
						break;
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   881
					case VEH_SHIP:
5783
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   882
						DoCommandP(w->window_number, sel_eng, 0, CcBuildShip, CMD_BUILD_SHIP | CMD_MSG(STR_980D_CAN_T_BUILD_SHIP));
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
   883
						break;
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   884
					case VEH_AIRCRAFT:
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   885
						DoCommandP(w->window_number, sel_eng, 0, CcBuildAircraft, CMD_BUILD_AIRCRAFT | CMD_MSG(STR_A008_CAN_T_BUILD_AIRCRAFT));
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   886
						break;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   887
				}
5192
771a8421a4cc (svn r7305) -Codestyle: Indentation fixes
peter1138
parents: 5187
diff changeset
   888
			}
5187
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   889
			break;
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   890
		}
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   891
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   892
		case BUILD_VEHICLE_WIDGET_RENAME: {
5187
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   893
			EngineID sel_eng = bv->sel_engine;
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   894
			if (sel_eng != INVALID_ENGINE) {
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   895
				StringID str = STR_NULL;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   896
5187
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   897
				bv->rename_engine = sel_eng;
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   898
				switch (bv->vehicle_type) {
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   899
					case VEH_TRAIN:    str = STR_886A_RENAME_TRAIN_VEHICLE_TYPE; break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   900
					case VEH_ROAD:     str = STR_9036_RENAME_ROAD_VEHICLE_TYPE;  break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   901
					case VEH_SHIP:     str = STR_9838_RENAME_SHIP_TYPE;          break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   902
					case VEH_AIRCRAFT: str = STR_A039_RENAME_AIRCRAFT_TYPE;      break;
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   903
				}
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   904
				ShowQueryString(GetCustomEngineName(sel_eng), str, 31, 160, w, CS_ALPHANUMERAL);
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   905
			}
5187
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   906
			break;
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   907
		}
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   908
	}
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   909
}
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   910
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   911
static void NewVehicleWndProc(Window *w, WindowEvent *e)
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   912
{
5187
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   913
	buildvehicle_d *bv = &WP(w, buildvehicle_d);
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   914
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   915
	switch (e->event) {
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   916
		case WE_INVALIDATE_DATA:
5781
404262bfa03d (svn r8333) -Codechange: when invalidating a build window list, set a flag instead of rebuilding the list and then rebuild it the next time it's redrawn
bjarni
parents: 5780
diff changeset
   917
			bv->regenerate_list = true;
404262bfa03d (svn r8333) -Codechange: when invalidating a build window list, set a flag instead of rebuilding the list and then rebuild it the next time it's redrawn
bjarni
parents: 5780
diff changeset
   918
			SetWindowDirty(w);
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   919
			break;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   920
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   921
		case WE_DESTROY:
5187
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   922
			EngList_Destroy(&bv->eng_list);
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   923
			break;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   924
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   925
		case WE_PAINT:
5781
404262bfa03d (svn r8333) -Codechange: when invalidating a build window list, set a flag instead of rebuilding the list and then rebuild it the next time it's redrawn
bjarni
parents: 5780
diff changeset
   926
			if (bv->regenerate_list) {
404262bfa03d (svn r8333) -Codechange: when invalidating a build window list, set a flag instead of rebuilding the list and then rebuild it the next time it's redrawn
bjarni
parents: 5780
diff changeset
   927
				bv->regenerate_list = false;
404262bfa03d (svn r8333) -Codechange: when invalidating a build window list, set a flag instead of rebuilding the list and then rebuild it the next time it's redrawn
bjarni
parents: 5780
diff changeset
   928
				GenerateBuildList(w);
404262bfa03d (svn r8333) -Codechange: when invalidating a build window list, set a flag instead of rebuilding the list and then rebuild it the next time it's redrawn
bjarni
parents: 5780
diff changeset
   929
			}
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   930
			DrawBuildVehicleWindow(w);
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   931
			break;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   932
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   933
		case WE_CLICK:
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   934
			BuildVehicleClickEvent(w, e);
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   935
			break;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   936
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   937
		case WE_ON_EDIT_TEXT: {
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   938
			if (e->we.edittext.str[0] != '\0') {
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   939
				StringID str = STR_NULL;
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   940
				_cmd_text = e->we.edittext.str;
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   941
				switch (bv->vehicle_type) {
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   942
					case VEH_TRAIN:    str = STR_886B_CAN_T_RENAME_TRAIN_VEHICLE; break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   943
					case VEH_ROAD:     str = STR_9037_CAN_T_RENAME_ROAD_VEHICLE;  break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   944
					case VEH_SHIP:     str = STR_9839_CAN_T_RENAME_SHIP_TYPE;     break;
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
   945
					case VEH_AIRCRAFT: str = STR_A03A_CAN_T_RENAME_AIRCRAFT_TYPE; break;
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   946
				}
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   947
				DoCommandP(0, bv->rename_engine, 0, NULL, CMD_RENAME_ENGINE | CMD_MSG(str));
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   948
			}
5187
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   949
			break;
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   950
		}
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   951
6123
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6091
diff changeset
   952
		case WE_DROPDOWN_SELECT: // we have selected a dropdown item in the list
5187
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   953
			if (bv->sort_criteria != e->we.dropdown.index) {
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   954
				bv->sort_criteria = e->we.dropdown.index;
5955
fe61588d5188 (svn r8621) -Codechange: assigned new numbers to the VEH_(type) enum so that VEH_Train is 0, VEH_Road is 1 and so on
bjarni
parents: 5944
diff changeset
   955
				_last_sort_criteria[bv->vehicle_type] = bv->sort_criteria;
5781
404262bfa03d (svn r8333) -Codechange: when invalidating a build window list, set a flag instead of rebuilding the list and then rebuild it the next time it's redrawn
bjarni
parents: 5780
diff changeset
   956
				bv->regenerate_list = true;
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   957
			}
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   958
			SetWindowDirty(w);
5192
771a8421a4cc (svn r7305) -Codestyle: Indentation fixes
peter1138
parents: 5187
diff changeset
   959
			break;
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   960
5192
771a8421a4cc (svn r7305) -Codestyle: Indentation fixes
peter1138
parents: 5187
diff changeset
   961
		case WE_RESIZE:
5824
8398b44ad3bc (svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents: 5823
diff changeset
   962
			if (e->we.sizing.diff.x != 0) ResizeButtons(w, BUILD_VEHICLE_WIDGET_BUILD, BUILD_VEHICLE_WIDGET_RENAME);
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   963
			if (e->we.sizing.diff.y == 0) break;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   964
6026
775982557e0e (svn r8749) -Regression r8331: fixed signed/unsigned issue that could create too many lines in build vehicle windows and crash the game
bjarni
parents: 6024
diff changeset
   965
			w->vscroll.cap += e->we.sizing.diff.y / (int)GetVehicleListHeight(bv->vehicle_type);
5192
771a8421a4cc (svn r7305) -Codestyle: Indentation fixes
peter1138
parents: 5187
diff changeset
   966
			w->widget[BUILD_VEHICLE_WIDGET_LIST].data = (w->vscroll.cap << 8) + 1;
771a8421a4cc (svn r7305) -Codestyle: Indentation fixes
peter1138
parents: 5187
diff changeset
   967
			break;
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   968
	}
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   969
}
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   970
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   971
static const WindowDesc _build_vehicle_desc = {
6386
bc26d1d67aa2 (svn r9476) -Codechange: Make build windows for all vehicle types the same width.
maedhros
parents: 6385
diff changeset
   972
	WDP_AUTO, WDP_AUTO, 240, 256,
5893
7e431a4abebb (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5874
diff changeset
   973
	WC_BUILD_VEHICLE, WC_NONE,
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   974
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_RESIZABLE,
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   975
	_build_vehicle_widgets,
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   976
	NewVehicleWndProc
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   977
};
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   978
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   979
void ShowBuildVehicleWindow(TileIndex tile, byte type)
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   980
{
5187
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   981
	buildvehicle_d *bv;
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   982
	Window *w;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   983
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   984
	assert(IsPlayerBuildableVehicleType(type));
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   985
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   986
	DeleteWindowById(WC_BUILD_VEHICLE, tile);
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   987
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   988
	w = AllocateWindowDescFront(&_build_vehicle_desc, tile);
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   989
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   990
	if (w == NULL) return;
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   991
5199
9a75b853ad22 (svn r7314) -Cleanup: const, whitespace, coding style and variable usage.
Darkvater
parents: 5198
diff changeset
   992
	w->caption_color = (tile != 0) ? GetTileOwner(tile) : _local_player;
5187
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   993
	w->resize.step_height = GetVehicleListHeight(type);
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
   994
	w->vscroll.cap = w->resize.step_height == 24 ? 4 : 8;
5187
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   995
	w->widget[BUILD_VEHICLE_WIDGET_LIST].data = (w->vscroll.cap << 8) + 1;
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
   996
5187
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   997
	bv = &WP(w, buildvehicle_d);
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
   998
	EngList_Create(&bv->eng_list);
5781
404262bfa03d (svn r8333) -Codechange: when invalidating a build window list, set a flag instead of rebuilding the list and then rebuild it the next time it's redrawn
bjarni
parents: 5780
diff changeset
   999
	bv->sel_engine      = INVALID_ENGINE;
5187
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
  1000
5781
404262bfa03d (svn r8333) -Codechange: when invalidating a build window list, set a flag instead of rebuilding the list and then rebuild it the next time it's redrawn
bjarni
parents: 5780
diff changeset
  1001
	bv->vehicle_type    = type;
404262bfa03d (svn r8333) -Codechange: when invalidating a build window list, set a flag instead of rebuilding the list and then rebuild it the next time it's redrawn
bjarni
parents: 5780
diff changeset
  1002
	bv->regenerate_list = false;
5187
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
  1003
5955
fe61588d5188 (svn r8621) -Codechange: assigned new numbers to the VEH_(type) enum so that VEH_Train is 0, VEH_Road is 1 and so on
bjarni
parents: 5944
diff changeset
  1004
	bv->sort_criteria         = _last_sort_criteria[type];
fe61588d5188 (svn r8621) -Codechange: assigned new numbers to the VEH_(type) enum so that VEH_Train is 0, VEH_Road is 1 and so on
bjarni
parents: 5944
diff changeset
  1005
	bv->descending_sort_order = _last_sort_order[type];
5784
a3b23f0fc794 (svn r8336) -Codechange: added function to translate vehicle types to 0,1,2... for use for index to arrays
bjarni
parents: 5783
diff changeset
  1006
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
  1007
	switch (type) {
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
  1008
		case VEH_TRAIN:
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6386
diff changeset
  1009
			WP(w, buildvehicle_d).filter.railtype = (tile == 0) ? RAILTYPE_END : GetRailType(tile);
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
  1010
			ResizeWindow(w, 0, 16);
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
  1011
			break;
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
  1012
		case VEH_ROAD:
6386
bc26d1d67aa2 (svn r9476) -Codechange: Make build windows for all vehicle types the same width.
maedhros
parents: 6385
diff changeset
  1013
			ResizeWindow(w, 0, 16);
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
  1014
		case VEH_SHIP:
5783
e207986ffe71 (svn r8335) -Feature: the build ship window is now also resizable horizontally and contains sorting options
bjarni
parents: 5782
diff changeset
  1015
			break;
6259
471b91a4b1d8 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6237
diff changeset
  1016
		case VEH_AIRCRAFT:
6024
37e72f8f6a99 (svn r8747) -Fix
tron
parents: 6023
diff changeset
  1017
			bv->filter.flags =
6032
fe6a454ac1ba (svn r8755) -Fix
tron
parents: 6026
diff changeset
  1018
				tile == 0 ? AirportFTAClass::ALL : GetStationByTile(tile)->Airport()->flags;
5187
12dc9dfa6af6 (svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents: 5070
diff changeset
  1019
			break;
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
  1020
	}
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
  1021
	SetupWindowStrings(w, type);
5824
8398b44ad3bc (svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents: 5823
diff changeset
  1022
	ResizeButtons(w, BUILD_VEHICLE_WIDGET_BUILD, BUILD_VEHICLE_WIDGET_RENAME);
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
  1023
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
  1024
	w->resize.width  = w->width;
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
  1025
	w->resize.height = w->height;
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
  1026
5781
404262bfa03d (svn r8333) -Codechange: when invalidating a build window list, set a flag instead of rebuilding the list and then rebuild it the next time it's redrawn
bjarni
parents: 5780
diff changeset
  1027
	GenerateBuildList(w); // generate the list, since we need it in the next line
5779
a694ce1457bb (svn r8331) -Feature: the train and aircraft build windows are now resizable in horizontal direction as well
bjarni
parents: 5668
diff changeset
  1028
	/* Select the first engine in the list as default when opening the window */
5200
dfd31d4f2410 (svn r7315) -Fix: Have the first engine in the list be selected once again when the window is opened
Darkvater
parents: 5199
diff changeset
  1029
	if (EngList_Count(&bv->eng_list) > 0) bv->sel_engine = bv->eng_list[0];
4800
5afc1bfc7a85 (svn r6722) -Codechange: [aircraft build window] moved aircraft build window to a file of it's own
bjarni
parents:
diff changeset
  1030
}