src/order_gui.cpp
author Tero Marttila <terom@fixme.fi>
Fri, 18 Jul 2008 22:41:08 +0300
changeset 11177 6d9a43c48924
parent 11146 fb7703b62a99
permissions -rw-r--r--
set the GRFConfig's next ptr to NULL
2186
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     1
/* $Id$ */
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     2
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: 10229
diff changeset
     3
/** @file order_gui.cpp GUI related to orders. */
6677
0578c2e31ed1 (svn r9390) -Documentation : correct Doxygen of comments and @file inclusion. This time, brought to you by the letter O
belugas
parents: 6655
diff changeset
     4
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     5
#include "stdafx.h"
1891
92a3b0aa0946 (svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents: 1857
diff changeset
     6
#include "openttd.h"
3144
426b825578f9 (svn r3763) Adapt to the new 'map accessors go in foo_map.h'-scheme
tron
parents: 3071
diff changeset
     7
#include "road_map.h"
3315
1f65f8260092 (svn r4079) Add GetSation{Index,ByTile}() to get the station index resp. the station from a tile
tron
parents: 3269
diff changeset
     8
#include "station_map.h"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     9
#include "gui.h"
8603
88c5ce6a5215 (svn r11668) -Codechange: more refactoring aimed at reducing compile time and making it more logic where function definitions can be found.
rubidium
parents: 8602
diff changeset
    10
#include "window_gui.h"
9281
d8cd9ac52a68 (svn r12489) -Codechange: split station.h into station_base.h and station_func.h.
rubidium
parents: 9280
diff changeset
    11
#include "station_base.h"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    12
#include "town.h"
8612
6414fc21c2f3 (svn r11677) -Codechange: move price and command related types/functions to their respective places.
rubidium
parents: 8610
diff changeset
    13
#include "command_func.h"
8720
4e60c30e2006 (svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium
parents: 8707
diff changeset
    14
#include "viewport_func.h"
4e60c30e2006 (svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium
parents: 8707
diff changeset
    15
#include "gfx_func.h"
10222
b6919c94cc77 (svn r12754) -Codechange: split depot.h into depot_map.h, depot_func.h and depot_base.h and remove quite a lot of unneeded (before this) includes of depot.h.
rubidium
parents: 10221
diff changeset
    16
#include "depot_base.h"
1542
2ca6d1624e6d (svn r2046) -Codechange: moved all waypoint code to waypoint.c/waypoint.h
truelight
parents: 1530
diff changeset
    17
#include "waypoint.h"
2676
2ba71e034d97 (svn r3218) -Feature: Multiheaded train engines will now stay in the same train
bjarni
parents: 2668
diff changeset
    18
#include "train.h"
3392
7c330e18dfe1 (svn r4200) -Codechange: Make use of water map accessors when getting the Index of a Ship Depot. TODO: Store the depot index in the map
celestar
parents: 3387
diff changeset
    19
#include "water_map.h"
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4634
diff changeset
    20
#include "vehicle_gui.h"
7476
7f086e4b2a76 (svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents: 7419
diff changeset
    21
#include "timetable.h"
6417
26acff62d001 (svn r8826) -Codechange: Replace _cargoc's separate arrays with a regular struct array (with accessor) and implement new initialization method using cargo labels.
peter1138
parents: 6310
diff changeset
    22
#include "cargotype.h"
8610
17cc343a23dd (svn r11675) -Codechange: split the string types from the string functions.
rubidium
parents: 8604
diff changeset
    23
#include "strings_func.h"
8627
448ebf3a8291 (svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents: 8617
diff changeset
    24
#include "window_func.h"
8640
1e93b81e96d2 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8635
diff changeset
    25
#include "vehicle_func.h"
8707
55835d8fbfcd (svn r11774) -Change: do not include variables.h in a header when it is not needed.
rubidium
parents: 8640
diff changeset
    26
#include "settings_type.h"
8750
fdd6054e7bae (svn r11818) -Codechange: split player.h into smaller pieces.
rubidium
parents: 8733
diff changeset
    27
#include "player_func.h"
9283
624272490f5a (svn r12495) -Codechange: reduce the dependency on newgrf_station.h (especially because newgrf_station.h includes a lot of stuff).
rubidium
parents: 9281
diff changeset
    28
#include "newgrf_cargo.h"
10113
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
    29
#include "widgets/dropdown_func.h"
10136
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
    30
#include "textbuf_gui.h"
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
    31
#include "string_func.h"
10222
b6919c94cc77 (svn r12754) -Codechange: split depot.h into depot_map.h, depot_func.h and depot_base.h and remove quite a lot of unneeded (before this) includes of depot.h.
rubidium
parents: 10221
diff changeset
    32
#include "depot_base.h"
10445
2dd7d9d0a957 (svn r12987) -Codechange: split viewport and tile selection.
rubidium
parents: 10434
diff changeset
    33
#include "tilehighlight_func.h"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    34
8760
ce0891c412ce (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8750
diff changeset
    35
#include "table/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
    36
#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
    37
6079
46605a85887c (svn r8394) -Cleanup: added an enum with widget names to the orders window
bjarni
parents: 5996
diff changeset
    38
enum OrderWindowWidgets {
46605a85887c (svn r8394) -Cleanup: added an enum with widget names to the orders window
bjarni
parents: 5996
diff changeset
    39
	ORDER_WIDGET_CLOSEBOX = 0,
46605a85887c (svn r8394) -Cleanup: added an enum with widget names to the orders window
bjarni
parents: 5996
diff changeset
    40
	ORDER_WIDGET_CAPTION,
7476
7f086e4b2a76 (svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents: 7419
diff changeset
    41
	ORDER_WIDGET_TIMETABLE_VIEW,
6079
46605a85887c (svn r8394) -Cleanup: added an enum with widget names to the orders window
bjarni
parents: 5996
diff changeset
    42
	ORDER_WIDGET_ORDER_LIST,
46605a85887c (svn r8394) -Cleanup: added an enum with widget names to the orders window
bjarni
parents: 5996
diff changeset
    43
	ORDER_WIDGET_SCROLLBAR,
46605a85887c (svn r8394) -Cleanup: added an enum with widget names to the orders window
bjarni
parents: 5996
diff changeset
    44
	ORDER_WIDGET_SKIP,
46605a85887c (svn r8394) -Cleanup: added an enum with widget names to the orders window
bjarni
parents: 5996
diff changeset
    45
	ORDER_WIDGET_DELETE,
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
    46
	ORDER_WIDGET_NON_STOP_DROPDOWN,
6079
46605a85887c (svn r8394) -Cleanup: added an enum with widget names to the orders window
bjarni
parents: 5996
diff changeset
    47
	ORDER_WIDGET_NON_STOP,
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
    48
	ORDER_WIDGET_GOTO_DROPDOWN,
6079
46605a85887c (svn r8394) -Cleanup: added an enum with widget names to the orders window
bjarni
parents: 5996
diff changeset
    49
	ORDER_WIDGET_GOTO,
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
    50
	ORDER_WIDGET_FULL_LOAD_DROPDOWN,
6079
46605a85887c (svn r8394) -Cleanup: added an enum with widget names to the orders window
bjarni
parents: 5996
diff changeset
    51
	ORDER_WIDGET_FULL_LOAD,
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
    52
	ORDER_WIDGET_UNLOAD_DROPDOWN,
6079
46605a85887c (svn r8394) -Cleanup: added an enum with widget names to the orders window
bjarni
parents: 5996
diff changeset
    53
	ORDER_WIDGET_UNLOAD,
6080
a56f432ef1b1 (svn r8395) -Cleanup: [orders window] moved the refit button two places up, so the order of the widget array fits the placement on the screen
bjarni
parents: 6079
diff changeset
    54
	ORDER_WIDGET_REFIT,
10110
d0cd5452bbe9 (svn r12641) -Codechange: do not use the same button for two completely distinct tasks, just make an extra button for it and hide them when not needed.
rubidium
parents: 10109
diff changeset
    55
	ORDER_WIDGET_SERVICE,
10136
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
    56
	ORDER_WIDGET_COND_VARIABLE,
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
    57
	ORDER_WIDGET_COND_COMPARATOR,
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
    58
	ORDER_WIDGET_COND_VALUE,
10110
d0cd5452bbe9 (svn r12641) -Codechange: do not use the same button for two completely distinct tasks, just make an extra button for it and hide them when not needed.
rubidium
parents: 10109
diff changeset
    59
	ORDER_WIDGET_RESIZE_BAR,
6079
46605a85887c (svn r8394) -Cleanup: added an enum with widget names to the orders window
bjarni
parents: 5996
diff changeset
    60
	ORDER_WIDGET_SHARED_ORDER_LIST,
46605a85887c (svn r8394) -Cleanup: added an enum with widget names to the orders window
bjarni
parents: 5996
diff changeset
    61
	ORDER_WIDGET_RESIZE,
46605a85887c (svn r8394) -Cleanup: added an enum with widget names to the orders window
bjarni
parents: 5996
diff changeset
    62
};
46605a85887c (svn r8394) -Cleanup: added an enum with widget names to the orders window
bjarni
parents: 5996
diff changeset
    63
10112
4cff0d575f0b (svn r12643) -Codechange: be more explicit about the orders a vehicle has (non stop and full load are ambiguous and depend on some patch settings).
rubidium
parents: 10110
diff changeset
    64
/** Order load types that could be given to station orders. */
4cff0d575f0b (svn r12643) -Codechange: be more explicit about the orders a vehicle has (non stop and full load are ambiguous and depend on some patch settings).
rubidium
parents: 10110
diff changeset
    65
static const StringID _station_load_types[][5] = {
9341
00c8dbaaf0ee (svn r12595) -Codechange: hide Order's flags in the last few cases.
rubidium
parents: 9339
diff changeset
    66
	{
10112
4cff0d575f0b (svn r12643) -Codechange: be more explicit about the orders a vehicle has (non stop and full load are ambiguous and depend on some patch settings).
rubidium
parents: 10110
diff changeset
    67
		STR_EMPTY,
10121
b82006b98b4a (svn r12652) -Codechange: rework the order GUI a little more to make it a little more clear that 'transfer' is just an unload type.
rubidium
parents: 10119
diff changeset
    68
		INVALID_STRING_ID,
10112
4cff0d575f0b (svn r12643) -Codechange: be more explicit about the orders a vehicle has (non stop and full load are ambiguous and depend on some patch settings).
rubidium
parents: 10110
diff changeset
    69
		STR_ORDER_FULL_LOAD,
4cff0d575f0b (svn r12643) -Codechange: be more explicit about the orders a vehicle has (non stop and full load are ambiguous and depend on some patch settings).
rubidium
parents: 10110
diff changeset
    70
		STR_ORDER_FULL_LOAD_ANY,
4cff0d575f0b (svn r12643) -Codechange: be more explicit about the orders a vehicle has (non stop and full load are ambiguous and depend on some patch settings).
rubidium
parents: 10110
diff changeset
    71
		STR_ORDER_NO_LOAD,
9341
00c8dbaaf0ee (svn r12595) -Codechange: hide Order's flags in the last few cases.
rubidium
parents: 9339
diff changeset
    72
	}, {
10121
b82006b98b4a (svn r12652) -Codechange: rework the order GUI a little more to make it a little more clear that 'transfer' is just an unload type.
rubidium
parents: 10119
diff changeset
    73
		STR_ORDER_UNLOAD,
b82006b98b4a (svn r12652) -Codechange: rework the order GUI a little more to make it a little more clear that 'transfer' is just an unload type.
rubidium
parents: 10119
diff changeset
    74
		INVALID_STRING_ID,
b82006b98b4a (svn r12652) -Codechange: rework the order GUI a little more to make it a little more clear that 'transfer' is just an unload type.
rubidium
parents: 10119
diff changeset
    75
		STR_ORDER_UNLOAD_FULL_LOAD,
b82006b98b4a (svn r12652) -Codechange: rework the order GUI a little more to make it a little more clear that 'transfer' is just an unload type.
rubidium
parents: 10119
diff changeset
    76
		STR_ORDER_UNLOAD_FULL_LOAD_ANY,
b82006b98b4a (svn r12652) -Codechange: rework the order GUI a little more to make it a little more clear that 'transfer' is just an unload type.
rubidium
parents: 10119
diff changeset
    77
		STR_ORDER_UNLOAD_NO_LOAD,
b82006b98b4a (svn r12652) -Codechange: rework the order GUI a little more to make it a little more clear that 'transfer' is just an unload type.
rubidium
parents: 10119
diff changeset
    78
	}, {
10112
4cff0d575f0b (svn r12643) -Codechange: be more explicit about the orders a vehicle has (non stop and full load are ambiguous and depend on some patch settings).
rubidium
parents: 10110
diff changeset
    79
		STR_ORDER_TRANSFER,
10121
b82006b98b4a (svn r12652) -Codechange: rework the order GUI a little more to make it a little more clear that 'transfer' is just an unload type.
rubidium
parents: 10119
diff changeset
    80
		INVALID_STRING_ID,
10112
4cff0d575f0b (svn r12643) -Codechange: be more explicit about the orders a vehicle has (non stop and full load are ambiguous and depend on some patch settings).
rubidium
parents: 10110
diff changeset
    81
		STR_ORDER_TRANSFER_FULL_LOAD,
4cff0d575f0b (svn r12643) -Codechange: be more explicit about the orders a vehicle has (non stop and full load are ambiguous and depend on some patch settings).
rubidium
parents: 10110
diff changeset
    82
		STR_ORDER_TRANSFER_FULL_LOAD_ANY,
10121
b82006b98b4a (svn r12652) -Codechange: rework the order GUI a little more to make it a little more clear that 'transfer' is just an unload type.
rubidium
parents: 10119
diff changeset
    83
		STR_ORDER_TRANSFER_NO_LOAD,
b82006b98b4a (svn r12652) -Codechange: rework the order GUI a little more to make it a little more clear that 'transfer' is just an unload type.
rubidium
parents: 10119
diff changeset
    84
	}, {
b82006b98b4a (svn r12652) -Codechange: rework the order GUI a little more to make it a little more clear that 'transfer' is just an unload type.
rubidium
parents: 10119
diff changeset
    85
		/* Unload and transfer do not work together. */
b82006b98b4a (svn r12652) -Codechange: rework the order GUI a little more to make it a little more clear that 'transfer' is just an unload type.
rubidium
parents: 10119
diff changeset
    86
		INVALID_STRING_ID,
b82006b98b4a (svn r12652) -Codechange: rework the order GUI a little more to make it a little more clear that 'transfer' is just an unload type.
rubidium
parents: 10119
diff changeset
    87
		INVALID_STRING_ID,
b82006b98b4a (svn r12652) -Codechange: rework the order GUI a little more to make it a little more clear that 'transfer' is just an unload type.
rubidium
parents: 10119
diff changeset
    88
		INVALID_STRING_ID,
10112
4cff0d575f0b (svn r12643) -Codechange: be more explicit about the orders a vehicle has (non stop and full load are ambiguous and depend on some patch settings).
rubidium
parents: 10110
diff changeset
    89
		INVALID_STRING_ID,
10119
9b29b2296969 (svn r12650) -Feature: ability to force a vehicle to not load at a station.
rubidium
parents: 10118
diff changeset
    90
	}, {
9b29b2296969 (svn r12650) -Feature: ability to force a vehicle to not load at a station.
rubidium
parents: 10118
diff changeset
    91
		STR_ORDER_NO_UNLOAD,
9b29b2296969 (svn r12650) -Feature: ability to force a vehicle to not load at a station.
rubidium
parents: 10118
diff changeset
    92
		INVALID_STRING_ID,
9b29b2296969 (svn r12650) -Feature: ability to force a vehicle to not load at a station.
rubidium
parents: 10118
diff changeset
    93
		STR_ORDER_NO_UNLOAD_FULL_LOAD,
9b29b2296969 (svn r12650) -Feature: ability to force a vehicle to not load at a station.
rubidium
parents: 10118
diff changeset
    94
		STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY,
9b29b2296969 (svn r12650) -Feature: ability to force a vehicle to not load at a station.
rubidium
parents: 10118
diff changeset
    95
		INVALID_STRING_ID,
9341
00c8dbaaf0ee (svn r12595) -Codechange: hide Order's flags in the last few cases.
rubidium
parents: 9339
diff changeset
    96
	}
1935
f43f062c9498 (svn r2441) -Feature: You can now give transfer order to set up feeder systems
celestar
parents: 1901
diff changeset
    97
};
f43f062c9498 (svn r2441) -Feature: You can now give transfer order to set up feeder systems
celestar
parents: 1901
diff changeset
    98
10124
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
    99
static const StringID _order_non_stop_drowdown[] = {
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
   100
	STR_ORDER_GO_TO,
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
   101
	STR_ORDER_GO_NON_STOP_TO,
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
   102
	STR_ORDER_GO_VIA,
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
   103
	STR_ORDER_GO_NON_STOP_VIA,
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
   104
	INVALID_STRING_ID
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
   105
};
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
   106
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
   107
static const StringID _order_full_load_drowdown[] = {
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
   108
	STR_ORDER_DROP_LOAD_IF_POSSIBLE,
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
   109
	STR_EMPTY,
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
   110
	STR_ORDER_DROP_FULL_LOAD_ALL,
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
   111
	STR_ORDER_DROP_FULL_LOAD_ANY,
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
   112
	STR_ORDER_DROP_NO_LOADING,
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
   113
	INVALID_STRING_ID
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
   114
};
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
   115
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
   116
static const StringID _order_unload_drowdown[] = {
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
   117
	STR_ORDER_DROP_UNLOAD_IF_ACCEPTED,
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
   118
	STR_ORDER_DROP_UNLOAD,
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
   119
	STR_ORDER_DROP_TRANSFER,
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
   120
	STR_EMPTY,
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
   121
	STR_ORDER_DROP_NO_UNLOADING,
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
   122
	INVALID_STRING_ID
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
   123
};
a6b11d4d67b3 (svn r12655) -Change: show the current state in the drop down 'buttons'.
rubidium
parents: 10123
diff changeset
   124
10130
906ffae618b0 (svn r12661) -Add: ability to send a vehicle (using default orders) to the nearest depot.
rubidium
parents: 10129
diff changeset
   125
static const StringID _order_goto_dropdown[] = {
906ffae618b0 (svn r12661) -Add: ability to send a vehicle (using default orders) to the nearest depot.
rubidium
parents: 10129
diff changeset
   126
	STR_ORDER_GO_TO,
906ffae618b0 (svn r12661) -Add: ability to send a vehicle (using default orders) to the nearest depot.
rubidium
parents: 10129
diff changeset
   127
	STR_ORDER_GO_TO_NEAREST_DEPOT,
10136
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   128
	STR_ORDER_CONDITIONAL,
10130
906ffae618b0 (svn r12661) -Add: ability to send a vehicle (using default orders) to the nearest depot.
rubidium
parents: 10129
diff changeset
   129
	INVALID_STRING_ID
906ffae618b0 (svn r12661) -Add: ability to send a vehicle (using default orders) to the nearest depot.
rubidium
parents: 10129
diff changeset
   130
};
906ffae618b0 (svn r12661) -Add: ability to send a vehicle (using default orders) to the nearest depot.
rubidium
parents: 10129
diff changeset
   131
906ffae618b0 (svn r12661) -Add: ability to send a vehicle (using default orders) to the nearest depot.
rubidium
parents: 10129
diff changeset
   132
static const StringID _order_goto_dropdown_aircraft[] = {
906ffae618b0 (svn r12661) -Add: ability to send a vehicle (using default orders) to the nearest depot.
rubidium
parents: 10129
diff changeset
   133
	STR_ORDER_GO_TO,
906ffae618b0 (svn r12661) -Add: ability to send a vehicle (using default orders) to the nearest depot.
rubidium
parents: 10129
diff changeset
   134
	STR_ORDER_GO_TO_NEAREST_HANGAR,
10136
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   135
	STR_ORDER_CONDITIONAL,
10130
906ffae618b0 (svn r12661) -Add: ability to send a vehicle (using default orders) to the nearest depot.
rubidium
parents: 10129
diff changeset
   136
	INVALID_STRING_ID
906ffae618b0 (svn r12661) -Add: ability to send a vehicle (using default orders) to the nearest depot.
rubidium
parents: 10129
diff changeset
   137
};
906ffae618b0 (svn r12661) -Add: ability to send a vehicle (using default orders) to the nearest depot.
rubidium
parents: 10129
diff changeset
   138
10136
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   139
static const StringID _order_conditional_variable[] = {
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   140
	STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE,
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   141
	STR_ORDER_CONDITIONAL_RELIABILITY,
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   142
	STR_ORDER_CONDITIONAL_MAX_SPEED,
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   143
	STR_ORDER_CONDITIONAL_AGE,
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   144
	STR_ORDER_CONDITIONAL_REQUIRES_SERVICE,
10139
448ed1614a14 (svn r12670) -Add: unconditional/always order 'jump/skip' variable.
rubidium
parents: 10136
diff changeset
   145
	STR_ORDER_CONDITIONAL_UNCONDITIONALLY,
10136
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   146
	INVALID_STRING_ID,
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   147
};
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   148
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   149
static const StringID _order_conditional_condition[] = {
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   150
	STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS,
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   151
	STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS,
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   152
	STR_ORDER_CONDITIONAL_COMPARATOR_LESS_THAN,
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   153
	STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS,
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   154
	STR_ORDER_CONDITIONAL_COMPARATOR_MORE_THAN,
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   155
	STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS,
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   156
	STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE,
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   157
	STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE,
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   158
	INVALID_STRING_ID,
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   159
};
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   160
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   161
extern uint ConvertSpeedToDisplaySpeed(uint speed);
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   162
extern uint ConvertDisplaySpeedToSpeed(uint speed);
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   163
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   164
11144
7eff560780d2 (svn r13702) -Fix: do not overflow the order/timetable window when 'long' orders are displayed.
rubidium
parents: 10893
diff changeset
   165
void DrawOrderString(const Vehicle *v, const Order *order, int order_index, int y, bool selected, bool timetable, int width)
10168
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   166
{
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   167
	StringID str = (v->cur_order_index == order_index) ? STR_8805 : STR_8804;
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   168
	SetDParam(6, STR_EMPTY);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   169
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   170
	switch (order->GetType()) {
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   171
		case OT_DUMMY:
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   172
			SetDParam(1, STR_INVALID_ORDER);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   173
			SetDParam(2, order->GetDestination());
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   174
			break;
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   175
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   176
		case OT_GOTO_STATION: {
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   177
			OrderLoadFlags load = order->GetLoadType();
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   178
			OrderUnloadFlags unload = order->GetUnloadType();
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   179
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   180
			SetDParam(1, STR_GO_TO_STATION);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   181
			SetDParam(2, STR_ORDER_GO_TO + ((v->type == VEH_TRAIN || v->type == VEH_ROAD) ? order->GetNonStopType() : 0));
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   182
			SetDParam(3, order->GetDestination());
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   183
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   184
			if (timetable) {
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   185
				SetDParam(4, STR_EMPTY);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   186
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   187
				if (order->wait_time > 0) {
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   188
					SetDParam(6, STR_TIMETABLE_STAY_FOR);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   189
					SetTimetableParams(7, 8, order->wait_time);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   190
				}
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   191
			} else {
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   192
				SetDParam(4, (order->GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION) ? STR_EMPTY : _station_load_types[unload][load]);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   193
			}
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   194
		} break;
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   195
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   196
		case OT_GOTO_DEPOT:
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   197
			if (v->type == VEH_AIRCRAFT) {
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   198
				if (order->GetDepotActionType() & ODATFB_NEAREST_DEPOT) {
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   199
					SetDParam(1, STR_GO_TO_NEAREST_DEPOT);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   200
					SetDParam(3, STR_ORDER_NEAREST_HANGAR);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   201
				} else {
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   202
					SetDParam(1, STR_GO_TO_HANGAR);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   203
					SetDParam(3, order->GetDestination());
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   204
				}
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   205
				SetDParam(4, STR_EMPTY);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   206
			} else {
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   207
				if (order->GetDepotActionType() & ODATFB_NEAREST_DEPOT) {
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   208
					SetDParam(1, STR_GO_TO_NEAREST_DEPOT);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   209
					SetDParam(3, STR_ORDER_NEAREST_DEPOT);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   210
				} else {
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   211
					SetDParam(1, STR_GO_TO_DEPOT);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   212
					SetDParam(3, GetDepot(order->GetDestination())->town_index);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   213
				}
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   214
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   215
				switch (v->type) {
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   216
					case VEH_TRAIN: SetDParam(4, STR_ORDER_TRAIN_DEPOT); break;
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   217
					case VEH_ROAD:  SetDParam(4, STR_ORDER_ROAD_DEPOT); break;
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   218
					case VEH_SHIP:  SetDParam(4, STR_ORDER_SHIP_DEPOT); break;
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   219
					default: NOT_REACHED();
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   220
				}
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   221
			}
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   222
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   223
			if (order->GetDepotOrderType() & ODTFB_SERVICE) {
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   224
				SetDParam(2, (order->GetNonStopType() & ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS) ? STR_ORDER_SERVICE_NON_STOP_AT : STR_ORDER_SERVICE_AT);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   225
			} else {
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   226
				SetDParam(2, (order->GetNonStopType() & ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS) ? STR_ORDER_GO_NON_STOP_TO : STR_ORDER_GO_TO);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   227
			}
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   228
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   229
			if (!timetable && order->IsRefit()) {
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   230
				SetDParam(6, STR_REFIT_ORDER);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   231
				SetDParam(7, GetCargo(order->GetRefitCargo())->name);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   232
			}
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   233
			break;
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   234
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   235
		case OT_GOTO_WAYPOINT:
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   236
			SetDParam(1, (order->GetNonStopType() & ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS) ? STR_GO_NON_STOP_TO_WAYPOINT : STR_GO_TO_WAYPOINT);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   237
			SetDParam(2, order->GetDestination());
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   238
			break;
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   239
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   240
		case OT_CONDITIONAL:
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   241
			SetDParam(2, order->GetConditionSkipToOrder() + 1);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   242
			if (order->GetConditionVariable() == OCV_UNCONDITIONALLY) {
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   243
				SetDParam(1, STR_CONDITIONAL_UNCONDITIONAL);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   244
			} else {
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   245
				OrderConditionComparator occ = order->GetConditionComparator();
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   246
				SetDParam(1, (occ == OCC_IS_TRUE || occ == OCC_IS_FALSE) ? STR_CONDITIONAL_TRUE_FALSE : STR_CONDITIONAL_NUM);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   247
				SetDParam(3, STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE + order->GetConditionVariable());
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   248
				SetDParam(4, STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS + occ);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   249
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   250
				uint value = order->GetConditionValue();
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   251
				if (order->GetConditionVariable() == OCV_MAX_SPEED) value = ConvertSpeedToDisplaySpeed(value);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   252
				SetDParam(5, value);
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   253
			}
11146
fb7703b62a99 (svn r13704) -Fix: make timetables work more sensible when used in conjunction with conditional orders, i.e. make it possibly to tell how long to travel to the next destination if you jump.
rubidium
parents: 11144
diff changeset
   254
fb7703b62a99 (svn r13704) -Fix: make timetables work more sensible when used in conjunction with conditional orders, i.e. make it possibly to tell how long to travel to the next destination if you jump.
rubidium
parents: 11144
diff changeset
   255
			if (timetable && order->wait_time > 0) {
fb7703b62a99 (svn r13704) -Fix: make timetables work more sensible when used in conjunction with conditional orders, i.e. make it possibly to tell how long to travel to the next destination if you jump.
rubidium
parents: 11144
diff changeset
   256
				SetDParam(6, STR_TIMETABLE_AND_TRAVEL_FOR);
fb7703b62a99 (svn r13704) -Fix: make timetables work more sensible when used in conjunction with conditional orders, i.e. make it possibly to tell how long to travel to the next destination if you jump.
rubidium
parents: 11144
diff changeset
   257
				SetTimetableParams(7, 8, order->wait_time);
fb7703b62a99 (svn r13704) -Fix: make timetables work more sensible when used in conjunction with conditional orders, i.e. make it possibly to tell how long to travel to the next destination if you jump.
rubidium
parents: 11144
diff changeset
   258
			} else {
fb7703b62a99 (svn r13704) -Fix: make timetables work more sensible when used in conjunction with conditional orders, i.e. make it possibly to tell how long to travel to the next destination if you jump.
rubidium
parents: 11144
diff changeset
   259
				SetDParam(6, STR_EMPTY);
fb7703b62a99 (svn r13704) -Fix: make timetables work more sensible when used in conjunction with conditional orders, i.e. make it possibly to tell how long to travel to the next destination if you jump.
rubidium
parents: 11144
diff changeset
   260
			}
10168
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   261
			break;
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   262
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   263
		default: NOT_REACHED();
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   264
	}
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   265
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   266
	SetDParam(0, order_index + 1);
11144
7eff560780d2 (svn r13702) -Fix: do not overflow the order/timetable window when 'long' orders are displayed.
rubidium
parents: 10893
diff changeset
   267
	DrawStringTruncated(2, y, str, selected ? TC_WHITE : TC_BLACK, width);
10168
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   268
}
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   269
24907819f29b (svn r12699) -Codechange: Unify the order drawing code for orders and timetables.
maedhros
parents: 10158
diff changeset
   270
2436
177cb6a8339f (svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents: 2186
diff changeset
   271
static Order GetOrderCmdFromTile(const Vehicle *v, TileIndex tile)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   272
{
558
9b115b39c515 (svn r960) -Fix: forgotten conversion of orders for the AI (Tron)
darkvater
parents: 555
diff changeset
   273
	Order order;
3387
5d14492dce35 (svn r4195) - Codechange: Initialize order variables to avoid a compiler warning. These are unused anyway... (smells of r3476-7, but not the same)
peter1138
parents: 3338
diff changeset
   274
	order.next  = NULL;
5d14492dce35 (svn r4195) - Codechange: Initialize order variables to avoid a compiler warning. These are unused anyway... (smells of r3476-7, but not the same)
peter1138
parents: 3338
diff changeset
   275
	order.index = 0;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   276
10107
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   277
	/* check depot first */
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10703
diff changeset
   278
	if (_settings_game.order.gotodepot) {
1214
33e07bbb7779 (svn r1718) Use the enum TileType as parameter/return type for [GS]etTileType() instead of plain int.
tron
parents: 1209
diff changeset
   279
		switch (GetTileType(tile)) {
10107
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   280
			case MP_RAILWAY:
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   281
				if (v->type == VEH_TRAIN && IsTileOwner(tile, _local_player)) {
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   282
					if (IsRailDepot(tile)) {
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   283
						order.MakeGoToDepot(GetDepotByTile(tile)->index, ODTFB_PART_OF_ORDERS);
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10703
diff changeset
   284
						if (_settings_client.gui.new_nonstop) order.SetNonStopType(ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS);
10107
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   285
						return order;
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   286
					}
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   287
				}
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   288
				break;
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   289
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   290
			case MP_ROAD:
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   291
				if (IsRoadDepot(tile) && v->type == VEH_ROAD && IsTileOwner(tile, _local_player)) {
10079
99aba130db3c (svn r12615) -Codechange: rename some enums related to depot orders to make it more clear that they are no loading/unloading flags. Also add more type strictness.
rubidium
parents: 9344
diff changeset
   292
					order.MakeGoToDepot(GetDepotByTile(tile)->index, ODTFB_PART_OF_ORDERS);
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10703
diff changeset
   293
					if (_settings_client.gui.new_nonstop) order.SetNonStopType(ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS);
558
9b115b39c515 (svn r960) -Fix: forgotten conversion of orders for the AI (Tron)
darkvater
parents: 555
diff changeset
   294
					return order;
560
bd8a572dc8b9 (svn r962) Fixed a problem with the new order system due to missing '{}' (another place)
Celestar
parents: 559
diff changeset
   295
				}
10107
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   296
				break;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   297
10107
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   298
			case MP_STATION:
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   299
				if (v->type != VEH_AIRCRAFT) break;
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   300
				if (IsHangar(tile) && IsTileOwner(tile, _local_player)) {
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   301
					order.MakeGoToDepot(GetStationIndex(tile), ODTFB_PART_OF_ORDERS);
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   302
					return order;
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   303
				}
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   304
				break;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   305
10107
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   306
			case MP_WATER:
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   307
				if (v->type != VEH_SHIP) break;
10221
faef62283f5f (svn r12753) -Codechange: do not use IsDepotTypeTile() where simpler function can be used
smatz
parents: 10213
diff changeset
   308
				if (IsShipDepot(tile) && IsTileOwner(tile, _local_player)) {
10107
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   309
					TileIndex tile2 = GetOtherShipDepotTile(tile);
3392
7c330e18dfe1 (svn r4200) -Codechange: Make use of water map accessors when getting the Index of a Ship Depot. TODO: Store the depot index in the map
celestar
parents: 3387
diff changeset
   310
10107
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   311
					order.MakeGoToDepot(GetDepotByTile(tile < tile2 ? tile : tile2)->index, ODTFB_PART_OF_ORDERS);
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   312
					return order;
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   313
				}
1214
33e07bbb7779 (svn r1718) Use the enum TileType as parameter/return type for [GS]etTileType() instead of plain int.
tron
parents: 1209
diff changeset
   314
33e07bbb7779 (svn r1718) Use the enum TileType as parameter/return type for [GS]etTileType() instead of plain int.
tron
parents: 1209
diff changeset
   315
			default:
33e07bbb7779 (svn r1718) Use the enum TileType as parameter/return type for [GS]etTileType() instead of plain int.
tron
parents: 1209
diff changeset
   316
				break;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   317
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   318
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   319
10107
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   320
	/* check waypoint */
1901
fb05044cf5c3 (svn r2407) Use {Get,Is}TileOwner to get/check the owner of a tile and fix some bogus reads of _map_owner
tron
parents: 1891
diff changeset
   321
	if (IsTileType(tile, MP_RAILWAY) &&
6585
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6417
diff changeset
   322
			v->type == VEH_TRAIN &&
1901
fb05044cf5c3 (svn r2407) Use {Get,Is}TileOwner to get/check the owner of a tile and fix some bogus reads of _map_owner
tron
parents: 1891
diff changeset
   323
			IsTileOwner(tile, _local_player) &&
2668
54d9f9d4dca3 (svn r3210) -Codechange: use IsRailWaypoint where possible (instead of magicnumbers)
truelight
parents: 2643
diff changeset
   324
			IsRailWaypoint(tile)) {
9332
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9283
diff changeset
   325
		order.MakeGoToWaypoint(GetWaypointByTile(tile)->index);
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10703
diff changeset
   326
		if (_settings_client.gui.new_nonstop) order.SetNonStopType(ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS);
558
9b115b39c515 (svn r960) -Fix: forgotten conversion of orders for the AI (Tron)
darkvater
parents: 555
diff changeset
   327
		return order;
9b115b39c515 (svn r960) -Fix: forgotten conversion of orders for the AI (Tron)
darkvater
parents: 555
diff changeset
   328
	}
319
1891d07574d6 (svn r329) Fix: [ 1035066 ] 'Allow goto depot' turned off, no checkpoints in orders
dominik
parents: 193
diff changeset
   329
1035
0a170deb6e33 (svn r1536) Move GET_TILEHEIGHT, GET_TILETYPE and IS_TILETYPE to map.h, turn them into inline functions and add some asserts
tron
parents: 1024
diff changeset
   330
	if (IsTileType(tile, MP_STATION)) {
3315
1f65f8260092 (svn r4079) Add GetSation{Index,ByTile}() to get the station index resp. the station from a tile
tron
parents: 3269
diff changeset
   331
		StationID st_index = GetStationIndex(tile);
4171
3fadda3afe70 (svn r5609) CodeChange : Apply coding style
belugas
parents: 4077
diff changeset
   332
		const Station *st = GetStation(st_index);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   333
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   334
		if (st->owner == _current_player || st->owner == OWNER_NONE) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   335
			byte facil;
10107
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   336
			(facil = FACIL_DOCK, v->type == VEH_SHIP) ||
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   337
			(facil = FACIL_TRAIN, v->type == VEH_TRAIN) ||
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   338
			(facil = FACIL_AIRPORT, v->type == VEH_AIRCRAFT) ||
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   339
			(facil = FACIL_BUS_STOP, v->type == VEH_ROAD && IsCargoInClass(v->cargo_type, CC_PASSENGERS)) ||
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   340
			(facil = FACIL_TRUCK_STOP, 1);
558
9b115b39c515 (svn r960) -Fix: forgotten conversion of orders for the AI (Tron)
darkvater
parents: 555
diff changeset
   341
			if (st->facilities & facil) {
9332
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9283
diff changeset
   342
				order.MakeGoToStation(st_index);
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10703
diff changeset
   343
				if (_settings_client.gui.new_nonstop && (v->type == VEH_TRAIN || v->type == VEH_ROAD)) order.SetNonStopType(ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS);
558
9b115b39c515 (svn r960) -Fix: forgotten conversion of orders for the AI (Tron)
darkvater
parents: 555
diff changeset
   344
				return order;
9b115b39c515 (svn r960) -Fix: forgotten conversion of orders for the AI (Tron)
darkvater
parents: 555
diff changeset
   345
			}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   346
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   347
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   348
10107
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   349
	/* not found */
6589
addf4b6946d0 (svn r9072) -Codechange: [Orders] added methods to orders to free them and check if they are in use
bjarni
parents: 6585
diff changeset
   350
	order.Free();
558
9b115b39c515 (svn r960) -Fix: forgotten conversion of orders for the AI (Tron)
darkvater
parents: 555
diff changeset
   351
	return order;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   352
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   353
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   354
struct OrdersWindow : public Window {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   355
private:
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   356
	/** Under what reason are we using the PlaceObject functionality? */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   357
	enum OrderPlaceObjectState {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   358
		OPOS_GOTO,
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   359
		OPOS_CONDITIONAL,
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   360
	};
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   361
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   362
	int selected_order;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   363
	OrderPlaceObjectState goto_type;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   364
	const Vehicle *vehicle;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   365
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   366
	/**
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   367
	 * Return the memorised selected order.
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   368
	 * @return the memorised order if it is a vaild one
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   369
	 *  else return the number of orders
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   370
	 */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   371
	int OrderGetSel()
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   372
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   373
		int num = this->selected_order;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   374
		return (num >= 0 && num < vehicle->num_orders) ? num : vehicle->num_orders;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   375
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   376
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   377
	/**
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   378
	 * Calculate the selected order.
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   379
	 * The calculation is based on the relative (to the window) y click position and
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   380
	 *  the position of the scrollbar.
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   381
	 *
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   382
	 * @param y Y-value of the click relative to the window origin
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   383
	 * @param v current vehicle
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   384
	 * @return the new selected order if the order is valid else return that
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   385
	 *  an invalid one has been selected.
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   386
	 */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   387
	int GetOrderFromPt(int y)
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   388
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   389
		/*
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   390
		 * Calculation description:
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   391
		 * 15 = 14 (w->widget[ORDER_WIDGET_ORDER_LIST].top) + 1 (frame-line)
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   392
		 * 10 = order text hight
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   393
		 */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   394
		int sel = (y - this->widget[ORDER_WIDGET_ORDER_LIST].top - 1) / 10;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   395
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   396
		if ((uint)sel >= this->vscroll.cap) return INVALID_ORDER;
1000
a418026097f6 (svn r1498) -Feature: Addded keyboard shortcuts for the order window
Celestar
parents: 995
diff changeset
   397
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   398
		sel += this->vscroll.pos;
10105
f0d50efea303 (svn r12636) -Codechange: make CmdModifyOrder a little more flexible and remove 'hack' that used the full load flag to set the service if needed flag.
rubidium
parents: 10097
diff changeset
   399
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   400
		return (sel <= vehicle->num_orders && sel >= 0) ? sel : INVALID_ORDER;
10117
6a796f06bff4 (svn r12648) -Feature: allow four different non-stop types in a single game instead of two. The "TTDP compatible order" setting now only sets the default behaviour of new trains.
rubidium
parents: 10113
diff changeset
   401
	}
10130
906ffae618b0 (svn r12661) -Add: ability to send a vehicle (using default orders) to the nearest depot.
rubidium
parents: 10129
diff changeset
   402
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   403
	bool HandleOrderVehClick(const Vehicle *u)
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   404
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   405
		if (u->type != this->vehicle->type) return false;
10136
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   406
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   407
		if (!u->IsPrimaryVehicle()) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   408
			u = u->First();
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   409
			if (!u->IsPrimaryVehicle()) return false;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   410
		}
10105
f0d50efea303 (svn r12636) -Codechange: make CmdModifyOrder a little more flexible and remove 'hack' that used the full load flag to set the service if needed flag.
rubidium
parents: 10097
diff changeset
   411
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   412
		/* v is vehicle getting orders. Only copy/clone orders if vehicle doesn't have any orders yet
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   413
		 * obviously if you press CTRL on a non-empty orders vehicle you know what you are doing */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   414
		if (this->vehicle->num_orders != 0 && _ctrl_pressed == 0) return false;
10121
b82006b98b4a (svn r12652) -Codechange: rework the order GUI a little more to make it a little more clear that 'transfer' is just an unload type.
rubidium
parents: 10119
diff changeset
   415
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   416
		if (DoCommandP(this->vehicle->tile, this->vehicle->index | (u->index << 16), _ctrl_pressed ? CO_SHARE : CO_COPY, NULL,
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   417
			_ctrl_pressed ? CMD_CLONE_ORDER | CMD_MSG(STR_CANT_SHARE_ORDER_LIST) : CMD_CLONE_ORDER | CMD_MSG(STR_CANT_COPY_ORDER_LIST))) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   418
			this->selected_order = -1;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   419
			ResetObjectToPlace();
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   420
		}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   421
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   422
		return true;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   423
	}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   424
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   425
	/**
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   426
	 * Handle the click on the goto button.
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   427
	 *
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   428
	 * @param w current window
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   429
	 */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   430
	static void OrderClick_Goto(OrdersWindow *w, int i)
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   431
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   432
		w->InvalidateWidget(ORDER_WIDGET_GOTO);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   433
		w->ToggleWidgetLoweredState(ORDER_WIDGET_GOTO);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   434
		if (w->IsWidgetLowered(ORDER_WIDGET_GOTO)) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   435
			_place_clicked_vehicle = NULL;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   436
			SetObjectToPlaceWnd(ANIMCURSOR_PICKSTATION, PAL_NONE, VHM_RECT, w);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   437
			w->goto_type = OPOS_GOTO;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   438
		} else {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   439
			ResetObjectToPlace();
10119
9b29b2296969 (svn r12650) -Feature: ability to force a vehicle to not load at a station.
rubidium
parents: 10118
diff changeset
   440
		}
9b29b2296969 (svn r12650) -Feature: ability to force a vehicle to not load at a station.
rubidium
parents: 10118
diff changeset
   441
	}
9b29b2296969 (svn r12650) -Feature: ability to force a vehicle to not load at a station.
rubidium
parents: 10118
diff changeset
   442
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   443
	/**
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   444
	 * Handle the click on the full load button.
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   445
	 *
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   446
	 * @param w current window
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   447
	 * @param load_type the way to load.
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   448
	 */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   449
	static void OrderClick_FullLoad(OrdersWindow *w, int load_type)
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   450
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   451
		VehicleOrderID sel_ord = w->OrderGetSel();
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   452
		const Order *order = GetVehicleOrder(w->vehicle, sel_ord);
1024
9b06b01490a4 (svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents: 1019
diff changeset
   453
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   454
		if (order == NULL || order->GetLoadType() == load_type) return;
10105
f0d50efea303 (svn r12636) -Codechange: make CmdModifyOrder a little more flexible and remove 'hack' that used the full load flag to set the service if needed flag.
rubidium
parents: 10097
diff changeset
   455
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   456
		if (load_type < 0) {
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   457
			load_type = order->GetLoadType() == OLF_LOAD_IF_POSSIBLE ? OLF_FULL_LOAD_ANY : OLF_LOAD_IF_POSSIBLE;
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   458
		}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   459
		DoCommandP(w->vehicle->tile, w->vehicle->index + (sel_ord << 16), MOF_LOAD | (load_type << 4), NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER));
10113
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
   460
	}
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
   461
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   462
	/**
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   463
	 * Handle the click on the service.
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   464
	 *
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   465
	 * @param w current window
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   466
	 */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   467
	static void OrderClick_Service(OrdersWindow *w, int i)
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   468
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   469
		DoCommandP(w->vehicle->tile, w->vehicle->index + (w->OrderGetSel() << 16), MOF_DEPOT_ACTION, NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER));
4712
273ec3b182bf (svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents: 4709
diff changeset
   470
	}
1000
a418026097f6 (svn r1498) -Feature: Addded keyboard shortcuts for the order window
Celestar
parents: 995
diff changeset
   471
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   472
	/**
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   473
	 * Handle the click on the service in nearest depot button.
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   474
	 *
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   475
	 * @param w current window
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   476
	 */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   477
	static void OrderClick_NearestDepot(OrdersWindow *w, int i)
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   478
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   479
		Order order;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   480
		order.next = NULL;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   481
		order.index = 0;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   482
		order.MakeGoToDepot(0, ODTFB_PART_OF_ORDERS);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   483
		order.SetDepotActionType(ODATFB_NEAREST_DEPOT);
7328
8ac64204c17f (svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents: 7303
diff changeset
   484
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   485
		DoCommandP(w->vehicle->tile, w->vehicle->index + (w->OrderGetSel() << 16), order.Pack(), NULL, CMD_INSERT_ORDER | CMD_MSG(STR_8833_CAN_T_INSERT_NEW_ORDER));
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   486
	}
10107
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   487
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   488
	/**
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   489
	 * Handle the click on the conditional order button.
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   490
	 *
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   491
	 * @param w current window
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   492
	 */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   493
	static void OrderClick_Conditional(OrdersWindow *w, int i)
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   494
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   495
		w->InvalidateWidget(ORDER_WIDGET_GOTO);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   496
		w->LowerWidget(ORDER_WIDGET_GOTO);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   497
		SetObjectToPlaceWnd(ANIMCURSOR_PICKSTATION, PAL_NONE, VHM_RECT, w);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   498
		w->goto_type = OPOS_CONDITIONAL;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   499
	}
10107
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   500
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   501
	/**
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   502
	 * Handle the click on the unload button.
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   503
	 *
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   504
	 * @param w current window
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   505
	 */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   506
	static void OrderClick_Unload(OrdersWindow *w, int unload_type)
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   507
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   508
		VehicleOrderID sel_ord = w->OrderGetSel();
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   509
		const Order *order = GetVehicleOrder(w->vehicle, sel_ord);
10107
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   510
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   511
		if (order == NULL || order->GetUnloadType() == unload_type) return;
10107
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   512
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   513
		if (unload_type < 0) {
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   514
			unload_type = order->GetUnloadType() == OUF_UNLOAD_IF_POSSIBLE ? OUFB_UNLOAD : OUF_UNLOAD_IF_POSSIBLE;
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   515
		}
10107
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   516
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   517
		DoCommandP(w->vehicle->tile, w->vehicle->index + (sel_ord << 16), MOF_UNLOAD | (unload_type << 4), NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER));
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   518
	}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   519
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   520
	/**
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   521
	 * Handle the click on the nonstop button.
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   522
	 *
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   523
	 * @param w current window
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   524
	 * @param non_stop what non-stop type to use; -1 to use the 'next' one.
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   525
	 */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   526
	static void OrderClick_Nonstop(OrdersWindow *w, int non_stop)
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   527
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   528
		VehicleOrderID sel_ord = w->OrderGetSel();
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   529
		const Order *order = GetVehicleOrder(w->vehicle, sel_ord);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   530
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   531
		if (order == NULL || order->GetNonStopType() == non_stop) return;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   532
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   533
		/* Keypress if negative, so 'toggle' to the next */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   534
		if (non_stop < 0) {
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   535
			non_stop = order->GetNonStopType() ^ ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS;
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   536
		}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   537
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   538
		w->InvalidateWidget(ORDER_WIDGET_NON_STOP);
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   539
		DoCommandP(w->vehicle->tile, w->vehicle->index + (sel_ord << 16), MOF_NON_STOP | non_stop << 4,  NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER));
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   540
	}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   541
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   542
	/**
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   543
	 * Handle the click on the transfer button.
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   544
	 *
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   545
	 * @param w current window
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   546
	 */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   547
	static void OrderClick_Transfer(OrdersWindow *w, int i)
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   548
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   549
		VehicleOrderID sel_ord = w->OrderGetSel();
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   550
		const Order *order = GetVehicleOrder(w->vehicle, sel_ord);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   551
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   552
		if (order == NULL) return;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   553
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   554
		DoCommandP(w->vehicle->tile, w->vehicle->index + (sel_ord << 16), MOF_UNLOAD | ((order->GetUnloadType() & ~OUFB_NO_UNLOAD) ^ OUFB_TRANSFER) << 4, NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER));
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   555
	}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   556
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   557
	/**
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   558
	 * Handle the click on the skip button.
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   559
	 * If ctrl is pressed skip to selected order.
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   560
	 *  Else skip to current order + 1
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   561
	 *
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   562
	 * @param w current window
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   563
	 */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   564
	static void OrderClick_Skip(OrdersWindow *w, int i)
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   565
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   566
		/* Don't skip when there's nothing to skip */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   567
		if (_ctrl_pressed && w->vehicle->cur_order_index == w->OrderGetSel()) return;
