src/autoreplace_gui.cpp
author rubidium
Tue, 22 Jan 2008 21:00:30 +0000
branchNewGRF_ports
changeset 6872 1c4a4a609f85
parent 6871 5a9dc001e1ad
child 6877 889301acc299
permissions -rw-r--r--
(svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
2186
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     1
/* $Id$ */
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     2
6443
b8f06d8eb7be (svn r8853) -Cleanup: doxygen changes. Correct forgotten c files to cpp files with the @file tag as well as a few general comments style
belugas
parents: 6206
diff changeset
     3
/** @file autoreplace_gui.cpp */
b8f06d8eb7be (svn r8853) -Cleanup: doxygen changes. Correct forgotten c files to cpp files with the @file tag as well as a few general comments style
belugas
parents: 6206
diff changeset
     4
164
0cbdf3c9bde1 (svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
diff changeset
     5
#include "stdafx.h"
1891
92a3b0aa0946 (svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents: 1859
diff changeset
     6
#include "openttd.h"
1299
0a6510cc889b (svn r1803) Move debugging stuff into files of it's own
tron
parents: 1294
diff changeset
     7
#include "debug.h"
842
ebfd36603ab9 (svn r1323) Adding autoreplace feature
bjarni
parents: 594
diff changeset
     8
#include "gui.h"
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
     9
#include "command_func.h"
2159
3b634157c3b2 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2154
diff changeset
    10
#include "variables.h"
3b634157c3b2 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2154
diff changeset
    11
#include "vehicle_gui.h"
2962
dbd168a4703a (svn r3524) - Split newgrf features from engine.[ch] into newgrf_engine.[ch], and add the new files to project files.
peter1138
parents: 2951
diff changeset
    12
#include "newgrf_engine.h"
6719
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
    13
#include "group.h"
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    14
#include "rail.h"
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    15
#include "strings_func.h"
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    16
#include "window_func.h"
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    17
#include "vehicle_func.h"
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    18
#include "autoreplace_func.h"
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    19
#include "gfx_func.h"
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    20
#include "player_func.h"
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    21
#include "widgets/dropdown_func.h"
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
    22
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    23
#include "table/sprites.h"
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    24
#include "table/strings.h"
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
    25
6060
8388a1bcb7c8 (svn r8371) -Codechange: [autoreplace GUI] moved the autoreplace GUI to a file of it's own
bjarni
parents: 6059
diff changeset
    26
static RailType _railtype_selected_in_replace_gui;
505
11582dcada49 (svn r813) Push two tables from vehicle_gui.h into vehicle_gui.c - they were in the binary 48 (!) times.
tron
parents: 243
diff changeset
    27
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
    28
static bool _rebuild_left_list;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
    29
static bool _rebuild_right_list;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
    30
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
    31
static const StringID _rail_types_list[] = {
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
    32
	STR_RAIL_VEHICLES,
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
    33
	STR_ELRAIL_VEHICLES,
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
    34
	STR_MONORAIL_VEHICLES,
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
    35
	STR_MAGLEV_VEHICLES,
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
    36
	INVALID_STRING_ID
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
    37
};
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
    38
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    39
enum ReplaceVehicleWindowWidgets {
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    40
	RVW_WIDGET_LEFT_DETAILS = 3,
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    41
	RVW_WIDGET_START_REPLACE,
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    42
	RVW_WIDGET_INFO_TAB,
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    43
	RVW_WIDGET_STOP_REPLACE,
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    44
	RVW_WIDGET_LEFT_MATRIX,
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    45
	RVW_WIDGET_LEFT_SCROLLBAR,
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    46
	RVW_WIDGET_RIGHT_MATRIX,
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    47
	RVW_WIDGET_RIGHT_SCROLLBAR,
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    48
	RVW_WIDGET_RIGHT_DETAILS,
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    49
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    50
	RVW_WIDGET_TRAIN_ENGINEWAGON_TOGGLE,
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    51
	RVW_WIDGET_TRAIN_FLUFF_LEFT,
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    52
	RVW_WIDGET_TRAIN_RAILTYPE_DROPDOWN,
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    53
	RVW_WIDGET_TRAIN_FLUFF_RIGHT,
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    54
	RVW_WIDGET_TRAIN_WAGONREMOVE_TOGGLE,
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    55
};
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    56
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    57
static int CDECL TrainEngineNumberSorter(const void *a, const void *b)
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    58
{
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    59
	const EngineID va = *(const EngineID*)a;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    60
	const EngineID vb = *(const EngineID*)b;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    61
	int r = ListPositionOfEngine(va) - ListPositionOfEngine(vb);
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    62
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    63
	return r;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    64
}
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    65
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
    66
/* General Vehicle GUI based procedures that are independent of vehicle types */
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6443
diff changeset
    67
void InitializeVehiclesGuiList()
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
    68
{
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
    69
	_railtype_selected_in_replace_gui = RAILTYPE_RAIL;
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
    70
}
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
    71
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
    72
/** Rebuild the left autoreplace list if an engine is removed or added
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
    73
 * @param e Engine to check if it is removed or added
6720
35756db7e577 (svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents: 6719
diff changeset
    74
 * @param id_g The group the engine belongs to
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
    75
 *  Note: this function only works if it is called either
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
    76
 *   - when a new vehicle is build, but before it's counted in num_engines
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
    77
 *   - when a vehicle is deleted and after it's substracted from num_engines
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
    78
 *   - when not changing the count (used when changing replace orders)
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
    79
 */
6720
35756db7e577 (svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents: 6719
diff changeset
    80
void InvalidateAutoreplaceWindow(EngineID e, GroupID id_g)
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
    81
{
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
    82
	Player *p = GetPlayer(_local_player);
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
    83
	byte type = GetEngine(e)->type;
6868
7eb395287b3d (svn r11037) [NewGRF_ports] -Sync: with trunk r10844:11035.
rubidium
parents: 6743
diff changeset
    84
	uint num_engines = GetGroupNumEngines(_local_player, id_g, e);
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
    85
6720
35756db7e577 (svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents: 6719
diff changeset
    86
	if (num_engines == 0 || p->num_engines[e] == 0) {
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
    87
		/* We don't have any of this engine type.
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
    88
		 * Either we just sold the last one, we build a new one or we stopped replacing it.
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
    89
		 * In all cases, we need to update the left list */
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
    90
		_rebuild_left_list = true;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
    91
	} else {
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
    92
		_rebuild_left_list = false;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
    93
	}
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
    94
	_rebuild_right_list = false;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
    95
	InvalidateWindowData(WC_REPLACE_VEHICLE, type);
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
    96
}
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
    97
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
    98
/** When an engine is made buildable or is removed from being buildable, add/remove it from the build/autoreplace lists
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
    99
 * @param type The type of engine
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   100
 */
6719
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   101
void AddRemoveEngineFromAutoreplaceAndBuildWindows(VehicleType type)
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   102
{
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   103
	_rebuild_left_list = false; // left list is only for the vehicles the player owns and is not related to being buildable
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   104
	_rebuild_right_list = true;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   105
	InvalidateWindowData(WC_REPLACE_VEHICLE, type); // Update the autoreplace window
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   106
	InvalidateWindowClassesData(WC_BUILD_VEHICLE); // The build windows needs updating as well
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   107
}
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   108
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   109
/** Get the default cargo type for an engine
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   110
 * @param engine the EngineID to get the cargo for
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   111
 * @return the cargo type carried by the engine (CT_INVALID if engine got no cargo capacity)
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   112
 */
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   113
static CargoID EngineCargo(EngineID engine)
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   114
{
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   115
	if (engine == INVALID_ENGINE) return CT_INVALID; // surely INVALID_ENGINE can't carry anything but CT_INVALID
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   116
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   117
	switch (GetEngine(engine)->type) {
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   118
		default: NOT_REACHED();
6585
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6573
diff changeset
   119
		case VEH_TRAIN:
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   120
			if (RailVehInfo(engine)->capacity == 0) return CT_INVALID; // no capacity -> can't carry cargo
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   121
			return RailVehInfo(engine)->cargo_type;
6585
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6573
diff changeset
   122
		case VEH_ROAD:       return RoadVehInfo(engine)->cargo_type;
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6573
diff changeset
   123
		case VEH_SHIP:       return ShipVehInfo(engine)->cargo_type;
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6573
diff changeset
   124
		case VEH_AIRCRAFT:   return CT_PASSENGERS; // all planes are build with passengers by default
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   125
	}
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   126
}
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   127
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   128
/** Figure out if an engine should be added to a list
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   129
 * @param e The EngineID
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   130
 * @param draw_left If true, then the left list is drawn (the engines specific to the railtype you selected)
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   131
 * @param show_engines if truem then locomotives are drawn, else wagons (never both)
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   132
 * @return true if the engine should be in the list (based on this check)
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   133
 */
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   134
static bool GenerateReplaceRailList(EngineID e, bool draw_left, bool show_engines)
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   135
{
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   136
	const RailVehicleInfo *rvi = RailVehInfo(e);
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   137
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   138
	/* Ensure that the wagon/engine selection fits the engine. */
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   139
	if ((rvi->railveh_type == RAILVEH_WAGON) == show_engines) return false;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   140
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   141
	if (draw_left && show_engines) {
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   142
		/* Ensure that the railtype is specific to the selected one */
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   143
		if (rvi->railtype != _railtype_selected_in_replace_gui) return false;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   144
	} else {
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   145
		/* Ensure that it's a compatible railtype to the selected one (like electric <-> diesel)
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   146
		 * The vehicle do not have to have power on the railtype in question, only able to drive (pulled if needed) */
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   147
		if (!IsCompatibleRail(rvi->railtype, _railtype_selected_in_replace_gui)) return false;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   148
	}
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   149
	return true;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   150
}
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   151
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   152
/** Figure out if two engines got at least one type of cargo in common (refitting if needed)
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   153
 * @param engine_a one of the EngineIDs
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   154
 * @param engine_b the other EngineID
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   155
 * @return true if they can both carry the same type of cargo (or at least one of them got no capacity at all)
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   156
 */
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   157
static bool EnginesGotCargoInCommon(EngineID engine_a, EngineID engine_b)
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   158
{
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   159
	CargoID a = EngineCargo(engine_a);
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   160
	CargoID b = EngineCargo(engine_b);
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   161
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   162
	 /* we should always be able to refit to/from locomotives without capacity
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   163
	  * Because of that, CT_INVALID shoudl always return true */
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   164
	if (a == CT_INVALID || b == CT_INVALID || a == b) return true; // they carry no ro the same type by default
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   165
	if (EngInfo(engine_a)->refit_mask & EngInfo(engine_b)->refit_mask) return true; // both can refit to the same
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   166
	if (CanRefitTo(engine_a, b) || CanRefitTo(engine_b, a)) return true; // one can refit to what the other one carries
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   167
	return false;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   168
}
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   169
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   170
/** Generate a list
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   171
 * @param w Window, that contains the list
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   172
 * @param draw_left true if generating the left list, otherwise false
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   173
 */
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   174
static void GenerateReplaceVehList(Window *w, bool draw_left)
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   175
{
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   176
	EngineID e;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   177
	EngineID selected_engine = INVALID_ENGINE;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   178
	byte type = w->window_number;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   179
	byte i = draw_left ? 0 : 1;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   180
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   181
	EngineList *list = &WP(w, replaceveh_d).list[i];
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   182
	EngList_RemoveAll(list);
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   183
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   184
	FOR_ALL_ENGINEIDS_OF_TYPE(e, type) {
6585
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6573
diff changeset
   185
		if (type == VEH_TRAIN && !GenerateReplaceRailList(e, draw_left, WP(w, replaceveh_d).wagon_btnstate)) continue; // special rules for trains
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   186
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   187
		if (draw_left) {
6719
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   188
			const GroupID selected_group = WP(w, replaceveh_d).sel_group;
6868
7eb395287b3d (svn r11037) [NewGRF_ports] -Sync: with trunk r10844:11035.
rubidium
parents: 6743
diff changeset
   189
			const uint num_engines = GetGroupNumEngines(_local_player, selected_group, e);
6719
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   190
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   191
			/* Skip drawing the engines we don't have any of and haven't set for replacement */
6719
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   192
			if (num_engines == 0 && EngineReplacementForPlayer(GetPlayer(_local_player), e, selected_group) == INVALID_ENGINE) continue;
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   193
		} else {
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   194
			/* This is for engines we can replace to and they should depend on what we selected to replace from */
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   195
			if (!IsEngineBuildable(e, type, _local_player)) continue; // we need to be able to build the engine
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   196
			if (!EnginesGotCargoInCommon(e, WP(w, replaceveh_d).sel_engine[0])) continue; // the engines needs to be able to carry the same cargo
6719
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   197
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   198
			/* Road vehicles can't be replaced by trams and vice-versa */
6871
5a9dc001e1ad (svn r11566) [NewGRF_ports] -Sync: with trunk r11218:r11565.
rubidium
parents: 6868
diff changeset
   199
			if (type == VEH_ROAD && HasBit(EngInfo(WP(w, replaceveh_d).sel_engine[0])->misc_flags, EF_ROAD_TRAM) != HasBit(EngInfo(e)->misc_flags, EF_ROAD_TRAM)) continue;
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   200
			if (e == WP(w, replaceveh_d).sel_engine[0]) continue; // we can't replace an engine into itself (that would be autorenew)
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   201
		}
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   202
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   203
		EngList_Add(list, e);
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   204
		if (e == WP(w, replaceveh_d).sel_engine[i]) selected_engine = e; // The selected engine is still in the list
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   205
	}
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   206
	WP(w, replaceveh_d).sel_engine[i] = selected_engine; // update which engine we selected (the same or none, if it's not in the list anymore)
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   207
	if (type == VEH_TRAIN) EngList_Sort(list, &TrainEngineNumberSorter);
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   208
}
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   209
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   210
/** Generate the lists
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   211
 * @param w Window containing the lists
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   212
 */
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   213
static void GenerateLists(Window *w)
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   214
{
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   215
	EngineID e = WP(w, replaceveh_d).sel_engine[0];
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   216
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   217
	if (WP(w, replaceveh_d).update_left == true) {
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   218
		/* We need to rebuild the left list */
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   219
		GenerateReplaceVehList(w, true);
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   220
		SetVScrollCount(w, EngList_Count(&WP(w, replaceveh_d).list[0]));
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   221
		if (WP(w, replaceveh_d).init_lists && WP(w, replaceveh_d).sel_engine[0] == INVALID_ENGINE && EngList_Count(&WP(w, replaceveh_d).list[0]) != 0) {
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   222
			WP(w, replaceveh_d).sel_engine[0] = WP(w, replaceveh_d).list[0][0];
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   223
		}
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   224
	}
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   225
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   226
	if (WP(w, replaceveh_d).update_right || e != WP(w, replaceveh_d).sel_engine[0]) {
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   227
		/* Either we got a request to rebuild the right list or the left list selected a different engine */
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   228
		if (WP(w, replaceveh_d).sel_engine[0] == INVALID_ENGINE) {
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   229
			/* Always empty the right list when nothing is selected in the left list */
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   230
			EngList_RemoveAll(&WP(w, replaceveh_d).list[1]);
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   231
			WP(w, replaceveh_d).sel_engine[1] = INVALID_ENGINE;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   232
		} else {
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   233
			GenerateReplaceVehList(w, false);
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   234
			SetVScroll2Count(w, EngList_Count(&WP(w, replaceveh_d).list[1]));
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   235
			if (WP(w, replaceveh_d).init_lists && WP(w, replaceveh_d).sel_engine[1] == INVALID_ENGINE && EngList_Count(&WP(w, replaceveh_d).list[1]) != 0) {
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   236
				WP(w, replaceveh_d).sel_engine[1] = WP(w, replaceveh_d).list[1][0];
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   237
			}
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   238
		}
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   239
	}
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   240
	/* Reset the flags about needed updates */
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   241
	WP(w, replaceveh_d).update_left  = false;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   242
	WP(w, replaceveh_d).update_right = false;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   243
	WP(w, replaceveh_d).init_lists   = false;
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   244
}
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   245
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   246
6719
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   247
void DrawEngineList(VehicleType type, int x, int y, const EngineList eng_list, uint16 min, uint16 max, EngineID selected_id, bool show_count, GroupID selected_group);
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   248
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   249
static void ReplaceVehicleWndProc(Window *w, WindowEvent *e)
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   250
{
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   251
	/* Strings for the pulldown menu */
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   252
	static const StringID _vehicle_type_names[] = {
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   253
		STR_019F_TRAIN,
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   254
		STR_019C_ROAD_VEHICLE,
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   255
		STR_019E_SHIP,
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   256
		STR_019D_AIRCRAFT
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   257
	};
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   258
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   259
	switch (e->event) {
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   260
		case WE_CREATE:
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   261
			WP(w, replaceveh_d).wagon_btnstate = true; // start with locomotives (all other vehicles will not read this bool)
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   262
			EngList_Create(&WP(w, replaceveh_d).list[0]);
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   263
			EngList_Create(&WP(w, replaceveh_d).list[1]);
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   264
			WP(w, replaceveh_d).update_left   = true;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   265
			WP(w, replaceveh_d).update_right  = true;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   266
			WP(w, replaceveh_d).init_lists    = true;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   267
			WP(w, replaceveh_d).sel_engine[0] = INVALID_ENGINE;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   268
			WP(w, replaceveh_d).sel_engine[1] = INVALID_ENGINE;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   269
			break;
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   270
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   271
		case WE_PAINT: {
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   272
			if (WP(w, replaceveh_d).update_left || WP(w, replaceveh_d).update_right) GenerateLists(w);
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   273
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   274
			Player *p = GetPlayer(_local_player);
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   275
			EngineID selected_id[2];
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   276
			const GroupID selected_group = WP(w, replaceveh_d).sel_group;
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   277
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   278
			selected_id[0] = WP(w, replaceveh_d).sel_engine[0];
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   279
			selected_id[1] = WP(w, replaceveh_d).sel_engine[1];
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   280
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   281
			/* Disable the "Start Replacing" button if:
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   282
			 *    Either list is empty
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   283
			 * or The selected replacement engine has a replacement (to prevent loops)
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   284
			 * or The right list (new replacement) has the existing replacement vehicle selected */
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   285
			w->SetWidgetDisabledState(RVW_WIDGET_START_REPLACE,
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   286
										 selected_id[0] == INVALID_ENGINE ||
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   287
										 selected_id[1] == INVALID_ENGINE ||
6719
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   288
										 EngineReplacementForPlayer(p, selected_id[1], selected_group) != INVALID_ENGINE ||
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   289
										 EngineReplacementForPlayer(p, selected_id[0], selected_group) == selected_id[1]);
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   290
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   291
			/* Disable the "Stop Replacing" button if:
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   292
			 *   The left list (existing vehicle) is empty
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   293
			 *   or The selected vehicle has no replacement set up */
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   294
			w->SetWidgetDisabledState(RVW_WIDGET_STOP_REPLACE,
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   295
										 selected_id[0] == INVALID_ENGINE ||
6719
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   296
										 !EngineHasReplacementForPlayer(p, selected_id[0], selected_group));
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   297
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   298
			/* now the actual drawing of the window itself takes place */
6206
67358999d80d (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: 6195
diff changeset
   299
			SetDParam(0, _vehicle_type_names[w->window_number]);
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   300
6585
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6573
diff changeset
   301
			if (w->window_number == VEH_TRAIN) {
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   302
				/* set on/off for renew_keep_length */
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   303
				SetDParam(1, p->renew_keep_length ? STR_CONFIG_PATCHES_ON : STR_CONFIG_PATCHES_OFF);
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   304
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   305
				/* set wagon/engine button */
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   306
				SetDParam(2, WP(w, replaceveh_d).wagon_btnstate ? STR_ENGINES : STR_WAGONS);
6719
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   307
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   308
				/* sets the colour of that art thing */
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   309
				w->widget[RVW_WIDGET_TRAIN_FLUFF_LEFT].color  = _player_colors[_local_player];
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   310
				w->widget[RVW_WIDGET_TRAIN_FLUFF_RIGHT].color = _player_colors[_local_player];
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   311
			}
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   312
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   313
			if (w->window_number == VEH_TRAIN) {
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   314
				/* Show the selected railtype in the pulldown menu */
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   315
				RailType railtype = _railtype_selected_in_replace_gui;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   316
				w->widget[RVW_WIDGET_TRAIN_RAILTYPE_DROPDOWN].data = _rail_types_list[railtype];
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   317
			}
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   318
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   319
			DrawWindowWidgets(w);
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   320
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   321
			/* sets up the string for the vehicle that is being replaced to */
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   322
			if (selected_id[0] != INVALID_ENGINE) {
6719
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   323
				if (!EngineHasReplacementForPlayer(p, selected_id[0], selected_group)) {
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   324
					SetDParam(0, STR_NOT_REPLACING);
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   325
				} else {
6720
35756db7e577 (svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents: 6719
diff changeset
   326
					SetDParam(0, STR_ENGINE_NAME);
35756db7e577 (svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents: 6719
diff changeset
   327
					SetDParam(1, EngineReplacementForPlayer(p, selected_id[0], selected_group));
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   328
				}
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   329
			} else {
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   330
				SetDParam(0, STR_NOT_REPLACING_VEHICLE_SELECTED);
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   331
			}
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   332
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   333
			DrawString(145, w->widget[RVW_WIDGET_INFO_TAB].top + 1, STR_02BD, TC_BLACK);
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   334
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   335
			/* Draw the lists */
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   336
			for(byte i = 0; i < 2; i++) {
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   337
				uint widget     = (i == 0) ? RVW_WIDGET_LEFT_MATRIX : RVW_WIDGET_RIGHT_MATRIX;
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   338
				EngineList list = WP(w, replaceveh_d).list[i]; // which list to draw
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   339
				EngineID start  = i == 0 ? w->vscroll.pos : w->vscroll2.pos; // what is the offset for the start (scrolling)
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   340
				EngineID end    = min((i == 0 ? w->vscroll.cap : w->vscroll2.cap) + start, EngList_Count(&list));
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   341
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   342
				/* Do the actual drawing */
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   343
				DrawEngineList((VehicleType)w->window_number, w->widget[widget].left + 2, w->widget[widget].top + 1, list, start, end, WP(w, replaceveh_d).sel_engine[i], i == 0, selected_group);
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   344
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   345
				/* Also draw the details if an engine is selected */
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   346
				if (WP(w, replaceveh_d).sel_engine[i] != INVALID_ENGINE) {
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   347
					const Widget *wi = &w->widget[i == 0 ? RVW_WIDGET_LEFT_DETAILS : RVW_WIDGET_RIGHT_DETAILS];
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   348
					DrawVehiclePurchaseInfo(wi->left + 2, wi->top + 1, wi->right - wi->left - 2, WP(w, replaceveh_d).sel_engine[i]);
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   349
				}
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   350
			}
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   351
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   352
		} break;   // end of paint
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   353
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   354
		case WE_CLICK: {
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   355
			switch (e->we.click.widget) {
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   356
				case RVW_WIDGET_TRAIN_ENGINEWAGON_TOGGLE:
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   357
					WP(w, replaceveh_d).wagon_btnstate = !(WP(w, replaceveh_d).wagon_btnstate);
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   358
					WP(w, replaceveh_d).update_left = true;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   359
					WP(w, replaceveh_d).init_lists  = true;
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   360
					SetWindowDirty(w);
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   361
					break;
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   362
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   363
				case RVW_WIDGET_TRAIN_RAILTYPE_DROPDOWN: /* Railtype selection dropdown menu */
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   364
					ShowDropDownMenu(w, _rail_types_list, _railtype_selected_in_replace_gui, RVW_WIDGET_TRAIN_RAILTYPE_DROPDOWN, 0, ~GetPlayer(_local_player)->avail_railtypes);
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   365
					break;
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   366
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   367
				case RVW_WIDGET_TRAIN_WAGONREMOVE_TOGGLE: /* toggle renew_keep_length */
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   368
					DoCommandP(0, 5, GetPlayer(_local_player)->renew_keep_length ? 0 : 1, NULL, CMD_SET_AUTOREPLACE);
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   369
					break;
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   370
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   371
				case RVW_WIDGET_START_REPLACE: { /* Start replacing */
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   372
					EngineID veh_from = WP(w, replaceveh_d).sel_engine[0];
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   373
					EngineID veh_to = WP(w, replaceveh_d).sel_engine[1];
6719
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   374
					DoCommandP(0, 3 + (WP(w, replaceveh_d).sel_group << 16) , veh_from + (veh_to << 16), NULL, CMD_SET_AUTOREPLACE);
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   375
				} break;
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   376
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   377
				case RVW_WIDGET_STOP_REPLACE: { /* Stop replacing */
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   378
					EngineID veh_from = WP(w, replaceveh_d).sel_engine[0];
6719
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   379
					DoCommandP(0, 3 + (WP(w, replaceveh_d).sel_group << 16), veh_from + (INVALID_ENGINE << 16), NULL, CMD_SET_AUTOREPLACE);
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   380
				} break;
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   381
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   382
				case RVW_WIDGET_LEFT_MATRIX:
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   383
				case RVW_WIDGET_RIGHT_MATRIX: {
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   384
					uint i = (e->we.click.pt.y - 14) / w->resize.step_height;
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   385
					uint16 click_scroll_pos = e->we.click.widget == RVW_WIDGET_LEFT_MATRIX ? w->vscroll.pos : w->vscroll2.pos;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   386
					uint16 click_scroll_cap = e->we.click.widget == RVW_WIDGET_LEFT_MATRIX ? w->vscroll.cap : w->vscroll2.cap;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   387
					byte click_side         = e->we.click.widget == RVW_WIDGET_LEFT_MATRIX ? 0 : 1;
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   388
					uint16 engine_count     = EngList_Count(&WP(w, replaceveh_d).list[click_side]);
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   389
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   390
					if (i < click_scroll_cap) {
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   391
						i += click_scroll_pos;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   392
						EngineID e = engine_count > i ? WP(w, replaceveh_d).list[click_side][i] : INVALID_ENGINE;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   393
						if (e == WP(w, replaceveh_d).sel_engine[click_side]) break; // we clicked the one we already selected
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   394
						WP(w, replaceveh_d).sel_engine[click_side] = e;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   395
						if (click_side == 0) {
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   396
							WP(w, replaceveh_d).update_right = true;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   397
							WP(w, replaceveh_d).init_lists   = true;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   398
						}
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   399
						SetWindowDirty(w);
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   400
						}
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   401
					break;
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   402
					}
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   403
			}
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   404
			break;
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   405
		}
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   406
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   407
		case WE_DROPDOWN_SELECT: { /* we have selected a dropdown item in the list */
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   408
			RailType temp = (RailType)e->we.dropdown.index;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   409
			if (temp == _railtype_selected_in_replace_gui) break; // we didn't select a new one. No need to change anything
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   410
			_railtype_selected_in_replace_gui = temp;
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   411
			/* Reset scrollbar positions */
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   412
			w->vscroll.pos  = 0;
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   413
			w->vscroll2.pos = 0;
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   414
			/* Rebuild the lists */
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   415
			WP(w, replaceveh_d).update_left  = true;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   416
			WP(w, replaceveh_d).update_right = true;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   417
			WP(w, replaceveh_d).init_lists   = true;
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   418
			SetWindowDirty(w);
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   419
		} break;
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   420
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   421
		case WE_RESIZE:
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   422
			w->vscroll.cap  += e->we.sizing.diff.y / (int)w->resize.step_height;
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   423
			w->vscroll2.cap += e->we.sizing.diff.y / (int)w->resize.step_height;
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   424
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   425
			w->widget[RVW_WIDGET_LEFT_MATRIX].data  = (w->vscroll.cap  << 8) + 1;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   426
			w->widget[RVW_WIDGET_RIGHT_MATRIX].data = (w->vscroll2.cap << 8) + 1;
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   427
			break;
6195
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   428
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   429
		case WE_INVALIDATE_DATA:
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   430
			if (_rebuild_left_list) WP(w, replaceveh_d).update_left = true;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   431
			if (_rebuild_right_list) WP(w, replaceveh_d).update_right = true;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   432
			SetWindowDirty(w);
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   433
			break;
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   434
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   435
		case WE_DESTROY:
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   436
			EngList_RemoveAll(&WP(w, replaceveh_d).list[0]);
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   437
			EngList_RemoveAll(&WP(w, replaceveh_d).list[1]);
b90cf92697b9 (svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents: 6144
diff changeset
   438
		break;
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   439
	}
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   440
}
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   441
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   442
static const Widget _replace_rail_vehicle_widgets[] = {
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   443
{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,       STR_018B_CLOSE_WINDOW},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   444
{    WWT_CAPTION,   RESIZE_NONE,    14,    11,   443,     0,    13, STR_REPLACE_VEHICLES_WHITE, STR_018C_WINDOW_TITLE_DRAG_THIS},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   445
{  WWT_STICKYBOX,   RESIZE_NONE,    14,   444,   455,     0,    13, STR_NULL,       STR_STICKY_BUTTON},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   446
{      WWT_PANEL,     RESIZE_TB,    14,     0,   227,   126,   227, 0x0,            STR_NULL},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   447
{ WWT_PUSHTXTBTN,     RESIZE_TB,    14,     0,   138,   240,   251, STR_REPLACE_VEHICLES_START, STR_REPLACE_HELP_START_BUTTON},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   448
{      WWT_PANEL,     RESIZE_TB,    14,   139,   316,   228,   239, 0x0,            STR_REPLACE_HELP_REPLACE_INFO_TAB},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   449
{ WWT_PUSHTXTBTN,     RESIZE_TB,    14,   306,   443,   240,   251, STR_REPLACE_VEHICLES_STOP,  STR_REPLACE_HELP_STOP_BUTTON},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   450
{     WWT_MATRIX, RESIZE_BOTTOM,    14,     0,   215,    14,   125, 0x801,          STR_REPLACE_HELP_LEFT_ARRAY},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   451
{  WWT_SCROLLBAR, RESIZE_BOTTOM,    14,   216,   227,    14,   125, STR_NULL,       STR_0190_SCROLL_BAR_SCROLLS_LIST},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   452
{     WWT_MATRIX, RESIZE_BOTTOM,    14,   228,   443,    14,   125, 0x801,          STR_REPLACE_HELP_RIGHT_ARRAY},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   453
{ WWT_SCROLL2BAR, RESIZE_BOTTOM,    14,   444,   455,    14,   125, STR_NULL,       STR_0190_SCROLL_BAR_SCROLLS_LIST},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   454
{      WWT_PANEL,     RESIZE_TB,    14,   228,   455,   126,   227, 0x0,            STR_NULL},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   455
// train specific stuff
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   456
{ WWT_PUSHTXTBTN,     RESIZE_TB,    14,     0,   138,   228,   239, STR_REPLACE_ENGINE_WAGON_SELECT,       STR_REPLACE_ENGINE_WAGON_SELECT_HELP},  // widget 12
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   457
{      WWT_PANEL,     RESIZE_TB,    14,   139,   153,   240,   251, 0x0,            STR_NULL},
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
   458
{   WWT_DROPDOWN,     RESIZE_TB,    14,   154,   289,   240,   251, 0x0,            STR_REPLACE_HELP_RAILTYPE},
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   459
{      WWT_PANEL,     RESIZE_TB,    14,   290,   305,   240,   251, 0x0,            STR_NULL},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   460
{ WWT_PUSHTXTBTN,     RESIZE_TB,    14,   317,   455,   228,   239, STR_REPLACE_REMOVE_WAGON,       STR_REPLACE_REMOVE_WAGON_HELP},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   461
// end of train specific stuff
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   462
{  WWT_RESIZEBOX,     RESIZE_TB,    14,   444,   455,   240,   251, STR_NULL,       STR_RESIZE_BUTTON},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   463
{   WIDGETS_END},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   464
};
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   465
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   466
static const Widget _replace_road_vehicle_widgets[] = {
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   467
{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,                    STR_018B_CLOSE_WINDOW},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   468
{    WWT_CAPTION,   RESIZE_NONE,    14,    11,   443,     0,    13, STR_REPLACE_VEHICLES_WHITE,  STR_018C_WINDOW_TITLE_DRAG_THIS},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   469
{  WWT_STICKYBOX,   RESIZE_NONE,    14,   444,   455,     0,    13, STR_NULL,                    STR_STICKY_BUTTON},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   470
{      WWT_PANEL,     RESIZE_TB,    14,     0,   227,   126,   217, 0x0,                         STR_NULL},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   471
{ WWT_PUSHTXTBTN,     RESIZE_TB,    14,     0,   138,   218,   229, STR_REPLACE_VEHICLES_START,  STR_REPLACE_HELP_START_BUTTON},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   472
{      WWT_PANEL,     RESIZE_TB,    14,   139,   305,   218,   229, 0x0,                         STR_REPLACE_HELP_REPLACE_INFO_TAB},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   473
{ WWT_PUSHTXTBTN,     RESIZE_TB,    14,   306,   443,   218,   229, STR_REPLACE_VEHICLES_STOP,   STR_REPLACE_HELP_STOP_BUTTON},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   474
{     WWT_MATRIX, RESIZE_BOTTOM,    14,     0,   215,    14,   125, 0x801,                       STR_REPLACE_HELP_LEFT_ARRAY},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   475
{  WWT_SCROLLBAR, RESIZE_BOTTOM,    14,   216,   227,    14,   125, STR_NULL,                    STR_0190_SCROLL_BAR_SCROLLS_LIST},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   476
{     WWT_MATRIX, RESIZE_BOTTOM,    14,   228,   443,    14,   125, 0x801,                       STR_REPLACE_HELP_RIGHT_ARRAY},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   477
{ WWT_SCROLL2BAR, RESIZE_BOTTOM,    14,   444,   455,    14,   125, STR_NULL,                    STR_0190_SCROLL_BAR_SCROLLS_LIST},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   478
{      WWT_PANEL,     RESIZE_TB,    14,   228,   455,   126,   217, 0x0,                         STR_NULL},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   479
{  WWT_RESIZEBOX,     RESIZE_TB,    14,   444,   455,   218,   229, STR_NULL,                    STR_RESIZE_BUTTON},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   480
{   WIDGETS_END},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   481
};
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   482
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   483
static const Widget _replace_ship_aircraft_vehicle_widgets[] = {
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   484
{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,                    STR_018B_CLOSE_WINDOW},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   485
{    WWT_CAPTION,   RESIZE_NONE,    14,    11,   443,     0,    13, STR_REPLACE_VEHICLES_WHITE,  STR_018C_WINDOW_TITLE_DRAG_THIS},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   486
{  WWT_STICKYBOX,   RESIZE_NONE,    14,   444,   455,     0,    13, STR_NULL,                    STR_STICKY_BUTTON},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   487
{      WWT_PANEL,     RESIZE_TB,    14,     0,   227,   110,   201, 0x0,                         STR_NULL},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   488
{ WWT_PUSHTXTBTN,     RESIZE_TB,    14,     0,   138,   202,   213, STR_REPLACE_VEHICLES_START,  STR_REPLACE_HELP_START_BUTTON},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   489
{      WWT_PANEL,     RESIZE_TB,    14,   139,   305,   202,   213, 0x0,                         STR_REPLACE_HELP_REPLACE_INFO_TAB},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   490
{ WWT_PUSHTXTBTN,     RESIZE_TB,    14,   306,   443,   202,   213, STR_REPLACE_VEHICLES_STOP,   STR_REPLACE_HELP_STOP_BUTTON},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   491
{     WWT_MATRIX, RESIZE_BOTTOM,    14,     0,   215,    14,   109, 0x401,                       STR_REPLACE_HELP_LEFT_ARRAY},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   492
{  WWT_SCROLLBAR, RESIZE_BOTTOM,    14,   216,   227,    14,   109, STR_NULL,                    STR_0190_SCROLL_BAR_SCROLLS_LIST},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   493
{     WWT_MATRIX, RESIZE_BOTTOM,    14,   228,   443,    14,   109, 0x401,                       STR_REPLACE_HELP_RIGHT_ARRAY},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   494
{ WWT_SCROLL2BAR, RESIZE_BOTTOM,    14,   444,   455,    14,   109, STR_NULL,                    STR_0190_SCROLL_BAR_SCROLLS_LIST},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   495
{      WWT_PANEL,     RESIZE_TB,    14,   228,   455,   110,   201, 0x0,                         STR_NULL},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   496
{  WWT_RESIZEBOX,     RESIZE_TB,    14,   444,   455,   202,   213, STR_NULL,                    STR_RESIZE_BUTTON},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   497
{   WIDGETS_END},
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   498
};
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   499
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   500
static const WindowDesc _replace_rail_vehicle_desc = {
6743
cabfaa4a0295 (svn r10766) [NewGRF_ports] -Sync: with trunk r10651-10765
richk
parents: 6725
diff changeset
   501
	WDP_AUTO, WDP_AUTO, 456, 252, 456, 252,
6144
5a0ffbf27ced (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 6119
diff changeset
   502
	WC_REPLACE_VEHICLE, WC_NONE,
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   503
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   504
	_replace_rail_vehicle_widgets,
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   505
	ReplaceVehicleWndProc
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   506
};
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   507
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   508
static const WindowDesc _replace_road_vehicle_desc = {
6743
cabfaa4a0295 (svn r10766) [NewGRF_ports] -Sync: with trunk r10651-10765
richk
parents: 6725
diff changeset
   509
	WDP_AUTO, WDP_AUTO, 456, 230, 456, 230,
6144
5a0ffbf27ced (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 6119
diff changeset
   510
	WC_REPLACE_VEHICLE, WC_NONE,
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   511
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   512
	_replace_road_vehicle_widgets,
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   513
	ReplaceVehicleWndProc
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   514
};
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   515
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   516
static const WindowDesc _replace_ship_aircraft_vehicle_desc = {
6743
cabfaa4a0295 (svn r10766) [NewGRF_ports] -Sync: with trunk r10651-10765
richk
parents: 6725
diff changeset
   517
	WDP_AUTO, WDP_AUTO, 456, 214, 456, 214,
6144
5a0ffbf27ced (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 6119
diff changeset
   518
	WC_REPLACE_VEHICLE, WC_NONE,
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   519
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   520
	_replace_ship_aircraft_vehicle_widgets,
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   521
	ReplaceVehicleWndProc
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   522
};
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   523
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   524
6719
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   525
void ShowReplaceGroupVehicleWindow(GroupID id_g, VehicleType vehicletype)
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   526
{
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   527
	Window *w;
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   528
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   529
	DeleteWindowById(WC_REPLACE_VEHICLE, vehicletype);
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   530
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   531
	switch (vehicletype) {
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   532
		default: NOT_REACHED();
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   533
		case VEH_TRAIN:
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   534
			w = AllocateWindowDescFront(&_replace_rail_vehicle_desc, vehicletype);
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   535
			w->vscroll.cap  = 8;
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   536
			w->resize.step_height = 14;
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   537
			WP(w, replaceveh_d).wagon_btnstate = true;
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   538
			break;
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   539
		case VEH_ROAD:
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   540
			w = AllocateWindowDescFront(&_replace_road_vehicle_desc, vehicletype);
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   541
			w->vscroll.cap  = 8;
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   542
			w->resize.step_height = 14;
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   543
			break;
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   544
		case VEH_SHIP:
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   545
		case VEH_AIRCRAFT:
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   546
			w = AllocateWindowDescFront(&_replace_ship_aircraft_vehicle_desc, vehicletype);
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   547
			w->vscroll.cap  = 4;
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   548
			w->resize.step_height = 24;
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   549
			break;
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   550
	}
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   551
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   552
	w->caption_color = _local_player;
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   553
	WP(w, replaceveh_d).sel_group = id_g;
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6585
diff changeset
   554
	w->vscroll2.cap = w->vscroll.cap;   // these two are always the same
6059
14d457867d5e (svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents: 6052
diff changeset
   555
}