author | Tero Marttila <terom@fixme.fi> |
Tue, 22 Jul 2008 23:20:33 +0300 | |
changeset 11184 | 88c967f1422b |
parent 10764 | e46596b87826 |
permissions | -rw-r--r-- |
2186 | 1 |
/* $Id$ */ |
2 |
||
10429
1b99254f9607
(svn r12971) -Documentation: add @file in files that missed them and add something more than whitespace as description of files that don't have a description.
rubidium
parents:
10382
diff
changeset
|
3 |
/** @file autoreplace_gui.cpp GUI for autoreplace handling. */ |
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
|
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 | 8 |
#include "gui.h" |
8612
6414fc21c2f3
(svn r11677) -Codechange: move price and command related types/functions to their respective places.
rubidium
parents:
8610
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" |
7139
4ae3ab180d05
(svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents:
7134
diff
changeset
|
13 |
#include "group.h" |
8599
b609cdeeff3f
(svn r11664) -Codechange: use more specific ("rail_type.h" instead of "rail.h" that includes way more than only "rail_type.h") includes at some places.
rubidium
parents:
8578
diff
changeset
|
14 |
#include "rail.h" |
8610
17cc343a23dd
(svn r11675) -Codechange: split the string types from the string functions.
rubidium
parents:
8602
diff
changeset
|
15 |
#include "strings_func.h" |
8627
448ebf3a8291
(svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents:
8612
diff
changeset
|
16 |
#include "window_func.h" |
8640
1e93b81e96d2
(svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents:
8627
diff
changeset
|
17 |
#include "vehicle_func.h" |
8708
0c29fbc79be4
(svn r11775) -Codechange: move all autoreplace/autorenew functions to a single location.
rubidium
parents:
8670
diff
changeset
|
18 |
#include "autoreplace_func.h" |
8720
4e60c30e2006
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium
parents:
8708
diff
changeset
|
19 |
#include "gfx_func.h" |
8750
fdd6054e7bae
(svn r11818) -Codechange: split player.h into smaller pieces.
rubidium
parents:
8720
diff
changeset
|
20 |
#include "player_func.h" |
8780
6f3f3ec6c69a
(svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
8760
diff
changeset
|
21 |
#include "widgets/dropdown_func.h" |
9282
2bb9703aeb39
(svn r12490) -Codechange: rename engine.h to engine_func.h and remove unneeded inclusions of engine.h and/or replace them with engine_type.h.
rubidium
parents:
9266
diff
changeset
|
22 |
#include "engine_func.h" |
10382
d1d4452acbfc
(svn r12924) -Feature: Introducing the so called 'engine pool' which primarily removes the fixed engine type limits and also happens to allow (with the patch option 'dynamic_engines') multiple NewGRF vehicle sets to coexist.
peter1138
parents:
10376
diff
changeset
|
23 |
#include "engine_base.h" |
10596
0ee9eba64c9c
(svn r13140) -Codechange: move the gui-list-sorting out of window_gui.h so window_gui.h only needs to be included in *_gui.cpp.
rubidium
parents:
10595
diff
changeset
|
24 |
#include "window_gui.h" |
10737
0f704b9afd93
(svn r13287) -Codechange: move engine list gui code away from engine.cpp (and its headers) to engine_gui.cpp
peter1138
parents:
10641
diff
changeset
|
25 |
#include "engine_gui.h" |
6059
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
26 |
|
8760
ce0891c412ce
(svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents:
8750
diff
changeset
|
27 |
#include "table/sprites.h" |
ce0891c412ce
(svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents:
8750
diff
changeset
|
28 |
#include "table/strings.h" |
ce0891c412ce
(svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents:
8750
diff
changeset
|
29 |
|
10764
e46596b87826
(svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents:
10763
diff
changeset
|
30 |
void DrawEngineList(VehicleType type, int x, int y, const GUIEngineList *eng_list, uint16 min, uint16 max, EngineID selected_id, int count_location, GroupID selected_group); |
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
|
31 |
|
6059
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
32 |
static const StringID _rail_types_list[] = { |
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
33 |
STR_RAIL_VEHICLES, |
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
34 |
STR_ELRAIL_VEHICLES, |
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
35 |
STR_MONORAIL_VEHICLES, |
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
36 |
STR_MAGLEV_VEHICLES, |
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
37 |
INVALID_STRING_ID |
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
38 |
}; |
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
39 |
|
8841
e015d01a960e
(svn r11911) -Codechange: use enum for autoreplace window widgets
peter1138
parents:
8829
diff
changeset
|
40 |
enum ReplaceVehicleWindowWidgets { |
10302
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
41 |
RVW_WIDGET_LEFT_MATRIX = 3, |
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
42 |
RVW_WIDGET_LEFT_SCROLLBAR, |
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
43 |
RVW_WIDGET_RIGHT_MATRIX, |
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
44 |
RVW_WIDGET_RIGHT_SCROLLBAR, |
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
45 |
RVW_WIDGET_LEFT_DETAILS, |
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
46 |
RVW_WIDGET_RIGHT_DETAILS, |
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
47 |
|
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
48 |
/* Button row */ |
8841
e015d01a960e
(svn r11911) -Codechange: use enum for autoreplace window widgets
peter1138
parents:
8829
diff
changeset
|
49 |
RVW_WIDGET_START_REPLACE, |
e015d01a960e
(svn r11911) -Codechange: use enum for autoreplace window widgets
peter1138
parents:
8829
diff
changeset
|
50 |
RVW_WIDGET_INFO_TAB, |
e015d01a960e
(svn r11911) -Codechange: use enum for autoreplace window widgets
peter1138
parents:
8829
diff
changeset
|
51 |
RVW_WIDGET_STOP_REPLACE, |
10302
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
52 |
RVW_WIDGET_RESIZE, |
8841
e015d01a960e
(svn r11911) -Codechange: use enum for autoreplace window widgets
peter1138
parents:
8829
diff
changeset
|
53 |
|
10302
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
54 |
/* Train only widgets */ |
8841
e015d01a960e
(svn r11911) -Codechange: use enum for autoreplace window widgets
peter1138
parents:
8829
diff
changeset
|
55 |
RVW_WIDGET_TRAIN_ENGINEWAGON_TOGGLE, |
e015d01a960e
(svn r11911) -Codechange: use enum for autoreplace window widgets
peter1138
parents:
8829
diff
changeset
|
56 |
RVW_WIDGET_TRAIN_FLUFF_LEFT, |
e015d01a960e
(svn r11911) -Codechange: use enum for autoreplace window widgets
peter1138
parents:
8829
diff
changeset
|
57 |
RVW_WIDGET_TRAIN_RAILTYPE_DROPDOWN, |
e015d01a960e
(svn r11911) -Codechange: use enum for autoreplace window widgets
peter1138
parents:
8829
diff
changeset
|
58 |
RVW_WIDGET_TRAIN_FLUFF_RIGHT, |
e015d01a960e
(svn r11911) -Codechange: use enum for autoreplace window widgets
peter1138
parents:
8829
diff
changeset
|
59 |
RVW_WIDGET_TRAIN_WAGONREMOVE_TOGGLE, |
e015d01a960e
(svn r11911) -Codechange: use enum for autoreplace window widgets
peter1138
parents:
8829
diff
changeset
|
60 |
}; |
e015d01a960e
(svn r11911) -Codechange: use enum for autoreplace window widgets
peter1138
parents:
8829
diff
changeset
|
61 |
|
8670
121000504b2c
(svn r11737) -Fix: Reinstate NewGRF-specified engine list order in autoreplace window.
peter1138
parents:
8640
diff
changeset
|
62 |
static int CDECL TrainEngineNumberSorter(const void *a, const void *b) |
121000504b2c
(svn r11737) -Fix: Reinstate NewGRF-specified engine list order in autoreplace window.
peter1138
parents:
8640
diff
changeset
|
63 |
{ |
121000504b2c
(svn r11737) -Fix: Reinstate NewGRF-specified engine list order in autoreplace window.
peter1138
parents:
8640
diff
changeset
|
64 |
const EngineID va = *(const EngineID*)a; |
121000504b2c
(svn r11737) -Fix: Reinstate NewGRF-specified engine list order in autoreplace window.
peter1138
parents:
8640
diff
changeset
|
65 |
const EngineID vb = *(const EngineID*)b; |
121000504b2c
(svn r11737) -Fix: Reinstate NewGRF-specified engine list order in autoreplace window.
peter1138
parents:
8640
diff
changeset
|
66 |
int r = ListPositionOfEngine(va) - ListPositionOfEngine(vb); |
121000504b2c
(svn r11737) -Fix: Reinstate NewGRF-specified engine list order in autoreplace window.
peter1138
parents:
8640
diff
changeset
|
67 |
|
121000504b2c
(svn r11737) -Fix: Reinstate NewGRF-specified engine list order in autoreplace window.
peter1138
parents:
8640
diff
changeset
|
68 |
return r; |
121000504b2c
(svn r11737) -Fix: Reinstate NewGRF-specified engine list order in autoreplace window.
peter1138
parents:
8640
diff
changeset
|
69 |
} |
121000504b2c
(svn r11737) -Fix: Reinstate NewGRF-specified engine list order in autoreplace window.
peter1138
parents:
8640
diff
changeset
|
70 |
|
6195
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
71 |
/** 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
|
72 |
* @param e Engine to check if it is removed or added |
7592
48055c5dd43d
(svn r10363) -Fix [FS#911]: invalidating autoreplace windows didn't take account of vehicle group (Matthias Wolf)
peter1138
parents:
7555
diff
changeset
|
73 |
* @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
|
74 |
* 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
|
75 |
* - 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
|
76 |
* - 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
|
77 |
* - 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
|
78 |
*/ |
7592
48055c5dd43d
(svn r10363) -Fix [FS#911]: invalidating autoreplace windows didn't take account of vehicle group (Matthias Wolf)
peter1138
parents:
7555
diff
changeset
|
79 |
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
|
80 |
{ |
6195
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
81 |
Player *p = GetPlayer(_local_player); |
7977
b10b1a884892
(svn r10992) -Fix [FS#1132]: huge amount of vehicles in the "ungrouped" group. Patch by frosch.
rubidium
parents:
7837
diff
changeset
|
82 |
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
|
83 |
|
7592
48055c5dd43d
(svn r10363) -Fix [FS#911]: invalidating autoreplace windows didn't take account of vehicle group (Matthias Wolf)
peter1138
parents:
7555
diff
changeset
|
84 |
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
|
85 |
/* 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
|
86 |
* 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
|
87 |
* In all cases, we need to update the left list */ |
10492
25ee8db4551e
(svn r13035) -Codechange: remove two needless global-ish variables.
rubidium
parents:
10476
diff
changeset
|
88 |
InvalidateWindowData(WC_REPLACE_VEHICLE, GetEngine(e)->type, true); |
6195
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
89 |
} |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
90 |
} |
6059
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
91 |
|
6195
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
92 |
/** 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
|
93 |
* @param type The type of engine |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
94 |
*/ |
7134
c5a90dd41166
(svn r9869) -Codechange: replace some bytes with VehicleType, i.e. more type strictness.
rubidium
parents:
6894
diff
changeset
|
95 |
void AddRemoveEngineFromAutoreplaceAndBuildWindows(VehicleType type) |
6195
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
96 |
{ |
10492
25ee8db4551e
(svn r13035) -Codechange: remove two needless global-ish variables.
rubidium
parents:
10476
diff
changeset
|
97 |
InvalidateWindowData(WC_REPLACE_VEHICLE, type, false); // Update the autoreplace window |
6195
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
98 |
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
|
99 |
} |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
100 |
|
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
101 |
/** 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
|
102 |
* @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
|
103 |
* @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
|
104 |
*/ |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
105 |
static CargoID EngineCargo(EngineID engine) |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
106 |
{ |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
107 |
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
|
108 |
|
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
109 |
switch (GetEngine(engine)->type) { |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
110 |
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
|
111 |
case VEH_TRAIN: |
6195
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
112 |
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
|
113 |
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
|
114 |
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
|
115 |
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
|
116 |
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
|
117 |
} |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
118 |
} |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
119 |
|
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
120 |
/** 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
|
121 |
* @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
|
122 |
* @param engine_b the other EngineID |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
123 |
* @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
|
124 |
*/ |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
125 |
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
|
126 |
{ |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
127 |
CargoID a = EngineCargo(engine_a); |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
128 |
CargoID b = EngineCargo(engine_b); |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
129 |
|
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
130 |
/* 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
|
131 |
* 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
|
132 |
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
|
133 |
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
|
134 |
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
|
135 |
return false; |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
136 |
} |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
137 |
|
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
138 |
/** |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
139 |
* Window for the autoreplacing of vehicles. |
6195
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
140 |
*/ |
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
141 |
class ReplaceVehicleWindow : public Window { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
142 |
byte sel_index[2]; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
143 |
EngineID sel_engine[2]; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
144 |
uint16 count[2]; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
145 |
bool wagon_btnstate; ///< true means engine is selected |
10764
e46596b87826
(svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents:
10763
diff
changeset
|
146 |
GUIEngineList list[2]; |
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
147 |
bool update_left; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
148 |
bool update_right; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
149 |
bool init_lists; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
150 |
GroupID sel_group; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
151 |
static RailType sel_railtype; |
6195
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
152 |
|
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
153 |
/** Figure out if an engine should be added to a list |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
154 |
* @param e The EngineID |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
155 |
* @param draw_left If true, then the left list is drawn (the engines specific to the railtype you selected) |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
156 |
* @param show_engines if truem then locomotives are drawn, else wagons (never both) |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
157 |
* @return true if the engine should be in the list (based on this check) |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
158 |
*/ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
159 |
bool GenerateReplaceRailList(EngineID e, bool draw_left, bool show_engines) |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
160 |
{ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
161 |
const RailVehicleInfo *rvi = RailVehInfo(e); |
7139
4ae3ab180d05
(svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents:
7134
diff
changeset
|
162 |
|
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
163 |
/* Ensure that the wagon/engine selection fits the engine. */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
164 |
if ((rvi->railveh_type == RAILVEH_WAGON) == show_engines) return false; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
165 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
166 |
if (draw_left && show_engines) { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
167 |
/* Ensure that the railtype is specific to the selected one */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
168 |
if (rvi->railtype != this->sel_railtype) return false; |
6059
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
169 |
} else { |
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
170 |
/* Ensure that it's a compatible railtype to the selected one (like electric <-> diesel) |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
171 |
* The vehicle do not have to have power on the railtype in question, only able to drive (pulled if needed) */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
172 |
if (!IsCompatibleRail(rvi->railtype, this->sel_railtype)) return false; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
173 |
} |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
174 |
return true; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
175 |
} |
7183
23b20a982228
(svn r9919) -Codechange: prepare some more places for more road types.
rubidium
parents:
7139
diff
changeset
|
176 |
|
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
177 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
178 |
/** Generate a list |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
179 |
* @param w Window, that contains the list |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
180 |
* @param draw_left true if generating the left list, otherwise false |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
181 |
*/ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
182 |
void GenerateReplaceVehList(Window *w, bool draw_left) |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
183 |
{ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
184 |
EngineID selected_engine = INVALID_ENGINE; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
185 |
VehicleType type = (VehicleType)this->window_number; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
186 |
byte i = draw_left ? 0 : 1; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
187 |
|
10764
e46596b87826
(svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents:
10763
diff
changeset
|
188 |
GUIEngineList *list = &this->list[i]; |
e46596b87826
(svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents:
10763
diff
changeset
|
189 |
list->Clear(); |
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
190 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
191 |
const Engine *e; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
192 |
FOR_ALL_ENGINES_OF_TYPE(e, type) { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
193 |
EngineID eid = e->index; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
194 |
if (type == VEH_TRAIN && !GenerateReplaceRailList(eid, draw_left, this->wagon_btnstate)) continue; // special rules for trains |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
195 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
196 |
if (draw_left) { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
197 |
const GroupID selected_group = this->sel_group; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
198 |
const uint num_engines = GetGroupNumEngines(_local_player, selected_group, eid); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
199 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
200 |
/* Skip drawing the engines we don't have any of and haven't set for replacement */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
201 |
if (num_engines == 0 && EngineReplacementForPlayer(GetPlayer(_local_player), eid, selected_group) == INVALID_ENGINE) continue; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
202 |
} else { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
203 |
/* This is for engines we can replace to and they should depend on what we selected to replace from */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
204 |
if (!IsEngineBuildable(eid, type, _local_player)) continue; // we need to be able to build the engine |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
205 |
if (!EnginesGotCargoInCommon(eid, this->sel_engine[0])) continue; // the engines needs to be able to carry the same cargo |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
206 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
207 |
/* Road vehicles can't be replaced by trams and vice-versa */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
208 |
if (type == VEH_ROAD && HasBit(EngInfo(this->sel_engine[0])->misc_flags, EF_ROAD_TRAM) != HasBit(e->info.misc_flags, EF_ROAD_TRAM)) continue; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
209 |
if (eid == this->sel_engine[0]) continue; // we can't replace an engine into itself (that would be autorenew) |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
210 |
} |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
211 |
|
10764
e46596b87826
(svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents:
10763
diff
changeset
|
212 |
*list->Append() = eid; |
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
213 |
if (eid == this->sel_engine[i]) selected_engine = eid; // The selected engine is still in the list |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
214 |
} |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
215 |
this->sel_engine[i] = selected_engine; // update which engine we selected (the same or none, if it's not in the list anymore) |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
216 |
if (type == VEH_TRAIN) EngList_Sort(list, &TrainEngineNumberSorter); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
217 |
} |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
218 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
219 |
/** Generate the lists */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
220 |
void GenerateLists() |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
221 |
{ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
222 |
EngineID e = this->sel_engine[0]; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
223 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
224 |
if (this->update_left == true) { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
225 |
/* We need to rebuild the left list */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
226 |
GenerateReplaceVehList(this, true); |
10764
e46596b87826
(svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents:
10763
diff
changeset
|
227 |
SetVScrollCount(this, this->list[0].Length()); |
e46596b87826
(svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents:
10763
diff
changeset
|
228 |
if (this->init_lists && this->sel_engine[0] == INVALID_ENGINE && this->list[0].Length() != 0) { |
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
229 |
this->sel_engine[0] = this->list[0][0]; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
230 |
} |
6059
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
231 |
} |
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
232 |
|
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
233 |
if (this->update_right || e != this->sel_engine[0]) { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
234 |
/* Either we got a request to rebuild the right list or the left list selected a different engine */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
235 |
if (this->sel_engine[0] == INVALID_ENGINE) { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
236 |
/* Always empty the right list when nothing is selected in the left list */ |
10764
e46596b87826
(svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents:
10763
diff
changeset
|
237 |
this->list[1].Clear(); |
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
238 |
this->sel_engine[1] = INVALID_ENGINE; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
239 |
} else { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
240 |
GenerateReplaceVehList(this, false); |
10764
e46596b87826
(svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents:
10763
diff
changeset
|
241 |
SetVScroll2Count(this, this->list[1].Length()); |
e46596b87826
(svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents:
10763
diff
changeset
|
242 |
if (this->init_lists && this->sel_engine[1] == INVALID_ENGINE && this->list[1].Length() != 0) { |
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
243 |
this->sel_engine[1] = this->list[1][0]; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
244 |
} |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
245 |
} |
6195
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
246 |
} |
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
247 |
/* Reset the flags about needed updates */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
248 |
this->update_left = false; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
249 |
this->update_right = false; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
250 |
this->init_lists = false; |
6195
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
251 |
} |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
252 |
|
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
253 |
public: |
10532
d95aa7f84bc8
(svn r13076) -Fix [FS#2012]: the wrong autoreplace window would be shown if the vehicle isn't a train.
rubidium
parents:
10525
diff
changeset
|
254 |
ReplaceVehicleWindow(const WindowDesc *desc, VehicleType vehicletype, GroupID id_g) : Window(desc, vehicletype) |
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
255 |
{ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
256 |
this->wagon_btnstate = true; // start with locomotives (all other vehicles will not read this bool) |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
257 |
this->update_left = true; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
258 |
this->update_right = true; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
259 |
this->init_lists = true; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
260 |
this->sel_engine[0] = INVALID_ENGINE; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
261 |
this->sel_engine[1] = INVALID_ENGINE; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
262 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
263 |
this->resize.step_height = GetVehicleListHeight(vehicletype); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
264 |
this->vscroll.cap = this->resize.step_height == 14 ? 8 : 4; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
265 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
266 |
Widget *widget = this->widget; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
267 |
widget[RVW_WIDGET_LEFT_MATRIX].data = widget[RVW_WIDGET_RIGHT_MATRIX].data = (this->vscroll.cap << 8) + 1; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
268 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
269 |
if (vehicletype == VEH_TRAIN) { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
270 |
this->wagon_btnstate = true; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
271 |
/* The train window is bigger so we will move some of the widgets to fit the new size. |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
272 |
* We will start by moving the resize button to the lower right corner. */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
273 |
widget[RVW_WIDGET_RESIZE].top = widget[RVW_WIDGET_TRAIN_ENGINEWAGON_TOGGLE].top; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
274 |
widget[RVW_WIDGET_RESIZE].bottom = widget[RVW_WIDGET_TRAIN_ENGINEWAGON_TOGGLE].bottom; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
275 |
widget[RVW_WIDGET_STOP_REPLACE].right = widget[RVW_WIDGET_RESIZE].right; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
276 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
277 |
/* The detail panel is one line taller for trains so we will move some of the widgets one line (10 pixels) down. */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
278 |
widget[RVW_WIDGET_LEFT_DETAILS].bottom += 10; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
279 |
widget[RVW_WIDGET_RIGHT_DETAILS].bottom += 10; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
280 |
for (int i = RVW_WIDGET_START_REPLACE; i < RVW_WIDGET_RESIZE; i++) { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
281 |
widget[i].top += 10; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
282 |
widget[i].bottom += 10; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
283 |
} |
6195
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
284 |
} else { |
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
285 |
/* Since it's not a train we will hide the train only widgets. */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
286 |
this->SetWidgetsHiddenState(true, |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
287 |
RVW_WIDGET_TRAIN_ENGINEWAGON_TOGGLE, |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
288 |
RVW_WIDGET_TRAIN_FLUFF_LEFT, |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
289 |
RVW_WIDGET_TRAIN_RAILTYPE_DROPDOWN, |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
290 |
RVW_WIDGET_TRAIN_FLUFF_RIGHT, |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
291 |
RVW_WIDGET_TRAIN_WAGONREMOVE_TOGGLE, |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
292 |
WIDGET_LIST_END); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
293 |
} |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
294 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
295 |
ResizeWindow(this, 0, this->resize.step_height * this->vscroll.cap); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
296 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
297 |
/* Set the minimum window size to the current window size */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
298 |
this->resize.width = this->width; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
299 |
this->resize.height = this->height; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
300 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
301 |
this->caption_color = _local_player; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
302 |
this->sel_group = id_g; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
303 |
this->vscroll2.cap = this->vscroll.cap; // these two are always the same |
10498
f198d0a1aab7
(svn r13041) -Fix: calling a virtual function on a not fully constructed object is bound to cause errors.
rubidium
parents:
10494
diff
changeset
|
304 |
|
f198d0a1aab7
(svn r13041) -Fix: calling a virtual function on a not fully constructed object is bound to cause errors.
rubidium
parents:
10494
diff
changeset
|
305 |
this->FindWindowPlacementAndResize(desc); |
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
306 |
} |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
307 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
308 |
virtual void OnPaint() |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
309 |
{ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
310 |
static const StringID _vehicle_type_names[] = { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
311 |
STR_019F_TRAIN, |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
312 |
STR_019C_ROAD_VEHICLE, |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
313 |
STR_019E_SHIP, |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
314 |
STR_019D_AIRCRAFT |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
315 |
}; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
316 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
317 |
if (this->update_left || this->update_right) this->GenerateLists(); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
318 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
319 |
Player *p = GetPlayer(_local_player); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
320 |
EngineID selected_id[2]; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
321 |
const GroupID selected_group = this->sel_group; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
322 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
323 |
selected_id[0] = this->sel_engine[0]; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
324 |
selected_id[1] = this->sel_engine[1]; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
325 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
326 |
/* Disable the "Start Replacing" button if: |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
327 |
* Either list is empty |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
328 |
* or The selected replacement engine has a replacement (to prevent loops) |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
329 |
* or The right list (new replacement) has the existing replacement vehicle selected */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
330 |
this->SetWidgetDisabledState(RVW_WIDGET_START_REPLACE, |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
331 |
selected_id[0] == INVALID_ENGINE || |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
332 |
selected_id[1] == INVALID_ENGINE || |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
333 |
EngineReplacementForPlayer(p, selected_id[1], selected_group) != INVALID_ENGINE || |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
334 |
EngineReplacementForPlayer(p, selected_id[0], selected_group) == selected_id[1]); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
335 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
336 |
/* Disable the "Stop Replacing" button if: |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
337 |
* The left list (existing vehicle) is empty |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
338 |
* or The selected vehicle has no replacement set up */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
339 |
this->SetWidgetDisabledState(RVW_WIDGET_STOP_REPLACE, |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
340 |
selected_id[0] == INVALID_ENGINE || |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
341 |
!EngineHasReplacementForPlayer(p, selected_id[0], selected_group)); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
342 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
343 |
/* now the actual drawing of the window itself takes place */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
344 |
SetDParam(0, _vehicle_type_names[this->window_number]); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
345 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
346 |
if (this->window_number == VEH_TRAIN) { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
347 |
/* set on/off for renew_keep_length */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
348 |
SetDParam(1, p->renew_keep_length ? STR_CONFIG_PATCHES_ON : STR_CONFIG_PATCHES_OFF); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
349 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
350 |
/* set wagon/engine button */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
351 |
SetDParam(2, this->wagon_btnstate ? STR_ENGINES : STR_WAGONS); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
352 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
353 |
/* sets the colour of that art thing */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
354 |
this->widget[RVW_WIDGET_TRAIN_FLUFF_LEFT].color = _player_colors[_local_player]; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
355 |
this->widget[RVW_WIDGET_TRAIN_FLUFF_RIGHT].color = _player_colors[_local_player]; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
356 |
} |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
357 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
358 |
if (this->window_number == VEH_TRAIN) { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
359 |
/* Show the selected railtype in the pulldown menu */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
360 |
this->widget[RVW_WIDGET_TRAIN_RAILTYPE_DROPDOWN].data = _rail_types_list[sel_railtype]; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
361 |
} |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
362 |
|
10595
7957c71b0dfe
(svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium
parents:
10532
diff
changeset
|
363 |
this->DrawWidgets(); |
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
364 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
365 |
/* sets up the string for the vehicle that is being replaced to */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
366 |
if (selected_id[0] != INVALID_ENGINE) { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
367 |
if (!EngineHasReplacementForPlayer(p, selected_id[0], selected_group)) { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
368 |
SetDParam(0, STR_NOT_REPLACING); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
369 |
} else { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
370 |
SetDParam(0, STR_ENGINE_NAME); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
371 |
SetDParam(1, EngineReplacementForPlayer(p, selected_id[0], selected_group)); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
372 |
} |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
373 |
} else { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
374 |
SetDParam(0, STR_NOT_REPLACING_VEHICLE_SELECTED); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
375 |
} |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
376 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
377 |
DrawString(145, this->widget[RVW_WIDGET_INFO_TAB].top + 1, STR_02BD, TC_BLACK); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
378 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
379 |
/* Draw the lists */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
380 |
for (byte i = 0; i < 2; i++) { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
381 |
uint widget = (i == 0) ? RVW_WIDGET_LEFT_MATRIX : RVW_WIDGET_RIGHT_MATRIX; |
10764
e46596b87826
(svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents:
10763
diff
changeset
|
382 |
GUIEngineList *list = &this->list[i]; // which list to draw |
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
383 |
EngineID start = i == 0 ? this->vscroll.pos : this->vscroll2.pos; // what is the offset for the start (scrolling) |
10764
e46596b87826
(svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents:
10763
diff
changeset
|
384 |
EngineID end = min((i == 0 ? this->vscroll.cap : this->vscroll2.cap) + start, list->Length()); |
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
385 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
386 |
/* Do the actual drawing */ |
10763
4849b875130e
(svn r13313) -Fix-ish (r13306): List was copied in another place the autoreplace gui...
peter1138
parents:
10756
diff
changeset
|
387 |
DrawEngineList((VehicleType)this->window_number, this->widget[widget].left + 2, this->widget[widget].top + 1, list, start, end, this->sel_engine[i], i == 0 ? this->widget[RVW_WIDGET_LEFT_MATRIX].right - 2 : 0, selected_group); |
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
388 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
389 |
/* Also draw the details if an engine is selected */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
390 |
if (this->sel_engine[i] != INVALID_ENGINE) { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
391 |
const Widget *wi = &this->widget[i == 0 ? RVW_WIDGET_LEFT_DETAILS : RVW_WIDGET_RIGHT_DETAILS]; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
392 |
int text_end = DrawVehiclePurchaseInfo(wi->left + 2, wi->top + 1, wi->right - wi->left - 2, this->sel_engine[i]); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
393 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
394 |
if (text_end > wi->bottom) { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
395 |
this->SetDirty(); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
396 |
ResizeWindowForWidget(this, i == 0 ? RVW_WIDGET_LEFT_DETAILS : RVW_WIDGET_RIGHT_DETAILS, 0, text_end - wi->bottom); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
397 |
this->SetDirty(); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
398 |
} |
6059
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
399 |
} |
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
400 |
} |
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
401 |
} |
8915
db4c2ae09c4b
(svn r11989) -Fix: Resize autoreplace window to fit purchase information text if it is too large.
peter1138
parents:
8848
diff
changeset
|
402 |
|
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
403 |
virtual void OnClick(Point pt, int widget) |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
404 |
{ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
405 |
switch (widget) { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
406 |
case RVW_WIDGET_TRAIN_ENGINEWAGON_TOGGLE: |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
407 |
this->wagon_btnstate = !(this->wagon_btnstate); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
408 |
this->update_left = true; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
409 |
this->init_lists = true; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
410 |
this->SetDirty(); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
411 |
break; |
6195
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
412 |
|
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
413 |
case RVW_WIDGET_TRAIN_RAILTYPE_DROPDOWN: /* Railtype selection dropdown menu */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
414 |
ShowDropDownMenu(this, _rail_types_list, sel_railtype, RVW_WIDGET_TRAIN_RAILTYPE_DROPDOWN, 0, ~GetPlayer(_local_player)->avail_railtypes); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
415 |
break; |
6059
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
416 |
|
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
417 |
case RVW_WIDGET_TRAIN_WAGONREMOVE_TOGGLE: /* toggle renew_keep_length */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
418 |
DoCommandP(0, 5, GetPlayer(_local_player)->renew_keep_length ? 0 : 1, NULL, CMD_SET_AUTOREPLACE); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
419 |
break; |
10302
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
420 |
|
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
421 |
case RVW_WIDGET_START_REPLACE: { /* Start replacing */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
422 |
EngineID veh_from = this->sel_engine[0]; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
423 |
EngineID veh_to = this->sel_engine[1]; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
424 |
DoCommandP(0, 3 + (this->sel_group << 16) , veh_from + (veh_to << 16), NULL, CMD_SET_AUTOREPLACE); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
425 |
} break; |
6195
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
426 |
|
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
427 |
case RVW_WIDGET_STOP_REPLACE: { /* Stop replacing */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
428 |
EngineID veh_from = this->sel_engine[0]; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
429 |
DoCommandP(0, 3 + (this->sel_group << 16), veh_from + (INVALID_ENGINE << 16), NULL, CMD_SET_AUTOREPLACE); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
430 |
} break; |
6195
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6144
diff
changeset
|
431 |
|
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
432 |
case RVW_WIDGET_LEFT_MATRIX: |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
433 |
case RVW_WIDGET_RIGHT_MATRIX: { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
434 |
uint i = (pt.y - 14) / this->resize.step_height; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
435 |
uint16 click_scroll_pos = widget == RVW_WIDGET_LEFT_MATRIX ? this->vscroll.pos : this->vscroll2.pos; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
436 |
uint16 click_scroll_cap = widget == RVW_WIDGET_LEFT_MATRIX ? this->vscroll.cap : this->vscroll2.cap; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
437 |
byte click_side = widget == RVW_WIDGET_LEFT_MATRIX ? 0 : 1; |
10764
e46596b87826
(svn r13314) -Codechange: Switch EngineList from std::vector to GUIList
peter1138
parents:
10763
diff
changeset
|
438 |
size_t engine_count = this->list[click_side].Length(); |
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
439 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
440 |
if (i < click_scroll_cap) { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
441 |
i += click_scroll_pos; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
442 |
EngineID e = engine_count > i ? this->list[click_side][i] : INVALID_ENGINE; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
443 |
if (e == this->sel_engine[click_side]) break; // we clicked the one we already selected |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
444 |
this->sel_engine[click_side] = e; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
445 |
if (click_side == 0) { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
446 |
this->update_right = true; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
447 |
this->init_lists = true; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
448 |
} |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
449 |
this->SetDirty(); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
450 |
} |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
451 |
break; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
452 |
} |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
453 |
} |
6059
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
454 |
} |
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
455 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
456 |
virtual void OnDropdownSelect(int widget, int index) |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
457 |
{ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
458 |
RailType temp = (RailType)index; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
459 |
if (temp == sel_railtype) return; // we didn't select a new one. No need to change anything |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
460 |
sel_railtype = temp; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
461 |
/* Reset scrollbar positions */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
462 |
this->vscroll.pos = 0; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
463 |
this->vscroll2.pos = 0; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
464 |
/* Rebuild the lists */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
465 |
this->update_left = true; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
466 |
this->update_right = true; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
467 |
this->init_lists = true; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
468 |
this->SetDirty(); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
469 |
} |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
470 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
471 |
virtual void OnResize(Point new_size, Point delta) { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
472 |
this->vscroll.cap += delta.y / (int)this->resize.step_height; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
473 |
this->vscroll2.cap += delta.y / (int)this->resize.step_height; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
474 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
475 |
Widget *widget = this->widget; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
476 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
477 |
widget[RVW_WIDGET_LEFT_MATRIX].data = widget[RVW_WIDGET_RIGHT_MATRIX].data = (this->vscroll2.cap << 8) + 1; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
478 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
479 |
if (delta.x != 0) { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
480 |
/* We changed the width of the window so we have to resize the lists. |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
481 |
* Because ResizeButtons() makes each widget the same size it can't be used on the lists |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
482 |
* because then the lists would have the same size as the scrollbars. |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
483 |
* Instead we use it on the detail panels. |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
484 |
* Afterwards we use the new location of the detail panels (the middle of the window) |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
485 |
* to place the lists. |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
486 |
* This way the lists will have equal size while keeping the width of the scrollbars unchanged. */ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
487 |
ResizeButtons(this, RVW_WIDGET_LEFT_DETAILS, RVW_WIDGET_RIGHT_DETAILS); |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
488 |
widget[RVW_WIDGET_RIGHT_MATRIX].left = widget[RVW_WIDGET_RIGHT_DETAILS].left; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
489 |
widget[RVW_WIDGET_LEFT_SCROLLBAR].right = widget[RVW_WIDGET_LEFT_DETAILS].right; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
490 |
widget[RVW_WIDGET_LEFT_SCROLLBAR].left = widget[RVW_WIDGET_LEFT_SCROLLBAR].right - 11; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
491 |
widget[RVW_WIDGET_LEFT_MATRIX].right = widget[RVW_WIDGET_LEFT_SCROLLBAR].left - 1; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
492 |
} |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
493 |
} |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
494 |
|
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
495 |
virtual void OnInvalidateData(int data) |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
496 |
{ |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
497 |
if (data != 0) { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
498 |
this->update_left = true; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
499 |
} else { |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
500 |
this->update_right = true; |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
501 |
} |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
502 |
} |
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
503 |
}; |
6059
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
504 |
|
10302
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
505 |
static const Widget _replace_vehicle_widgets[] = { |
10296
a1b48fc82022
(svn r12837) -Codechange: Alignment of widget array
belugas
parents:
9282
diff
changeset
|
506 |
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, |
10302
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
507 |
{ WWT_CAPTION, RESIZE_RIGHT, 14, 11, 443, 0, 13, STR_REPLACE_VEHICLES_WHITE, STR_018C_WINDOW_TITLE_DRAG_THIS}, |
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
508 |
{ WWT_STICKYBOX, RESIZE_LR, 14, 444, 455, 0, 13, STR_NULL, STR_STICKY_BUTTON}, |
6059
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
509 |
|
10302
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
510 |
{ WWT_MATRIX, RESIZE_BOTTOM, 14, 0, 215, 14, 13, 0x1, STR_REPLACE_HELP_LEFT_ARRAY}, |
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
511 |
{ WWT_SCROLLBAR, RESIZE_BOTTOM, 14, 216, 227, 14, 13, STR_NULL, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
512 |
{ WWT_MATRIX, RESIZE_LRB, 14, 228, 443, 14, 13, 0x1, STR_REPLACE_HELP_RIGHT_ARRAY}, |
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
513 |
{ WWT_SCROLL2BAR, RESIZE_LRB, 14, 444, 455, 14, 13, STR_NULL, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
514 |
{ WWT_PANEL, RESIZE_TB, 14, 0, 227, 14, 105, 0x0, STR_NULL}, |
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
515 |
{ WWT_PANEL, RESIZE_RTB, 14, 228, 455, 14, 105, 0x0, STR_NULL}, |
6059
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
516 |
|
10302
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
517 |
{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 138, 106, 117, STR_REPLACE_VEHICLES_START, STR_REPLACE_HELP_START_BUTTON}, |
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
518 |
{ WWT_PANEL, RESIZE_RTB, 14, 139, 305, 106, 117, 0x0, STR_REPLACE_HELP_REPLACE_INFO_TAB}, |
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
519 |
{ WWT_PUSHTXTBTN, RESIZE_LRTB, 14, 306, 443, 106, 117, STR_REPLACE_VEHICLES_STOP, STR_REPLACE_HELP_STOP_BUTTON}, |
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
520 |
{ WWT_RESIZEBOX, RESIZE_LRTB, 14, 444, 455, 106, 117, STR_NULL, STR_RESIZE_BUTTON}, |
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
521 |
|
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
522 |
{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 138, 128, 139, STR_REPLACE_ENGINE_WAGON_SELECT, STR_REPLACE_ENGINE_WAGON_SELECT_HELP}, |
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
523 |
{ WWT_PANEL, RESIZE_TB, 14, 139, 153, 128, 139, 0x0, STR_NULL}, |
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
524 |
{ WWT_DROPDOWN, RESIZE_RTB, 14, 154, 289, 128, 139, 0x0, STR_REPLACE_HELP_RAILTYPE}, |
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
525 |
{ WWT_PANEL, RESIZE_LRTB, 14, 290, 305, 128, 139, 0x0, STR_NULL}, |
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
526 |
{ WWT_PUSHTXTBTN, RESIZE_LRTB, 14, 306, 443, 128, 139, STR_REPLACE_REMOVE_WAGON, STR_REPLACE_REMOVE_WAGON_HELP}, |
6059
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
527 |
{ WIDGETS_END}, |
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
528 |
}; |
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
529 |
|
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
530 |
static const WindowDesc _replace_rail_vehicle_desc = { |
10302
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
531 |
WDP_AUTO, WDP_AUTO, 456, 140, 456, 140, |
6144
5a0ffbf27ced
(svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents:
6119
diff
changeset
|
532 |
WC_REPLACE_VEHICLE, WC_NONE, |
6059
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
533 |
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE, |
10302
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
534 |
_replace_vehicle_widgets, |
6059
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
535 |
}; |
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
536 |
|
10302
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
537 |
static const WindowDesc _replace_vehicle_desc = { |
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
538 |
WDP_AUTO, WDP_AUTO, 456, 118, 456, 118, |
6144
5a0ffbf27ced
(svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents:
6119
diff
changeset
|
539 |
WC_REPLACE_VEHICLE, WC_NONE, |
6059
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
540 |
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE, |
10302
f24c62a9927c
(svn r12843) -Feature [FS#1945]: The autoreplace window is now resizable in both directions
bjarni
parents:
10296
diff
changeset
|
541 |
_replace_vehicle_widgets, |
6059
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
542 |
}; |
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
543 |
|
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
544 |
RailType ReplaceVehicleWindow::sel_railtype = RAILTYPE_RAIL; |
6059
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
545 |
|
7139
4ae3ab180d05
(svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents:
7134
diff
changeset
|
546 |
void ShowReplaceGroupVehicleWindow(GroupID id_g, VehicleType vehicletype) |
4ae3ab180d05
(svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents:
7134
diff
changeset
|
547 |
{ |
4ae3ab180d05
(svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents:
7134
diff
changeset
|
548 |
DeleteWindowById(WC_REPLACE_VEHICLE, vehicletype); |
10494
fb0f514eb9b6
(svn r13037) -Codechange: make a class of the ReplaceVehicle window.
rubidium
parents:
10492
diff
changeset
|
549 |
new ReplaceVehicleWindow(vehicletype == VEH_TRAIN ? &_replace_rail_vehicle_desc : &_replace_vehicle_desc, vehicletype, id_g); |
6059
14d457867d5e
(svn r8370) -Revert (r8363): the autoreplace GUI move cleared the file history
bjarni
parents:
6052
diff
changeset
|
550 |
} |