10858
adb5253f5da9 (svn r13409) -Fix: division by zero when one would press 'd' (skip order) when there's no order.
rubidium
parents: 10775
diff changeset
   568
		if (w->vehicle->num_orders == 0) return;
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   569
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   570
		DoCommandP(w->vehicle->tile, w->vehicle->index, _ctrl_pressed ? w->OrderGetSel() : ((w->vehicle->cur_order_index + 1) % w->vehicle->num_orders),
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   571
				NULL, CMD_SKIP_TO_ORDER | CMD_MSG(_ctrl_pressed ? STR_CAN_T_SKIP_TO_ORDER : STR_CAN_T_SKIP_ORDER));
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   572
	}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   573
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   574
	/**
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   575
	 * Handle the click on the unload button.
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   576
	 *
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   577
	 * @param w current window
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   578
	 */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   579
	static void OrderClick_Delete(OrdersWindow *w, int i)
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   580
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   581
		DoCommandP(w->vehicle->tile, w->vehicle->index, w->OrderGetSel(), NULL, CMD_DELETE_ORDER | CMD_MSG(STR_8834_CAN_T_DELETE_THIS_ORDER));
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   582
	}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   583
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   584
	/**
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   585
	 * Handle the click on the refit button.
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   586
	 * If ctrl is pressed cancel refitting.
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   587
	 *  Else show the refit window.
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   588
	 *
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   589
	 * @param w current window
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   590
	 */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   591
	static void OrderClick_Refit(OrdersWindow *w, int i)
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   592
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   593
		if (_ctrl_pressed) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   594
			/* Cancel refitting */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   595
			DoCommandP(w->vehicle->tile, w->vehicle->index, (w->OrderGetSel() << 16) | (CT_NO_REFIT << 8) | CT_NO_REFIT, NULL, CMD_ORDER_REFIT);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   596
		} else {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   597
			ShowVehicleRefitWindow(w->vehicle, w->OrderGetSel());
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   598
		}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   599
	}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   600
	typedef void Handler(OrdersWindow*, int);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   601
	struct KeyToEvent {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   602
		uint16 keycode;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   603
		Handler *proc;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   604
	};
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   605
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   606
public:
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   607
	OrdersWindow(const WindowDesc *desc, const Vehicle *v) : Window(desc, v->index)
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   608
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   609
		this->caption_color = v->owner;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   610
		this->vscroll.cap = 6;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   611
		this->resize.step_height = 10;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   612
		this->selected_order = -1;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   613
		this->vehicle = v;
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10703
diff changeset
   614
		if (_settings_game.order.timetabling) {
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   615
			this->widget[ORDER_WIDGET_CAPTION].right -= 61;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   616
		} else {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   617
			this->HideWidget(ORDER_WIDGET_TIMETABLE_VIEW);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   618
		}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   619
		this->FindWindowPlacementAndResize(desc);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   620
	}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   621
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   622
	virtual void OnPaint()
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   623
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   624
		bool shared_orders = this->vehicle->IsOrderListShared();
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   625
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   626
		SetVScrollCount(this, this->vehicle->num_orders + 1);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   627
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   628
		int sel = OrderGetSel();
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   629
		const Order *order = GetVehicleOrder(this->vehicle, sel);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   630
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   631
		if (this->vehicle->owner == _local_player) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   632
			/* Set the strings for the dropdown boxes. */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   633
			this->widget[ORDER_WIDGET_COND_VARIABLE].data   = _order_conditional_variable[order == NULL ? 0 : order->GetConditionVariable()];
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   634
			this->widget[ORDER_WIDGET_COND_COMPARATOR].data = _order_conditional_condition[order == NULL ? 0 : order->GetConditionComparator()];
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   635
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   636
			/* skip */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   637
			this->SetWidgetDisabledState(ORDER_WIDGET_SKIP, this->vehicle->num_orders <= 1);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   638
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   639
			/* delete */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   640
			this->SetWidgetDisabledState(ORDER_WIDGET_DELETE,
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   641
					(uint)this->vehicle->num_orders + ((shared_orders || this->vehicle->num_orders != 0) ? 1 : 0) <= (uint)this->selected_order);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   642
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   643
			/* non-stop only for trains */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   644
			this->SetWidgetDisabledState(ORDER_WIDGET_NON_STOP,  (this->vehicle->type != VEH_TRAIN && this->vehicle->type != VEH_ROAD) || order == NULL);
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   645
			this->SetWidgetDisabledState(ORDER_WIDGET_NON_STOP_DROPDOWN, this->IsWidgetDisabled(ORDER_WIDGET_NON_STOP));
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   646
			this->SetWidgetDisabledState(ORDER_WIDGET_FULL_LOAD, order == NULL || (order->GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION) != 0); // full load
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   647
			this->SetWidgetDisabledState(ORDER_WIDGET_FULL_LOAD_DROPDOWN, this->IsWidgetDisabled(ORDER_WIDGET_FULL_LOAD));
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   648
			this->SetWidgetDisabledState(ORDER_WIDGET_UNLOAD,    order == NULL || (order->GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION) != 0); // unload
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   649
			this->SetWidgetDisabledState(ORDER_WIDGET_UNLOAD_DROPDOWN, this->IsWidgetDisabled(ORDER_WIDGET_UNLOAD));
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   650
			/* Disable list of vehicles with the same shared orders if there is no list */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   651
			this->SetWidgetDisabledState(ORDER_WIDGET_SHARED_ORDER_LIST, !shared_orders || this->vehicle->orders == NULL);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   652
			this->SetWidgetDisabledState(ORDER_WIDGET_REFIT,     order == NULL); // Refit
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   653
			this->SetWidgetDisabledState(ORDER_WIDGET_SERVICE,   order == NULL); // Refit
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   654
			this->HideWidget(ORDER_WIDGET_REFIT); // Refit
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   655
			this->HideWidget(ORDER_WIDGET_SERVICE); // Service
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   656
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   657
			this->HideWidget(ORDER_WIDGET_COND_VARIABLE);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   658
			this->HideWidget(ORDER_WIDGET_COND_COMPARATOR);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   659
			this->HideWidget(ORDER_WIDGET_COND_VALUE);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   660
		}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   661
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   662
		this->ShowWidget(ORDER_WIDGET_NON_STOP_DROPDOWN);
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   663
		this->ShowWidget(ORDER_WIDGET_NON_STOP);
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   664
		this->ShowWidget(ORDER_WIDGET_UNLOAD_DROPDOWN);
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   665
		this->ShowWidget(ORDER_WIDGET_UNLOAD);
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   666
		this->ShowWidget(ORDER_WIDGET_FULL_LOAD_DROPDOWN);
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   667
		this->ShowWidget(ORDER_WIDGET_FULL_LOAD);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   668
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   669
		this->RaiseWidget(ORDER_WIDGET_NON_STOP);
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   670
		this->RaiseWidget(ORDER_WIDGET_FULL_LOAD);
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   671
		this->RaiseWidget(ORDER_WIDGET_UNLOAD);
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   672
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   673
		if (order != NULL) {
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   674
			this->SetWidgetLoweredState(ORDER_WIDGET_NON_STOP, order->GetNonStopType() & ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS);
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   675
			switch (order->GetType()) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   676
				case OT_GOTO_STATION:
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   677
					if (!GetStation(order->GetDestination())->IsBuoy()) {
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   678
						this->SetWidgetLoweredState(ORDER_WIDGET_FULL_LOAD, order->GetLoadType() == OLF_FULL_LOAD_ANY);
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   679
						this->SetWidgetLoweredState(ORDER_WIDGET_UNLOAD, order->GetUnloadType() == OUFB_UNLOAD);
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   680
						break;
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   681
					}
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   682
					/* Fall-through */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   683
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   684
				case OT_GOTO_WAYPOINT:
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   685
					this->DisableWidget(ORDER_WIDGET_FULL_LOAD_DROPDOWN);
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   686
					this->DisableWidget(ORDER_WIDGET_FULL_LOAD);
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   687
					this->DisableWidget(ORDER_WIDGET_UNLOAD_DROPDOWN);
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   688
					this->DisableWidget(ORDER_WIDGET_UNLOAD);
10107
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   689
					break;
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   690
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   691
				case OT_GOTO_DEPOT:
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   692
					/* Remove unload and replace it with refit */
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   693
					this->HideWidget(ORDER_WIDGET_UNLOAD_DROPDOWN);
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   694
					this->HideWidget(ORDER_WIDGET_UNLOAD);
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   695
					this->HideWidget(ORDER_WIDGET_FULL_LOAD_DROPDOWN);
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   696
					this->HideWidget(ORDER_WIDGET_FULL_LOAD);
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   697
					this->ShowWidget(ORDER_WIDGET_REFIT);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   698
					this->ShowWidget(ORDER_WIDGET_SERVICE);
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   699
					this->SetWidgetLoweredState(ORDER_WIDGET_SERVICE, order->GetDepotOrderType() & ODTFB_SERVICE);
10136
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   700
					break;
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
   701
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   702
				case OT_CONDITIONAL: {
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   703
					this->HideWidget(ORDER_WIDGET_NON_STOP_DROPDOWN);
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   704
					this->HideWidget(ORDER_WIDGET_NON_STOP);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   705
					this->HideWidget(ORDER_WIDGET_UNLOAD);
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   706
					this->HideWidget(ORDER_WIDGET_UNLOAD_DROPDOWN);
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   707
					this->HideWidget(ORDER_WIDGET_FULL_LOAD);
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   708
					this->HideWidget(ORDER_WIDGET_FULL_LOAD_DROPDOWN);
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   709
					this->ShowWidget(ORDER_WIDGET_COND_VARIABLE);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   710
					this->ShowWidget(ORDER_WIDGET_COND_COMPARATOR);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   711
					this->ShowWidget(ORDER_WIDGET_COND_VALUE);
10113
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
   712
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   713
					OrderConditionVariable ocv = order->GetConditionVariable();
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   714
					this->SetWidgetDisabledState(ORDER_WIDGET_COND_COMPARATOR, ocv == OCV_UNCONDITIONALLY);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   715
					this->SetWidgetDisabledState(ORDER_WIDGET_COND_VALUE, ocv == OCV_REQUIRES_SERVICE || ocv == OCV_UNCONDITIONALLY);
10107
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   716
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   717
					uint value = order->GetConditionValue();
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   718
					if (order->GetConditionVariable() == OCV_MAX_SPEED) value = ConvertSpeedToDisplaySpeed(value);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   719
					SetDParam(1, value);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   720
				} break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   721
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   722
				default: // every other orders
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   723
					this->DisableWidget(ORDER_WIDGET_NON_STOP_DROPDOWN);
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   724
					this->DisableWidget(ORDER_WIDGET_NON_STOP);
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   725
					this->DisableWidget(ORDER_WIDGET_FULL_LOAD_DROPDOWN);
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   726
					this->DisableWidget(ORDER_WIDGET_FULL_LOAD);
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   727
					this->DisableWidget(ORDER_WIDGET_UNLOAD_DROPDOWN);
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   728
					this->DisableWidget(ORDER_WIDGET_UNLOAD);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   729
			}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   730
		}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   731
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   732
		SetDParam(0, this->vehicle->index);
