src/settings_gui.cpp
author Tero Marttila <terom@fixme.fi>
Tue, 22 Jul 2008 21:51:14 +0300
changeset 11180 982e9f814f97
parent 11157 a0173588b15e
permissions -rw-r--r--
scan for tarfiles in CACHE_DIR, remember what Subdirectory a tar was found in, set the GCF_FLAG on GRFs loaded from there, and hide those in the NewGRF GUI
2186
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     1
/* $Id$ */
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     2
10429
1b99254f9607 (svn r12971) -Documentation: add @file in files that missed them and add something more than whitespace as description of files that don't have a description.
rubidium
parents: 10409
diff changeset
     3
/** @file settings_gui.cpp GUI for settings. */
6916
e87d54a598ea (svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents: 6704
diff changeset
     4
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     5
#include "stdafx.h"
1891
92a3b0aa0946 (svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents: 1806
diff changeset
     6
#include "openttd.h"
2291
2b064aa97f91 (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"
8603
88c5ce6a5215 (svn r11668) -Codechange: more refactoring aimed at reducing compile time and making it more logic where function definitions can be found.
rubidium
parents: 8602
diff changeset
     9
#include "window_gui.h"
88c5ce6a5215 (svn r11668) -Codechange: more refactoring aimed at reducing compile time and making it more logic where function definitions can be found.
rubidium
parents: 8602
diff changeset
    10
#include "textbuf_gui.h"
8612
6414fc21c2f3 (svn r11677) -Codechange: move price and command related types/functions to their respective places.
rubidium
parents: 8610
diff changeset
    11
#include "command_func.h"
9282
2bb9703aeb39 (svn r12490) -Codechange: rename engine.h to engine_func.h and remove unneeded inclusions of engine.h and/or replace them with engine_type.h.
rubidium
parents: 9281
diff changeset
    12
#include "engine_func.h"
430
75820dedf4f1 (svn r631) Merge r440, r444, r485, r630 to trunk:
tron
parents: 350
diff changeset
    13
#include "screenshot.h"
478
19987403ee5d (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"
5720
cc0ceeafaa55 (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: 5682
diff changeset
    15
#include "network/network.h"
835
a22d6bc16a51 (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
3b634157c3b2 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2140
diff changeset
    17
#include "variables.h"
8704
2857ec554839 (svn r11771) -Codechange: split settings.h into better separated headers.
rubidium
parents: 8687
diff changeset
    18
#include "settings_internal.h"
7452
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7446
diff changeset
    19
#include "newgrf_townname.h"
8610
17cc343a23dd (svn r11675) -Codechange: split the string types from the string functions.
rubidium
parents: 8603
diff changeset
    20
#include "strings_func.h"
8627
448ebf3a8291 (svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents: 8626
diff changeset
    21
#include "functions.h"
448ebf3a8291 (svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents: 8626
diff changeset
    22
#include "window_func.h"
8709
4187ad809fe7 (svn r11776) -Codechange: more header splittings to reduce the dependencies.
rubidium
parents: 8704
diff changeset
    23
#include "core/alloc_func.hpp"
8710
52015340050c (svn r11777) -Codechange: split the string header and make do not include it when it's not necessary.
rubidium
parents: 8709
diff changeset
    24
#include "string_func.h"
8720
4e60c30e2006 (svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium
parents: 8710
diff changeset
    25
#include "gfx_func.h"
9001
a74251b49d1d (svn r12080) -Fix: update waypoint signs when changing language
glx
parents: 8920
diff changeset
    26
#include "waypoint.h"
8817
9df6e6b40d12 (svn r11886) -Add: sort the strings in languages dropdown
glx
parents: 8815
diff changeset
    27
#include "widgets/dropdown_type.h"
8780
6f3f3ec6c69a (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents: 8760
diff changeset
    28
#include "widgets/dropdown_func.h"
9281
d8cd9ac52a68 (svn r12489) -Codechange: split station.h into station_base.h and station_func.h.
rubidium
parents: 9144
diff changeset
    29
#include "station_func.h"
11061
f5806d84e7a9 (svn r13618) -Codechange: move tar-specific declarations to separate file
smatz
parents: 10983
diff changeset
    30
#include <map>
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    31
8760
ce0891c412ce (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8720
diff changeset
    32
#include "table/sprites.h"
ce0891c412ce (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8720
diff changeset
    33
#include "table/strings.h"
ce0891c412ce (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8720
diff changeset
    34
3342
0de5e6997611 (svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents: 3247
diff changeset
    35
static const StringID _units_dropdown[] = {
0de5e6997611 (svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents: 3247
diff changeset
    36
	STR_UNITS_IMPERIAL,
0de5e6997611 (svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents: 3247
diff changeset
    37
	STR_UNITS_METRIC,
0de5e6997611 (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;
10229
fba3f9fa44d7 (svn r12761) -Codechange: lots of minor whitespace coding style fixes around operators.
rubidium
parents: 10117
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
7452
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7446
diff changeset
    72
int _nb_orig_names = SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 1;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7446
diff changeset
    73
static StringID *_grf_names = NULL;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7446
diff changeset
    74
static int _nb_grf_names = 0;
7293
e5b1b6ef83db (svn r10036) -Add: sort the strings in town names dropdown
glx
parents: 7226
diff changeset
    75
8819
86c6ce890d61 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8817
diff changeset
    76
void InitGRFTownGeneratorNames()
7293
e5b1b6ef83db (svn r10036) -Add: sort the strings in town names dropdown
glx
parents: 7226
diff changeset
    77
{
7452
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7446
diff changeset
    78
	free(_grf_names);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7446
diff changeset
    79
	_grf_names = GetGRFTownNameList();
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7446
diff changeset
    80
	_nb_grf_names = 0;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7446
diff changeset
    81
	for (StringID *s = _grf_names; *s != INVALID_STRING_ID; s++) _nb_grf_names++;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7446
diff changeset
    82
}
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7446
diff changeset
    83
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7446
diff changeset
    84
static inline StringID TownName(int town_name)
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7446
diff changeset
    85
{
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7446
diff changeset
    86
	if (town_name < _nb_orig_names) return STR_TOWNNAME_ORIGINAL_ENGLISH + town_name;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7446
diff changeset
    87
	town_name -= _nb_orig_names;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7446
diff changeset
    88
	if (town_name < _nb_grf_names) return _grf_names[town_name];
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7446
diff changeset
    89
	return STR_UNDEFINED;
7293
e5b1b6ef83db (svn r10036) -Add: sort the strings in town names dropdown
glx
parents: 7226
diff changeset
    90
}
e5b1b6ef83db (svn r10036) -Add: sort the strings in town names dropdown
glx
parents: 7226
diff changeset
    91
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6338
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
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2631
diff changeset
    95
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2631
diff changeset
    96
	for (i = 0; i != _num_resolutions; i++) {
10983
e734f891d1f6 (svn r13537) -Fix [FS#2090](r13523): QSortT won't work this way, use Dimension instead of uint16[2] for resolutions
smatz
parents: 10835
diff changeset
    97
		if (_resolutions[i].width == _screen.width &&
e734f891d1f6 (svn r13537) -Fix [FS#2090](r13523): QSortT won't work this way, use Dimension instead of uint16[2] for resolutions
smatz
parents: 10835
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
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2631
diff changeset
   100
		}
8a7342eb3a78 (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
8684
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
   105
enum GameOptionsWidgets {
8832
e1fcfd2e6d75 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8819
diff changeset
   106
	GAMEOPT_CURRENCY_BTN    =  4,
e1fcfd2e6d75 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8819
diff changeset
   107
	GAMEOPT_DISTANCE_BTN    =  6,
e1fcfd2e6d75 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8819
diff changeset
   108
	GAMEOPT_ROADSIDE_BTN    =  8,
e1fcfd2e6d75 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8819
diff changeset
   109
	GAMEOPT_TOWNNAME_BTN    = 10,
e1fcfd2e6d75 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8819
diff changeset
   110
	GAMEOPT_AUTOSAVE_BTN    = 12,
e1fcfd2e6d75 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8819
diff changeset
   111
	GAMEOPT_VEHICLENAME_BTN = 14,
8684
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
   112
	GAMEOPT_VEHICLENAME_SAVE,
8832
e1fcfd2e6d75 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8819
diff changeset
   113
	GAMEOPT_LANG_BTN        = 17,
e1fcfd2e6d75 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8819
diff changeset
   114
	GAMEOPT_RESOLUTION_BTN  = 19,
8684
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
   115
	GAMEOPT_FULLSCREEN,
8832
e1fcfd2e6d75 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8819
diff changeset
   116
	GAMEOPT_SCREENSHOT_BTN  = 22,
8684
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
   117
};
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
   118
8817
9df6e6b40d12 (svn r11886) -Add: sort the strings in languages dropdown
glx
parents: 8815
diff changeset
   119
/**
8819
86c6ce890d61 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8817
diff changeset
   120
 * Update/redraw the townnames dropdown
86c6ce890d61 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8817
diff changeset
   121
 * @param w   the window the dropdown belongs to
86c6ce890d61 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8817
diff changeset
   122
 * @param sel the currently selected townname generator
86c6ce890d61 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8817
diff changeset
   123
 */
86c6ce890d61 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8817
diff changeset
   124
static void ShowTownnameDropdown(Window *w, int sel)
86c6ce890d61 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8817
diff changeset
   125
{
86c6ce890d61 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8817
diff changeset
   126
	typedef std::map<StringID, int, StringIDCompare> TownList;
86c6ce890d61 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8817
diff changeset
   127
	TownList townnames;
86c6ce890d61 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8817
diff changeset
   128
86c6ce890d61 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8817
diff changeset
   129
	/* Add and sort original townnames generators */
86c6ce890d61 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8817
diff changeset
   130
	for (int i = 0; i < _nb_orig_names; i++) townnames[STR_TOWNNAME_ORIGINAL_ENGLISH + i] = i;
86c6ce890d61 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8817
diff changeset
   131
86c6ce890d61 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8817
diff changeset
   132
	/* Add and sort newgrf townnames generators */
86c6ce890d61 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8817
diff changeset
   133
	for (int i = 0; i < _nb_grf_names; i++) townnames[_grf_names[i]] = _nb_orig_names + i;
86c6ce890d61 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8817
diff changeset
   134
86c6ce890d61 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8817
diff changeset
   135
	DropDownList *list = new DropDownList();
86c6ce890d61 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8817
diff changeset
   136
	for (TownList::iterator it = townnames.begin(); it != townnames.end(); it++) {
86c6ce890d61 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8817
diff changeset
   137
		list->push_back(new DropDownListStringItem((*it).first, (*it).second, !(_game_mode == GM_MENU || (*it).second == sel)));
86c6ce890d61 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8817
diff changeset
   138
	}
86c6ce890d61 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8817
diff changeset
   139
86c6ce890d61 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8817
diff changeset
   140
	ShowDropDownList(w, list, sel, GAMEOPT_TOWNNAME_BTN);
86c6ce890d61 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8817
diff changeset
   141
}
86c6ce890d61 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown
glx
parents: 8817
diff changeset
   142
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6338
diff changeset
   143
static void ShowCustCurrency();
2817
58dcead3f545 (svn r3365) Staticise 36 functions
tron
parents: 2776
diff changeset
   144
10614
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   145
struct GameOptionsWindow : Window {
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10708
diff changeset
   146
	GameSettings *opt;
10695
95e0154da7a0 (svn r13242) -Codechange: remove _opt_ptr.
rubidium
parents: 10682
diff changeset
   147
10614
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   148
	GameOptionsWindow(const WindowDesc *desc) : Window(desc)
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   149
	{
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10708
diff changeset
   150
		this->opt = (_game_mode == GM_MENU) ? &_settings_newgame : &_settings_game;
10614
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   151
		this->FindWindowPlacementAndResize(desc);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   152
	}
759
6d087784a08a (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
   153
10614
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   154
	~GameOptionsWindow()
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   155
	{
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   156
		DeleteWindowById(WC_CUSTOM_CURRENCY, 0);
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   157
	}
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   158
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   159
	virtual void OnPaint()
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   160
	{
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   161
		StringID str = STR_02BE_DEFAULT;
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   162
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   163
		this->SetWidgetDisabledState(GAMEOPT_VEHICLENAME_SAVE, !(_vehicle_design_names & 1));
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   164
		if (!this->IsWidgetDisabled(GAMEOPT_VEHICLENAME_SAVE)) str = STR_02BF_CUSTOM;
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   165
		SetDParam(0, str);
10835
976b9d25c2be (svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents: 10785
diff changeset
   166
		SetDParam(1, _currency_specs[this->opt->locale.currency].name);
976b9d25c2be (svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents: 10785
diff changeset
   167
		SetDParam(2, STR_UNITS_IMPERIAL + this->opt->locale.units);
10707
81a4013a7680 (svn r13255) -Codechange: move _opt to _settings.
rubidium
parents: 10703
diff changeset
   168
		SetDParam(3, STR_02E9_DRIVE_ON_LEFT + this->opt->vehicle.road_side);
81a4013a7680 (svn r13255) -Codechange: move _opt to _settings.
rubidium
parents: 10703
diff changeset
   169
		SetDParam(4, TownName(this->opt->game_creation.town_name));
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10708
diff changeset
   170
		SetDParam(5, _autosave_dropdown[_settings_client.gui.autosave]);
10614
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   171
		SetDParam(6, SPECSTR_LANGUAGE_START + _dynlang.curr);
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   172
		int i = GetCurRes();
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   173
		SetDParam(7, i == _num_resolutions ? STR_RES_OTHER : SPECSTR_RESOLUTION_START + i);
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   174
		SetDParam(8, SPECSTR_SCREENSHOT_START + _cur_screenshot_format);
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   175
		this->SetWidgetLoweredState(GAMEOPT_FULLSCREEN, _fullscreen);
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   176
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   177
		this->DrawWidgets();
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   178
		DrawString(20, 175, STR_OPTIONS_FULLSCREEN, TC_FROMSTRING); // fullscreen
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   179
	}
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   180
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   181
	virtual void OnClick(Point pt, int widget)
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   182
	{
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   183
		switch (widget) {
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   184
			case GAMEOPT_CURRENCY_BTN: // Setup currencies dropdown
10835
976b9d25c2be (svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents: 10785
diff changeset
   185
				ShowDropDownMenu(this, BuildCurrencyDropdown(), this->opt->locale.currency, GAMEOPT_CURRENCY_BTN, _game_mode == GM_MENU ? 0 : ~GetMaskOfAllowedCurrencies(), 0);
10614
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   186
				break;
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   187
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   188
			case GAMEOPT_DISTANCE_BTN: // Setup distance unit dropdown
10835
976b9d25c2be (svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents: 10785
diff changeset
   189
				ShowDropDownMenu(this, _units_dropdown, this->opt->locale.units, GAMEOPT_DISTANCE_BTN, 0, 0);
10614
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   190
				break;
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   191
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   192
			case GAMEOPT_ROADSIDE_BTN: { // Setup road-side dropdown
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   193
				int i = 0;
10622
210493828852 (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium
parents: 10614
diff changeset
   194
				extern bool RoadVehiclesAreBuilt();
10614
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   195
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   196
				/* You can only change the drive side if you are in the menu or ingame with
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   197
				 * no vehicles present. In a networking game only the server can change it */
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   198
				if ((_game_mode != GM_MENU && RoadVehiclesAreBuilt()) || (_networking && !_network_server)) {
10707
81a4013a7680 (svn r13255) -Codechange: move _opt to _settings.
rubidium
parents: 10703
diff changeset
   199
					i = (-1) ^ (1 << this->opt->vehicle.road_side); // disable the other value
10614
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   200
				}
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   201
10707
81a4013a7680 (svn r13255) -Codechange: move _opt to _settings.
rubidium
parents: 10703
diff changeset
   202
				ShowDropDownMenu(this, _driveside_dropdown, this->opt->vehicle.road_side, GAMEOPT_ROADSIDE_BTN, i, 0);
10614
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   203
			} break;
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   204
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   205
			case GAMEOPT_TOWNNAME_BTN: // Setup townname dropdown
10707
81a4013a7680 (svn r13255) -Codechange: move _opt to _settings.
rubidium
parents: 10703
diff changeset
   206
				ShowTownnameDropdown(this, this->opt->game_creation.town_name);
10614
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   207
				break;
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   208
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   209
			case GAMEOPT_AUTOSAVE_BTN: // Setup autosave dropdown
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10708
diff changeset
   210
				ShowDropDownMenu(this, _autosave_dropdown, _settings_client.gui.autosave, GAMEOPT_AUTOSAVE_BTN, 0, 0);
10614
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   211
				break;
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   212
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   213
			case GAMEOPT_VEHICLENAME_BTN: // Setup customized vehicle-names dropdown
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   214
				ShowDropDownMenu(this, _designnames_dropdown, (_vehicle_design_names & 1) ? 1 : 0, GAMEOPT_VEHICLENAME_BTN, (_vehicle_design_names & 2) ? 0 : 2, 0);
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   215
				break;
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   216
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   217
			case GAMEOPT_VEHICLENAME_SAVE: // Save customized vehicle-names to disk
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   218
				break;  // not implemented
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   219
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   220
			case GAMEOPT_LANG_BTN: { // Setup interface language dropdown
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   221
				typedef std::map<StringID, int, StringIDCompare> LangList;
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   222
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   223
				/* Sort language names */
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   224
				LangList langs;
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   225
				for (int i = 0; i < _dynlang.num; i++) langs[SPECSTR_LANGUAGE_START + i] = i;
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   226
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   227
				DropDownList *list = new DropDownList();
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   228
				for (LangList::iterator it = langs.begin(); it != langs.end(); it++) {
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   229
					list->push_back(new DropDownListStringItem((*it).first, (*it).second, false));
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   230
				}
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   231
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   232
				ShowDropDownList(this, list, _dynlang.curr, GAMEOPT_LANG_BTN);
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   233
			} break;
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   234
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   235
			case GAMEOPT_RESOLUTION_BTN: // Setup resolution dropdown
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   236
				ShowDropDownMenu(this, BuildDynamicDropdown(SPECSTR_RESOLUTION_START, _num_resolutions), GetCurRes(), GAMEOPT_RESOLUTION_BTN, 0, 0);
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   237
				break;
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   238
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   239
			case GAMEOPT_FULLSCREEN: // Click fullscreen on/off
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   240
				/* try to toggle full-screen on/off */
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   241
				if (!ToggleFullScreen(!_fullscreen)) {
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   242
					ShowErrorMessage(INVALID_STRING_ID, STR_FULLSCREEN_FAILED, 0, 0);
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   243
				}
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   244
				this->SetWidgetLoweredState(GAMEOPT_FULLSCREEN, _fullscreen);
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   245
				this->SetDirty();
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   246
				break;
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   247
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   248
			case GAMEOPT_SCREENSHOT_BTN: // Setup screenshot format dropdown
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   249
				ShowDropDownMenu(this, BuildDynamicDropdown(SPECSTR_SCREENSHOT_START, _num_screenshot_formats), _cur_screenshot_format, GAMEOPT_SCREENSHOT_BTN, 0, 0);
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   250
				break;
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   251
		}
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   252
	}
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   253
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   254
	virtual void OnDropdownSelect(int widget, int index)
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   255
	{
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   256
		switch (widget) {
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   257
			case GAMEOPT_VEHICLENAME_BTN: // Vehicle design names
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   258
				if (index == 0) {
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   259
					DeleteCustomEngineNames();
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   260
					MarkWholeScreenDirty();
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   261
				} else if (!(_vehicle_design_names & 1)) {
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   262
					LoadCustomEngineNames();
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   263
					MarkWholeScreenDirty();
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   264
				}
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   265
				break;
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   266
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   267
			case GAMEOPT_CURRENCY_BTN: /* Currency */
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   268
				if (index == CUSTOM_CURRENCY_ID) ShowCustCurrency();
10835
976b9d25c2be (svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents: 10785
diff changeset
   269
				this->opt->locale.currency = index;
10614
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   270
				MarkWholeScreenDirty();
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   271
				break;
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   272
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   273
			case GAMEOPT_DISTANCE_BTN: // Measuring units
10835
976b9d25c2be (svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents: 10785
diff changeset
   274
				this->opt->locale.units = index;
10614
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   275
				MarkWholeScreenDirty();
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   276
				break;
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   277
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   278
			case GAMEOPT_ROADSIDE_BTN: // Road side
10707
81a4013a7680 (svn r13255) -Codechange: move _opt to _settings.
rubidium
parents: 10703
diff changeset
   279
				if (this->opt->vehicle.road_side != index) { // only change if setting changed
10614
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   280
					DoCommandP(0, index, 0, NULL, CMD_SET_ROAD_DRIVE_SIDE | CMD_MSG(STR_00B4_CAN_T_DO_THIS));
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   281
					MarkWholeScreenDirty();
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   282
				}
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   283
				break;
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   284
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   285
			case GAMEOPT_TOWNNAME_BTN: // Town names
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   286
				if (_game_mode == GM_MENU) {
10707
81a4013a7680 (svn r13255) -Codechange: move _opt to _settings.
rubidium
parents: 10703
diff changeset
   287
					this->opt->game_creation.town_name = index;
10614
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   288
					InvalidateWindow(WC_GAME_OPTIONS, 0);
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   289
				}
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   290
				break;
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   291
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   292
			case GAMEOPT_AUTOSAVE_BTN: // Autosave options
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10708
diff changeset
   293
				_settings_client.gui.autosave = index;
10614
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   294
				this->SetDirty();
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   295
				break;
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   296
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   297
			case GAMEOPT_LANG_BTN: // Change interface language
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   298
				ReadLanguagePack(index);
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   299
				CheckForMissingGlyphsInLoadedLanguagePack();
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   300
				UpdateAllStationVirtCoord();
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   301
				UpdateAllWaypointSigns();
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   302
				MarkWholeScreenDirty();
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   303
				break;
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   304
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   305
			case GAMEOPT_RESOLUTION_BTN: // Change resolution
10983
e734f891d1f6 (svn r13537) -Fix [FS#2090](r13523): QSortT won't work this way, use Dimension instead of uint16[2] for resolutions
smatz
parents: 10835
diff changeset
   306
				if (index < _num_resolutions && ChangeResInGame(_resolutions[index].width, _resolutions[index].height)) {
10614
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   307
					this->SetDirty();
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   308
				}
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   309
				break;
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   310
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   311
			case GAMEOPT_SCREENSHOT_BTN: // Change screenshot format
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   312
				SetScreenshotFormat(index);
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   313
				this->SetDirty();
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   314
				break;
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   315
		}
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
diff changeset
   316
	}
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
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[] = {
4344
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
   320
{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,                          STR_018B_CLOSE_WINDOW},
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
   321
{    WWT_CAPTION,   RESIZE_NONE,    14,    11,   369,     0,    13, STR_00B1_GAME_OPTIONS,             STR_018C_WINDOW_TITLE_DRAG_THIS},
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
   322
{      WWT_PANEL,   RESIZE_NONE,    14,     0,   369,    14,   238, 0x0,                               STR_NULL},
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
   323
{      WWT_FRAME,   RESIZE_NONE,    14,    10,   179,    20,    55, STR_02E0_CURRENCY_UNITS,           STR_NULL},
8832
e1fcfd2e6d75 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8819
diff changeset
   324
{ WWT_DROPDOWNIN,   RESIZE_NONE,    14,    20,   169,    34,    45, STR_02E1,                          STR_02E2_CURRENCY_UNITS_SELECTION},
4344
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
   325
{      WWT_FRAME,   RESIZE_NONE,    14,   190,   359,    20,    55, STR_MEASURING_UNITS,               STR_NULL},
8832
e1fcfd2e6d75 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8819
diff changeset
   326
{ WWT_DROPDOWNIN,   RESIZE_NONE,    14,   200,   349,    34,    45, STR_02E4,                          STR_MEASURING_UNITS_SELECTION},
4344
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
   327
{      WWT_FRAME,   RESIZE_NONE,    14,    10,   179,    62,    97, STR_02E6_ROAD_VEHICLES,            STR_NULL},
8832
e1fcfd2e6d75 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8819
diff changeset
   328
{ WWT_DROPDOWNIN,   RESIZE_NONE,    14,    20,   169,    76,    87, STR_02E7,                          STR_02E8_SELECT_SIDE_OF_ROAD_FOR},
4344
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
   329
{      WWT_FRAME,   RESIZE_NONE,    14,   190,   359,    62,    97, STR_02EB_TOWN_NAMES,               STR_NULL},
8832
e1fcfd2e6d75 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8819
diff changeset
   330
{ WWT_DROPDOWNIN,   RESIZE_NONE,    14,   200,   349,    76,    87, STR_02EC,                          STR_02ED_SELECT_STYLE_OF_TOWN_NAMES},
4344
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
   331
{      WWT_FRAME,   RESIZE_NONE,    14,    10,   179,   104,   139, STR_02F4_AUTOSAVE,                 STR_NULL},
8832
e1fcfd2e6d75 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8819
diff changeset
   332
{ WWT_DROPDOWNIN,   RESIZE_NONE,    14,    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
4344
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
   334
{      WWT_FRAME,   RESIZE_NONE,    14,    10,   359,   194,   228, STR_02BC_VEHICLE_DESIGN_NAMES,     STR_NULL},
8832
e1fcfd2e6d75 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8819
diff changeset
   335
{ WWT_DROPDOWNIN,   RESIZE_NONE,    14,    20,   119,   207,   218, STR_02BD,                          STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION},
4344
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
   336
{    WWT_TEXTBTN,   RESIZE_NONE,    14,   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
4344
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
   338
{      WWT_FRAME,   RESIZE_NONE,    14,   190,   359,   104,   139, STR_OPTIONS_LANG,                  STR_NULL},
8832
e1fcfd2e6d75 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8819
diff changeset
   339
{ WWT_DROPDOWNIN,   RESIZE_NONE,    14,   200,   349,   118,   129, STR_OPTIONS_LANG_CBO,              STR_OPTIONS_LANG_TIP},
298
b3e83b94be19 (svn r304) -Fix: [967096] fullscreen. New button 'Fullscreen' in 'Game Options' menu which lets you set fullscreen ingame.
darkvater
parents: 193
diff changeset
   340
4344
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
   341
{      WWT_FRAME,   RESIZE_NONE,    14,    10,   179,   146,   190, STR_OPTIONS_RES,                   STR_NULL},
8832
e1fcfd2e6d75 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8819
diff changeset
   342
{ WWT_DROPDOWNIN,   RESIZE_NONE,    14,    20,   169,   160,   171, STR_OPTIONS_RES_CBO,               STR_OPTIONS_RES_TIP},
4344
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
   343
{    WWT_TEXTBTN,   RESIZE_NONE,    14,   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
4344
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
   345
{      WWT_FRAME,   RESIZE_NONE,    14,   190,   359,   146,   190, STR_OPTIONS_SCREENSHOT_FORMAT,     STR_NULL},
8832
e1fcfd2e6d75 (svn r11902) -Codechange: use new dropdown widget for game options window
peter1138
parents: 8819
diff changeset
   346
{ WWT_DROPDOWNIN,   RESIZE_NONE,    14,   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 = {
7837
65d7362153a6 (svn r10704) -Codechange: provide an infrastructure to have resizable windows that are smaller than the default window size.
rubidium
parents: 7673
diff changeset
   352
	WDP_CENTER, WDP_CENTER, 370, 239, 370, 239,
6144
5a0ffbf27ced (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5939
diff changeset
   353
	WC_GAME_OPTIONS, WC_NONE,
2064
c889fcc76398 (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
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6338
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);
10614
04d1add9e12d (svn r13158) -Codechange: make a class of the GameOptionsWindow.
rubidium
parents: 10595
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
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6338
diff changeset
   365
extern void StartupEconomy();
46
c9bdf1d58df6 (svn r47) -Fix StartupEconomy warning in settings_gui.c
darkvater
parents: 42
diff changeset
   366
8632
f407b7a80d2d (svn r11698) -Change: Make the abort/accept process of the difficulty window a bit less confusing
skidd13
parents: 8627
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[] = {
8632
f407b7a80d2d (svn r11698) -Change: Make the abort/accept process of the difficulty window a bit less confusing
skidd13
parents: 8627
diff changeset
   369
{   WWT_CLOSEBOX,   RESIZE_NONE,    10,     0,    10,     0,    13, STR_00C5,                     STR_018B_CLOSE_WINDOW},           // GDW_CLOSEBOX
f407b7a80d2d (svn r11698) -Change: Make the abort/accept process of the difficulty window a bit less confusing
skidd13
parents: 8627
diff changeset
   370
{    WWT_CAPTION,   RESIZE_NONE,    10,    11,   369,     0,    13, STR_6800_DIFFICULTY_LEVEL,    STR_018C_WINDOW_TITLE_DRAG_THIS}, // GDW_CAPTION
f407b7a80d2d (svn r11698) -Change: Make the abort/accept process of the difficulty window a bit less confusing
skidd13
parents: 8627
diff changeset
   371
{      WWT_PANEL,   RESIZE_NONE,    10,     0,   369,    14,    41, 0x0,                          STR_NULL},                        // GDW_UPPER_BG
f407b7a80d2d (svn r11698) -Change: Make the abort/accept process of the difficulty window a bit less confusing
skidd13
parents: 8627
diff changeset
   372
{ WWT_PUSHTXTBTN,   RESIZE_NONE,     3,    10,    96,    16,    27, STR_6801_EASY,                STR_NULL},                        // GDW_LVL_EASY
f407b7a80d2d (svn r11698) -Change: Make the abort/accept process of the difficulty window a bit less confusing
skidd13
parents: 8627
diff changeset
   373
{ WWT_PUSHTXTBTN,   RESIZE_NONE,     3,    97,   183,    16,    27, STR_6802_MEDIUM,              STR_NULL},                        // GDW_LVL_MEDIUM
f407b7a80d2d (svn r11698) -Change: Make the abort/accept process of the difficulty window a bit less confusing
skidd13
parents: 8627
diff changeset
   374
{ WWT_PUSHTXTBTN,   RESIZE_NONE,     3,   184,   270,    16,    27, STR_6803_HARD,                STR_NULL},                        // GDW_LVL_HARD
f407b7a80d2d (svn r11698) -Change: Make the abort/accept process of the difficulty window a bit less confusing
skidd13
parents: 8627
diff changeset
   375
{ WWT_PUSHTXTBTN,   RESIZE_NONE,     3,   271,   357,    16,    27, STR_6804_CUSTOM,              STR_NULL},                        // GDW_LVL_CUSTOM
f407b7a80d2d (svn r11698) -Change: Make the abort/accept process of the difficulty window a bit less confusing
skidd13
parents: 8627
diff changeset
   376
{    WWT_TEXTBTN,   RESIZE_NONE,     6,    10,   357,    28,    39, STR_6838_SHOW_HI_SCORE_CHART, STR_NULL},                        // GDW_HIGHSCORE
f407b7a80d2d (svn r11698) -Change: Make the abort/accept process of the difficulty window a bit less confusing
skidd13
parents: 8627
diff changeset
   377
{      WWT_PANEL,   RESIZE_NONE,    10,     0,   369,    42,   262, 0x0,                          STR_NULL},                        // GDW_SETTING_BG
f407b7a80d2d (svn r11698) -Change: Make the abort/accept process of the difficulty window a bit less confusing
skidd13
parents: 8627
diff changeset
   378
{      WWT_PANEL,   RESIZE_NONE,    10,     0,   369,   263,   278, 0x0,                          STR_NULL},                        // GDW_LOWER_BG
f407b7a80d2d (svn r11698) -Change: Make the abort/accept process of the difficulty window a bit less confusing
skidd13
parents: 8627
diff changeset
   379
{ WWT_PUSHTXTBTN,   RESIZE_NONE,     3,   105,   185,   265,   276, STR_OPTIONS_SAVE_CHANGES,     STR_NULL},                        // GDW_ACCEPT
f407b7a80d2d (svn r11698) -Change: Make the abort/accept process of the difficulty window a bit less confusing
skidd13
parents: 8627
diff changeset
   380
{ WWT_PUSHTXTBTN,   RESIZE_NONE,     3,   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
8632
f407b7a80d2d (svn r11698) -Change: Make the abort/accept process of the difficulty window a bit less confusing
skidd13
parents: 8627
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 = {
7837
65d7362153a6 (svn r10704) -Codechange: provide an infrastructure to have resizable windows that are smaller than the default window size.
rubidium
parents: 7673
diff changeset
   386
	WDP_CENTER, WDP_CENTER, 370, 279, 370, 279,
6144
5a0ffbf27ced (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5939
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,
10553
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   390
};
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   391
10708
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   392
void SetDifficultyLevel(int mode, DifficultySettings *gm_opt);
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   393
10553
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   394
struct GameDifficultyWindow : public Window {
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   395
private:
10708
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   396
	static const uint GAME_DIFFICULTY_NUM = 18;
10553
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   397
	bool clicked_increase;
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   398
	uint8 clicked_button;
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   399
	uint8 timeout;
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   400
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   401
	/* Temporary holding place of values in the difficulty window until 'Save' is clicked */
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10708
diff changeset
   402
	GameSettings opt_mod_temp;
10553
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   403
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   404
	enum {
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   405
		GAMEDIFF_WND_TOP_OFFSET = 45,
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   406
		GAMEDIFF_WND_ROWSIZE    = 9,
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   407
		NO_SETTINGS_BUTTON = 0xFF,
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   408
	};
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   409
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   410
	/* Names of the game difficulty settings window */
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   411
	enum GameDifficultyWidgets {
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   412
		GDW_CLOSEBOX = 0,
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   413
		GDW_CAPTION,
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   414
		GDW_UPPER_BG,
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   415
		GDW_LVL_EASY,
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   416
		GDW_LVL_MEDIUM,
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   417
		GDW_LVL_HARD,
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   418
		GDW_LVL_CUSTOM,
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   419
		GDW_HIGHSCORE,
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   420
		GDW_SETTING_BG,
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   421
		GDW_LOWER_BG,
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   422
		GDW_ACCEPT,
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   423
		GDW_CANCEL,
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   424
	};
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   425
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   426
public:
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   427
	GameDifficultyWindow() : Window(&_game_difficulty_desc)
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   428
	{
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   429
		/* Copy current settings (ingame or in intro) to temporary holding place
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   430
		 * change that when setting stuff, copy back on clicking 'OK' */
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10708
diff changeset
   431
		this->opt_mod_temp = (_game_mode == GM_MENU) ? _settings_newgame : _settings_game;
10553
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   432
		this->clicked_increase = false;
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   433
		this->clicked_button = NO_SETTINGS_BUTTON;
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   434
		this->timeout = 0;
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   435
		/* Hide the closebox to make sure that the user aborts or confirms his changes */
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   436
		this->HideWidget(GDW_CLOSEBOX);
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   437
		this->widget[GDW_CAPTION].left = 0;
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   438
		/* Setup disabled buttons when creating window
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   439
		 * disable all other difficulty buttons during gameplay except for 'custom' */
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   440
		this->SetWidgetsDisabledState(_game_mode == GM_NORMAL,
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   441
			GDW_LVL_EASY,
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   442
			GDW_LVL_MEDIUM,
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   443
			GDW_LVL_HARD,
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   444
			GDW_LVL_CUSTOM,
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   445
			WIDGET_LIST_END);
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   446
		this->SetWidgetDisabledState(GDW_HIGHSCORE, _game_mode == GM_EDITOR || _networking); // highscore chart in multiplayer
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   447
		this->SetWidgetDisabledState(GDW_ACCEPT, _networking && !_network_server); // Save-button in multiplayer (and if client)
10708
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   448
		this->LowerWidget(GDW_LVL_EASY + this->opt_mod_temp.difficulty.diff_level);
10553
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   449
		this->FindWindowPlacementAndResize(&_game_difficulty_desc);
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   450
	}
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   451
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   452
	virtual void OnPaint()
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   453
	{
10595
7957c71b0dfe (svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium
parents: 10568
diff changeset
   454
		this->DrawWidgets();
10553
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   455
10708
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   456
		uint i;
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   457
		const SettingDesc *sd = GetPatchFromName("difficulty.max_no_competitors", &i);
10553
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   458
		int y = GAMEDIFF_WND_TOP_OFFSET;
10708
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   459
		for (i = 0; i < GAME_DIFFICULTY_NUM; i++, sd++) {
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   460
			const SettingDescBase *sdb = &sd->desc;
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   461
			int32 value = (int32)ReadValue(GetVariableAddress(&this->opt_mod_temp, &sd->save), sd->save.conv);
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   462
			bool editable = (_game_mode == GM_MENU || (sdb->flags & SGF_NEWGAME_ONLY) == 0);
10553
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   463
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   464
			DrawArrowButtons(5, y, 3,
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   465
					(this->clicked_button == i) ? 1 + !!this->clicked_increase : 0,
10708
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   466
					editable && sdb->min != value,
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   467
					editable && sdb->max != value);
10553
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   468
10708
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   469
			value += sdb->str;
10553
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   470
			SetDParam(0, value);
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   471
			DrawString(30, y, STR_6805_MAXIMUM_NO_COMPETITORS + i, TC_FROMSTRING);
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   472
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   473
			y += GAMEDIFF_WND_ROWSIZE + 2; // space items apart a bit
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   474
		}
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   475
	}
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   476
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   477
	virtual void OnClick(Point pt, int widget)
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   478
	{
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   479
		switch (widget) {
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   480
			case GDW_SETTING_BG: { /* Difficulty settings widget, decode click */
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   481
				/* Don't allow clients to make any changes */
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   482
				if (_networking && !_network_server) return;
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   483
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   484
				const int x = pt.x - 5;
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   485
				if (!IsInsideMM(x, 0, 21)) return; // Button area
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   486
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   487
				const int y = pt.y - GAMEDIFF_WND_TOP_OFFSET;
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   488
				if (y < 0) return;
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   489
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   490
				/* Get button from Y coord. */
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   491
				const uint8 btn = y / (GAMEDIFF_WND_ROWSIZE + 2);
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   492
				if (btn >= GAME_DIFFICULTY_NUM || y % (GAMEDIFF_WND_ROWSIZE + 2) >= 9) return;
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   493
10708
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   494
				uint i;
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   495
				const SettingDesc *sd = GetPatchFromName("difficulty.max_no_competitors", &i) + btn;
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   496
				const SettingDescBase *sdb = &sd->desc;
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   497
10553
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   498
				/* Clicked disabled button? */
10708
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   499
				bool editable = (_game_mode == GM_MENU || (sdb->flags & SGF_NEWGAME_ONLY) == 0);
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   500
				if (!editable) return;
10553
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   501
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   502
				this->timeout = 5;
10708
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   503
				int32 val = (int32)ReadValue(GetVariableAddress(&this->opt_mod_temp, &sd->save), sd->save.conv);
10553
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   504
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   505
				if (x >= 10) {
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   506
					/* Increase button clicked */
10708
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   507
					val = min(val + sdb->interval, sdb->max);
10553
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   508
					this->clicked_increase = true;
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   509
				} else {
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   510
					/* Decrease button clicked */
10708
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   511
					val -= sdb->interval;
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   512
					val = max(val, sdb->min);
10553
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   513
					this->clicked_increase = false;
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   514
				}
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   515
				this->clicked_button = btn;
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   516
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   517
				/* save value in temporary variable */
10708
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   518
				WriteValue(GetVariableAddress(&this->opt_mod_temp, &sd->save), sd->save.conv, val);
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   519
				this->RaiseWidget(GDW_LVL_EASY + this->opt_mod_temp.difficulty.diff_level);
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   520
				SetDifficultyLevel(3, &this->opt_mod_temp.difficulty); // set difficulty level to custom
10553
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   521
				this->LowerWidget(GDW_LVL_CUSTOM);
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   522
				this->SetDirty();
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   523
			} break;
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   524
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   525
			case GDW_LVL_EASY:
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   526
			case GDW_LVL_MEDIUM:
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   527
			case GDW_LVL_HARD:
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   528
			case GDW_LVL_CUSTOM:
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   529
				/* temporarily change difficulty level */
10708
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   530
				this->RaiseWidget(GDW_LVL_EASY + this->opt_mod_temp.difficulty.diff_level);
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   531
				SetDifficultyLevel(widget - GDW_LVL_EASY, &this->opt_mod_temp.difficulty);
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   532
				this->LowerWidget(GDW_LVL_EASY + this->opt_mod_temp.difficulty.diff_level);
10553
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   533
				this->SetDirty();
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   534
				break;
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   535
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   536
			case GDW_HIGHSCORE: // Highscore Table
10708
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   537
				ShowHighscoreTable(this->opt_mod_temp.difficulty.diff_level, -1);
10553
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   538
				break;
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   539
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   540
			case GDW_ACCEPT: { // Save button - save changes
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10708
diff changeset
   541
				GameSettings *opt_ptr = (_game_mode == GM_MENU) ? &_settings_newgame : &_settings_game;
10708
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   542
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   543
				uint i;
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   544
				const SettingDesc *sd = GetPatchFromName("difficulty.max_no_competitors", &i);
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   545
				for (uint btn = 0; btn != GAME_DIFFICULTY_NUM; btn++, sd++) {
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   546
					int32 new_val = (int32)ReadValue(GetVariableAddress(&this->opt_mod_temp, &sd->save), sd->save.conv);
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   547
					int32 cur_val = (int32)ReadValue(GetVariableAddress(opt_ptr, &sd->save), sd->save.conv);
10553
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   548
					/* if setting has changed, change it */
10708
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   549
					if (new_val != cur_val) {
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   550
						DoCommandP(0, i + btn, new_val, NULL, CMD_CHANGE_PATCH_SETTING);
10695
95e0154da7a0 (svn r13242) -Codechange: remove _opt_ptr.
rubidium
parents: 10682
diff changeset
   551
					}
10553
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   552
				}
10708
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   553
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   554
				GetPatchFromName("difficulty.diff_level", &i);
5f1e9cffcfa5 (svn r13256) -Codechange: merge the OPTS and PATS chuncks.
rubidium
parents: 10707
diff changeset
   555
				DoCommandP(0, i, this->opt_mod_temp.difficulty.diff_level, NULL, CMD_CHANGE_PATCH_SETTING);
10553
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   556
				delete this;
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   557
				/* If we are in the editor, we should reload the economy.
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   558
				 * This way when you load a game, the max loan and interest rate
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   559
				 * are loaded correctly. */
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   560
				if (_game_mode == GM_EDITOR) StartupEconomy();
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   561
				break;
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   562
			}
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   563
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   564
			case GDW_CANCEL: // Cancel button - close window, abandon changes
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   565
				delete this;
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   566
				break;
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   567
		}
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   568
	}
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   569
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   570
	virtual void OnTick()
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   571
	{
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   572
		if (this->timeout != 0) {
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   573
			this->timeout--;
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   574
			if (this->timeout == 0) this->clicked_button = NO_SETTINGS_BUTTON;
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   575
			this->SetDirty();
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
diff changeset
   576
		}
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
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
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6338
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);
10553
cbcc7a6cf46f (svn r13097) -Codechange: make a class of the GameDifficultyWindow.
glx
parents: 10484
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
4e70e64adbb8 (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[] = {
10703
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   587
	"gui.vehicle_speed",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   588
	"gui.status_long_date",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   589
	"gui.show_finances",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   590
	"gui.autoscroll",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   591
	"gui.reverse_scroll",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   592
	"gui.smooth_scroll",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   593
	"gui.errmsg_duration",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   594
	"gui.toolbar_pos",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   595
	"gui.measure_tooltip",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   596
	"gui.window_snap_radius",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   597
	"gui.population_in_label",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   598
	"gui.link_terraform_toolbar",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   599
	"gui.liveries",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   600
	"gui.prefer_teamchat",
6615
96d30d65ed35 (svn r9111) -Feature: [OSX] mighty mice and touchpads can now scroll the map (in all directions)
bjarni
parents: 6585
diff changeset
   601
	/* While the horizontal scrollwheel scrolling is written as general code, only
96d30d65ed35 (svn r9111) -Feature: [OSX] mighty mice and touchpads can now scroll the map (in all directions)
bjarni
parents: 6585
diff changeset
   602
	 *  the cocoa (OSX) driver generates input for it.
6622
2ce7ffa9db00 (svn r9126) -Feature: "Function of scrollwheel" can now be set to off as well
bjarni
parents: 6619
diff changeset
   603
	 *  Since it's also able to completely disable the scrollwheel will we display it on all platforms anyway */
10703
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   604
	"gui.scrollwheel_scrolling",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   605
	"gui.scrollwheel_multiplier",
7981
506461241c0e (svn r10996) -Feature: [OSX] added more options for right click emulation (controlled from the interface tab in the patch window)
bjarni
parents: 7837
diff changeset
   606
#ifdef __APPLE__
506461241c0e (svn r10996) -Feature: [OSX] added more options for right click emulation (controlled from the interface tab in the patch window)
bjarni
parents: 7837
diff changeset
   607
	/* We might need to emulate a right mouse button on mac */
10703
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   608
	"gui.right_mouse_btn_emulation",
7981
506461241c0e (svn r10996) -Feature: [OSX] added more options for right click emulation (controlled from the interface tab in the patch window)
bjarni
parents: 7837
diff changeset
   609
#endif
10703
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   610
	"gui.pause_on_newgame",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   611
	"gui.advanced_vehicle_list",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   612
	"gui.loading_indicators",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   613
	"gui.timetable_in_ticks",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   614
	"gui.default_rail_type",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   615
	"gui.always_build_infrastructure",
21
67cde01e8359 (svn r22) Add: Competitors menu under patches
truelight
parents: 20
diff changeset
   616
};
67cde01e8359 (svn r22) Add: Competitors menu under patches
truelight
parents: 20
diff changeset
   617
3247
4e70e64adbb8 (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
   618
static const char *_patches_construction[] = {
10703
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   619
	"construction.build_on_slopes",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   620
	"construction.autoslope",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   621
	"construction.extra_dynamite",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   622
	"construction.longbridges",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   623
	"construction.signal_side",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   624
	"station.always_small_airport",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   625
	"gui.enable_signal_gui",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   626
	"gui.drag_signals_density",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   627
	"game_creation.oil_refinery_limit",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   628
	"gui.semaphore_build_before",
3247
4e70e64adbb8 (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
   629
};
4e70e64adbb8 (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
   630
4e70e64adbb8 (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
   631
static const char *_patches_stations[] = {
10703
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   632
	"station.join_stations",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   633
	"order.improved_load",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   634
	"order.selectgoods",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   635
	"gui.new_nonstop",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   636
	"station.nonuniform_stations",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   637
	"station.station_spread",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   638
	"order.serviceathelipad",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   639
	"station.modified_catchment",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   640
	"order.gradual_loading",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   641
	"construction.road_stop_on_town_road",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   642
	"station.adjacent_stations",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   643
	"economy.station_noise_level",
3247
4e70e64adbb8 (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
   644
};
4e70e64adbb8 (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
   645
4e70e64adbb8 (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
   646
static const char *_patches_economy[] = {
10703
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   647
	"economy.inflation",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   648
	"construction.raw_industry_construction",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   649
	"economy.multiple_industry_per_town",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   650
	"economy.same_industry_close",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   651
	"economy.bribe",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   652
	"economy.exclusive_rights",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   653
	"economy.give_money",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   654
	"gui.colored_news_year",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   655
	"gui.ending_year",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   656
	"economy.smooth_economy",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   657
	"economy.allow_shares",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   658
	"economy.town_layout",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   659
	"economy.mod_road_rebuild",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   660
	"economy.town_growth_rate",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   661
	"economy.larger_towns",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   662
	"economy.initial_city_size",
3247
4e70e64adbb8 (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
   663
};
4e70e64adbb8 (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
   664
4e70e64adbb8 (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
   665
static const char *_patches_ai[] = {
10703
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   666
	"ai.ainew_active",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   667
	"ai.ai_in_multiplayer",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   668
	"ai.ai_disable_veh_train",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   669
	"ai.ai_disable_veh_roadveh",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   670
	"ai.ai_disable_veh_aircraft",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   671
	"ai.ai_disable_veh_ship",
3247
4e70e64adbb8 (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
   672
};
4e70e64adbb8 (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
   673
4e70e64adbb8 (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
   674
static const char *_patches_vehicles[] = {
10703
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   675
	"vehicle.realistic_acceleration",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   676
	"pf.forbid_90_deg",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   677
	"vehicle.mammoth_trains",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   678
	"order.gotodepot",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   679
	"pf.roadveh_queue",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   680
	"pf.pathfinder_for_trains",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   681
	"pf.pathfinder_for_roadvehs",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   682
	"pf.pathfinder_for_ships",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   683
	"gui.train_income_warn",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   684
	"gui.order_review_system",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   685
	"vehicle.never_expire_vehicles",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   686
	"gui.lost_train_warn",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   687
	"gui.autorenew",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   688
	"gui.autorenew_months",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   689
	"gui.autorenew_money",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   690
	"vehicle.max_trains",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   691
	"vehicle.max_roadveh",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   692
	"vehicle.max_aircraft",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   693
	"vehicle.max_ships",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   694
	"vehicle.servint_ispercent",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   695
	"vehicle.servint_trains",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   696
	"vehicle.servint_roadveh",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   697
	"vehicle.servint_ships",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   698
	"vehicle.servint_aircraft",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   699
	"order.no_servicing_if_no_breakdowns",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   700
	"vehicle.wagon_speed_limits",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   701
	"vehicle.disable_elrails",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   702
	"vehicle.freight_trains",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   703
	"vehicle.plane_speed",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   704
	"order.timetabling",
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10695
diff changeset
   705
	"vehicle.dynamic_engines",
3247
4e70e64adbb8 (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
   706
};
4e70e64adbb8 (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
   707
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
   708
struct PatchEntry {
3247
4e70e64adbb8 (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
	const SettingDesc *setting;
4e70e64adbb8 (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
	uint index;
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
   711
};
3247
4e70e64adbb8 (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
   712
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
   713
struct PatchPage {
3247
4e70e64adbb8 (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
   714
	const char **names;
4e70e64adbb8 (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
   715
	PatchEntry *entries;
3118
99926945ccb1 (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
   716
	byte num;
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
   717
};
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   718
3247
4e70e64adbb8 (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
   719
/* PatchPage holds the categories, the number of elements in each category
4e70e64adbb8 (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
   720
 * and (in NULL) a dynamic array of settings based on the string-representations
4e70e64adbb8 (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
   721
 * of the settings. This way there is no worry about indeces, and such */
4e70e64adbb8 (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
   722
static PatchPage _patches_page[] = {
4e70e64adbb8 (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
   723
	{_patches_ui,           NULL, lengthof(_patches_ui)},
4e70e64adbb8 (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
   724
	{_patches_construction, NULL, lengthof(_patches_construction)},
4e70e64adbb8 (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
   725
	{_patches_vehicles,     NULL, lengthof(_patches_vehicles)},
4e70e64adbb8 (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
   726
	{_patches_stations,     NULL, lengthof(_patches_stations)},
4e70e64adbb8 (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
   727
	{_patches_economy,      NULL, lengthof(_patches_economy)},
4e70e64adbb8 (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
   728
	{_patches_ai,           NULL, lengthof(_patches_ai)},
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   729
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   730
8684
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
   731
enum PatchesSelectionWidgets {
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
   732
	PATCHSEL_OPTIONSPANEL = 3,
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
   733
	PATCHSEL_INTERFACE,
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
   734
	PATCHSEL_CONSTRUCTION,
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
   735
	PATCHSEL_VEHICLES,
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
   736
	PATCHSEL_STATIONS,
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
   737
	PATCHSEL_ECONOMY,
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
   738
	PATCHSEL_COMPETITORS
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
   739
};
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
   740
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   741
struct PatchesSelectionWindow : Window {
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10708
diff changeset
   742
	static GameSettings *patches_ptr;
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   743
	static int patches_max;
3118
99926945ccb1 (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
   744
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   745
	int page;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   746
	int entry;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   747
	int click;
8686
b1d73ae17e19 (svn r11753) -Codechange: re-indent the switch case structures, as to be more code style oriented.
belugas
parents: 8685
diff changeset
   748
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   749
	PatchesSelectionWindow(const WindowDesc *desc) : Window(desc)
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   750
	{
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   751
		static bool first_time = true;
8686
b1d73ae17e19 (svn r11753) -Codechange: re-indent the switch case structures, as to be more code style oriented.
belugas
parents: 8685
diff changeset
   752
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10708
diff changeset
   753
		patches_ptr = (_game_mode == GM_MENU) ? &_settings_newgame : &_settings_game;
8686
b1d73ae17e19 (svn r11753) -Codechange: re-indent the switch case structures, as to be more code style oriented.
belugas
parents: 8685
diff changeset
   754
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   755
		/* Build up the dynamic settings-array only once per OpenTTD session */
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   756
		if (first_time) {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   757
			PatchPage *page;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   758
			for (page = &_patches_page[0]; page != endof(_patches_page); page++) {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   759
				uint i;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   760
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   761
				if (patches_max < page->num) patches_max = page->num;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   762
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   763
				page->entries = MallocT<PatchEntry>(page->num);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   764
				for (i = 0; i != page->num; i++) {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   765
					uint index;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   766
					const SettingDesc *sd = GetPatchFromName(page->names[i], &index);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   767
					assert(sd != NULL);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   768
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   769
					page->entries[i].setting = sd;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   770
					page->entries[i].index = index;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   771
				}
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   772
			}
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   773
			first_time = false;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   774
		}
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   775
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   776
		/* Resize the window to fit the largest patch tab */
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   777
		ResizeWindowForWidget(this, PATCHSEL_OPTIONSPANEL, 0, patches_max * 11);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   778
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   779
		/* Recentre the window for the new size */
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   780
		this->top = this->top - (patches_max * 11) / 2;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   781
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   782
		this->LowerWidget(4);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   783
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   784
		this->FindWindowPlacementAndResize(desc);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   785
	}
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   786
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   787
	virtual void OnPaint()
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   788
	{
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   789
		int x, y;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   790
		const PatchPage *page = &_patches_page[this->page];
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   791
		uint i;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   792
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   793
		/* Set up selected category */
10595
7957c71b0dfe (svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium
parents: 10568
diff changeset
   794
		this->DrawWidgets();
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   795
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   796
		x = 5;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   797
		y = 47;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   798
		for (i = 0; i != page->num; i++) {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   799
			const SettingDesc *sd = page->entries[i].setting;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   800
			const SettingDescBase *sdb = &sd->desc;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   801
			const void *var = GetVariableAddress(patches_ptr, &sd->save);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   802
			bool editable = true;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   803
			bool disabled = false;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   804
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   805
			// We do not allow changes of some items when we are a client in a networkgame
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   806
			if (!(sd->save.conv & SLF_NETWORK_NO) && _networking && !_network_server) editable = false;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   807
			if ((sdb->flags & SGF_NETWORK_ONLY) && !_networking) editable = false;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   808
			if ((sdb->flags & SGF_NO_NETWORK) && _networking) editable = false;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   809
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   810
			if (sdb->cmd == SDT_BOOLX) {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   811
				static const int _bool_ctabs[2][2] = {{9, 4}, {7, 6}};
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   812
				/* Draw checkbox for boolean-value either on/off */
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   813
				bool on = (*(bool*)var);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   814
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   815
				DrawFrameRect(x, y, x + 19, y + 8, _bool_ctabs[!!on][!!editable], on ? FR_LOWERED : FR_NONE);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   816
				SetDParam(0, on ? STR_CONFIG_PATCHES_ON : STR_CONFIG_PATCHES_OFF);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   817
			} else {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   818
				int32 value;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   819
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   820
				value = (int32)ReadValue(var, sd->save.conv);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   821
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   822
				/* Draw [<][>] boxes for settings of an integer-type */
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   823
				DrawArrowButtons(x, y, 3, this->click - (i * 2), (editable && value != sdb->min), (editable && value != sdb->max));
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   824
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   825
				disabled = (value == 0) && (sdb->flags & SGF_0ISDISABLED);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   826
				if (disabled) {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   827
					SetDParam(0, STR_CONFIG_PATCHES_DISABLED);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   828
				} else {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   829
					if (sdb->flags & SGF_CURRENCY) {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   830
						SetDParam(0, STR_CONFIG_PATCHES_CURRENCY);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   831
					} else if (sdb->flags & SGF_MULTISTRING) {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   832
						SetDParam(0, sdb->str + value + 1);
8686
b1d73ae17e19 (svn r11753) -Codechange: re-indent the switch case structures, as to be more code style oriented.
belugas
parents: 8685
diff changeset
   833
					} else {
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   834
						SetDParam(0, (sdb->flags & SGF_NOCOMMA) ? STR_CONFIG_PATCHES_INT32 : STR_7024);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   835
					}
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   836
					SetDParam(1, value);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   837
				}
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   838
			}
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   839
			DrawString(30, y, (sdb->str) + disabled, TC_FROMSTRING);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   840
			y += 11;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   841
		}
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   842
	}
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   843
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   844
	virtual void OnClick(Point pt, int widget)
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   845
	{
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   846
		switch (widget) {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   847
			case PATCHSEL_OPTIONSPANEL: {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   848
				const PatchPage *page = &_patches_page[this->page];
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   849
				const SettingDesc *sd;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   850
				void *var;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   851
				int32 value;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   852
				int x, y;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   853
				byte btn;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   854
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   855
				y = pt.y - 46 - 1;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   856
				if (y < 0) return;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   857
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   858
				x = pt.x - 5;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   859
				if (x < 0) return;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   860
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   861
				btn = y / 11;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   862
				if (y % 11 > 9) return;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   863
				if (btn >= page->num) return;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   864
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   865
				sd = page->entries[btn].setting;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   866
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   867
				/* return if action is only active in network, or only settable by server */
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   868
				if (!(sd->save.conv & SLF_NETWORK_NO) && _networking && !_network_server) return;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   869
				if ((sd->desc.flags & SGF_NETWORK_ONLY) && !_networking) return;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   870
				if ((sd->desc.flags & SGF_NO_NETWORK) && _networking) return;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   871
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   872
				var = GetVariableAddress(patches_ptr, &sd->save);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   873
				value = (int32)ReadValue(var, sd->save.conv);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   874
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   875
				/* clicked on the icon on the left side. Either scroller or bool on/off */
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   876
				if (x < 21) {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   877
					const SettingDescBase *sdb = &sd->desc;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   878
					int32 oldvalue = value;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   879
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   880
					switch (sdb->cmd) {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   881
					case SDT_BOOLX: value ^= 1; break;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   882
					case SDT_NUMX: {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   883
						/* Add a dynamic step-size to the scroller. In a maximum of
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   884
							* 50-steps you should be able to get from min to max,
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   885
							* unless specified otherwise in the 'interval' variable
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   886
							* of the current patch. */
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   887
						uint32 step = (sdb->interval == 0) ? ((sdb->max - sdb->min) / 50) : sdb->interval;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   888
						if (step == 0) step = 1;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   889
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   890
						// don't allow too fast scrolling
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   891
						if ((this->flags4 & WF_TIMEOUT_MASK) > 2 << WF_TIMEOUT_SHL) {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   892
							_left_button_clicked = false;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   893
							return;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   894
						}
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   895
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   896
						/* Increase or decrease the value and clamp it to extremes */
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   897
						if (x >= 10) {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   898
							value += step;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   899
							if (value > sdb->max) value = sdb->max;
8686
b1d73ae17e19 (svn r11753) -Codechange: re-indent the switch case structures, as to be more code style oriented.
belugas
parents: 8685
diff changeset
   900
						} else {
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   901
							value -= step;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   902
							if (value < sdb->min) value = (sdb->flags & SGF_0ISDISABLED) ? 0 : sdb->min;
8686
b1d73ae17e19 (svn r11753) -Codechange: re-indent the switch case structures, as to be more code style oriented.
belugas
parents: 8685
diff changeset
   903
						}
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   904
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   905
						/* Set up scroller timeout for numeric values */
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   906
						if (value != oldvalue && !(sd->desc.flags & SGF_MULTISTRING)) {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   907
							this->click = btn * 2 + 1 + ((x >= 10) ? 1 : 0);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   908
							this->flags4 |= 5 << WF_TIMEOUT_SHL;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   909
							_left_button_clicked = false;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   910
						}
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   911
					} break;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   912
					default: NOT_REACHED();
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   913
					}
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   914
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   915
					if (value != oldvalue) {
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10708
diff changeset
   916
						SetPatchValue(page->entries[btn].index, value);
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   917
						this->SetDirty();
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   918
					}
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   919
				} else {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   920
					/* only open editbox for types that its sensible for */
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   921
					if (sd->desc.cmd != SDT_BOOLX && !(sd->desc.flags & SGF_MULTISTRING)) {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   922
						/* Show the correct currency-translated value */
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   923
						if (sd->desc.flags & SGF_CURRENCY) value *= _currency->rate;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   924
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   925
						this->entry = btn;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   926
						SetDParam(0, value);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   927
						ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_CONFIG_PATCHES_QUERY_CAPT, 10, 100, this, CS_NUMERAL);
8686
b1d73ae17e19 (svn r11753) -Codechange: re-indent the switch case structures, as to be more code style oriented.
belugas
parents: 8685
diff changeset
   928
					}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   929
				}
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   930
			} break;
8686
b1d73ae17e19 (svn r11753) -Codechange: re-indent the switch case structures, as to be more code style oriented.
belugas
parents: 8685
diff changeset
   931
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   932
			case PATCHSEL_INTERFACE: case PATCHSEL_CONSTRUCTION: case PATCHSEL_VEHICLES:
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   933
			case PATCHSEL_STATIONS:  case PATCHSEL_ECONOMY:      case PATCHSEL_COMPETITORS:
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   934
				this->RaiseWidget(this->page + PATCHSEL_INTERFACE);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   935
				this->page = widget - PATCHSEL_INTERFACE;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   936
				this->LowerWidget(this->page + PATCHSEL_INTERFACE);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   937
				DeleteWindowById(WC_QUERY_STRING, 0);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   938
				this->SetDirty();
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   939
				break;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   940
		}
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   941
	}
8686
b1d73ae17e19 (svn r11753) -Codechange: re-indent the switch case structures, as to be more code style oriented.
belugas
parents: 8685
diff changeset
   942
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   943
	virtual void OnTimeout()
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   944
	{
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   945
		this->click = 0;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   946
		this->SetDirty();
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   947
	}
8686
b1d73ae17e19 (svn r11753) -Codechange: re-indent the switch case structures, as to be more code style oriented.
belugas
parents: 8685
diff changeset
   948
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   949
	virtual void OnQueryTextFinished(char *str)
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   950
	{
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   951
		if (!StrEmpty(str)) {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   952
			const PatchEntry *pe = &_patches_page[this->page].entries[this->entry];
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   953
			const SettingDesc *sd = pe->setting;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   954
			int32 value = atoi(str);
3118
99926945ccb1 (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
   955
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   956
			/* Save the correct currency-translated value */
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   957
			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
   958
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10708
diff changeset
   959
			SetPatchValue(pe->index, value);
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   960
			this->SetDirty();
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   961
		}
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   962
	}
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   963
};
8686
b1d73ae17e19 (svn r11753) -Codechange: re-indent the switch case structures, as to be more code style oriented.
belugas
parents: 8685
diff changeset
   964
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10708
diff changeset
   965
GameSettings *PatchesSelectionWindow::patches_ptr = NULL;
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   966
int PatchesSelectionWindow::patches_max = 0;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   967
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   968
static const Widget _patches_selection_widgets[] = {
4344
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
   969
{   WWT_CLOSEBOX,   RESIZE_NONE,    10,     0,    10,     0,    13, STR_00C5,                        STR_018B_CLOSE_WINDOW},
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
   970
{    WWT_CAPTION,   RESIZE_NONE,    10,    11,   369,     0,    13, STR_CONFIG_PATCHES_CAPTION,      STR_018C_WINDOW_TITLE_DRAG_THIS},
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
   971
{      WWT_PANEL,   RESIZE_NONE,    10,     0,   369,    14,    41, 0x0,                             STR_NULL},
9089
dd3df8d3ded0 (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: 9047
diff changeset
   972
{      WWT_PANEL,   RESIZE_NONE,    10,     0,   369,    42,    50, 0x0,                             STR_NULL},
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   973
4344
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
   974
{    WWT_TEXTBTN,   RESIZE_NONE,     3,    10,    96,    16,    27, STR_CONFIG_PATCHES_GUI,          STR_NULL},
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
   975
{    WWT_TEXTBTN,   RESIZE_NONE,     3,    97,   183,    16,    27, STR_CONFIG_PATCHES_CONSTRUCTION, STR_NULL},
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
   976
{    WWT_TEXTBTN,   RESIZE_NONE,     3,   184,   270,    16,    27, STR_CONFIG_PATCHES_VEHICLES,     STR_NULL},
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
   977
{    WWT_TEXTBTN,   RESIZE_NONE,     3,   271,   357,    16,    27, STR_CONFIG_PATCHES_STATIONS,     STR_NULL},
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
   978
{    WWT_TEXTBTN,   RESIZE_NONE,     3,    10,    96,    28,    39, STR_CONFIG_PATCHES_ECONOMY,      STR_NULL},
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
   979
{    WWT_TEXTBTN,   RESIZE_NONE,     3,    97,   183,    28,    39, STR_CONFIG_PATCHES_AI,           STR_NULL},
176
84990c4b9212 (svn r177) -Fix: padded out Widget code to solve warnings on C99 compiler (Tron)
darkvater
parents: 164
diff changeset
   980
{   WIDGETS_END},
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   981
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   982
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   983
static const WindowDesc _patches_selection_desc = {
9089
dd3df8d3ded0 (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: 9047
diff changeset
   984
	WDP_CENTER, WDP_CENTER, 370, 51, 370, 51,
6144
5a0ffbf27ced (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5939
diff changeset
   985
	WC_GAME_OPTIONS, WC_NONE,
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   986
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   987
	_patches_selection_widgets,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   988
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   989
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6338
diff changeset
   990
void ShowPatchesSelection()
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
	DeleteWindowById(WC_GAME_OPTIONS, 0);
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
   993
	new PatchesSelectionWindow(&_patches_selection_desc);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   994
}
478
19987403ee5d (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
   995
19987403ee5d (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
   996
4211
d8c4c40eba62 (svn r5714) Backport from branches/TGP (r5701 and r5711)
miham
parents: 4196
diff changeset
   997
/**
d8c4c40eba62 (svn r5714) Backport from branches/TGP (r5701 and r5711)
miham
parents: 4196
diff changeset
   998
 * Draw [<][>] boxes.
d8c4c40eba62 (svn r5714) Backport from branches/TGP (r5701 and r5711)
miham
parents: 4196
diff changeset
   999
 * @param x the x position to draw
d8c4c40eba62 (svn r5714) Backport from branches/TGP (r5701 and r5711)
miham
parents: 4196
diff changeset
  1000
 * @param y the y position to draw
d8c4c40eba62 (svn r5714) Backport from branches/TGP (r5701 and r5711)
miham
parents: 4196
diff changeset
  1001
 * @param ctab the color of the buttons
d8c4c40eba62 (svn r5714) Backport from branches/TGP (r5701 and r5711)
miham
parents: 4196
diff changeset
  1002
 * @param state 0 = none clicked, 1 = first clicked, 2 = second clicked
d8c4c40eba62 (svn r5714) Backport from branches/TGP (r5701 and r5711)
miham
parents: 4196
diff changeset
  1003
 * @param clickable_left is the left button clickable?
d8c4c40eba62 (svn r5714) Backport from branches/TGP (r5701 and r5711)
miham
parents: 4196
diff changeset
  1004
 * @param clickable_right is the right button clickable?
d8c4c40eba62 (svn r5714) Backport from branches/TGP (r5701 and r5711)
miham
parents: 4196
diff changeset
  1005
 */
d8c4c40eba62 (svn r5714) Backport from branches/TGP (r5701 and r5711)
miham
parents: 4196
diff changeset
  1006
void DrawArrowButtons(int x, int y, int ctab, byte state, bool clickable_left, bool clickable_right)
759
6d087784a08a (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1007
{
11092
e4fce2b3cded (svn r13649) -Codechange: Split the GfxFillRect() special flags from 'color' into their own parameter.
frosch
parents: 11061
diff changeset
  1008
	int color = _colour_gradient[COLOUR_YELLOW][2];
3107
a6406bbecd3d (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
  1009
5838
9c3129cb019b (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5835
diff changeset
  1010
	DrawFrameRect(x,      y + 1, x +  9, y + 9, ctab, (state == 1) ? FR_LOWERED : FR_NONE);
9c3129cb019b (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5835
diff changeset
  1011
	DrawFrameRect(x + 10, y + 1, x + 19, y + 9, ctab, (state == 2) ? FR_LOWERED : FR_NONE);
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8238
diff changeset
  1012
	DrawStringCentered(x +  5, y + 1, STR_6819, TC_FROMSTRING); // [<]
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8238
diff changeset
  1013
	DrawStringCentered(x + 15, y + 1, STR_681A, TC_FROMSTRING); // [>]
4211
d8c4c40eba62 (svn r5714) Backport from branches/TGP (r5701 and r5711)
miham
parents: 4196
diff changeset
  1014
d8c4c40eba62 (svn r5714) Backport from branches/TGP (r5701 and r5711)
miham
parents: 4196
diff changeset
  1015
	/* Grey out the buttons that aren't clickable */
d8c4c40eba62 (svn r5714) Backport from branches/TGP (r5701 and r5711)
miham
parents: 4196
diff changeset
  1016
	if (!clickable_left)
11092
e4fce2b3cded (svn r13649) -Codechange: Split the GfxFillRect() special flags from 'color' into their own parameter.
frosch
parents: 11061
diff changeset
  1017
		GfxFillRect(x +  1, y + 1, x +  1 + 8, y + 8, color, FILLRECT_CHECKER);
4211
d8c4c40eba62 (svn r5714) Backport from branches/TGP (r5701 and r5711)
miham
parents: 4196
diff changeset
  1018
	if (!clickable_right)
11092
e4fce2b3cded (svn r13649) -Codechange: Split the GfxFillRect() special flags from 'color' into their own parameter.
frosch
parents: 11061
diff changeset
  1019
		GfxFillRect(x + 11, y + 1, x + 11 + 8, y + 8, color, FILLRECT_CHECKER);
759
6d087784a08a (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1020
}
6d087784a08a (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1021
8684
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
  1022
/** These are not, strickly speaking, widget enums,
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
  1023
 *  since they have been changed as line coordinates.
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
  1024
 *  So, rather, they are more like order of appearance */
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
  1025
enum CustomCurrenciesWidgets {
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
  1026
	CUSTCURR_EXCHANGERATE = 0,
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
  1027
	CUSTCURR_SEPARATOR,
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
  1028
	CUSTCURR_PREFIX,
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
  1029
	CUSTCURR_SUFFIX,
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
  1030
	CUSTCURR_TO_EURO,
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
  1031
};
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
  1032
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1033
struct CustomCurrencyWindow : Window {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1034
	char separator[2];
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1035
	int click;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1036
	int query_widget;
4488
6eb5f6192c3a (svn r6273) Clean up the custom currency window handler a bit
tron
parents: 4444
diff changeset
  1037
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1038
	CustomCurrencyWindow(const WindowDesc *desc) : Window(desc)
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1039
	{
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1040
		this->separator[0] = _custom_currency.separator;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1041
		this->separator[1] = '\0';
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1042
		this->FindWindowPlacementAndResize(desc);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1043
	}
812
79c99885ad00 (svn r1283) -Add: AutoRenew is now a client-side patch instead of a game-side patch
truelight
parents: 788
diff changeset
  1044
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1045
	virtual void OnPaint()
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1046
	{
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1047
		int x;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1048
		int y = 20;
10595
7957c71b0dfe (svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium
parents: 10568
diff changeset
  1049
		this->DrawWidgets();
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2631
diff changeset
  1050
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1051
		/* exchange rate */
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1052
		DrawArrowButtons(10, y, 3, GB(this->click, 0, 2), true, true);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1053
		SetDParam(0, 1);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1054
		SetDParam(1, 1);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1055
		DrawString(35, y + 1, STR_CURRENCY_EXCHANGE_RATE, TC_FROMSTRING);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1056
		y += 12;
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2631
diff changeset
  1057
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1058
		/* separator */
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1059
		DrawFrameRect(10, y + 1, 29, y + 9, 0, GB(this->click, 2, 2) ? FR_LOWERED : FR_NONE);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1060
		x = DrawString(35, y + 1, STR_CURRENCY_SEPARATOR, TC_FROMSTRING);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1061
		DoDrawString(this->separator, x + 4, y + 1, TC_ORANGE);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1062
		y += 12;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1063
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1064
		/* prefix */
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1065
		DrawFrameRect(10, y + 1, 29, y + 9, 0, GB(this->click, 4, 2) ? FR_LOWERED : FR_NONE);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1066
		x = DrawString(35, y + 1, STR_CURRENCY_PREFIX, TC_FROMSTRING);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1067
		DoDrawString(_custom_currency.prefix, x + 4, y + 1, TC_ORANGE);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1068
		y += 12;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1069
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1070
		/* suffix */
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1071
		DrawFrameRect(10, y + 1, 29, y + 9, 0, GB(this->click, 6, 2) ? FR_LOWERED : FR_NONE);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1072
		x = DrawString(35, y + 1, STR_CURRENCY_SUFFIX, TC_FROMSTRING);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1073
		DoDrawString(_custom_currency.suffix, x + 4, y + 1, TC_ORANGE);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1074
		y += 12;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1075
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1076
		/* switch to euro */
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1077
		DrawArrowButtons(10, y, 3, GB(this->click, 8, 2), true, true);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1078
		SetDParam(0, _custom_currency.to_euro);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1079
		DrawString(35, y + 1, (_custom_currency.to_euro != CF_NOEURO) ? STR_CURRENCY_SWITCH_TO_EURO : STR_CURRENCY_SWITCH_TO_EURO_NEVER, TC_FROMSTRING);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1080
		y += 12;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1081
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1082
		/* Preview */
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1083
		y += 12;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1084
		SetDParam(0, 10000);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1085
		DrawString(35, y + 1, STR_CURRENCY_PREVIEW, TC_FROMSTRING);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1086
	}
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1087
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1088
	virtual void OnClick(Point pt, int widget)
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1089
	{
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1090
		int line = (pt.y - 20) / 12;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1091
		int len = 0;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1092
		int x = pt.x;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1093
		StringID str = 0;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1094
		CharSetFilter afilter = CS_ALPHANUMERAL;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1095
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1096
		switch (line) {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1097
			case CUSTCURR_EXCHANGERATE:
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1098
				if (IsInsideMM(x, 10, 30)) { // clicked buttons
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1099
					if (x < 20) {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1100
						if (_custom_currency.rate > 1) _custom_currency.rate--;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1101
						this->click = 1 << (line * 2 + 0);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1102
					} else {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1103
						if (_custom_currency.rate < 5000) _custom_currency.rate++;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1104
						this->click = 1 << (line * 2 + 1);
4488
6eb5f6192c3a (svn r6273) Clean up the custom currency window handler a bit
tron
parents: 4444
diff changeset
  1105
					}
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1106
				} else { // enter text
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1107
					SetDParam(0, _custom_currency.rate);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1108
					str = STR_CONFIG_PATCHES_INT32;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1109
					len = 4;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1110
					afilter = CS_NUMERAL;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1111
				}
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1112
				break;
4488
6eb5f6192c3a (svn r6273) Clean up the custom currency window handler a bit
tron
parents: 4444
diff changeset
  1113
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1114
			case CUSTCURR_SEPARATOR:
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1115
				if (IsInsideMM(x, 10, 30)) { // clicked button
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1116
					this->click = 1 << (line * 2 + 1);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1117
				}
11157
a0173588b15e (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: 11092
diff changeset
  1118
				SetDParamStr(0, this->separator);
a0173588b15e (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: 11092
diff changeset
  1119
				str = STR_JUST_RAW_STRING;
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1120
				len = 1;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1121
				break;
8684
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
  1122
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1123
			case CUSTCURR_PREFIX:
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1124
				if (IsInsideMM(x, 10, 30)) { // clicked button
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1125
					this->click = 1 << (line * 2 + 1);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1126
				}
11157
a0173588b15e (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: 11092
diff changeset
  1127
				SetDParamStr(0, _custom_currency.prefix);
a0173588b15e (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: 11092
diff changeset
  1128
				str = STR_JUST_RAW_STRING;
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1129
				len = 12;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1130
				break;
8684
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
  1131
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1132
			case CUSTCURR_SUFFIX:
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1133
				if (IsInsideMM(x, 10, 30)) { // clicked button
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1134
					this->click = 1 << (line * 2 + 1);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1135
				}
11157
a0173588b15e (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: 11092
diff changeset
  1136
				SetDParamStr(0, _custom_currency.suffix);
a0173588b15e (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: 11092
diff changeset
  1137
				str = STR_JUST_RAW_STRING;
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1138
				len = 12;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1139
				break;
8684
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
  1140
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1141
			case CUSTCURR_TO_EURO:
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1142
				if (IsInsideMM(x, 10, 30)) { // clicked buttons
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1143
					if (x < 20) {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1144
						_custom_currency.to_euro = (_custom_currency.to_euro <= 2000) ?
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1145
							CF_NOEURO : _custom_currency.to_euro - 1;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1146
						this->click = 1 << (line * 2 + 0);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1147
					} else {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1148
						_custom_currency.to_euro =
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1149
							Clamp(_custom_currency.to_euro + 1, 2000, MAX_YEAR);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1150
						this->click = 1 << (line * 2 + 1);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1151
					}
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1152
				} else { // enter text
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1153
					SetDParam(0, _custom_currency.to_euro);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1154
					str = STR_CONFIG_PATCHES_INT32;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1155
					len = 4;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1156
					afilter = CS_NUMERAL;
4488
6eb5f6192c3a (svn r6273) Clean up the custom currency window handler a bit
tron
parents: 4444
diff changeset
  1157
				}
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1158
				break;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1159
		}
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1160
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1161
		if (len != 0) {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1162
			this->query_widget = line;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1163
			ShowQueryString(str, STR_CURRENCY_CHANGE_PARAMETER, len + 1, 250, this, afilter);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1164
		}
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1165
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1166
		this->flags4 |= 5 << WF_TIMEOUT_SHL;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1167
		this->SetDirty();
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1168
	}
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1169
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1170
	virtual void OnQueryTextFinished(char *str)
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1171
	{
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1172
		if (str == NULL) return;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1173
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1174
		switch (this->query_widget) {
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1175
			case CUSTCURR_EXCHANGERATE:
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1176
				_custom_currency.rate = Clamp(atoi(str), 1, 5000);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1177
				break;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1178
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1179
			case CUSTCURR_SEPARATOR: /* Thousands seperator */
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1180
				_custom_currency.separator = StrEmpty(str) ? ' ' : str[0];
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1181
				ttd_strlcpy(this->separator, str, lengthof(this->separator));
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1182
				break;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1183
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1184
			case CUSTCURR_PREFIX:
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1185
				ttd_strlcpy(_custom_currency.prefix, str, lengthof(_custom_currency.prefix));
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1186
				break;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1187
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1188
			case CUSTCURR_SUFFIX:
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1189
				ttd_strlcpy(_custom_currency.suffix, str, lengthof(_custom_currency.suffix));
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1190
				break;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1191
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1192
			case CUSTCURR_TO_EURO: { /* Year to switch to euro */
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1193
				int val = atoi(str);
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1194
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1195
				_custom_currency.to_euro = (val < 2000 ? CF_NOEURO : min(val, MAX_YEAR));
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1196
				break;
8684
ad348701d4e1 (svn r11751) -Codechange: Enumify some widgets (and others) and while at it, apply some code style
belugas
parents: 8678
diff changeset
  1197
			}
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1198
		}
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1199
		MarkWholeScreenDirty();
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1200
	}
4488
6eb5f6192c3a (svn r6273) Clean up the custom currency window handler a bit
tron
parents: 4444
diff changeset
  1201
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1202
	virtual void OnTimeout()
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1203
	{
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1204
		this->click = 0;
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1205
		this->SetDirty();
759
6d087784a08a (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1206
	}
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1207
};
759
6d087784a08a (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1208
6d087784a08a (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1209
static const Widget _cust_currency_widgets[] = {
4344
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
  1210
{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,            STR_018B_CLOSE_WINDOW},
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
  1211
{    WWT_CAPTION,   RESIZE_NONE,    14,    11,   229,     0,    13, STR_CURRENCY_WINDOW, STR_018C_WINDOW_TITLE_DRAG_THIS},
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4300
diff changeset
  1212
{      WWT_PANEL,   RESIZE_NONE,    14,     0,   229,    14,   119, 0x0,                 STR_NULL},
759
6d087784a08a (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1213
{   WIDGETS_END},
6d087784a08a (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1214
};
6d087784a08a (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1215
6d087784a08a (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1216
static const WindowDesc _cust_currency_desc = {
7837
65d7362153a6 (svn r10704) -Codechange: provide an infrastructure to have resizable windows that are smaller than the default window size.
rubidium
parents: 7673
diff changeset
  1217
	WDP_CENTER, WDP_CENTER, 230, 120, 230, 120,
6144
5a0ffbf27ced (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5939
diff changeset
  1218
	WC_CUSTOM_CURRENCY, WC_NONE,
759
6d087784a08a (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1219
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
6d087784a08a (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1220
	_cust_currency_widgets,
6d087784a08a (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1221
};
6d087784a08a (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1222
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6338
diff changeset
  1223
static void ShowCustCurrency()
759
6d087784a08a (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1224
{
6d087784a08a (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1225
	DeleteWindowById(WC_CUSTOM_CURRENCY, 0);
10568
33792df463d7 (svn r13112) -Codechange: make classes of the patches and custom currency windows.
rubidium
parents: 10553
diff changeset
  1226
	new CustomCurrencyWindow(&_cust_currency_desc);
759
6d087784a08a (svn r1215) Feature: You can now make a custom currency by chosing "Custom..."
dominik
parents: 654
diff changeset
  1227
}