src/settings_gui.cpp
author terom@frrb.lan
Fri, 19 Dec 2008 01:38:09 +0200
changeset 10439 50f056aa3024
parent 10407 419a41009c38
permissions -rw-r--r--
industries, unmoveables... everything but the landscape
2186
db48cf29b983 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     1
/* $Id$ */
db48cf29b983 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     2
9111
48ce04029fe4 (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: 9092
diff changeset
     3
/** @file settings_gui.cpp GUI for settings. */
6420
456c275f3313 (svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents: 6378
diff changeset
     4
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     5
#include "stdafx.h"
1891
862800791170 (svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents: 1806
diff changeset
     6
#include "openttd.h"
2291
c142846954ee (svn r2815) Store the currency information in one central place instead of scattering it in several unrelated files
tron
parents: 2231
diff changeset
     7
#include "currency.h"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     8
#include "gui.h"
8107
bb7deea89175 (svn r11668) -Codechange: more refactoring aimed at reducing compile time and making it more logic where function definitions can be found.
rubidium
parents: 8106
diff changeset
     9
#include "window_gui.h"
bb7deea89175 (svn r11668) -Codechange: more refactoring aimed at reducing compile time and making it more logic where function definitions can be found.
rubidium
parents: 8106
diff changeset
    10
#include "textbuf_gui.h"
8116
8da76dcb3287 (svn r11677) -Codechange: move price and command related types/functions to their respective places.
rubidium
parents: 8114
diff changeset
    11
#include "command_func.h"
8786
1823ff88a054 (svn r12490) -Codechange: rename engine.h to engine_func.h and remove unneeded inclusions of engine.h and/or replace them with engine_type.h.
rubidium
parents: 8785
diff changeset
    12
#include "engine_func.h"
430
2e9a2e9fcf11 (svn r631) Merge r440, r444, r485, r630 to trunk:
tron
parents: 350
diff changeset
    13
#include "screenshot.h"
478
3a161108a15d (svn r745) Added newgrf GUI (in options menu)\nThe interface currently only displays the installed grf sets, you can't (de)activate them through the gui yet
dominik
parents: 430
diff changeset
    14
#include "newgrf.h"
5469
7edfc643abbc (svn r7751) -Codechange: move network_* to a new network map. Furthermore move the low level network functions to network/core, so they can be reused by the masterserver and website-serverlist-updater.
rubidium
parents: 5431
diff changeset
    15
#include "network/network.h"
835
f6a341f541d7 (svn r1312) -Add: Patch which is on by default: population in label of the town
truelight
parents: 833
diff changeset
    16
#include "town.h"
2159
f6284cf5fab0 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2140
diff changeset
    17
#include "variables.h"
8208
3d0590aa2124 (svn r11771) -Codechange: split settings.h into better separated headers.
rubidium
parents: 8191
diff changeset
    18
#include "settings_internal.h"
6956
3579bfc5157b (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 6950
diff changeset
    19
#include "newgrf_townname.h"
8114
dd6d21dc99c1 (svn r11675) -Codechange: split the string types from the string functions.
rubidium
parents: 8107
diff changeset
    20
#include "strings_func.h"
8131
160939e24ed3 (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: 8130
diff changeset
    21
#include "functions.h"
160939e24ed3 (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: 8130
diff changeset
    22
#include "window_func.h"
8213
7bdd7593eb9b (svn r11776) -Codechange: more header splittings to reduce the dependencies.
rubidium
parents: 8208
diff changeset
    23
#include "core/alloc_func.hpp"
8214
971f861d5543 (svn r11777) -Codechange: split the string header and make do not include it when it's not necessary.
rubidium
parents: 8213
diff changeset
    24
#include "string_func.h"
8224
c5a64d87cc54 (svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium
parents: 8214
diff changeset
    25
#include "gfx_func.h"
8505
c175d34fe020 (svn r12080) -Fix: update waypoint signs when changing language
glx
parents: 8424
diff changeset
    26
#include "waypoint.h"
8321
96c331ee5ac3 (svn r11886) -Add: sort the strings in languages dropdown
glx
parents: 8319
diff changeset
    27
#include "widgets/dropdown_type.h"
8284
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents: 8264
diff changeset
    28
#include "widgets/dropdown_func.h"
8785
871586967963 (svn r12489) -Codechange: split station.h into station_base.h and station_func.h.
rubidium
parents: 8648
diff changeset
    29
#include "station_func.h"
9581
0d8f232e1721 (svn r13618) -Codechange: move tar-specific declarations to separate file
smatz
parents: 9533
diff changeset
    30
#include <map>
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    31
8264
b1e85998c7d3 (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8224
diff changeset
    32
#include "table/sprites.h"
b1e85998c7d3 (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8224
diff changeset
    33
#include "table/strings.h"
b1e85998c7d3 (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8224
diff changeset
    34
3342
cb9b5c6dd74c (svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents: 3247
diff changeset
    35
static const StringID _units_dropdown[] = {
cb9b5c6dd74c (svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents: 3247
diff changeset
    36
	STR_UNITS_IMPERIAL,
cb9b5c6dd74c (svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents: 3247
diff changeset
    37
	STR_UNITS_METRIC,
cb9b5c6dd74c (svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents: 3247
diff changeset
    38
	STR_UNITS_SI,
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    39
	INVALID_STRING_ID
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    40
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    41
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    42
static const StringID _driveside_dropdown[] = {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    43
	STR_02E9_DRIVE_ON_LEFT,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    44
	STR_02EA_DRIVE_ON_RIGHT,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    45
	INVALID_STRING_ID
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    46
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    47
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    48
static const StringID _autosave_dropdown[] = {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    49
	STR_02F7_OFF,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    50
	STR_AUTOSAVE_1_MONTH,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    51
	STR_02F8_EVERY_3_MONTHS,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    52
	STR_02F9_EVERY_6_MONTHS,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    53
	STR_02FA_EVERY_12_MONTHS,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    54
	INVALID_STRING_ID,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    55
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    56
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    57
static const StringID _designnames_dropdown[] = {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    58
	STR_02BE_DEFAULT,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    59
	STR_02BF_CUSTOM,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    60
	INVALID_STRING_ID
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    61
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    62
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    63
static StringID *BuildDynamicDropdown(StringID base, int num)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    64
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    65
	static StringID buf[32 + 1];
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    66
	StringID *p = buf;
8969
6d1c74e0e2cd (svn r12761) -Codechange: lots of minor whitespace coding style fixes around operators.
rubidium
parents: 8881
diff changeset
    67
	while (--num >= 0) *p++ = base++;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    68
	*p = INVALID_STRING_ID;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    69
	return buf;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    70
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    71
6956
3579bfc5157b (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 6950
diff changeset
    72
int _nb_orig_names = SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 1;
3579bfc5157b (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 6950
diff changeset
    73
static StringID *_grf_names = NULL;
3579bfc5157b (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 6950
diff changeset
    74
static int _nb_grf_names = 0;
6797
cc313f6757ef (svn r10036) -Add: sort the strings in town names dropdown
glx
parents: 6730
diff changeset
    75
8323
d5531c7645a7 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8321
diff changeset
    76
void InitGRFTownGeneratorNames()
6797
cc313f6757ef (svn r10036) -Add: sort the strings in town names dropdown
glx
parents: 6730
diff changeset
    77
{
6956
3579bfc5157b (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 6950
diff changeset
    78
	free(_grf_names);
3579bfc5157b (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 6950
diff changeset
    79
	_grf_names = GetGRFTownNameList();
3579bfc5157b (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 6950
diff changeset
    80
	_nb_grf_names = 0;
3579bfc5157b (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 6950
diff changeset
    81
	for (StringID *s = _grf_names; *s != INVALID_STRING_ID; s++) _nb_grf_names++;
3579bfc5157b (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 6950
diff changeset
    82
}
3579bfc5157b (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 6950
diff changeset
    83
3579bfc5157b (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 6950
diff changeset
    84
static inline StringID TownName(int town_name)
3579bfc5157b (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 6950
diff changeset
    85
{
3579bfc5157b (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 6950
diff changeset
    86
	if (town_name < _nb_orig_names) return STR_TOWNNAME_ORIGINAL_ENGLISH + town_name;
3579bfc5157b (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 6950
diff changeset
    87
	town_name -= _nb_orig_names;
3579bfc5157b (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 6950
diff changeset
    88
	if (town_name < _nb_grf_names) return _grf_names[town_name];
3579bfc5157b (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 6950
diff changeset
    89
	return STR_UNDEFINED;
6797
cc313f6757ef (svn r10036) -Add: sort the strings in town names dropdown
glx
parents: 6730
diff changeset
    90
}
cc313f6757ef (svn r10036) -Add: sort the strings in town names dropdown
glx
parents: 6730
diff changeset
    91
6247
7d81e3a5d803 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6012
diff changeset
    92
static int GetCurRes()
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    93
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    94
	int i;
2639
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2631
diff changeset
    95
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2631
diff changeset
    96
	for (i = 0; i != _num_resolutions; i++) {
9533
e8b86b70c5f6 (svn r13537) -Fix [FS#2090](r13523): QSortT won't work this way, use Dimension instead of uint16[2] for resolutions
smatz
parents: 9466
diff changeset
    97
		if (_resolutions[i].width == _screen.width &&
e8b86b70c5f6 (svn r13537) -Fix [FS#2090](r13523): QSortT won't work this way, use Dimension instead of uint16[2] for resolutions
smatz
parents: 9466
diff changeset
    98
				_resolutions[i].height == _screen.height) {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    99
			break;
2639
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2631
diff changeset
   100
		}
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2631
diff changeset
   101
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   102
	return i;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   103
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   104
8188
f326251c9d7f (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8182
diff changeset
   105
enum GameOptionsWidgets {
8336
432b85820441 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8323
diff changeset
   106
	GAMEOPT_CURRENCY_BTN    =  4,
432b85820441 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8323
diff changeset
   107
	GAMEOPT_DISTANCE_BTN    =  6,
432b85820441 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8323
diff changeset
   108
	GAMEOPT_ROADSIDE_BTN    =  8,
432b85820441 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8323
diff changeset
   109
	GAMEOPT_TOWNNAME_BTN    = 10,
432b85820441 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8323
diff changeset
   110
	GAMEOPT_AUTOSAVE_BTN    = 12,
432b85820441 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8323
diff changeset
   111
	GAMEOPT_VEHICLENAME_BTN = 14,
8188
f326251c9d7f (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8182
diff changeset
   112
	GAMEOPT_VEHICLENAME_SAVE,
8336
432b85820441 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8323
diff changeset
   113
	GAMEOPT_LANG_BTN        = 17,
432b85820441 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8323
diff changeset
   114
	GAMEOPT_RESOLUTION_BTN  = 19,
8188
f326251c9d7f (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8182
diff changeset
   115
	GAMEOPT_FULLSCREEN,
8336
432b85820441 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8323
diff changeset
   116
	GAMEOPT_SCREENSHOT_BTN  = 22,
8188
f326251c9d7f (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8182
diff changeset
   117
};
f326251c9d7f (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8182
diff changeset
   118
8321
96c331ee5ac3 (svn r11886) -Add: sort the strings in languages dropdown
glx
parents: 8319
diff changeset
   119
/**
8323
d5531c7645a7 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8321
diff changeset
   120
 * Update/redraw the townnames dropdown
d5531c7645a7 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8321
diff changeset
   121
 * @param w   the window the dropdown belongs to
d5531c7645a7 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8321
diff changeset
   122
 * @param sel the currently selected townname generator
d5531c7645a7 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8321
diff changeset
   123
 */
d5531c7645a7 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8321
diff changeset
   124
static void ShowTownnameDropdown(Window *w, int sel)
d5531c7645a7 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8321
diff changeset
   125
{
d5531c7645a7 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8321
diff changeset
   126
	typedef std::map<StringID, int, StringIDCompare> TownList;
d5531c7645a7 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8321
diff changeset
   127
	TownList townnames;
d5531c7645a7 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8321
diff changeset
   128
d5531c7645a7 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8321
diff changeset
   129
	/* Add and sort original townnames generators */
d5531c7645a7 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8321
diff changeset
   130
	for (int i = 0; i < _nb_orig_names; i++) townnames[STR_TOWNNAME_ORIGINAL_ENGLISH + i] = i;
d5531c7645a7 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8321
diff changeset
   131
d5531c7645a7 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8321
diff changeset
   132
	/* Add and sort newgrf townnames generators */
d5531c7645a7 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8321
diff changeset
   133
	for (int i = 0; i < _nb_grf_names; i++) townnames[_grf_names[i]] = _nb_orig_names + i;
d5531c7645a7 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8321
diff changeset
   134
d5531c7645a7 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8321
diff changeset
   135
	DropDownList *list = new DropDownList();
d5531c7645a7 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8321
diff changeset
   136
	for (TownList::iterator it = townnames.begin(); it != townnames.end(); it++) {
10407
419a41009c38 (svn r14658) -Change: allow changing town names when there are no towns in the scenario yet.
rubidium
parents: 10358
diff changeset
   137
		list->push_back(new DropDownListStringItem((*it).first, (*it).second, !(_game_mode == GM_MENU || GetNumTowns() == 0 || (*it).second == sel)));
8323
d5531c7645a7 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8321
diff changeset
   138
	}
d5531c7645a7 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8321
diff changeset
   139
d5531c7645a7 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8321
diff changeset
   140
	ShowDropDownList(w, list, sel, GAMEOPT_TOWNNAME_BTN);
d5531c7645a7 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8321
diff changeset
   141
}
d5531c7645a7 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8321
diff changeset
   142
6247
7d81e3a5d803 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6012
diff changeset
   143
static void ShowCustCurrency();
2817
cdf488223c23 (svn r3365) Staticise 36 functions
tron
parents: 2776
diff changeset
   144
9291
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   145
struct GameOptionsWindow : Window {
9413
7042a8ec3fa8 (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: 9359
diff changeset
   146
	GameSettings *opt;
9346
bfd803297888 (svn r13242) -Codechange: remove _opt_ptr.
rubidium
parents: 9334
diff changeset
   147
9291
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   148
	GameOptionsWindow(const WindowDesc *desc) : Window(desc)
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   149
	{
9413
7042a8ec3fa8 (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: 9359
diff changeset
   150
		this->opt = (_game_mode == GM_MENU) ? &_settings_newgame : &_settings_game;
9291
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   151
		this->FindWindowPlacementAndResize(desc);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   152
	}
759
a445474d7c21 (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
   153
9291
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   154
	~GameOptionsWindow()
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   155
	{
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   156
		DeleteWindowById(WC_CUSTOM_CURRENCY, 0);
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   157
	}
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   158
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   159
	virtual void OnPaint()
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   160
	{
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   161
		StringID str = STR_02BE_DEFAULT;
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   162
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   163
		this->SetWidgetDisabledState(GAMEOPT_VEHICLENAME_SAVE, !(_vehicle_design_names & 1));
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   164
		if (!this->IsWidgetDisabled(GAMEOPT_VEHICLENAME_SAVE)) str = STR_02BF_CUSTOM;
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   165
		SetDParam(0, str);
9466
5a1d4eb2ae07 (svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents: 9421
diff changeset
   166
		SetDParam(1, _currency_specs[this->opt->locale.currency].name);
5a1d4eb2ae07 (svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents: 9421
diff changeset
   167
		SetDParam(2, STR_UNITS_IMPERIAL + this->opt->locale.units);
9358
2e1e4d2f71dd (svn r13255) -Codechange: move _opt to _settings.
rubidium
parents: 9354
diff changeset
   168
		SetDParam(3, STR_02E9_DRIVE_ON_LEFT + this->opt->vehicle.road_side);
2e1e4d2f71dd (svn r13255) -Codechange: move _opt to _settings.
rubidium
parents: 9354
diff changeset
   169
		SetDParam(4, TownName(this->opt->game_creation.town_name));
9413
7042a8ec3fa8 (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: 9359
diff changeset
   170
		SetDParam(5, _autosave_dropdown[_settings_client.gui.autosave]);
9291
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   171
		SetDParam(6, SPECSTR_LANGUAGE_START + _dynlang.curr);
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   172
		int i = GetCurRes();
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   173
		SetDParam(7, i == _num_resolutions ? STR_RES_OTHER : SPECSTR_RESOLUTION_START + i);
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   174
		SetDParam(8, SPECSTR_SCREENSHOT_START + _cur_screenshot_format);
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   175
		this->SetWidgetLoweredState(GAMEOPT_FULLSCREEN, _fullscreen);
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   176
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   177
		this->DrawWidgets();
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   178
		DrawString(20, 175, STR_OPTIONS_FULLSCREEN, TC_FROMSTRING); // fullscreen
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   179
	}
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   180
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   181
	virtual void OnClick(Point pt, int widget)
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   182
	{
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   183
		switch (widget) {
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   184
			case GAMEOPT_CURRENCY_BTN: // Setup currencies dropdown
9466
5a1d4eb2ae07 (svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents: 9421
diff changeset
   185
				ShowDropDownMenu(this, BuildCurrencyDropdown(), this->opt->locale.currency, GAMEOPT_CURRENCY_BTN, _game_mode == GM_MENU ? 0 : ~GetMaskOfAllowedCurrencies(), 0);
9291
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   186
				break;
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   187
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   188
			case GAMEOPT_DISTANCE_BTN: // Setup distance unit dropdown
9466
5a1d4eb2ae07 (svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents: 9421
diff changeset
   189
				ShowDropDownMenu(this, _units_dropdown, this->opt->locale.units, GAMEOPT_DISTANCE_BTN, 0, 0);
9291
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   190
				break;
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   191
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   192
			case GAMEOPT_ROADSIDE_BTN: { // Setup road-side dropdown
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   193
				int i = 0;
9298
c758dcefb1f2 (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium
parents: 9291
diff changeset
   194
				extern bool RoadVehiclesAreBuilt();
9291
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   195
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   196
				/* You can only change the drive side if you are in the menu or ingame with
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   197
				 * no vehicles present. In a networking game only the server can change it */
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   198
				if ((_game_mode != GM_MENU && RoadVehiclesAreBuilt()) || (_networking && !_network_server)) {
9358
2e1e4d2f71dd (svn r13255) -Codechange: move _opt to _settings.
rubidium
parents: 9354
diff changeset
   199
					i = (-1) ^ (1 << this->opt->vehicle.road_side); // disable the other value
9291
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   200
				}
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   201
9358
2e1e4d2f71dd (svn r13255) -Codechange: move _opt to _settings.
rubidium
parents: 9354
diff changeset
   202
				ShowDropDownMenu(this, _driveside_dropdown, this->opt->vehicle.road_side, GAMEOPT_ROADSIDE_BTN, i, 0);
9291
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   203
			} break;
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   204
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   205
			case GAMEOPT_TOWNNAME_BTN: // Setup townname dropdown
9358
2e1e4d2f71dd (svn r13255) -Codechange: move _opt to _settings.
rubidium
parents: 9354
diff changeset
   206
				ShowTownnameDropdown(this, this->opt->game_creation.town_name);
9291
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   207
				break;
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   208
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   209
			case GAMEOPT_AUTOSAVE_BTN: // Setup autosave dropdown
9413
7042a8ec3fa8 (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: 9359
diff changeset
   210
				ShowDropDownMenu(this, _autosave_dropdown, _settings_client.gui.autosave, GAMEOPT_AUTOSAVE_BTN, 0, 0);
9291
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   211
				break;
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   212
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   213
			case GAMEOPT_VEHICLENAME_BTN: // Setup customized vehicle-names dropdown
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   214
				ShowDropDownMenu(this, _designnames_dropdown, (_vehicle_design_names & 1) ? 1 : 0, GAMEOPT_VEHICLENAME_BTN, (_vehicle_design_names & 2) ? 0 : 2, 0);
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   215
				break;
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   216
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   217
			case GAMEOPT_VEHICLENAME_SAVE: // Save customized vehicle-names to disk
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   218
				break;  // not implemented
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   219
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   220
			case GAMEOPT_LANG_BTN: { // Setup interface language dropdown
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   221
				typedef std::map<StringID, int, StringIDCompare> LangList;
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   222
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   223
				/* Sort language names */
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   224
				LangList langs;
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   225
				for (int i = 0; i < _dynlang.num; i++) langs[SPECSTR_LANGUAGE_START + i] = i;
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   226
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   227
				DropDownList *list = new DropDownList();
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   228
				for (LangList::iterator it = langs.begin(); it != langs.end(); it++) {
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   229
					list->push_back(new DropDownListStringItem((*it).first, (*it).second, false));
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   230
				}
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   231
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   232
				ShowDropDownList(this, list, _dynlang.curr, GAMEOPT_LANG_BTN);
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   233
			} break;
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   234
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   235
			case GAMEOPT_RESOLUTION_BTN: // Setup resolution dropdown
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   236
				ShowDropDownMenu(this, BuildDynamicDropdown(SPECSTR_RESOLUTION_START, _num_resolutions), GetCurRes(), GAMEOPT_RESOLUTION_BTN, 0, 0);
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   237
				break;
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   238
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   239
			case GAMEOPT_FULLSCREEN: // Click fullscreen on/off
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   240
				/* try to toggle full-screen on/off */
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   241
				if (!ToggleFullScreen(!_fullscreen)) {
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   242
					ShowErrorMessage(INVALID_STRING_ID, STR_FULLSCREEN_FAILED, 0, 0);
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   243
				}
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   244
				this->SetWidgetLoweredState(GAMEOPT_FULLSCREEN, _fullscreen);
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   245
				this->SetDirty();
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   246
				break;
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   247
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   248
			case GAMEOPT_SCREENSHOT_BTN: // Setup screenshot format dropdown
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   249
				ShowDropDownMenu(this, BuildDynamicDropdown(SPECSTR_SCREENSHOT_START, _num_screenshot_formats), _cur_screenshot_format, GAMEOPT_SCREENSHOT_BTN, 0, 0);
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   250
				break;
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   251
		}
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   252
	}
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   253
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   254
	virtual void OnDropdownSelect(int widget, int index)
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   255
	{
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   256
		switch (widget) {
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   257
			case GAMEOPT_VEHICLENAME_BTN: // Vehicle design names
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   258
				if (index == 0) {
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   259
					DeleteCustomEngineNames();
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   260
					MarkWholeScreenDirty();
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   261
				} else if (!(_vehicle_design_names & 1)) {
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   262
					LoadCustomEngineNames();
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   263
					MarkWholeScreenDirty();
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   264
				}
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   265
				break;
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   266
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   267
			case GAMEOPT_CURRENCY_BTN: /* Currency */
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   268
				if (index == CUSTOM_CURRENCY_ID) ShowCustCurrency();
9466
5a1d4eb2ae07 (svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents: 9421
diff changeset
   269
				this->opt->locale.currency = index;
9291
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   270
				MarkWholeScreenDirty();
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   271
				break;
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   272
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   273
			case GAMEOPT_DISTANCE_BTN: // Measuring units
9466
5a1d4eb2ae07 (svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents: 9421
diff changeset
   274
				this->opt->locale.units = index;
9291
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   275
				MarkWholeScreenDirty();
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   276
				break;
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   277
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   278
			case GAMEOPT_ROADSIDE_BTN: // Road side
9358
2e1e4d2f71dd (svn r13255) -Codechange: move _opt to _settings.
rubidium
parents: 9354
diff changeset
   279
				if (this->opt->vehicle.road_side != index) { // only change if setting changed
9291
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   280
					DoCommandP(0, index, 0, NULL, CMD_SET_ROAD_DRIVE_SIDE | CMD_MSG(STR_00B4_CAN_T_DO_THIS));
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   281
					MarkWholeScreenDirty();
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   282
				}
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   283
				break;
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   284
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   285
			case GAMEOPT_TOWNNAME_BTN: // Town names
10407
419a41009c38 (svn r14658) -Change: allow changing town names when there are no towns in the scenario yet.
rubidium
parents: 10358
diff changeset
   286
				if (_game_mode == GM_MENU || GetNumTowns() == 0) {
9358
2e1e4d2f71dd (svn r13255) -Codechange: move _opt to _settings.
rubidium
parents: 9354
diff changeset
   287
					this->opt->game_creation.town_name = index;
9291
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   288
					InvalidateWindow(WC_GAME_OPTIONS, 0);
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   289
				}
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   290
				break;
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   291
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   292
			case GAMEOPT_AUTOSAVE_BTN: // Autosave options
9413
7042a8ec3fa8 (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: 9359
diff changeset
   293
				_settings_client.gui.autosave = index;
9291
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   294
				this->SetDirty();
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   295
				break;
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   296
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   297
			case GAMEOPT_LANG_BTN: // Change interface language
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   298
				ReadLanguagePack(index);
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   299
				CheckForMissingGlyphsInLoadedLanguagePack();
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   300
				UpdateAllStationVirtCoord();
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   301
				UpdateAllWaypointSigns();
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   302
				MarkWholeScreenDirty();
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   303
				break;
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   304
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   305
			case GAMEOPT_RESOLUTION_BTN: // Change resolution
9533
e8b86b70c5f6 (svn r13537) -Fix [FS#2090](r13523): QSortT won't work this way, use Dimension instead of uint16[2] for resolutions
smatz
parents: 9466
diff changeset
   306
				if (index < _num_resolutions && ChangeResInGame(_resolutions[index].width, _resolutions[index].height)) {
9291
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   307
					this->SetDirty();
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   308
				}
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   309
				break;
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   310
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   311
			case GAMEOPT_SCREENSHOT_BTN: // Change screenshot format
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   312
				SetScreenshotFormat(index);
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   313
				this->SetDirty();
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   314
				break;
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   315
		}
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   316
	}
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   317
};
0
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
static const Widget _game_options_widgets[] = {
9764
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   320
{   WWT_CLOSEBOX,   RESIZE_NONE,  COLOUR_GREY,     0,    10,     0,    13, STR_00C5,                          STR_018B_CLOSE_WINDOW},
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   321
{    WWT_CAPTION,   RESIZE_NONE,  COLOUR_GREY,    11,   369,     0,    13, STR_00B1_GAME_OPTIONS,             STR_018C_WINDOW_TITLE_DRAG_THIS},
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   322
{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   369,    14,   238, 0x0,                               STR_NULL},
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   323
{      WWT_FRAME,   RESIZE_NONE,  COLOUR_GREY,    10,   179,    20,    55, STR_02E0_CURRENCY_UNITS,           STR_NULL},
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   324
{ WWT_DROPDOWNIN,   RESIZE_NONE,  COLOUR_GREY,    20,   169,    34,    45, STR_02E1,                          STR_02E2_CURRENCY_UNITS_SELECTION},
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   325
{      WWT_FRAME,   RESIZE_NONE,  COLOUR_GREY,   190,   359,    20,    55, STR_MEASURING_UNITS,               STR_NULL},
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   326
{ WWT_DROPDOWNIN,   RESIZE_NONE,  COLOUR_GREY,   200,   349,    34,    45, STR_02E4,                          STR_MEASURING_UNITS_SELECTION},
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   327
{      WWT_FRAME,   RESIZE_NONE,  COLOUR_GREY,    10,   179,    62,    97, STR_02E6_ROAD_VEHICLES,            STR_NULL},
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   328
{ WWT_DROPDOWNIN,   RESIZE_NONE,  COLOUR_GREY,    20,   169,    76,    87, STR_02E7,                          STR_02E8_SELECT_SIDE_OF_ROAD_FOR},
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   329
{      WWT_FRAME,   RESIZE_NONE,  COLOUR_GREY,   190,   359,    62,    97, STR_02EB_TOWN_NAMES,               STR_NULL},
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   330
{ WWT_DROPDOWNIN,   RESIZE_NONE,  COLOUR_GREY,   200,   349,    76,    87, STR_02EC,                          STR_02ED_SELECT_STYLE_OF_TOWN_NAMES},
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   331
{      WWT_FRAME,   RESIZE_NONE,  COLOUR_GREY,    10,   179,   104,   139, STR_02F4_AUTOSAVE,                 STR_NULL},
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   332
{ WWT_DROPDOWNIN,   RESIZE_NONE,  COLOUR_GREY,    20,   169,   118,   129, STR_02F5,                          STR_02F6_SELECT_INTERVAL_BETWEEN},
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   333
9764
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   334
{      WWT_FRAME,   RESIZE_NONE,  COLOUR_GREY,    10,   359,   194,   228, STR_02BC_VEHICLE_DESIGN_NAMES,     STR_NULL},
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   335
{ WWT_DROPDOWNIN,   RESIZE_NONE,  COLOUR_GREY,    20,   119,   207,   218, STR_02BD,                          STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION},
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   336
{    WWT_TEXTBTN,   RESIZE_NONE,  COLOUR_GREY,   130,   349,   207,   218, STR_02C0_SAVE_CUSTOM_NAMES,        STR_02C2_SAVE_CUSTOMIZED_VEHICLE},
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   337
9764
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   338
{      WWT_FRAME,   RESIZE_NONE,  COLOUR_GREY,   190,   359,   104,   139, STR_OPTIONS_LANG,                  STR_NULL},
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   339
{ WWT_DROPDOWNIN,   RESIZE_NONE,  COLOUR_GREY,   200,   349,   118,   129, STR_OPTIONS_LANG_CBO,              STR_OPTIONS_LANG_TIP},
298
0123c0489940 (svn r304) -Fix: [967096] fullscreen. New button 'Fullscreen' in 'Game Options' menu which lets you set fullscreen ingame.
darkvater
parents: 193
diff changeset
   340
9764
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   341
{      WWT_FRAME,   RESIZE_NONE,  COLOUR_GREY,    10,   179,   146,   190, STR_OPTIONS_RES,                   STR_NULL},
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   342
{ WWT_DROPDOWNIN,   RESIZE_NONE,  COLOUR_GREY,    20,   169,   160,   171, STR_OPTIONS_RES_CBO,               STR_OPTIONS_RES_TIP},
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   343
{    WWT_TEXTBTN,   RESIZE_NONE,  COLOUR_GREY,   149,   169,   176,   184, STR_EMPTY,                         STR_OPTIONS_FULLSCREEN_TIP},
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   344
9764
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   345
{      WWT_FRAME,   RESIZE_NONE,  COLOUR_GREY,   190,   359,   146,   190, STR_OPTIONS_SCREENSHOT_FORMAT,     STR_NULL},
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   346
{ WWT_DROPDOWNIN,   RESIZE_NONE,  COLOUR_GREY,   200,   349,   160,   171, STR_OPTIONS_SCREENSHOT_FORMAT_CBO, STR_OPTIONS_SCREENSHOT_FORMAT_TIP},
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   347
176
84990c4b9212 (svn r177) -Fix: padded out Widget code to solve warnings on C99 compiler (Tron)
darkvater
parents: 164
diff changeset
   348
{   WIDGETS_END},
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   349
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   350
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   351
static const WindowDesc _game_options_desc = {
7341
02515d0d4ced (svn r10704) -Codechange: provide an infrastructure to have resizable windows that are smaller than the default window size.
rubidium
parents: 7177
diff changeset
   352
	WDP_CENTER, WDP_CENTER, 370, 239, 370, 239,
5893
7e431a4abebb (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5688
diff changeset
   353
	WC_GAME_OPTIONS, WC_NONE,
2064
e6a2b42d0b15 (svn r2573) Codechange: Removed WDF_RESTORE_DPARAM, it's not needed with the new string system.
ludde
parents: 2055
diff changeset
   354
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   355
	_game_options_widgets,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   356
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   357
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   358
6247
7d81e3a5d803 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6012
diff changeset
   359
void ShowGameOptions()
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   360
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   361
	DeleteWindowById(WC_GAME_OPTIONS, 0);
9291
cd518773f42a (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 9273
diff changeset
   362
	new GameOptionsWindow(&_game_options_desc);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   363
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   364
6247
7d81e3a5d803 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6012
diff changeset
   365
extern void StartupEconomy();
46
c9bdf1d58df6 (svn r47) -Fix StartupEconomy warning in settings_gui.c
darkvater
parents: 42
diff changeset
   366
8136
53c188f8aa27 (svn r11698) -Change: Make the abort/accept process of the difficulty window a bit less confusing
skidd13
parents: 8131
diff changeset
   367
/* Widget definition for the game difficulty settings window */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   368
static const Widget _game_difficulty_widgets[] = {
9764
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   369
{   WWT_CLOSEBOX,   RESIZE_NONE,  COLOUR_MAUVE,      0,    10,     0,    13, STR_00C5,                     STR_018B_CLOSE_WINDOW},           // GDW_CLOSEBOX
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   370
{    WWT_CAPTION,   RESIZE_NONE,  COLOUR_MAUVE,     11,   369,     0,    13, STR_6800_DIFFICULTY_LEVEL,    STR_018C_WINDOW_TITLE_DRAG_THIS}, // GDW_CAPTION
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   371
{      WWT_PANEL,   RESIZE_NONE,  COLOUR_MAUVE,      0,   369,    14,    41, 0x0,                          STR_NULL},                        // GDW_UPPER_BG
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   372
{ WWT_PUSHTXTBTN,   RESIZE_NONE,  COLOUR_YELLOW,    10,    96,    16,    27, STR_6801_EASY,                STR_NULL},                        // GDW_LVL_EASY
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   373
{ WWT_PUSHTXTBTN,   RESIZE_NONE,  COLOUR_YELLOW,    97,   183,    16,    27, STR_6802_MEDIUM,              STR_NULL},                        // GDW_LVL_MEDIUM
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   374
{ WWT_PUSHTXTBTN,   RESIZE_NONE,  COLOUR_YELLOW,   184,   270,    16,    27, STR_6803_HARD,                STR_NULL},                        // GDW_LVL_HARD
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   375
{ WWT_PUSHTXTBTN,   RESIZE_NONE,  COLOUR_YELLOW,   271,   357,    16,    27, STR_6804_CUSTOM,              STR_NULL},                        // GDW_LVL_CUSTOM
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   376
{    WWT_TEXTBTN,   RESIZE_NONE,  COLOUR_GREEN,     10,   357,    28,    39, STR_6838_SHOW_HI_SCORE_CHART, STR_NULL},                        // GDW_HIGHSCORE
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   377
{      WWT_PANEL,   RESIZE_NONE,  COLOUR_MAUVE,      0,   369,    42,   262, 0x0,                          STR_NULL},                        // GDW_SETTING_BG
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   378
{      WWT_PANEL,   RESIZE_NONE,  COLOUR_MAUVE,      0,   369,   263,   278, 0x0,                          STR_NULL},                        // GDW_LOWER_BG
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   379
{ WWT_PUSHTXTBTN,   RESIZE_NONE,  COLOUR_YELLOW,   105,   185,   265,   276, STR_OPTIONS_SAVE_CHANGES,     STR_NULL},                        // GDW_ACCEPT
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   380
{ WWT_PUSHTXTBTN,   RESIZE_NONE,  COLOUR_YELLOW,   186,   266,   265,   276, STR_012E_CANCEL,              STR_NULL},                        // GDW_CANCEL
176
84990c4b9212 (svn r177) -Fix: padded out Widget code to solve warnings on C99 compiler (Tron)
darkvater
parents: 164
diff changeset
   381
{   WIDGETS_END},
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   382
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   383
8136
53c188f8aa27 (svn r11698) -Change: Make the abort/accept process of the difficulty window a bit less confusing
skidd13
parents: 8131
diff changeset
   384
/* Window definition for the game difficulty settings window */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   385
static const WindowDesc _game_difficulty_desc = {
7341
02515d0d4ced (svn r10704) -Codechange: provide an infrastructure to have resizable windows that are smaller than the default window size.
rubidium
parents: 7177
diff changeset
   386
	WDP_CENTER, WDP_CENTER, 370, 279, 370, 279,
5893
7e431a4abebb (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5688
diff changeset
   387
	WC_GAME_OPTIONS, WC_NONE,
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   388
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   389
	_game_difficulty_widgets,
9231
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   390
};
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   391
9359
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   392
void SetDifficultyLevel(int mode, DifficultySettings *gm_opt);
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   393
9231
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   394
struct GameDifficultyWindow : public Window {
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   395
private:
9359
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   396
	static const uint GAME_DIFFICULTY_NUM = 18;
9231
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   397
	bool clicked_increase;
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   398
	uint8 clicked_button;
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   399
	uint8 timeout;
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   400
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   401
	/* Temporary holding place of values in the difficulty window until 'Save' is clicked */
9413
7042a8ec3fa8 (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: 9359
diff changeset
   402
	GameSettings opt_mod_temp;
9231
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   403
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   404
	enum {
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   405
		GAMEDIFF_WND_TOP_OFFSET = 45,
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   406
		GAMEDIFF_WND_ROWSIZE    = 9,
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   407
		NO_SETTINGS_BUTTON = 0xFF,
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   408
	};
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   409
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   410
	/* Names of the game difficulty settings window */
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   411
	enum GameDifficultyWidgets {
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   412
		GDW_CLOSEBOX = 0,
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   413
		GDW_CAPTION,
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   414
		GDW_UPPER_BG,
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   415
		GDW_LVL_EASY,
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   416
		GDW_LVL_MEDIUM,
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   417
		GDW_LVL_HARD,
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   418
		GDW_LVL_CUSTOM,
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   419
		GDW_HIGHSCORE,
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   420
		GDW_SETTING_BG,
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   421
		GDW_LOWER_BG,
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   422
		GDW_ACCEPT,
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   423
		GDW_CANCEL,
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   424
	};
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   425
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   426
public:
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   427
	GameDifficultyWindow() : Window(&_game_difficulty_desc)
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   428
	{
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   429
		/* Copy current settings (ingame or in intro) to temporary holding place
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   430
		 * change that when setting stuff, copy back on clicking 'OK' */
9413
7042a8ec3fa8 (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: 9359
diff changeset
   431
		this->opt_mod_temp = (_game_mode == GM_MENU) ? _settings_newgame : _settings_game;
9231
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   432
		this->clicked_increase = false;
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   433
		this->clicked_button = NO_SETTINGS_BUTTON;
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   434
		this->timeout = 0;
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   435
		/* Hide the closebox to make sure that the user aborts or confirms his changes */
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   436
		this->HideWidget(GDW_CLOSEBOX);
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   437
		this->widget[GDW_CAPTION].left = 0;
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   438
		/* Setup disabled buttons when creating window
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   439
		 * disable all other difficulty buttons during gameplay except for 'custom' */
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   440
		this->SetWidgetsDisabledState(_game_mode == GM_NORMAL,
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   441
			GDW_LVL_EASY,
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   442
			GDW_LVL_MEDIUM,
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   443
			GDW_LVL_HARD,
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   444
			GDW_LVL_CUSTOM,
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   445
			WIDGET_LIST_END);
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   446
		this->SetWidgetDisabledState(GDW_HIGHSCORE, _game_mode == GM_EDITOR || _networking); // highscore chart in multiplayer
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   447
		this->SetWidgetDisabledState(GDW_ACCEPT, _networking && !_network_server); // Save-button in multiplayer (and if client)
9359
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   448
		this->LowerWidget(GDW_LVL_EASY + this->opt_mod_temp.difficulty.diff_level);
9231
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   449
		this->FindWindowPlacementAndResize(&_game_difficulty_desc);
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   450
	}
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   451
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   452
	virtual void OnPaint()
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   453
	{
9273
35e0224ea8f1 (svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium
parents: 9246
diff changeset
   454
		this->DrawWidgets();
9231
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   455
9359
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   456
		uint i;
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   457
		const SettingDesc *sd = GetPatchFromName("difficulty.max_no_competitors", &i);
9231
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   458
		int y = GAMEDIFF_WND_TOP_OFFSET;
9359
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   459
		for (i = 0; i < GAME_DIFFICULTY_NUM; i++, sd++) {
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   460
			const SettingDescBase *sdb = &sd->desc;
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   461
			int32 value = (int32)ReadValue(GetVariableAddress(&this->opt_mod_temp, &sd->save), sd->save.conv);
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   462
			bool editable = (_game_mode == GM_MENU || (sdb->flags & SGF_NEWGAME_ONLY) == 0);
9231
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   463
9871
57a332d08e74 (svn r14017) -Codechange: DrawArrowButtons now uses Colours enum to specify the colour of the button
belugas
parents: 9793
diff changeset
   464
			DrawArrowButtons(5, y, COLOUR_YELLOW,
9231
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   465
					(this->clicked_button == i) ? 1 + !!this->clicked_increase : 0,
9359
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   466
					editable && sdb->min != value,
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   467
					editable && sdb->max != value);
9231
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   468
9359
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   469
			value += sdb->str;
9231
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   470
			SetDParam(0, value);
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   471
			DrawString(30, y, STR_6805_MAXIMUM_NO_COMPETITORS + i, TC_FROMSTRING);
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   472
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   473
			y += GAMEDIFF_WND_ROWSIZE + 2; // space items apart a bit
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   474
		}
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   475
	}
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   476
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   477
	virtual void OnClick(Point pt, int widget)
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   478
	{
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   479
		switch (widget) {
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   480
			case GDW_SETTING_BG: { /* Difficulty settings widget, decode click */
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   481
				/* Don't allow clients to make any changes */
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   482
				if (_networking && !_network_server) return;
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   483
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   484
				const int x = pt.x - 5;
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   485
				if (!IsInsideMM(x, 0, 21)) return; // Button area
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   486
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   487
				const int y = pt.y - GAMEDIFF_WND_TOP_OFFSET;
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   488
				if (y < 0) return;
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   489
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   490
				/* Get button from Y coord. */
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   491
				const uint8 btn = y / (GAMEDIFF_WND_ROWSIZE + 2);
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   492
				if (btn >= GAME_DIFFICULTY_NUM || y % (GAMEDIFF_WND_ROWSIZE + 2) >= 9) return;
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   493
9359
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   494
				uint i;
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   495
				const SettingDesc *sd = GetPatchFromName("difficulty.max_no_competitors", &i) + btn;
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   496
				const SettingDescBase *sdb = &sd->desc;
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   497
9231
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   498
				/* Clicked disabled button? */
9359
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   499
				bool editable = (_game_mode == GM_MENU || (sdb->flags & SGF_NEWGAME_ONLY) == 0);
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   500
				if (!editable) return;
9231
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   501
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   502
				this->timeout = 5;
9359
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   503
				int32 val = (int32)ReadValue(GetVariableAddress(&this->opt_mod_temp, &sd->save), sd->save.conv);
9231
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   504
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   505
				if (x >= 10) {
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   506
					/* Increase button clicked */
9359
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   507
					val = min(val + sdb->interval, sdb->max);
9231
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   508
					this->clicked_increase = true;
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   509
				} else {
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   510
					/* Decrease button clicked */
9359
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   511
					val -= sdb->interval;
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   512
					val = max(val, sdb->min);
9231
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   513
					this->clicked_increase = false;
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   514
				}
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   515
				this->clicked_button = btn;
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   516
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   517
				/* save value in temporary variable */
9359
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   518
				WriteValue(GetVariableAddress(&this->opt_mod_temp, &sd->save), sd->save.conv, val);
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   519
				this->RaiseWidget(GDW_LVL_EASY + this->opt_mod_temp.difficulty.diff_level);
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   520
				SetDifficultyLevel(3, &this->opt_mod_temp.difficulty); // set difficulty level to custom
9231
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   521
				this->LowerWidget(GDW_LVL_CUSTOM);
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   522
				this->SetDirty();
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   523
			} break;
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   524
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   525
			case GDW_LVL_EASY:
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   526
			case GDW_LVL_MEDIUM:
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   527
			case GDW_LVL_HARD:
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   528
			case GDW_LVL_CUSTOM:
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   529
				/* temporarily change difficulty level */
9359
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   530
				this->RaiseWidget(GDW_LVL_EASY + this->opt_mod_temp.difficulty.diff_level);
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   531
				SetDifficultyLevel(widget - GDW_LVL_EASY, &this->opt_mod_temp.difficulty);
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   532
				this->LowerWidget(GDW_LVL_EASY + this->opt_mod_temp.difficulty.diff_level);
9231
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   533
				this->SetDirty();
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   534
				break;
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   535
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   536
			case GDW_HIGHSCORE: // Highscore Table
9359
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   537
				ShowHighscoreTable(this->opt_mod_temp.difficulty.diff_level, -1);
9231
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   538
				break;
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   539
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   540
			case GDW_ACCEPT: { // Save button - save changes
9413
7042a8ec3fa8 (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: 9359
diff changeset
   541
				GameSettings *opt_ptr = (_game_mode == GM_MENU) ? &_settings_newgame : &_settings_game;
9359
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   542
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   543
				uint i;
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   544
				const SettingDesc *sd = GetPatchFromName("difficulty.max_no_competitors", &i);
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   545
				for (uint btn = 0; btn != GAME_DIFFICULTY_NUM; btn++, sd++) {
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   546
					int32 new_val = (int32)ReadValue(GetVariableAddress(&this->opt_mod_temp, &sd->save), sd->save.conv);
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   547
					int32 cur_val = (int32)ReadValue(GetVariableAddress(opt_ptr, &sd->save), sd->save.conv);
9231
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   548
					/* if setting has changed, change it */
9359
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   549
					if (new_val != cur_val) {
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   550
						DoCommandP(0, i + btn, new_val, NULL, CMD_CHANGE_PATCH_SETTING);
9346
bfd803297888 (svn r13242) -Codechange: remove _opt_ptr.
rubidium
parents: 9334
diff changeset
   551
					}
9231
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   552
				}
9359
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   553
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   554
				GetPatchFromName("difficulty.diff_level", &i);
3a8554ac1cb8 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 9358
diff changeset
   555
				DoCommandP(0, i, this->opt_mod_temp.difficulty.diff_level, NULL, CMD_CHANGE_PATCH_SETTING);
9231
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   556
				delete this;
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   557
				/* If we are in the editor, we should reload the economy.
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   558
				 * This way when you load a game, the max loan and interest rate
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   559
				 * are loaded correctly. */
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   560
				if (_game_mode == GM_EDITOR) StartupEconomy();
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   561
				break;
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   562
			}
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   563
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   564
			case GDW_CANCEL: // Cancel button - close window, abandon changes
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   565
				delete this;
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   566
				break;
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   567
		}
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   568
	}
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   569
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   570
	virtual void OnTick()
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   571
	{
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   572
		if (this->timeout != 0) {
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   573
			this->timeout--;
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   574
			if (this->timeout == 0) this->clicked_button = NO_SETTINGS_BUTTON;
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   575
			this->SetDirty();
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   576
		}
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   577
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   578
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   579
6247
7d81e3a5d803 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6012
diff changeset
   580
void ShowGameDifficulty()
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   581
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   582
	DeleteWindowById(WC_GAME_OPTIONS, 0);
9231
45a12ad6ba49 (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 9164
diff changeset
   583
	new GameDifficultyWindow();
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 179
diff changeset
   584
}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   585
3247
ede7a53941b2 (svn r3930) - [Patches] Change the GUI-patch options from indeces to string representations. Not only makes this the part more humanly readable, but saves us from rewriting the whole index when a patch is added/removed/changed
Darkvater
parents: 3206
diff changeset
   586
static const char *_patches_ui[] = {
9354
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   587
	"gui.vehicle_speed",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   588
	"gui.status_long_date",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   589
	"gui.show_finances",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   590
	"gui.autoscroll",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   591
	"gui.reverse_scroll",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   592
	"gui.smooth_scroll",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   593
	"gui.errmsg_duration",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   594
	"gui.toolbar_pos",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   595
	"gui.measure_tooltip",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   596
	"gui.window_snap_radius",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   597
	"gui.population_in_label",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   598
	"gui.link_terraform_toolbar",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   599
	"gui.liveries",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   600
	"gui.prefer_teamchat",
6289
9f468eccc674 (svn r9111) -Feature: [OSX] mighty mice and touchpads can now scroll the map (in all directions)
bjarni
parents: 6259
diff changeset
   601
	/* While the horizontal scrollwheel scrolling is written as general code, only
9f468eccc674 (svn r9111) -Feature: [OSX] mighty mice and touchpads can now scroll the map (in all directions)
bjarni
parents: 6259
diff changeset
   602
	 *  the cocoa (OSX) driver generates input for it.
6296
a6bed59002c6 (svn r9126) -Feature: "Function of scrollwheel" can now be set to off as well
bjarni
parents: 6293
diff changeset
   603
	 *  Since it's also able to completely disable the scrollwheel will we display it on all platforms anyway */
9354
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   604
	"gui.scrollwheel_scrolling",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   605
	"gui.scrollwheel_multiplier",
7485
d8799216928a (svn r10996) -Feature: [OSX] added more options for right click emulation (controlled from the interface tab in the patch window)
bjarni
parents: 7341
diff changeset
   606
#ifdef __APPLE__
d8799216928a (svn r10996) -Feature: [OSX] added more options for right click emulation (controlled from the interface tab in the patch window)
bjarni
parents: 7341
diff changeset
   607
	/* We might need to emulate a right mouse button on mac */
9354
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   608
	"gui.right_mouse_btn_emulation",
7485
d8799216928a (svn r10996) -Feature: [OSX] added more options for right click emulation (controlled from the interface tab in the patch window)
bjarni
parents: 7341
diff changeset
   609
#endif
9354
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   610
	"gui.pause_on_newgame",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   611
	"gui.advanced_vehicle_list",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   612
	"gui.loading_indicators",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   613
	"gui.timetable_in_ticks",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   614
	"gui.default_rail_type",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   615
	"gui.always_build_infrastructure",
9785
2005c34d0811 (svn r13927) -Add [YAPP]: Draw reserved tracks darker, toggeld by a patch setting. (michi_cc)
rubidium
parents: 9770
diff changeset
   616
	"gui.show_track_reservation",
21
67cde01e8359 (svn r22) Add: Competitors menu under patches
truelight
parents: 20
diff changeset
   617
};
67cde01e8359 (svn r22) Add: Competitors menu under patches
truelight
parents: 20
diff changeset
   618
3247
ede7a53941b2 (svn r3930) - [Patches] Change the GUI-patch options from indeces to string representations. Not only makes this the part more humanly readable, but saves us from rewriting the whole index when a patch is added/removed/changed
Darkvater
parents: 3206
diff changeset
   619
static const char *_patches_construction[] = {
9354
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   620
	"construction.build_on_slopes",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   621
	"construction.autoslope",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   622
	"construction.extra_dynamite",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   623
	"construction.longbridges",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   624
	"construction.signal_side",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   625
	"station.always_small_airport",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   626
	"gui.enable_signal_gui",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   627
	"gui.drag_signals_density",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   628
	"game_creation.oil_refinery_limit",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   629
	"gui.semaphore_build_before",
9793
359d2460833b (svn r13935) -Codechange [YAPP]: PBS signals can now be built with the normal signal tools. (michi_cc)
rubidium
parents: 9785
diff changeset
   630
	"gui.default_signal_type",
359d2460833b (svn r13935) -Codechange [YAPP]: PBS signals can now be built with the normal signal tools. (michi_cc)
rubidium
parents: 9785
diff changeset
   631
	"gui.cycle_signal_types",
3247
ede7a53941b2 (svn r3930) - [Patches] Change the GUI-patch options from indeces to string representations. Not only makes this the part more humanly readable, but saves us from rewriting the whole index when a patch is added/removed/changed
Darkvater
parents: 3206
diff changeset
   632
};
ede7a53941b2 (svn r3930) - [Patches] Change the GUI-patch options from indeces to string representations. Not only makes this the part more humanly readable, but saves us from rewriting the whole index when a patch is added/removed/changed
Darkvater
parents: 3206
diff changeset
   633
ede7a53941b2 (svn r3930) - [Patches] Change the GUI-patch options from indeces to string representations. Not only makes this the part more humanly readable, but saves us from rewriting the whole index when a patch is added/removed/changed
Darkvater
parents: 3206
diff changeset
   634
static const char *_patches_stations[] = {
9354
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   635
	"station.join_stations",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   636
	"order.improved_load",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   637
	"order.selectgoods",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   638
	"gui.new_nonstop",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   639
	"station.nonuniform_stations",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   640
	"station.station_spread",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   641
	"order.serviceathelipad",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   642
	"station.modified_catchment",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   643
	"order.gradual_loading",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   644
	"construction.road_stop_on_town_road",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   645
	"station.adjacent_stations",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   646
	"economy.station_noise_level",
3247
ede7a53941b2 (svn r3930) - [Patches] Change the GUI-patch options from indeces to string representations. Not only makes this the part more humanly readable, but saves us from rewriting the whole index when a patch is added/removed/changed
Darkvater
parents: 3206
diff changeset
   647
};
ede7a53941b2 (svn r3930) - [Patches] Change the GUI-patch options from indeces to string representations. Not only makes this the part more humanly readable, but saves us from rewriting the whole index when a patch is added/removed/changed
Darkvater
parents: 3206
diff changeset
   648
ede7a53941b2 (svn r3930) - [Patches] Change the GUI-patch options from indeces to string representations. Not only makes this the part more humanly readable, but saves us from rewriting the whole index when a patch is added/removed/changed
Darkvater
parents: 3206
diff changeset
   649
static const char *_patches_economy[] = {
9354
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   650
	"economy.inflation",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   651
	"construction.raw_industry_construction",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   652
	"economy.multiple_industry_per_town",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   653
	"economy.same_industry_close",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   654
	"economy.bribe",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   655
	"economy.exclusive_rights",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   656
	"economy.give_money",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   657
	"gui.colored_news_year",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   658
	"gui.ending_year",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   659
	"economy.smooth_economy",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   660
	"economy.allow_shares",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   661
	"economy.town_layout",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   662
	"economy.mod_road_rebuild",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   663
	"economy.town_growth_rate",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   664
	"economy.larger_towns",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   665
	"economy.initial_city_size",
3247
ede7a53941b2 (svn r3930) - [Patches] Change the GUI-patch options from indeces to string representations. Not only makes this the part more humanly readable, but saves us from rewriting the whole index when a patch is added/removed/changed
Darkvater
parents: 3206
diff changeset
   666
};
ede7a53941b2 (svn r3930) - [Patches] Change the GUI-patch options from indeces to string representations. Not only makes this the part more humanly readable, but saves us from rewriting the whole index when a patch is added/removed/changed
Darkvater
parents: 3206
diff changeset
   667
ede7a53941b2 (svn r3930) - [Patches] Change the GUI-patch options from indeces to string representations. Not only makes this the part more humanly readable, but saves us from rewriting the whole index when a patch is added/removed/changed
Darkvater
parents: 3206
diff changeset
   668
static const char *_patches_ai[] = {
9354
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   669
	"ai.ainew_active",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   670
	"ai.ai_in_multiplayer",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   671
	"ai.ai_disable_veh_train",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   672
	"ai.ai_disable_veh_roadveh",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   673
	"ai.ai_disable_veh_aircraft",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   674
	"ai.ai_disable_veh_ship",
3247
ede7a53941b2 (svn r3930) - [Patches] Change the GUI-patch options from indeces to string representations. Not only makes this the part more humanly readable, but saves us from rewriting the whole index when a patch is added/removed/changed
Darkvater
parents: 3206
diff changeset
   675
};
ede7a53941b2 (svn r3930) - [Patches] Change the GUI-patch options from indeces to string representations. Not only makes this the part more humanly readable, but saves us from rewriting the whole index when a patch is added/removed/changed
Darkvater
parents: 3206
diff changeset
   676
ede7a53941b2 (svn r3930) - [Patches] Change the GUI-patch options from indeces to string representations. Not only makes this the part more humanly readable, but saves us from rewriting the whole index when a patch is added/removed/changed
Darkvater
parents: 3206
diff changeset
   677
static const char *_patches_vehicles[] = {
9354
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   678
	"vehicle.realistic_acceleration",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   679
	"pf.forbid_90_deg",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   680
	"vehicle.mammoth_trains",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   681
	"order.gotodepot",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   682
	"pf.roadveh_queue",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   683
	"pf.pathfinder_for_trains",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   684
	"pf.pathfinder_for_roadvehs",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   685
	"pf.pathfinder_for_ships",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   686
	"gui.train_income_warn",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   687
	"gui.order_review_system",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   688
	"vehicle.never_expire_vehicles",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   689
	"gui.lost_train_warn",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   690
	"gui.autorenew",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   691
	"gui.autorenew_months",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   692
	"gui.autorenew_money",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   693
	"vehicle.max_trains",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   694
	"vehicle.max_roadveh",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   695
	"vehicle.max_aircraft",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   696
	"vehicle.max_ships",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   697
	"vehicle.servint_ispercent",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   698
	"vehicle.servint_trains",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   699
	"vehicle.servint_roadveh",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   700
	"vehicle.servint_ships",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   701
	"vehicle.servint_aircraft",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   702
	"order.no_servicing_if_no_breakdowns",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   703
	"vehicle.wagon_speed_limits",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   704
	"vehicle.disable_elrails",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   705
	"vehicle.freight_trains",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   706
	"vehicle.plane_speed",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   707
	"order.timetabling",
845e07db4549 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 9346
diff changeset
   708
	"vehicle.dynamic_engines",
3247
ede7a53941b2 (svn r3930) - [Patches] Change the GUI-patch options from indeces to string representations. Not only makes this the part more humanly readable, but saves us from rewriting the whole index when a patch is added/removed/changed
Darkvater
parents: 3206
diff changeset
   709
};
ede7a53941b2 (svn r3930) - [Patches] Change the GUI-patch options from indeces to string representations. Not only makes this the part more humanly readable, but saves us from rewriting the whole index when a patch is added/removed/changed
Darkvater
parents: 3206
diff changeset
   710
10199
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   711
/** Data structure describing a single patch in a tab */
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6247
diff changeset
   712
struct PatchEntry {
10199
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   713
	const SettingDesc *setting; ///< Setting description of the patch
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   714
	uint index;                 ///< Index of the setting in the settings table
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6247
diff changeset
   715
};
3247
ede7a53941b2 (svn r3930) - [Patches] Change the GUI-patch options from indeces to string representations. Not only makes this the part more humanly readable, but saves us from rewriting the whole index when a patch is added/removed/changed
Darkvater
parents: 3206
diff changeset
   716
10199
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   717
/**
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   718
 * Data structure describing one page of patches in the patch settings window.
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   719
 *
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   720
 * The names of the patches to display are statically defined, and from this
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   721
 * information, a dynamic array (with length \a num) of PatchEntry entries is
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   722
 * constructed.
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   723
 */
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6247
diff changeset
   724
struct PatchPage {
10199
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   725
	const char **names;  ///< Static list of strings with patch names that are settable from the tab
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   726
	PatchEntry *entries; ///< Array of patch entries of the page. Initially \c NULL, filled in at run time
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   727
	byte num;            ///< Number of entries on the page (statically filled).
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6247
diff changeset
   728
};
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   729
10199
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   730
/** Array of pages (tabs), where each page holds a number of advanced settings. */
3247
ede7a53941b2 (svn r3930) - [Patches] Change the GUI-patch options from indeces to string representations. Not only makes this the part more humanly readable, but saves us from rewriting the whole index when a patch is added/removed/changed
Darkvater
parents: 3206
diff changeset
   731
static PatchPage _patches_page[] = {
ede7a53941b2 (svn r3930) - [Patches] Change the GUI-patch options from indeces to string representations. Not only makes this the part more humanly readable, but saves us from rewriting the whole index when a patch is added/removed/changed
Darkvater
parents: 3206
diff changeset
   732
	{_patches_ui,           NULL, lengthof(_patches_ui)},
ede7a53941b2 (svn r3930) - [Patches] Change the GUI-patch options from indeces to string representations. Not only makes this the part more humanly readable, but saves us from rewriting the whole index when a patch is added/removed/changed
Darkvater
parents: 3206
diff changeset
   733
	{_patches_construction, NULL, lengthof(_patches_construction)},
ede7a53941b2 (svn r3930) - [Patches] Change the GUI-patch options from indeces to string representations. Not only makes this the part more humanly readable, but saves us from rewriting the whole index when a patch is added/removed/changed
Darkvater
parents: 3206
diff changeset
   734
	{_patches_vehicles,     NULL, lengthof(_patches_vehicles)},
ede7a53941b2 (svn r3930) - [Patches] Change the GUI-patch options from indeces to string representations. Not only makes this the part more humanly readable, but saves us from rewriting the whole index when a patch is added/removed/changed
Darkvater
parents: 3206
diff changeset
   735
	{_patches_stations,     NULL, lengthof(_patches_stations)},
ede7a53941b2 (svn r3930) - [Patches] Change the GUI-patch options from indeces to string representations. Not only makes this the part more humanly readable, but saves us from rewriting the whole index when a patch is added/removed/changed
Darkvater
parents: 3206
diff changeset
   736
	{_patches_economy,      NULL, lengthof(_patches_economy)},
ede7a53941b2 (svn r3930) - [Patches] Change the GUI-patch options from indeces to string representations. Not only makes this the part more humanly readable, but saves us from rewriting the whole index when a patch is added/removed/changed
Darkvater
parents: 3206
diff changeset
   737
	{_patches_ai,           NULL, lengthof(_patches_ai)},
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   738
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   739
10199
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   740
/** Widget numbers of config patches window */
8188
f326251c9d7f (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8182
diff changeset
   741
enum PatchesSelectionWidgets {
10199
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   742
	PATCHSEL_OPTIONSPANEL = 3, ///< Panel widget containing the option lists
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   743
	PATCHSEL_INTERFACE,        ///< Button 'Interface'
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   744
	PATCHSEL_CONSTRUCTION,     ///< Button 'Construction'
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   745
	PATCHSEL_VEHICLES,         ///< Button 'Vehicles'
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   746
	PATCHSEL_STATIONS,         ///< Button 'Stations'
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   747
	PATCHSEL_ECONOMY,          ///< Button 'Economy'
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   748
	PATCHSEL_COMPETITORS       ///< Button 'Competitors'
8188
f326251c9d7f (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8182
diff changeset
   749
};
f326251c9d7f (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8182
diff changeset
   750
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   751
struct PatchesSelectionWindow : Window {
9413
7042a8ec3fa8 (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: 9359
diff changeset
   752
	static GameSettings *patches_ptr;
10199
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   753
	static int patches_max;  ///< Maximal number of patches on a single page
3118
adc86793eee1 (svn r3722) - [4/4] Present the game with a unified structure for the configuration-ini, saveload, console and gui representations of the settings. The last part finishes the transition with the merging of the settings_gui table(s).
Darkvater
parents: 3107
diff changeset
   754
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   755
	int page;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   756
	int entry;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   757
	int click;
8190
81dd3c9929c8 (svn r11753) -Codechange: re-indent the switch case structures, as to be more code style oriented.
belugas
parents: 8189
diff changeset
   758
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   759
	PatchesSelectionWindow(const WindowDesc *desc) : Window(desc)
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   760
	{
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   761
		static bool first_time = true;
8190
81dd3c9929c8 (svn r11753) -Codechange: re-indent the switch case structures, as to be more code style oriented.
belugas
parents: 8189
diff changeset
   762
9413
7042a8ec3fa8 (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: 9359
diff changeset
   763
		patches_ptr = (_game_mode == GM_MENU) ? &_settings_newgame : &_settings_game;
8190
81dd3c9929c8 (svn r11753) -Codechange: re-indent the switch case structures, as to be more code style oriented.
belugas
parents: 8189
diff changeset
   764
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   765
		/* Build up the dynamic settings-array only once per OpenTTD session */
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   766
		if (first_time) {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   767
			PatchPage *page;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   768
			for (page = &_patches_page[0]; page != endof(_patches_page); page++) {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   769
				uint i;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   770
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   771
				if (patches_max < page->num) patches_max = page->num;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   772
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   773
				page->entries = MallocT<PatchEntry>(page->num);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   774
				for (i = 0; i != page->num; i++) {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   775
					uint index;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   776
					const SettingDesc *sd = GetPatchFromName(page->names[i], &index);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   777
					assert(sd != NULL);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   778
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   779
					page->entries[i].setting = sd;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   780
					page->entries[i].index = index;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   781
				}
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   782
			}
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   783
			first_time = false;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   784
		}
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   785
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   786
		/* Resize the window to fit the largest patch tab */
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   787
		ResizeWindowForWidget(this, PATCHSEL_OPTIONSPANEL, 0, patches_max * 11);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   788
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   789
		/* Recentre the window for the new size */
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   790
		this->top = this->top - (patches_max * 11) / 2;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   791
10234
84fbb9da6898 (svn r14462) -Codechange: replace magic number with already existing constant (Albert)
rubidium
parents: 10199
diff changeset
   792
		this->LowerWidget(PATCHSEL_INTERFACE);
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   793
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   794
		this->FindWindowPlacementAndResize(desc);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   795
	}
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   796
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   797
	virtual void OnPaint()
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   798
	{
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   799
		int x, y;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   800
		const PatchPage *page = &_patches_page[this->page];
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   801
		uint i;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   802
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   803
		/* Set up selected category */
9273
35e0224ea8f1 (svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium
parents: 9246
diff changeset
   804
		this->DrawWidgets();
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   805
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   806
		x = 5;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   807
		y = 47;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   808
		for (i = 0; i != page->num; i++) {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   809
			const SettingDesc *sd = page->entries[i].setting;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   810
			const SettingDescBase *sdb = &sd->desc;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   811
			const void *var = GetVariableAddress(patches_ptr, &sd->save);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   812
			bool editable = true;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   813
			bool disabled = false;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   814
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   815
			// We do not allow changes of some items when we are a client in a networkgame
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   816
			if (!(sd->save.conv & SLF_NETWORK_NO) && _networking && !_network_server) editable = false;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   817
			if ((sdb->flags & SGF_NETWORK_ONLY) && !_networking) editable = false;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   818
			if ((sdb->flags & SGF_NO_NETWORK) && _networking) editable = false;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   819
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   820
			if (sdb->cmd == SDT_BOOLX) {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   821
				static const int _bool_ctabs[2][2] = {{9, 4}, {7, 6}};
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   822
				/* Draw checkbox for boolean-value either on/off */
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   823
				bool on = (*(bool*)var);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   824
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   825
				DrawFrameRect(x, y, x + 19, y + 8, _bool_ctabs[!!on][!!editable], on ? FR_LOWERED : FR_NONE);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   826
				SetDParam(0, on ? STR_CONFIG_PATCHES_ON : STR_CONFIG_PATCHES_OFF);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   827
			} else {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   828
				int32 value;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   829
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   830
				value = (int32)ReadValue(var, sd->save.conv);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   831
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   832
				/* Draw [<][>] boxes for settings of an integer-type */
9871
57a332d08e74 (svn r14017) -Codechange: DrawArrowButtons now uses Colours enum to specify the colour of the button
belugas
parents: 9793
diff changeset
   833
				DrawArrowButtons(x, y, COLOUR_YELLOW, this->click - (i * 2), (editable && value != sdb->min), (editable && value != sdb->max));
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   834
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   835
				disabled = (value == 0) && (sdb->flags & SGF_0ISDISABLED);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   836
				if (disabled) {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   837
					SetDParam(0, STR_CONFIG_PATCHES_DISABLED);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   838
				} else {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   839
					if (sdb->flags & SGF_CURRENCY) {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   840
						SetDParam(0, STR_CONFIG_PATCHES_CURRENCY);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   841
					} else if (sdb->flags & SGF_MULTISTRING) {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   842
						SetDParam(0, sdb->str + value + 1);
8190
81dd3c9929c8 (svn r11753) -Codechange: re-indent the switch case structures, as to be more code style oriented.
belugas
parents: 8189
diff changeset
   843
					} else {
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   844
						SetDParam(0, (sdb->flags & SGF_NOCOMMA) ? STR_CONFIG_PATCHES_INT32 : STR_7024);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   845
					}
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   846
					SetDParam(1, value);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   847
				}
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   848
			}
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   849
			DrawString(30, y, (sdb->str) + disabled, TC_FROMSTRING);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   850
			y += 11;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   851
		}
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   852
	}
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   853
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   854
	virtual void OnClick(Point pt, int widget)
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   855
	{
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   856
		switch (widget) {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   857
			case PATCHSEL_OPTIONSPANEL: {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   858
				const PatchPage *page = &_patches_page[this->page];
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   859
				const SettingDesc *sd;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   860
				void *var;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   861
				int32 value;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   862
				int x, y;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   863
				byte btn;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   864
10199
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   865
				y = pt.y - 46 - 1;  // Shift y coordinate
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   866
				if (y < 0) return;  // Clicked above first entry
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   867
10199
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   868
				x = pt.x - 5;  // Shift x coordinate
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   869
				if (x < 0) return;  // Clicked left of the entry
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   870
10199
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   871
				btn = y / 11;  // Compute which setting is selected
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   872
				if (y % 11 > 9) return;  // Clicked too low at the setting
3bb560dd3cf6 (svn r14412) -Documentation: Comment some functions related to the advanced settings. Patch by Alberth, but with less excessive use of 'at'.
frosch
parents: 10180
diff changeset
   873
				if (btn >= page->num) return;  // Clicked below the last setting of the page
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   874
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   875
				sd = page->entries[btn].setting;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   876
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   877
				/* return if action is only active in network, or only settable by server */
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   878
				if (!(sd->save.conv & SLF_NETWORK_NO) && _networking && !_network_server) return;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   879
				if ((sd->desc.flags & SGF_NETWORK_ONLY) && !_networking) return;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   880
				if ((sd->desc.flags & SGF_NO_NETWORK) && _networking) return;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   881
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   882
				var = GetVariableAddress(patches_ptr, &sd->save);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   883
				value = (int32)ReadValue(var, sd->save.conv);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   884
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   885
				/* clicked on the icon on the left side. Either scroller or bool on/off */
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   886
				if (x < 21) {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   887
					const SettingDescBase *sdb = &sd->desc;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   888
					int32 oldvalue = value;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   889
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   890
					switch (sdb->cmd) {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   891
					case SDT_BOOLX: value ^= 1; break;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   892
					case SDT_NUMX: {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   893
						/* Add a dynamic step-size to the scroller. In a maximum of
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   894
							* 50-steps you should be able to get from min to max,
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   895
							* unless specified otherwise in the 'interval' variable
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   896
							* of the current patch. */
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   897
						uint32 step = (sdb->interval == 0) ? ((sdb->max - sdb->min) / 50) : sdb->interval;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   898
						if (step == 0) step = 1;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   899
10180
a99cf854c6d0 (svn r14390) -Codechange: replace magic constants with symbolic constants.
rubidium
parents: 10145
diff changeset
   900
						/* don't allow too fast scrolling */
a99cf854c6d0 (svn r14390) -Codechange: replace magic constants with symbolic constants.
rubidium
parents: 10145
diff changeset
   901
						if ((this->flags4 & WF_TIMEOUT_MASK) > WF_TIMEOUT_TRIGGER) {
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   902
							_left_button_clicked = false;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   903
							return;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   904
						}
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   905
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   906
						/* Increase or decrease the value and clamp it to extremes */
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   907
						if (x >= 10) {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   908
							value += step;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   909
							if (value > sdb->max) value = sdb->max;
8190
81dd3c9929c8 (svn r11753) -Codechange: re-indent the switch case structures, as to be more code style oriented.
belugas
parents: 8189
diff changeset
   910
						} else {
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   911
							value -= step;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   912
							if (value < sdb->min) value = (sdb->flags & SGF_0ISDISABLED) ? 0 : sdb->min;
8190
81dd3c9929c8 (svn r11753) -Codechange: re-indent the switch case structures, as to be more code style oriented.
belugas
parents: 8189
diff changeset
   913
						}
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   914
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   915
						/* Set up scroller timeout for numeric values */
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   916
						if (value != oldvalue && !(sd->desc.flags & SGF_MULTISTRING)) {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   917
							this->click = btn * 2 + 1 + ((x >= 10) ? 1 : 0);
10180
a99cf854c6d0 (svn r14390) -Codechange: replace magic constants with symbolic constants.
rubidium
parents: 10145
diff changeset
   918
							this->flags4 |= WF_TIMEOUT_BEGIN;
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   919
							_left_button_clicked = false;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   920
						}
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   921
					} break;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   922
					default: NOT_REACHED();
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   923
					}
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   924
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   925
					if (value != oldvalue) {
9413
7042a8ec3fa8 (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: 9359
diff changeset
   926
						SetPatchValue(page->entries[btn].index, value);
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   927
						this->SetDirty();
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   928
					}
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   929
				} else {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   930
					/* only open editbox for types that its sensible for */
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   931
					if (sd->desc.cmd != SDT_BOOLX && !(sd->desc.flags & SGF_MULTISTRING)) {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   932
						/* Show the correct currency-translated value */
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   933
						if (sd->desc.flags & SGF_CURRENCY) value *= _currency->rate;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   934
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   935
						this->entry = btn;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   936
						SetDParam(0, value);
10145
849ba8b8626b (svn r14331) -Codechange: use an enum as additional parameter for ShowQueryString()
smatz
parents: 9872
diff changeset
   937
						ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_CONFIG_PATCHES_QUERY_CAPT, 10, 100, this, CS_NUMERAL, QSF_NONE);
8190
81dd3c9929c8 (svn r11753) -Codechange: re-indent the switch case structures, as to be more code style oriented.
belugas
parents: 8189
diff changeset
   938
					}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   939
				}
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   940
			} break;
8190
81dd3c9929c8 (svn r11753) -Codechange: re-indent the switch case structures, as to be more code style oriented.
belugas
parents: 8189
diff changeset
   941
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   942
			case PATCHSEL_INTERFACE: case PATCHSEL_CONSTRUCTION: case PATCHSEL_VEHICLES:
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   943
			case PATCHSEL_STATIONS:  case PATCHSEL_ECONOMY:      case PATCHSEL_COMPETITORS:
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   944
				this->RaiseWidget(this->page + PATCHSEL_INTERFACE);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   945
				this->page = widget - PATCHSEL_INTERFACE;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   946
				this->LowerWidget(this->page + PATCHSEL_INTERFACE);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   947
				DeleteWindowById(WC_QUERY_STRING, 0);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   948
				this->SetDirty();
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   949
				break;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   950
		}
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   951
	}
8190
81dd3c9929c8 (svn r11753) -Codechange: re-indent the switch case structures, as to be more code style oriented.
belugas
parents: 8189
diff changeset
   952
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   953
	virtual void OnTimeout()
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   954
	{
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   955
		this->click = 0;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   956
		this->SetDirty();
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   957
	}
8190
81dd3c9929c8 (svn r11753) -Codechange: re-indent the switch case structures, as to be more code style oriented.
belugas
parents: 8189
diff changeset
   958
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   959
	virtual void OnQueryTextFinished(char *str)
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   960
	{
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   961
		if (!StrEmpty(str)) {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   962
			const PatchEntry *pe = &_patches_page[this->page].entries[this->entry];
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   963
			const SettingDesc *sd = pe->setting;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   964
			int32 value = atoi(str);
3118
adc86793eee1 (svn r3722) - [4/4] Present the game with a unified structure for the configuration-ini, saveload, console and gui representations of the settings. The last part finishes the transition with the merging of the settings_gui table(s).
Darkvater
parents: 3107
diff changeset
   965
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   966
			/* Save the correct currency-translated value */
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   967
			if (sd->desc.flags & SGF_CURRENCY) value /= _currency->rate;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   968
9413
7042a8ec3fa8 (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: 9359
diff changeset
   969
			SetPatchValue(pe->index, value);
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   970
			this->SetDirty();
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   971
		}
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   972
	}
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   973
};
8190
81dd3c9929c8 (svn r11753) -Codechange: re-indent the switch case structures, as to be more code style oriented.
belugas
parents: 8189
diff changeset
   974
9413
7042a8ec3fa8 (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: 9359
diff changeset
   975
GameSettings *PatchesSelectionWindow::patches_ptr = NULL;
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
   976
int PatchesSelectionWindow::patches_max = 0;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   977
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   978
static const Widget _patches_selection_widgets[] = {
9764
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   979
{   WWT_CLOSEBOX,   RESIZE_NONE,  COLOUR_MAUVE,     0,    10,     0,    13, STR_00C5,                        STR_018B_CLOSE_WINDOW},
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   980
{    WWT_CAPTION,   RESIZE_NONE,  COLOUR_MAUVE,    11,   369,     0,    13, STR_CONFIG_PATCHES_CAPTION,      STR_018C_WINDOW_TITLE_DRAG_THIS},
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
   981
{      WWT_PANEL,   RESIZE_NONE,  COLOUR_MAUVE,     0,   369,    14,    41, 0x0,                             STR_NULL},
10234
84fbb9da6898 (svn r14462) -Codechange: replace magic number with already existing constant (Albert)
rubidium
parents: 10199
diff changeset
   982
{      WWT_PANEL,   RESIZE_NONE,  COLOUR_MAUVE,     0,   369,    42,    50, 0x0,                             STR_NULL}, // PATCHSEL_OPTIONSPANEL
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   983
10234
84fbb9da6898 (svn r14462) -Codechange: replace magic number with already existing constant (Albert)
rubidium
parents: 10199
diff changeset
   984
{    WWT_TEXTBTN,   RESIZE_NONE,  COLOUR_YELLOW,   10,    96,    16,    27, STR_CONFIG_PATCHES_GUI,          STR_NULL}, // PATCHSEL_INTERFACE
84fbb9da6898 (svn r14462) -Codechange: replace magic number with already existing constant (Albert)
rubidium
parents: 10199
diff changeset
   985
{    WWT_TEXTBTN,   RESIZE_NONE,  COLOUR_YELLOW,   97,   183,    16,    27, STR_CONFIG_PATCHES_CONSTRUCTION, STR_NULL}, // PATCHSEL_CONSTRUCTION
84fbb9da6898 (svn r14462) -Codechange: replace magic number with already existing constant (Albert)
rubidium
parents: 10199
diff changeset
   986
{    WWT_TEXTBTN,   RESIZE_NONE,  COLOUR_YELLOW,  184,   270,    16,    27, STR_CONFIG_PATCHES_VEHICLES,     STR_NULL}, // PATCHSEL_VEHICLES
84fbb9da6898 (svn r14462) -Codechange: replace magic number with already existing constant (Albert)
rubidium
parents: 10199
diff changeset
   987
{    WWT_TEXTBTN,   RESIZE_NONE,  COLOUR_YELLOW,  271,   357,    16,    27, STR_CONFIG_PATCHES_STATIONS,     STR_NULL}, // PATCHSEL_STATIONS
84fbb9da6898 (svn r14462) -Codechange: replace magic number with already existing constant (Albert)
rubidium
parents: 10199
diff changeset
   988
{    WWT_TEXTBTN,   RESIZE_NONE,  COLOUR_YELLOW,   10,    96,    28,    39, STR_CONFIG_PATCHES_ECONOMY,      STR_NULL}, // PATCHSEL_ECONOMY
84fbb9da6898 (svn r14462) -Codechange: replace magic number with already existing constant (Albert)
rubidium
parents: 10199
diff changeset
   989
{    WWT_TEXTBTN,   RESIZE_NONE,  COLOUR_YELLOW,   97,   183,    28,    39, STR_CONFIG_PATCHES_AI,           STR_NULL}, // PATCHSEL_COMPETITORS
176
84990c4b9212 (svn r177) -Fix: padded out Widget code to solve warnings on C99 compiler (Tron)
darkvater
parents: 164
diff changeset
   990
{   WIDGETS_END},
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   991
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   992
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   993
static const WindowDesc _patches_selection_desc = {
8593
e9075b7c9448 (svn r12174) -Codechange: Make the patches window dynamically resize to the largest patch tab, so adding patch options is simply a case of adding to the lists.
peter1138
parents: 8551
diff changeset
   994
	WDP_CENTER, WDP_CENTER, 370, 51, 370, 51,
5893
7e431a4abebb (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5688
diff changeset
   995
	WC_GAME_OPTIONS, WC_NONE,
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   996
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   997
	_patches_selection_widgets,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   998
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   999
6247
7d81e3a5d803 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6012
diff changeset
  1000
void ShowPatchesSelection()
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1001
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1002
	DeleteWindowById(WC_GAME_OPTIONS, 0);
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1003
	new PatchesSelectionWindow(&_patches_selection_desc);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1004
}
478
3a161108a15d (svn r745) Added newgrf GUI (in options menu)\nThe interface currently only displays the installed grf sets, you can't (de)activate them through the gui yet
dominik
parents: 430
diff changeset
  1005
3a161108a15d (svn r745) Added newgrf GUI (in options menu)\nThe interface currently only displays the installed grf sets, you can't (de)activate them through the gui yet
dominik
parents: 430
diff changeset
  1006
4211
5ee54ab361c9 (svn r5714) Backport from branches/TGP (r5701 and r5711)
miham
parents: 4196
diff changeset
  1007
/**
5ee54ab361c9 (svn r5714) Backport from branches/TGP (r5701 and r5711)
miham
parents: 4196
diff changeset
  1008
 * Draw [<][>] boxes.
5ee54ab361c9 (svn r5714) Backport from branches/TGP (r5701 and r5711)
miham
parents: 4196
diff changeset
  1009
 * @param x the x position to draw
5ee54ab361c9 (svn r5714) Backport from branches/TGP (r5701 and r5711)
miham
parents: 4196
diff changeset
  1010
 * @param y the y position to draw
9871
57a332d08e74 (svn r14017) -Codechange: DrawArrowButtons now uses Colours enum to specify the colour of the button
belugas
parents: 9793
diff changeset
  1011
 * @param button_colour the colour of the button
4211
5ee54ab361c9 (svn r5714) Backport from branches/TGP (r5701 and r5711)
miham
parents: 4196
diff changeset
  1012
 * @param state 0 = none clicked, 1 = first clicked, 2 = second clicked
5ee54ab361c9 (svn r5714) Backport from branches/TGP (r5701 and r5711)
miham
parents: 4196
diff changeset
  1013
 * @param clickable_left is the left button clickable?
5ee54ab361c9 (svn r5714) Backport from branches/TGP (r5701 and r5711)
miham
parents: 4196
diff changeset
  1014
 * @param clickable_right is the right button clickable?
5ee54ab361c9 (svn r5714) Backport from branches/TGP (r5701 and r5711)
miham
parents: 4196
diff changeset
  1015
 */
9872
cd31ad87666e (svn r14018) -Fix (r14017): Typos prevented compilation.
peter1138
parents: 9871
diff changeset
  1016
void DrawArrowButtons(int x, int y, Colours button_colour, byte state, bool clickable_left, bool clickable_right)
759
a445474d7c21 (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1017
{
10358
e18487e907f4 (svn r14609) -Codechange: Use supplied button colour instead of hardcoded yellow, for 'greyed out' arrow buttons. (Yorick)
peter1138
parents: 10310
diff changeset
  1018
	int colour = _colour_gradient[button_colour][2];
3107
d743cfa2d832 (svn r3710) - Use the general function DrawArrowButtons() instead of doing it manually. The function has two parameters added, colour and an enabled flag.
Darkvater
parents: 2952
diff changeset
  1019
9871
57a332d08e74 (svn r14017) -Codechange: DrawArrowButtons now uses Colours enum to specify the colour of the button
belugas
parents: 9793
diff changeset
  1020
	DrawFrameRect(x,      y + 1, x +  9, y + 9, button_colour, (state == 1) ? FR_LOWERED : FR_NONE);
57a332d08e74 (svn r14017) -Codechange: DrawArrowButtons now uses Colours enum to specify the colour of the button
belugas
parents: 9793
diff changeset
  1021
	DrawFrameRect(x + 10, y + 1, x + 19, y + 9, button_colour, (state == 2) ? FR_LOWERED : FR_NONE);
7824
5a63d41b59ea (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 7742
diff changeset
  1022
	DrawStringCentered(x +  5, y + 1, STR_6819, TC_FROMSTRING); // [<]
5a63d41b59ea (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 7742
diff changeset
  1023
	DrawStringCentered(x + 15, y + 1, STR_681A, TC_FROMSTRING); // [>]
4211
5ee54ab361c9 (svn r5714) Backport from branches/TGP (r5701 and r5711)
miham
parents: 4196
diff changeset
  1024
5ee54ab361c9 (svn r5714) Backport from branches/TGP (r5701 and r5711)
miham
parents: 4196
diff changeset
  1025
	/* Grey out the buttons that aren't clickable */
9872
cd31ad87666e (svn r14018) -Fix (r14017): Typos prevented compilation.
peter1138
parents: 9871
diff changeset
  1026
	if (!clickable_left) {
9871
57a332d08e74 (svn r14017) -Codechange: DrawArrowButtons now uses Colours enum to specify the colour of the button
belugas
parents: 9793
diff changeset
  1027
		GfxFillRect(x +  1, y + 1, x +  1 + 8, y + 8, colour, FILLRECT_CHECKER);
9872
cd31ad87666e (svn r14018) -Fix (r14017): Typos prevented compilation.
peter1138
parents: 9871
diff changeset
  1028
	}
cd31ad87666e (svn r14018) -Fix (r14017): Typos prevented compilation.
peter1138
parents: 9871
diff changeset
  1029
	if (!clickable_right) {
cd31ad87666e (svn r14018) -Fix (r14017): Typos prevented compilation.
peter1138
parents: 9871
diff changeset
  1030
		GfxFillRect(x + 11, y + 1, x + 11 + 8, y + 8, colour, FILLRECT_CHECKER);
cd31ad87666e (svn r14018) -Fix (r14017): Typos prevented compilation.
peter1138
parents: 9871
diff changeset
  1031
	}
759
a445474d7c21 (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1032
}
a445474d7c21 (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1033
8188
f326251c9d7f (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8182
diff changeset
  1034
/** These are not, strickly speaking, widget enums,
f326251c9d7f (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8182
diff changeset
  1035
 *  since they have been changed as line coordinates.
f326251c9d7f (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8182
diff changeset
  1036
 *  So, rather, they are more like order of appearance */
f326251c9d7f (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8182
diff changeset
  1037
enum CustomCurrenciesWidgets {
f326251c9d7f (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8182
diff changeset
  1038
	CUSTCURR_EXCHANGERATE = 0,
f326251c9d7f (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8182
diff changeset
  1039
	CUSTCURR_SEPARATOR,
f326251c9d7f (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8182
diff changeset
  1040
	CUSTCURR_PREFIX,
f326251c9d7f (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8182
diff changeset
  1041
	CUSTCURR_SUFFIX,
f326251c9d7f (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8182
diff changeset
  1042
	CUSTCURR_TO_EURO,
f326251c9d7f (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8182
diff changeset
  1043
};
f326251c9d7f (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8182
diff changeset
  1044
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1045
struct CustomCurrencyWindow : Window {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1046
	char separator[2];
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1047
	int click;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1048
	int query_widget;
4488
1be86990ea3e (svn r6273) Clean up the custom currency window handler a bit
tron
parents: 4444
diff changeset
  1049
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1050
	CustomCurrencyWindow(const WindowDesc *desc) : Window(desc)
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1051
	{
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1052
		this->separator[0] = _custom_currency.separator;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1053
		this->separator[1] = '\0';
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1054
		this->FindWindowPlacementAndResize(desc);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1055
	}
812
65ecc321b3db (svn r1283) -Add: AutoRenew is now a client-side patch instead of a game-side patch
truelight
parents: 788
diff changeset
  1056
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1057
	virtual void OnPaint()
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1058
	{
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1059
		int x;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1060
		int y = 20;
9273
35e0224ea8f1 (svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium
parents: 9246
diff changeset
  1061
		this->DrawWidgets();
2639
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2631
diff changeset
  1062
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1063
		/* exchange rate */
9871
57a332d08e74 (svn r14017) -Codechange: DrawArrowButtons now uses Colours enum to specify the colour of the button
belugas
parents: 9793
diff changeset
  1064
		DrawArrowButtons(10, y, COLOUR_YELLOW, GB(this->click, 0, 2), true, true);
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1065
		SetDParam(0, 1);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1066
		SetDParam(1, 1);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1067
		DrawString(35, y + 1, STR_CURRENCY_EXCHANGE_RATE, TC_FROMSTRING);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1068
		y += 12;
2639
eeaefdabfdfd (svn r3181) -Bracing
tron
parents: 2631
diff changeset
  1069
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1070
		/* separator */
9770
8c260fb382f8 (svn r13907) -Codechange: Replace a number with Colours enum on DrawFrameRect usage
belugas
parents: 9764
diff changeset
  1071
		DrawFrameRect(10, y + 1, 29, y + 9, COLOUR_DARK_BLUE, GB(this->click, 2, 2) ? FR_LOWERED : FR_NONE);
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1072
		x = DrawString(35, y + 1, STR_CURRENCY_SEPARATOR, TC_FROMSTRING);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1073
		DoDrawString(this->separator, x + 4, y + 1, TC_ORANGE);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1074
		y += 12;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1075
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1076
		/* prefix */
9770
8c260fb382f8 (svn r13907) -Codechange: Replace a number with Colours enum on DrawFrameRect usage
belugas
parents: 9764
diff changeset
  1077
		DrawFrameRect(10, y + 1, 29, y + 9, COLOUR_DARK_BLUE, GB(this->click, 4, 2) ? FR_LOWERED : FR_NONE);
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1078
		x = DrawString(35, y + 1, STR_CURRENCY_PREFIX, TC_FROMSTRING);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1079
		DoDrawString(_custom_currency.prefix, x + 4, y + 1, TC_ORANGE);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1080
		y += 12;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1081
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1082
		/* suffix */
9770
8c260fb382f8 (svn r13907) -Codechange: Replace a number with Colours enum on DrawFrameRect usage
belugas
parents: 9764
diff changeset
  1083
		DrawFrameRect(10, y + 1, 29, y + 9, COLOUR_DARK_BLUE, GB(this->click, 6, 2) ? FR_LOWERED : FR_NONE);
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1084
		x = DrawString(35, y + 1, STR_CURRENCY_SUFFIX, TC_FROMSTRING);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1085
		DoDrawString(_custom_currency.suffix, x + 4, y + 1, TC_ORANGE);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1086
		y += 12;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1087
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1088
		/* switch to euro */
9871
57a332d08e74 (svn r14017) -Codechange: DrawArrowButtons now uses Colours enum to specify the colour of the button
belugas
parents: 9793
diff changeset
  1089
		DrawArrowButtons(10, y, COLOUR_YELLOW, GB(this->click, 8, 2), true, true);
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1090
		SetDParam(0, _custom_currency.to_euro);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1091
		DrawString(35, y + 1, (_custom_currency.to_euro != CF_NOEURO) ? STR_CURRENCY_SWITCH_TO_EURO : STR_CURRENCY_SWITCH_TO_EURO_NEVER, TC_FROMSTRING);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1092
		y += 12;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1093
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1094
		/* Preview */
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1095
		y += 12;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1096
		SetDParam(0, 10000);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1097
		DrawString(35, y + 1, STR_CURRENCY_PREVIEW, TC_FROMSTRING);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1098
	}
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1099
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1100
	virtual void OnClick(Point pt, int widget)
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1101
	{
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1102
		int line = (pt.y - 20) / 12;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1103
		int len = 0;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1104
		int x = pt.x;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1105
		StringID str = 0;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1106
		CharSetFilter afilter = CS_ALPHANUMERAL;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1107
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1108
		switch (line) {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1109
			case CUSTCURR_EXCHANGERATE:
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1110
				if (IsInsideMM(x, 10, 30)) { // clicked buttons
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1111
					if (x < 20) {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1112
						if (_custom_currency.rate > 1) _custom_currency.rate--;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1113
						this->click = 1 << (line * 2 + 0);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1114
					} else {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1115
						if (_custom_currency.rate < 5000) _custom_currency.rate++;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1116
						this->click = 1 << (line * 2 + 1);
4488
1be86990ea3e (svn r6273) Clean up the custom currency window handler a bit
tron
parents: 4444
diff changeset
  1117
					}
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1118
				} else { // enter text
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1119
					SetDParam(0, _custom_currency.rate);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1120
					str = STR_CONFIG_PATCHES_INT32;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1121
					len = 4;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1122
					afilter = CS_NUMERAL;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1123
				}
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1124
				break;
4488
1be86990ea3e (svn r6273) Clean up the custom currency window handler a bit
tron
parents: 4444
diff changeset
  1125
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1126
			case CUSTCURR_SEPARATOR:
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1127
				if (IsInsideMM(x, 10, 30)) { // clicked button
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1128
					this->click = 1 << (line * 2 + 1);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1129
				}
9648
c79160082c0f (svn r13715) -Fix [FS#2129]: C-like strings had to be rebound each time they were printed, otherwise the text could change due to the few number of slots that could be used to bind.
rubidium
parents: 9607
diff changeset
  1130
				SetDParamStr(0, this->separator);
c79160082c0f (svn r13715) -Fix [FS#2129]: C-like strings had to be rebound each time they were printed, otherwise the text could change due to the few number of slots that could be used to bind.
rubidium
parents: 9607
diff changeset
  1131
				str = STR_JUST_RAW_STRING;
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1132
				len = 1;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1133
				break;
8188
f326251c9d7f (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8182
diff changeset
  1134
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1135
			case CUSTCURR_PREFIX:
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1136
				if (IsInsideMM(x, 10, 30)) { // clicked button
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1137
					this->click = 1 << (line * 2 + 1);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1138
				}
9648
c79160082c0f (svn r13715) -Fix [FS#2129]: C-like strings had to be rebound each time they were printed, otherwise the text could change due to the few number of slots that could be used to bind.
rubidium
parents: 9607
diff changeset
  1139
				SetDParamStr(0, _custom_currency.prefix);
c79160082c0f (svn r13715) -Fix [FS#2129]: C-like strings had to be rebound each time they were printed, otherwise the text could change due to the few number of slots that could be used to bind.
rubidium
parents: 9607
diff changeset
  1140
				str = STR_JUST_RAW_STRING;
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1141
				len = 12;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1142
				break;
8188
f326251c9d7f (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8182
diff changeset
  1143
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1144
			case CUSTCURR_SUFFIX:
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1145
				if (IsInsideMM(x, 10, 30)) { // clicked button
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1146
					this->click = 1 << (line * 2 + 1);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1147
				}
9648
c79160082c0f (svn r13715) -Fix [FS#2129]: C-like strings had to be rebound each time they were printed, otherwise the text could change due to the few number of slots that could be used to bind.
rubidium
parents: 9607
diff changeset
  1148
				SetDParamStr(0, _custom_currency.suffix);
c79160082c0f (svn r13715) -Fix [FS#2129]: C-like strings had to be rebound each time they were printed, otherwise the text could change due to the few number of slots that could be used to bind.
rubidium
parents: 9607
diff changeset
  1149
				str = STR_JUST_RAW_STRING;
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1150
				len = 12;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1151
				break;
8188
f326251c9d7f (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8182
diff changeset
  1152
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1153
			case CUSTCURR_TO_EURO:
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1154
				if (IsInsideMM(x, 10, 30)) { // clicked buttons
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1155
					if (x < 20) {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1156
						_custom_currency.to_euro = (_custom_currency.to_euro <= 2000) ?
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1157
							CF_NOEURO : _custom_currency.to_euro - 1;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1158
						this->click = 1 << (line * 2 + 0);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1159
					} else {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1160
						_custom_currency.to_euro =
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1161
							Clamp(_custom_currency.to_euro + 1, 2000, MAX_YEAR);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1162
						this->click = 1 << (line * 2 + 1);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1163
					}
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1164
				} else { // enter text
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1165
					SetDParam(0, _custom_currency.to_euro);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1166
					str = STR_CONFIG_PATCHES_INT32;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1167
					len = 4;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1168
					afilter = CS_NUMERAL;
4488
1be86990ea3e (svn r6273) Clean up the custom currency window handler a bit
tron
parents: 4444
diff changeset
  1169
				}
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1170
				break;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1171
		}
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1172
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1173
		if (len != 0) {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1174
			this->query_widget = line;
10145
849ba8b8626b (svn r14331) -Codechange: use an enum as additional parameter for ShowQueryString()
smatz
parents: 9872
diff changeset
  1175
			ShowQueryString(str, STR_CURRENCY_CHANGE_PARAMETER, len + 1, 250, this, afilter, QSF_NONE);
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1176
		}
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1177
10180
a99cf854c6d0 (svn r14390) -Codechange: replace magic constants with symbolic constants.
rubidium
parents: 10145
diff changeset
  1178
		this->flags4 |= WF_TIMEOUT_BEGIN;
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1179
		this->SetDirty();
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1180
	}
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1181
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1182
	virtual void OnQueryTextFinished(char *str)
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1183
	{
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1184
		if (str == NULL) return;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1185
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1186
		switch (this->query_widget) {
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1187
			case CUSTCURR_EXCHANGERATE:
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1188
				_custom_currency.rate = Clamp(atoi(str), 1, 5000);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1189
				break;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1190
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1191
			case CUSTCURR_SEPARATOR: /* Thousands seperator */
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1192
				_custom_currency.separator = StrEmpty(str) ? ' ' : str[0];
10310
ca2eb5811a07 (svn r14555) -Codechange: replace ttd_strlcat and ttd_strlcpy with strecat and strecpy where direct conversion is possible
skidd13
parents: 10234
diff changeset
  1193
				strecpy(this->separator, str, lastof(this->separator));
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1194
				break;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1195
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1196
			case CUSTCURR_PREFIX:
10310
ca2eb5811a07 (svn r14555) -Codechange: replace ttd_strlcat and ttd_strlcpy with strecat and strecpy where direct conversion is possible
skidd13
parents: 10234
diff changeset
  1197
				strecpy(_custom_currency.prefix, str, lastof(_custom_currency.prefix));
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1198
				break;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1199
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1200
			case CUSTCURR_SUFFIX:
10310
ca2eb5811a07 (svn r14555) -Codechange: replace ttd_strlcat and ttd_strlcpy with strecat and strecpy where direct conversion is possible
skidd13
parents: 10234
diff changeset
  1201
				strecpy(_custom_currency.suffix, str, lastof(_custom_currency.suffix));
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1202
				break;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1203
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1204
			case CUSTCURR_TO_EURO: { /* Year to switch to euro */
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1205
				int val = atoi(str);
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1206
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1207
				_custom_currency.to_euro = (val < 2000 ? CF_NOEURO : min(val, MAX_YEAR));
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1208
				break;
8188
f326251c9d7f (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8182
diff changeset
  1209
			}
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1210
		}
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1211
		MarkWholeScreenDirty();
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1212
	}
4488
1be86990ea3e (svn r6273) Clean up the custom currency window handler a bit
tron
parents: 4444
diff changeset
  1213
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1214
	virtual void OnTimeout()
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1215
	{
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1216
		this->click = 0;
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1217
		this->SetDirty();
759
a445474d7c21 (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1218
	}
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1219
};
759
a445474d7c21 (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1220
a445474d7c21 (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1221
static const Widget _cust_currency_widgets[] = {
9764
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
  1222
{   WWT_CLOSEBOX,   RESIZE_NONE,  COLOUR_GREY,     0,    10,     0,    13, STR_00C5,            STR_018B_CLOSE_WINDOW},
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
  1223
{    WWT_CAPTION,   RESIZE_NONE,  COLOUR_GREY,    11,   229,     0,    13, STR_CURRENCY_WINDOW, STR_018C_WINDOW_TITLE_DRAG_THIS},
9b21f847d91c (svn r13900) -Codechange: Replace numbers with Colours enum on settings, smallmaps, stations and signs guis.
belugas
parents: 9648
diff changeset
  1224
{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   229,    14,   119, 0x0,                 STR_NULL},
759
a445474d7c21 (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1225
{   WIDGETS_END},
a445474d7c21 (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1226
};
a445474d7c21 (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1227
a445474d7c21 (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1228
static const WindowDesc _cust_currency_desc = {
7341
02515d0d4ced (svn r10704) -Codechange: provide an infrastructure to have resizable windows that are smaller than the default window size.
rubidium
parents: 7177
diff changeset
  1229
	WDP_CENTER, WDP_CENTER, 230, 120, 230, 120,
5893
7e431a4abebb (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5688
diff changeset
  1230
	WC_CUSTOM_CURRENCY, WC_NONE,
759
a445474d7c21 (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1231
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
a445474d7c21 (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1232
	_cust_currency_widgets,
a445474d7c21 (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1233
};
a445474d7c21 (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1234
6247
7d81e3a5d803 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6012
diff changeset
  1235
static void ShowCustCurrency()
759
a445474d7c21 (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1236
{
a445474d7c21 (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1237
	DeleteWindowById(WC_CUSTOM_CURRENCY, 0);
9246
1eebd6f7b894 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 9231
diff changeset
  1238
	new CustomCurrencyWindow(&_cust_currency_desc);
759
a445474d7c21 (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1239
}