10595
7957c71b0dfe (svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium
parents: 10580
diff changeset
   733
		this->DrawWidgets();
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   734
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   735
		int y = 15;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   736
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   737
		int i = this->vscroll.pos;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   738
		order = GetVehicleOrder(this->vehicle, i);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   739
		StringID str;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   740
		while (order != NULL) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   741
			/* Don't draw anything if it extends past the end of the window. */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   742
			if (i - this->vscroll.pos >= this->vscroll.cap) break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   743
11144
7eff560780d2 (svn r13702) -Fix: do not overflow the order/timetable window when 'long' orders are displayed.
rubidium
parents: 10893
diff changeset
   744
			DrawOrderString(this->vehicle, order, i, y, i == this->selected_order, false, this->widget[ORDER_WIDGET_ORDER_LIST].right - 4);
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   745
			y += 10;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   746
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   747
			i++;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   748
			order = order->next;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   749
		}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   750
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   751
		if (i - this->vscroll.pos < this->vscroll.cap) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   752
			str = shared_orders ? STR_END_OF_SHARED_ORDERS : STR_882A_END_OF_ORDERS;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   753
			DrawString(2, y, str, (i == this->selected_order) ? TC_WHITE : TC_BLACK);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   754
		}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   755
	}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   756
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   757
	virtual void OnClick(Point pt, int widget)
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   758
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   759
		if (this->widget[widget].type != WWT_DROPDOWN) HideDropDownMenu(this);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   760
		switch (widget) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   761
			case ORDER_WIDGET_ORDER_LIST: {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   762
				ResetObjectToPlace();
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   763
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   764
				int sel = this->GetOrderFromPt(pt.y);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   765
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   766
				if (sel == INVALID_ORDER) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   767
					/* This was a click on an empty part of the orders window, so
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   768
					* deselect the currently selected order. */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   769
					this->selected_order = -1;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   770
					this->SetDirty();
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   771
					return;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   772
				}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   773
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   774
				if (_ctrl_pressed && sel < this->vehicle->num_orders) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   775
					const Order *ord = GetVehicleOrder(this->vehicle, sel);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   776
					TileIndex xy;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   777
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   778
					switch (ord->GetType()) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   779
						case OT_GOTO_STATION:  xy = GetStation(ord->GetDestination())->xy ; break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   780
						case OT_GOTO_DEPOT:    xy = (this->vehicle->type == VEH_AIRCRAFT) ?  GetStation(ord->GetDestination())->xy : GetDepot(ord->GetDestination())->xy;    break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   781
						case OT_GOTO_WAYPOINT: xy = GetWaypoint(ord->GetDestination())->xy; break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   782
						default:               xy = 0; break;
10107
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   783
					}
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   784
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   785
					if (xy != 0) ScrollMainWindowToTile(xy);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   786
					return;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   787
				} else {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   788
					if (sel == this->selected_order) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   789
						/* Deselect clicked order */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   790
						this->selected_order = -1;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   791
					} else {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   792
						/* Select clicked order */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   793
						this->selected_order = sel;
10107
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   794
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   795
						if (this->vehicle->owner == _local_player) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   796
							/* Activate drag and drop */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   797
							SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, VHM_DRAG, this);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   798
						}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   799
					}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   800
				}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   801
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   802
				this->SetDirty();
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   803
			} break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   804
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   805
			case ORDER_WIDGET_SKIP:
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   806
				OrderClick_Skip(this, 0);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   807
				break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   808
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   809
			case ORDER_WIDGET_DELETE:
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   810
				OrderClick_Delete(this, 0);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   811
				break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   812
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   813
			case ORDER_WIDGET_NON_STOP:
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   814
				OrderClick_Nonstop(this, -1);
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   815
				break;
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   816
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   817
			case ORDER_WIDGET_NON_STOP_DROPDOWN: {
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   818
				const Order *o = GetVehicleOrder(this->vehicle, this->OrderGetSel());
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   819
				ShowDropDownMenu(this, _order_non_stop_drowdown, o->GetNonStopType(), ORDER_WIDGET_NON_STOP_DROPDOWN, 0, o->IsType(OT_GOTO_STATION) ? 0 : (o->IsType(OT_GOTO_WAYPOINT) ? 3 : 12));
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   820
			} break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   821
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   822
			case ORDER_WIDGET_GOTO:
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   823
				OrderClick_Goto(this, 0);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   824
				break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   825
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   826
			case ORDER_WIDGET_GOTO_DROPDOWN:
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   827
				ShowDropDownMenu(this, this->vehicle->type == VEH_AIRCRAFT ? _order_goto_dropdown_aircraft : _order_goto_dropdown, 0, ORDER_WIDGET_GOTO_DROPDOWN, 0, 0);
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   828
				break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   829
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   830
			case ORDER_WIDGET_FULL_LOAD:
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   831
				OrderClick_FullLoad(this, -1);
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   832
				break;
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   833
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   834
			case ORDER_WIDGET_FULL_LOAD_DROPDOWN:
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   835
				ShowDropDownMenu(this, _order_full_load_drowdown, GetVehicleOrder(this->vehicle, this->OrderGetSel())->GetLoadType(), ORDER_WIDGET_FULL_LOAD_DROPDOWN, 0, 2);
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   836
				break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   837
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   838
			case ORDER_WIDGET_UNLOAD:
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   839
				OrderClick_Unload(this, -1);
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   840
				break;
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   841
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   842
			case ORDER_WIDGET_UNLOAD_DROPDOWN:
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   843
				ShowDropDownMenu(this, _order_unload_drowdown, GetVehicleOrder(this->vehicle, this->OrderGetSel())->GetUnloadType(), ORDER_WIDGET_UNLOAD_DROPDOWN, 0, 8);
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   844
				break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   845
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   846
			case ORDER_WIDGET_REFIT:
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   847
				OrderClick_Refit(this, 0);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   848
				break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   849
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   850
			case ORDER_WIDGET_SERVICE:
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   851
				OrderClick_Service(this, 0);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   852
				break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   853
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   854
			case ORDER_WIDGET_TIMETABLE_VIEW:
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   855
				ShowTimetableWindow(this->vehicle);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   856
				break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   857
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   858
			case ORDER_WIDGET_COND_VARIABLE:
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   859
				ShowDropDownMenu(this, _order_conditional_variable, GetVehicleOrder(this->vehicle, this->OrderGetSel())->GetConditionVariable(), ORDER_WIDGET_COND_VARIABLE, 0, 0);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   860
				break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   861
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   862
			case ORDER_WIDGET_COND_COMPARATOR: {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   863
				const Order *o = GetVehicleOrder(this->vehicle, this->OrderGetSel());
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   864
				ShowDropDownMenu(this, _order_conditional_condition, o->GetConditionComparator(), ORDER_WIDGET_COND_COMPARATOR, 0, (o->GetConditionVariable() == OCV_REQUIRES_SERVICE) ? 0x3F : 0xC0);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   865
			} break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   866
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   867
			case ORDER_WIDGET_COND_VALUE: {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   868
				const Order *order = GetVehicleOrder(this->vehicle, this->OrderGetSel());
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   869
				uint value = order->GetConditionValue();
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   870
				if (order->GetConditionVariable() == OCV_MAX_SPEED) value = ConvertSpeedToDisplaySpeed(value);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   871
				SetDParam(0, value);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   872
				ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_ORDER_CONDITIONAL_VALUE_CAPT, 5, 100, this, CS_NUMERAL);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   873
			} break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   874
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   875
			case ORDER_WIDGET_SHARED_ORDER_LIST:
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   876
				ShowVehicleListWindow(this->vehicle);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   877
				break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   878
		}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   879
	}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   880
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   881
	virtual void OnQueryTextFinished(char *str)
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   882
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   883
		if (!StrEmpty(str)) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   884
			VehicleOrderID sel = this->OrderGetSel();
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   885
			uint value = atoi(str);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   886
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   887
			switch (GetVehicleOrder(this->vehicle, sel)->GetConditionVariable()) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   888
				case OCV_MAX_SPEED:
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   889
					value = ConvertDisplaySpeedToSpeed(value);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   890
					break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   891
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   892
				case OCV_RELIABILITY:
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   893
				case OCV_LOAD_PERCENTAGE:
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   894
					value = Clamp(value, 0, 100);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   895
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   896
				default:
10107
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
   897
					break;
7328
8ac64204c17f (svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents: 7303
diff changeset
   898
			}
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   899
			DoCommandP(this->vehicle->tile, this->vehicle->index + (sel << 16), MOF_COND_VALUE | Clamp(value, 0, 2047) << 4, NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER));
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   900
		}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   901
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   902
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   903
	virtual void OnDropdownSelect(int widget, int index)
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   904
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   905
		switch (widget) {
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   906
			case ORDER_WIDGET_NON_STOP_DROPDOWN:
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   907
				OrderClick_Nonstop(this, index);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   908
				break;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   909
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   910
			case ORDER_WIDGET_FULL_LOAD_DROPDOWN:
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   911
				OrderClick_FullLoad(this, index);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   912
				break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   913
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   914
			case ORDER_WIDGET_UNLOAD_DROPDOWN:
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   915
				OrderClick_Unload(this, index);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   916
				break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   917
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   918
			case ORDER_WIDGET_GOTO_DROPDOWN:
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   919
				switch (index) {
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
   920
					case 0: OrderClick_Goto(this, 0); break;
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   921
					case 1: OrderClick_NearestDepot(this, 0); break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   922
					case 2: OrderClick_Conditional(this, 0); break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   923
					default: NOT_REACHED();
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   924
				}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   925
				break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   926
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   927
			case ORDER_WIDGET_COND_VARIABLE:
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   928
				DoCommandP(this->vehicle->tile, this->vehicle->index + (this->OrderGetSel() << 16), MOF_COND_VARIABLE | index << 4,  NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER));
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   929
				break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   930
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   931
			case ORDER_WIDGET_COND_COMPARATOR:
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   932
				DoCommandP(this->vehicle->tile, this->vehicle->index + (this->OrderGetSel() << 16), MOF_COND_COMPARATOR | index << 4,  NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER));
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   933
				break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   934
		}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   935
	}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   936
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   937
	virtual void OnDragDrop(Point pt, int widget)
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   938
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   939
		switch (widget) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   940
			case ORDER_WIDGET_ORDER_LIST: {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   941
				int from_order = this->OrderGetSel();
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   942
				int to_order = this->GetOrderFromPt(pt.y);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   943
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   944
				if (!(from_order == to_order || from_order == INVALID_ORDER || from_order > this->vehicle->num_orders || to_order == INVALID_ORDER || to_order > this->vehicle->num_orders) &&
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   945
						DoCommandP(this->vehicle->tile, this->vehicle->index, from_order | (to_order << 16), NULL, CMD_MOVE_ORDER | CMD_MSG(STR_CAN_T_MOVE_THIS_ORDER))) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   946
					this->selected_order = -1;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   947
				}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   948
			} break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   949
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   950
			case ORDER_WIDGET_DELETE:
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   951
				OrderClick_Delete(this, 0);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   952
				break;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   953
		}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   954
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   955
		ResetObjectToPlace();
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   956
	}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   957
10607
1ab30cead125 (svn r13151) -Codechange: use an enum instead of bool as return type of OnKeyPress/OnCTRLStateChange to make it obvious what the return values mean.
rubidium
parents: 10595
diff changeset
   958
	virtual EventState OnKeyPress(uint16 key, uint16 keycode)
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   959
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   960
		static const KeyToEvent keytoevent[] = {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   961
			{'D', OrderClick_Skip},
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   962
			{'F', OrderClick_Delete},
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   963
			{'G', OrderClick_Goto},
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   964
			{'H', OrderClick_Nonstop},
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   965
			{'J', OrderClick_FullLoad},
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   966
			{'K', OrderClick_Unload},
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   967
			//{'?', OrderClick_Transfer},
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   968
			//('?', OrderClick_Service},
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   969
		};
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   970
10607
1ab30cead125 (svn r13151) -Codechange: use an enum instead of bool as return type of OnKeyPress/OnCTRLStateChange to make it obvious what the return values mean.
rubidium
parents: 10595
diff changeset
   971
		if (this->vehicle->owner != _local_player) return ES_NOT_HANDLED;
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   972
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   973
		for (uint i = 0; i < lengthof(keytoevent); i++) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   974
			if (keycode == keytoevent[i].keycode) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   975
				keytoevent[i].proc(this, -1);
10607
1ab30cead125 (svn r13151) -Codechange: use an enum instead of bool as return type of OnKeyPress/OnCTRLStateChange to make it obvious what the return values mean.
rubidium
parents: 10595
diff changeset
   976
				return ES_HANDLED;
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   977
			}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   978
		}
10607
1ab30cead125 (svn r13151) -Codechange: use an enum instead of bool as return type of OnKeyPress/OnCTRLStateChange to make it obvious what the return values mean.
rubidium
parents: 10595
diff changeset
   979
		return ES_NOT_HANDLED;
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   980
	}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   981
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   982
	virtual void OnPlaceObject(Point pt, TileIndex tile)
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   983
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   984
		if (this->goto_type == OPOS_GOTO) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   985
			/* check if we're clicking on a vehicle first.. clone orders in that case. */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   986
			const Vehicle *v = CheckMouseOverVehicle();
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   987
			if (v != NULL && this->HandleOrderVehClick(v)) return;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   988
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   989
			const Order cmd = GetOrderCmdFromTile(this->vehicle, tile);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   990
			if (!cmd.IsValid()) return;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   991
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   992
			if (DoCommandP(this->vehicle->tile, this->vehicle->index + (this->OrderGetSel() << 16), cmd.Pack(), NULL, CMD_INSERT_ORDER | CMD_MSG(STR_8833_CAN_T_INSERT_NEW_ORDER))) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   993
				if (this->selected_order != -1) this->selected_order++;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   994
				ResetObjectToPlace();
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   995
			}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   996
		}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   997
	}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   998
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
   999
	virtual void OnPlaceObjectAbort()
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1000
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1001
		if (this->goto_type == OPOS_CONDITIONAL) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1002
			this->goto_type = OPOS_GOTO;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1003
			if (_cursor.pos.x >= (this->left + this->widget[ORDER_WIDGET_ORDER_LIST].left) &&
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1004
					_cursor.pos.y >= (this->top  + this->widget[ORDER_WIDGET_ORDER_LIST].top) &&
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1005
					_cursor.pos.x <= (this->left + this->widget[ORDER_WIDGET_ORDER_LIST].right) &&
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1006
					_cursor.pos.y <= (this->top  + this->widget[ORDER_WIDGET_ORDER_LIST].bottom)) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1007
				int order_id = this->GetOrderFromPt(_cursor.pos.y - this->top);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1008
				if (order_id != INVALID_ORDER) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1009
					Order order;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1010
					order.next = NULL;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1011
					order.index = 0;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1012
					order.MakeConditional(order_id);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1013
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1014
					DoCommandP(this->vehicle->tile, this->vehicle->index + (this->OrderGetSel() << 16), order.Pack(), NULL, CMD_INSERT_ORDER | CMD_MSG(STR_8833_CAN_T_INSERT_NEW_ORDER));
10107
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
  1015
				}
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
  1016
			}
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1017
		}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1018
		this->RaiseWidget(ORDER_WIDGET_GOTO);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1019
		this->InvalidateWidget(ORDER_WIDGET_GOTO);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1020
	}
10107
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
  1021
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1022
	virtual void OnMouseLoop()
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1023
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1024
		const Vehicle *v = _place_clicked_vehicle;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1025
		/*
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1026
		* Check if we clicked on a vehicle
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1027
		* and if the GOTO button of this window is pressed
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1028
		* This is because of all open order windows WE_MOUSELOOP is called
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1029
		* and if you have 3 windows open, and this check is not done
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1030
		* the order is copied to the last open window instead of the
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1031
		* one where GOTO is enabled
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1032
		*/
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1033
		if (v != NULL && this->IsWidgetLowered(ORDER_WIDGET_GOTO)) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1034
			_place_clicked_vehicle = NULL;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1035
			this->HandleOrderVehClick(v);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1036
		}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1037
	}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1038
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1039
	virtual void OnResize(Point new_size, Point delta)
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1040
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1041
		/* Update the scroll + matrix */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1042
		this->vscroll.cap = (this->widget[ORDER_WIDGET_ORDER_LIST].bottom - this->widget[ORDER_WIDGET_ORDER_LIST].top) / 10;
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1043
	}
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1044
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1045
	virtual void OnTimeout()
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1046
	{
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1047
		/* unclick all buttons except for the 'goto' button (ORDER_WIDGET_GOTO), which is 'persistent' */
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1048
		for (uint i = 0; i < this->widget_count; i++) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1049
			if (this->IsWidgetLowered(i) && i != ORDER_WIDGET_GOTO) {
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1050
				this->RaiseWidget(i);
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1051
				this->InvalidateWidget(i);
10107
2a94b97270e3 (svn r12638) -Codechange: give order_gui.cpp a touch of coding style.
rubidium
parents: 10105
diff changeset
  1052
			}
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1053
		}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1054
	}
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1055
};
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1056
7303
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1057
/**
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1058
 * Widget definition for player train orders
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1059
 */
1081
b22fd4020122 (svn r1582) Fix: Only the train orders GUI has a non-stop button now.
dominik
parents: 1067
diff changeset
  1060
static const Widget _orders_train_widgets[] = {
7303
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1061
	{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,                STR_018B_CLOSE_WINDOW},               // ORDER_WIDGET_CLOSEBOX
10113
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1062
	{    WWT_CAPTION,   RESIZE_RIGHT,   14,    11,   385,     0,    13, STR_8829_ORDERS,         STR_018C_WINDOW_TITLE_DRAG_THIS},     // ORDER_WIDGET_CAPTION
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1063
	{ WWT_PUSHTXTBTN,   RESIZE_LR,      14,   325,   385,     0,    13, STR_TIMETABLE_VIEW,      STR_TIMETABLE_VIEW_TOOLTIP},          // ORDER_WIDGET_TIMETABLE_VIEW
7303
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1064
10113
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1065
	{      WWT_PANEL,   RESIZE_RB,      14,     0,   373,    14,    75, 0x0,                     STR_8852_ORDERS_LIST_CLICK_ON_ORDER}, // ORDER_WIDGET_ORDER_LIST
7303
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1066
10113
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1067
	{  WWT_SCROLLBAR,   RESIZE_LRB,     14,   374,   385,    14,    75, 0x0,                     STR_0190_SCROLL_BAR_SCROLLS_LIST},    // ORDER_WIDGET_SCROLLBAR
7303
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1068
10113
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1069
	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,     0,   123,    88,    99, STR_8823_SKIP,           STR_8853_SKIP_THE_CURRENT_ORDER},     // ORDER_WIDGET_SKIP
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1070
	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   124,   247,    88,    99, STR_8824_DELETE,         STR_8854_DELETE_THE_HIGHLIGHTED},     // ORDER_WIDGET_DELETE
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
  1071
	{   WWT_DROPDOWN,   RESIZE_TB,      14,     0,   123,    76,    87, STR_NULL,                STR_ORDER_TOOLTIP_NON_STOP},          // ORDER_WIDGET_NON_STOP_DROPDOWN
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
  1072
	{    WWT_TEXTBTN,   RESIZE_TB,      14,     0,   111,    76,    87, STR_ORDER_NON_STOP,      STR_ORDER_TOOLTIP_NON_STOP},          // ORDER_WIDGET_NON_STOP
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
  1073
	{   WWT_DROPDOWN,   RESIZE_TB,      14,   248,   371,    88,    99, STR_EMPTY,               STR_ORDER_GO_TO_DROPDOWN_TOOLTIP},    // ORDER_WIDGET_GOTO_DROPDOWN
10130
906ffae618b0 (svn r12661) -Add: ability to send a vehicle (using default orders) to the nearest depot.
rubidium
parents: 10129
diff changeset
  1074
	{    WWT_TEXTBTN,   RESIZE_TB,      14,   248,   359,    88,    99, STR_8826_GO_TO,          STR_8856_INSERT_A_NEW_ORDER_BEFORE},  // ORDER_WIDGET_GOTO
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
  1075
	{   WWT_DROPDOWN,   RESIZE_TB,      14,   124,   247,    76,    87, STR_NULL,                STR_ORDER_TOOLTIP_FULL_LOAD},         // ORDER_WIDGET_FULL_LOAD_DROPDOWN
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
  1076
	{    WWT_TEXTBTN,   RESIZE_TB,      14,   124,   235,    76,    87, STR_ORDER_TOGGLE_FULL_LOAD, STR_ORDER_TOOLTIP_FULL_LOAD},      // ORDER_WIDGET_FULL_LOAD
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
  1077
	{   WWT_DROPDOWN,   RESIZE_TB,      14,   248,   371,    76,    87, STR_NULL,                STR_ORDER_TOOLTIP_UNLOAD},            // ORDER_WIDGET_UNLOAD_DROPDOWN
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
  1078
	{    WWT_TEXTBTN,   RESIZE_TB,      14,   248,   359,    76,    87, STR_ORDER_TOGGLE_UNLOAD, STR_ORDER_TOOLTIP_UNLOAD},            // ORDER_WIDGET_UNLOAD
10121
b82006b98b4a (svn r12652) -Codechange: rework the order GUI a little more to make it a little more clear that 'transfer' is just an unload type.
rubidium
parents: 10119
diff changeset
  1079
	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   124,   247,    76,    87, STR_REFIT,               STR_REFIT_TIP},                       // ORDER_WIDGET_REFIT
10123
ff39ffbaa043 (svn r12654) -Codechange: remove some unneeded right click handling due to the splitting of the load/refit button.
rubidium
parents: 10122
diff changeset
  1080
	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   248,   371,    76,    87, STR_SERVICE,             STR_SERVICE_HINT},                    // ORDER_WIDGET_SERVICE
10113
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1081
10136
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
  1082
	{   WWT_DROPDOWN,   RESIZE_TB,      14,     0,   123,    76,    87, STR_NULL,                STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP},   // ORDER_WIDGET_COND_VARIABLE
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
  1083
	{   WWT_DROPDOWN,   RESIZE_TB,      14,   124,   247,    76,    87, STR_NULL,                STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP}, // ORDER_WIDGET_COND_COMPARATOR
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
  1084
	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   248,   371,    76,    87, STR_CONDITIONAL_VALUE,   STR_ORDER_CONDITIONAL_VALUE_TOOLTIP},      // ORDER_WIDGET_COND_VALUE
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
  1085
10113
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1086
	{      WWT_PANEL,   RESIZE_RTB,     14,   372,   373,    76,    99, 0x0,                     STR_NULL},                            // ORDER_WIDGET_RESIZE_BAR
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1087
	{ WWT_PUSHIMGBTN,   RESIZE_LRTB,    14,   372,   385,    76,    87, SPR_SHARED_ORDERS_ICON,  STR_VEH_WITH_SHARED_ORDERS_LIST_TIP}, // ORDER_WIDGET_SHARED_ORDER_LIST
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1088
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1089
	{  WWT_RESIZEBOX,   RESIZE_LRTB,    14,   374,   385,    88,    99, 0x0,                     STR_RESIZE_BUTTON},                   // ORDER_WIDGET_RESIZE
7303
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1090
	{   WIDGETS_END},
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1091
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1092
1081
b22fd4020122 (svn r1582) Fix: Only the train orders GUI has a non-stop button now.
dominik
parents: 1067
diff changeset
  1093
static const WindowDesc _orders_train_desc = {
10113
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1094
	WDP_AUTO, WDP_AUTO, 386, 100, 386, 100,
10229
fba3f9fa44d7 (svn r12761) -Codechange: lots of minor whitespace coding style fixes around operators.
rubidium
parents: 10222
diff changeset
  1095
	WC_VEHICLE_ORDERS, WC_VEHICLE_VIEW,
5013
79a6e510c41f (svn r7046) -Fix [FS#311]: 'Goto' button in orders window got depressed along with all other
Darkvater
parents: 4968
diff changeset
  1096
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_RESIZABLE,
1081
b22fd4020122 (svn r1582) Fix: Only the train orders GUI has a non-stop button now.
dominik
parents: 1067
diff changeset
  1097
	_orders_train_widgets,
b22fd4020122 (svn r1582) Fix: Only the train orders GUI has a non-stop button now.
dominik
parents: 1067
diff changeset
  1098
};
b22fd4020122 (svn r1582) Fix: Only the train orders GUI has a non-stop button now.
dominik
parents: 1067
diff changeset
  1099
7303
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1100
/**
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1101
 * Widget definition for player orders (!train)
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1102
 */
1081
b22fd4020122 (svn r1582) Fix: Only the train orders GUI has a non-stop button now.
dominik
parents: 1067
diff changeset
  1103
static const Widget _orders_widgets[] = {
7303
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1104
	{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,                STR_018B_CLOSE_WINDOW},               // ORDER_WIDGET_CLOSEBOX
10113
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1105
	{    WWT_CAPTION,   RESIZE_RIGHT,   14,    11,   385,     0,    13, STR_8829_ORDERS,         STR_018C_WINDOW_TITLE_DRAG_THIS},     // ORDER_WIDGET_CAPTION
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1106
	{ WWT_PUSHTXTBTN,   RESIZE_LR,      14,   325,   385,     0,    13, STR_TIMETABLE_VIEW,      STR_TIMETABLE_VIEW_TOOLTIP},          // ORDER_WIDGET_TIMETABLE_VIEW
7303
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1107
10113
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1108
	{      WWT_PANEL,   RESIZE_RB,      14,     0,   373,    14,    75, 0x0,                     STR_8852_ORDERS_LIST_CLICK_ON_ORDER}, // ORDER_WIDGET_ORDER_LIST
7303
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1109
10113
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1110
	{  WWT_SCROLLBAR,   RESIZE_LRB,     14,   374,   385,    14,    75, 0x0,                     STR_0190_SCROLL_BAR_SCROLLS_LIST},    // ORDER_WIDGET_SCROLLBAR
7303
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1111
10113
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1112
	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,     0,   123,    88,    99, STR_8823_SKIP,           STR_8853_SKIP_THE_CURRENT_ORDER},     // ORDER_WIDGET_SKIP
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1113
	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   124,   247,    88,    99, STR_8824_DELETE,         STR_8854_DELETE_THE_HIGHLIGHTED},     // ORDER_WIDGET_DELETE
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
  1114
	{      WWT_EMPTY,   RESIZE_TB,      14,     0,     0,    76,    87, 0x0,                     0x0},                                 // ORDER_WIDGET_NON_STOP_DROPDOWN
7303
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1115
	{      WWT_EMPTY,   RESIZE_TB,      14,     0,     0,    76,    87, 0x0,                     0x0},                                 // ORDER_WIDGET_NON_STOP
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
  1116
	{   WWT_DROPDOWN,   RESIZE_TB,      14,   248,   371,    88,    99, STR_EMPTY,               STR_ORDER_GO_TO_DROPDOWN_TOOLTIP},    // ORDER_WIDGET_GOTO_DROPDOWN
10130
906ffae618b0 (svn r12661) -Add: ability to send a vehicle (using default orders) to the nearest depot.
rubidium
parents: 10129
diff changeset
  1117
	{    WWT_TEXTBTN,   RESIZE_TB,      14,   248,   359,    88,    99, STR_8826_GO_TO,          STR_8856_INSERT_A_NEW_ORDER_BEFORE},  // ORDER_WIDGET_GOTO
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
  1118
	{   WWT_DROPDOWN,   RESIZE_TB,      14,     0,   185,    76,    87, STR_NULL,                STR_ORDER_TOOLTIP_FULL_LOAD},         // ORDER_WIDGET_FULL_LOAD_DROPDOWN
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
  1119
	{    WWT_TEXTBTN,   RESIZE_TB,      14,     0,   173,    76,    87, STR_ORDER_TOGGLE_FULL_LOAD, STR_ORDER_TOOLTIP_FULL_LOAD},      // ORDER_WIDGET_FULL_LOAD
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
  1120
	{   WWT_DROPDOWN,   RESIZE_TB,      14,   186,   371,    76,    87, STR_NULL,                STR_ORDER_TOOLTIP_UNLOAD},            // ORDER_WIDGET_UNLOAD_DROPDOWN
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
  1121
	{    WWT_TEXTBTN,   RESIZE_TB,      14,   186,   359,    76,    87, STR_ORDER_TOGGLE_UNLOAD, STR_ORDER_TOOLTIP_UNLOAD},            // ORDER_WIDGET_UNLOAD
10121
b82006b98b4a (svn r12652) -Codechange: rework the order GUI a little more to make it a little more clear that 'transfer' is just an unload type.
rubidium
parents: 10119
diff changeset
  1122
	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,     0,   185,    76,    87, STR_REFIT,               STR_REFIT_TIP},                       // ORDER_WIDGET_REFIT
10136
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
  1123
	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   186,   371,    76,    87, STR_SERVICE,             STR_SERVICE_HINT},                    // ORDER_WIDGET_SERVICE
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
  1124
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
  1125
	{   WWT_DROPDOWN,   RESIZE_TB,      14,     0,   123,    76,    87, STR_NULL,                STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP},   // ORDER_WIDGET_COND_VARIABLE
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
  1126
	{   WWT_DROPDOWN,   RESIZE_TB,      14,   124,   247,    76,    87, STR_NULL,                STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP}, // ORDER_WIDGET_COND_COMPARATOR
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
  1127
	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   248,   371,    76,    87, STR_CONDITIONAL_VALUE,   STR_ORDER_CONDITIONAL_VALUE_TOOLTIP},      // ORDER_WIDGET_COND_VALUE
7303
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1128
10113
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1129
	{      WWT_PANEL,   RESIZE_RTB,     14,   372,   373,    76,    99, 0x0,                     STR_NULL},                            // ORDER_WIDGET_RESIZE_BAR
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1130
	{ WWT_PUSHIMGBTN,   RESIZE_LRTB,    14,   372,   385,    76,    87, SPR_SHARED_ORDERS_ICON,  STR_VEH_WITH_SHARED_ORDERS_LIST_TIP}, // ORDER_WIDGET_SHARED_ORDER_LIST
7303
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1131
10113
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1132
	{  WWT_RESIZEBOX,   RESIZE_LRTB,    14,   374,   385,    88,    99, 0x0,                     STR_RESIZE_BUTTON},                   // ORDER_WIDGET_RESIZE
7303
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1133
	{   WIDGETS_END},
1081
b22fd4020122 (svn r1582) Fix: Only the train orders GUI has a non-stop button now.
dominik
parents: 1067
diff changeset
  1134
};
b22fd4020122 (svn r1582) Fix: Only the train orders GUI has a non-stop button now.
dominik
parents: 1067
diff changeset
  1135
995
96e9f70280d7 (svn r1493) -Codechange: Removed redundancy in the order GUI. Currently we had most
celestar
parents: 919
diff changeset
  1136
static const WindowDesc _orders_desc = {
10113
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1137
	WDP_AUTO, WDP_AUTO, 386, 100, 386, 100,
10229
fba3f9fa44d7 (svn r12761) -Codechange: lots of minor whitespace coding style fixes around operators.
rubidium
parents: 10222
diff changeset
  1138
	WC_VEHICLE_ORDERS, WC_VEHICLE_VIEW,
5013
79a6e510c41f (svn r7046) -Fix [FS#311]: 'Goto' button in orders window got depressed along with all other
Darkvater
parents: 4968
diff changeset
  1139
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_RESIZABLE,
995
96e9f70280d7 (svn r1493) -Codechange: Removed redundancy in the order GUI. Currently we had most
celestar
parents: 919
diff changeset
  1140
	_orders_widgets,
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1141
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1142
7303
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1143
/**
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1144
 * Widget definition for competitor orders
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1145
 */
995
96e9f70280d7 (svn r1493) -Codechange: Removed redundancy in the order GUI. Currently we had most
celestar
parents: 919
diff changeset
  1146
static const Widget _other_orders_widgets[] = {
7476
7f086e4b2a76 (svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents: 7419
diff changeset
  1147
	{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,           STR_018B_CLOSE_WINDOW},               // ORDER_WIDGET_CLOSEBOX
10113
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1148
	{    WWT_CAPTION,   RESIZE_RIGHT,   14,    11,   385,     0,    13, STR_8829_ORDERS,    STR_018C_WINDOW_TITLE_DRAG_THIS},     // ORDER_WIDGET_CAPTION
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1149
	{ WWT_PUSHTXTBTN,   RESIZE_LR,      14,   325,   385,     0,    13, STR_TIMETABLE_VIEW, STR_TIMETABLE_VIEW_TOOLTIP},          // ORDER_WIDGET_TIMETABLE_VIEW
7303
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1150
10113
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1151
	{      WWT_PANEL,   RESIZE_RB,      14,     0,   373,    14,    75, 0x0,                STR_8852_ORDERS_LIST_CLICK_ON_ORDER}, // ORDER_WIDGET_ORDER_LIST
7303
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1152
10113
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1153
	{  WWT_SCROLLBAR,   RESIZE_LRB,     14,   374,   385,    14,    75, 0x0,                STR_0190_SCROLL_BAR_SCROLLS_LIST},    // ORDER_WIDGET_SCROLLBAR
7303
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1154
10110
d0cd5452bbe9 (svn r12641) -Codechange: do not use the same button for two completely distinct tasks, just make an extra button for it and hide them when not needed.
rubidium
parents: 10109
diff changeset
  1155
	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,     0,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_SKIP
d0cd5452bbe9 (svn r12641) -Codechange: do not use the same button for two completely distinct tasks, just make an extra button for it and hide them when not needed.
rubidium
parents: 10109
diff changeset
  1156
	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,     0,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_DELETE
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
  1157
	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,     0,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_NON_STOP_DROPDOWN
10110
d0cd5452bbe9 (svn r12641) -Codechange: do not use the same button for two completely distinct tasks, just make an extra button for it and hide them when not needed.
rubidium
parents: 10109
diff changeset
  1158
	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,     0,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_NON_STOP
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
  1159
	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,     0,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_GOTO_DROPDOWN
10110
d0cd5452bbe9 (svn r12641) -Codechange: do not use the same button for two completely distinct tasks, just make an extra button for it and hide them when not needed.
rubidium
parents: 10109
diff changeset
  1160
	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,     0,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_GOTO
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
  1161
	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,     0,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_FULL_LOAD_DROPDOWN
10110
d0cd5452bbe9 (svn r12641) -Codechange: do not use the same button for two completely distinct tasks, just make an extra button for it and hide them when not needed.
rubidium
parents: 10109
diff changeset
  1162
	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,     0,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_FULL_LOAD
10893
b6317703444b (svn r13444) -Codechange: make the order GUI somewhat more efficient. The most used options can be done with a single click now.
rubidium
parents: 10858
diff changeset
  1163
	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,     0,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_UNLOAD_DROPDOWN
10110
d0cd5452bbe9 (svn r12641) -Codechange: do not use the same button for two completely distinct tasks, just make an extra button for it and hide them when not needed.
rubidium
parents: 10109
diff changeset
  1164
	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,     0,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_UNLOAD
d0cd5452bbe9 (svn r12641) -Codechange: do not use the same button for two completely distinct tasks, just make an extra button for it and hide them when not needed.
rubidium
parents: 10109
diff changeset
  1165
	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,     0,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_REFIT
d0cd5452bbe9 (svn r12641) -Codechange: do not use the same button for two completely distinct tasks, just make an extra button for it and hide them when not needed.
rubidium
parents: 10109
diff changeset
  1166
	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,     0,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_SERVICE
7476
7f086e4b2a76 (svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents: 7419
diff changeset
  1167
10136
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
  1168
	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,     0,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_COND_VARIABLE
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
  1169
	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,     0,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_COND_COMPARATOR
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
  1170
	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,     0,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_COND_VALUE
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10132
diff changeset
  1171
10113
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1172
	{      WWT_PANEL,   RESIZE_RTB,     14,     0,   373,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_RESIZE_BAR
10110
d0cd5452bbe9 (svn r12641) -Codechange: do not use the same button for two completely distinct tasks, just make an extra button for it and hide them when not needed.
rubidium
parents: 10109
diff changeset
  1173
	{      WWT_EMPTY,   RESIZE_TB,      14,     0,     0,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_SHARED_ORDER_LIST
7476
7f086e4b2a76 (svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents: 7419
diff changeset
  1174
10140
70db180c1072 (svn r12671) -Fix (r12644): orders window of competitors' vehicles was missing a resizebox
smatz
parents: 10139
diff changeset
  1175
	{  WWT_RESIZEBOX,   RESIZE_LRTB,    14,   374,   385,    76,    87, 0x0,                STR_RESIZE_BUTTON},                   // ORDER_WIDGET_RESIZE
7303
be60ddc5a626 (svn r10046) -Documentation: add some documentation in order_gui (skidd13).
rubidium
parents: 7290
diff changeset
  1176
	{   WIDGETS_END},
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1177
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1178
995
96e9f70280d7 (svn r1493) -Codechange: Removed redundancy in the order GUI. Currently we had most
celestar
parents: 919
diff changeset
  1179
static const WindowDesc _other_orders_desc = {
10113
0233cd056e70 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 10112
diff changeset
  1180
	WDP_AUTO, WDP_AUTO, 386, 88, 386, 88,
10229
fba3f9fa44d7 (svn r12761) -Codechange: lots of minor whitespace coding style fixes around operators.
rubidium
parents: 10222
diff changeset
  1181
	WC_VEHICLE_ORDERS, WC_VEHICLE_VIEW,
1242
bd3e74f757b4 (svn r1746) - Feature: [GUI] [ 1107690 ] Resizable orders GUI (nzhook)
darkvater
parents: 1214
diff changeset
  1182
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_RESIZABLE,
995
96e9f70280d7 (svn r1493) -Codechange: Removed redundancy in the order GUI. Currently we had most
celestar
parents: 919
diff changeset
  1183
	_other_orders_widgets,
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1184
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1185
4171
3fadda3afe70 (svn r5609) CodeChange : Apply coding style
belugas
parents: 4077
diff changeset
  1186
void ShowOrdersWindow(const Vehicle *v)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1187
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1188
	VehicleID veh = v->index;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1189
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1190
	DeleteWindowById(WC_VEHICLE_ORDERS, veh);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1191
	DeleteWindowById(WC_VEHICLE_DETAILS, veh);
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 176
diff changeset
  1192
1081
b22fd4020122 (svn r1582) Fix: Only the train orders GUI has a non-stop button now.
dominik
parents: 1067
diff changeset
  1193
	if (v->owner != _local_player) {
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1194
		new OrdersWindow(&_other_orders_desc, v);
2549
f1d3b383d557 (svn r3078) Some more stuff, which piled up:
tron
parents: 2548
diff changeset
  1195
	} else {
10580
d605ae456266 (svn r13124) -Codechange: make a class of the OrdersWindow.
glx
parents: 10462
diff changeset
  1196
		new OrdersWindow((v->type == VEH_TRAIN || v->type == VEH_ROAD) ? &_orders_train_desc : &_orders_desc, v);
1242
bd3e74f757b4 (svn r1746) - Feature: [GUI] [ 1107690 ] Resizable orders GUI (nzhook)
darkvater
parents: 1214
diff changeset
  1197
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1198
}