annotate src/newgrf_gui.cpp @ 15603:ea0089ca72ef draft

(svn r20264) -Fix (r20258): saving a new preset was broken
author yexo <yexo@openttd.org>
date Sat, 31 Jul 2010 20:28:10 +0000 (2010-07-31)
parents 71b4c310d261
children 391d97ec4083
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1 /* $Id$ */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2
12778
bc7926153e19 (svn r17248) -Fix: add GPL license notice where appropriate
rubidium <rubidium@openttd.org>
parents: 12632
diff changeset
3 /*
bc7926153e19 (svn r17248) -Fix: add GPL license notice where appropriate
rubidium <rubidium@openttd.org>
parents: 12632
diff changeset
4 * This file is part of OpenTTD.
bc7926153e19 (svn r17248) -Fix: add GPL license notice where appropriate
rubidium <rubidium@openttd.org>
parents: 12632
diff changeset
5 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
bc7926153e19 (svn r17248) -Fix: add GPL license notice where appropriate
rubidium <rubidium@openttd.org>
parents: 12632
diff changeset
6 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
bc7926153e19 (svn r17248) -Fix: add GPL license notice where appropriate
rubidium <rubidium@openttd.org>
parents: 12632
diff changeset
7 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
bc7926153e19 (svn r17248) -Fix: add GPL license notice where appropriate
rubidium <rubidium@openttd.org>
parents: 12632
diff changeset
8 */
bc7926153e19 (svn r17248) -Fix: add GPL license notice where appropriate
rubidium <rubidium@openttd.org>
parents: 12632
diff changeset
9
9111
d48433370037 (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 <rubidium@openttd.org>
parents: 8749
diff changeset
10 /** @file newgrf_gui.cpp GUI to change NewGRF settings. */
6348
bcf98ba27bbf (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas <belugas@openttd.org>
parents: 6248
diff changeset
11
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
12 #include "stdafx.h"
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
13 #include "gui.h"
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
14 #include "newgrf.h"
8114
2d6af5d7a142 (svn r11675) -Codechange: split the string types from the string functions.
rubidium <rubidium@openttd.org>
parents: 8107
diff changeset
15 #include "strings_func.h"
8131
e300ac8001ae (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 <rubidium@openttd.org>
parents: 8130
diff changeset
16 #include "window_func.h"
9457
267a95510fdf (svn r13375) -Add: logging of actions that could possibly cause desyncs and crashes to simplify debugging. See readme.txt for details
smatz <smatz@openttd.org>
parents: 9317
diff changeset
17 #include "gamelog.h"
15599
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
18 #include "settings_type.h"
9677
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
19 #include "settings_func.h"
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
20 #include "widgets/dropdown_type.h"
10793
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
21 #include "network/network.h"
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
22 #include "network/network_content.h"
13043
8eef3a6e299f (svn r17541) -Feature: Filtering in Add-NewGRF dialog.
frosch <frosch@openttd.org>
parents: 13020
diff changeset
23 #include "sortlist_type.h"
8eef3a6e299f (svn r17541) -Feature: Filtering in Add-NewGRF dialog.
frosch <frosch@openttd.org>
parents: 13020
diff changeset
24 #include "querystring_gui.h"
14258
a899d4e5ee1a (svn r18809) -Codechange/Cleanup: remove unneeded headers from some files, if a header require a header make it include that header
rubidium <rubidium@openttd.org>
parents: 14149
diff changeset
25 #include "core/geometry_func.hpp"
15598
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
26 #include "newgrf_text.h"
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
27
8264
2495310e220f (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium <rubidium@openttd.org>
parents: 8224
diff changeset
28 #include "table/strings.h"
2495310e220f (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium <rubidium@openttd.org>
parents: 8224
diff changeset
29 #include "table/sprites.h"
2495310e220f (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium <rubidium@openttd.org>
parents: 8224
diff changeset
30
13968
070572f1272d (svn r18506) -Fix [FS#3368]: no error message was created for the first fatal NewGRF error.
rubidium <rubidium@openttd.org>
parents: 13796
diff changeset
31 /**
070572f1272d (svn r18506) -Fix [FS#3368]: no error message was created for the first fatal NewGRF error.
rubidium <rubidium@openttd.org>
parents: 13796
diff changeset
32 * Show the first NewGRF error we can find.
070572f1272d (svn r18506) -Fix [FS#3368]: no error message was created for the first fatal NewGRF error.
rubidium <rubidium@openttd.org>
parents: 13796
diff changeset
33 */
070572f1272d (svn r18506) -Fix [FS#3368]: no error message was created for the first fatal NewGRF error.
rubidium <rubidium@openttd.org>
parents: 13796
diff changeset
34 void ShowNewGRFError()
070572f1272d (svn r18506) -Fix [FS#3368]: no error message was created for the first fatal NewGRF error.
rubidium <rubidium@openttd.org>
parents: 13796
diff changeset
35 {
070572f1272d (svn r18506) -Fix [FS#3368]: no error message was created for the first fatal NewGRF error.
rubidium <rubidium@openttd.org>
parents: 13796
diff changeset
36 for (const GRFConfig *c = _grfconfig; c != NULL; c = c->next) {
070572f1272d (svn r18506) -Fix [FS#3368]: no error message was created for the first fatal NewGRF error.
rubidium <rubidium@openttd.org>
parents: 13796
diff changeset
37 /* We only want to show fatal errors */
070572f1272d (svn r18506) -Fix [FS#3368]: no error message was created for the first fatal NewGRF error.
rubidium <rubidium@openttd.org>
parents: 13796
diff changeset
38 if (c->error == NULL || c->error->severity != STR_NEWGRF_ERROR_MSG_FATAL) continue;
070572f1272d (svn r18506) -Fix [FS#3368]: no error message was created for the first fatal NewGRF error.
rubidium <rubidium@openttd.org>
parents: 13796
diff changeset
39
070572f1272d (svn r18506) -Fix [FS#3368]: no error message was created for the first fatal NewGRF error.
rubidium <rubidium@openttd.org>
parents: 13796
diff changeset
40 SetDParam (0, c->error->custom_message == NULL ? c->error->message : STR_JUST_RAW_STRING);
070572f1272d (svn r18506) -Fix [FS#3368]: no error message was created for the first fatal NewGRF error.
rubidium <rubidium@openttd.org>
parents: 13796
diff changeset
41 SetDParamStr(1, c->error->custom_message);
070572f1272d (svn r18506) -Fix [FS#3368]: no error message was created for the first fatal NewGRF error.
rubidium <rubidium@openttd.org>
parents: 13796
diff changeset
42 SetDParam (2, STR_JUST_RAW_STRING);
070572f1272d (svn r18506) -Fix [FS#3368]: no error message was created for the first fatal NewGRF error.
rubidium <rubidium@openttd.org>
parents: 13796
diff changeset
43 SetDParamStr(3, c->filename);
070572f1272d (svn r18506) -Fix [FS#3368]: no error message was created for the first fatal NewGRF error.
rubidium <rubidium@openttd.org>
parents: 13796
diff changeset
44 SetDParam (4, STR_JUST_RAW_STRING);
070572f1272d (svn r18506) -Fix [FS#3368]: no error message was created for the first fatal NewGRF error.
rubidium <rubidium@openttd.org>
parents: 13796
diff changeset
45 SetDParamStr(5, c->error->data);
070572f1272d (svn r18506) -Fix [FS#3368]: no error message was created for the first fatal NewGRF error.
rubidium <rubidium@openttd.org>
parents: 13796
diff changeset
46 for (uint i = 0; i < c->error->num_params; i++) {
070572f1272d (svn r18506) -Fix [FS#3368]: no error message was created for the first fatal NewGRF error.
rubidium <rubidium@openttd.org>
parents: 13796
diff changeset
47 SetDParam(6 + i, c->error->param_value[i]);
070572f1272d (svn r18506) -Fix [FS#3368]: no error message was created for the first fatal NewGRF error.
rubidium <rubidium@openttd.org>
parents: 13796
diff changeset
48 }
14645
b7a22979b84e (svn r19224) -Codechange: change parameters passed to ShowErrorMessage() a bit
smatz <smatz@openttd.org>
parents: 14561
diff changeset
49 ShowErrorMessage(STR_NEWGRF_ERROR_FATAL_POPUP, INVALID_STRING_ID, WL_CRITICAL);
13968
070572f1272d (svn r18506) -Fix [FS#3368]: no error message was created for the first fatal NewGRF error.
rubidium <rubidium@openttd.org>
parents: 13796
diff changeset
50 break;
070572f1272d (svn r18506) -Fix [FS#3368]: no error message was created for the first fatal NewGRF error.
rubidium <rubidium@openttd.org>
parents: 13796
diff changeset
51 }
070572f1272d (svn r18506) -Fix [FS#3368]: no error message was created for the first fatal NewGRF error.
rubidium <rubidium@openttd.org>
parents: 13796
diff changeset
52 }
070572f1272d (svn r18506) -Fix [FS#3368]: no error message was created for the first fatal NewGRF error.
rubidium <rubidium@openttd.org>
parents: 13796
diff changeset
53
13017
ab07d6d87608 (svn r17511) -Codechange: Simplify ShowNewGRFInfo() by passing 'right' instead of 'width'.
frosch <frosch@openttd.org>
parents: 12879
diff changeset
54 static void ShowNewGRFInfo(const GRFConfig *c, uint x, uint y, uint right, uint bottom, bool show_params)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
55 {
6103
e3a3a903fa28 (svn r8838) -Feature: Show newgrf error messages loaded in Action B in the newgrf gui
maedhros <maedhros@openttd.org>
parents: 5893
diff changeset
56 if (c->error != NULL) {
9648
b53049484e44 (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 <rubidium@openttd.org>
parents: 9457
diff changeset
57 char message[512];
9957
2416082e752c (svn r14112) -Fix (r13715)[FS#2232]: Action B custom messages with parameteers were broken.
frosch <frosch@openttd.org>
parents: 9864
diff changeset
58 SetDParamStr(0, c->error->custom_message); // is skipped by built-in messages
2416082e752c (svn r14112) -Fix (r13715)[FS#2232]: Action B custom messages with parameteers were broken.
frosch <frosch@openttd.org>
parents: 9864
diff changeset
59 SetDParam (1, STR_JUST_RAW_STRING);
2416082e752c (svn r14112) -Fix (r13715)[FS#2232]: Action B custom messages with parameteers were broken.
frosch <frosch@openttd.org>
parents: 9864
diff changeset
60 SetDParamStr(2, c->filename);
2416082e752c (svn r14112) -Fix (r13715)[FS#2232]: Action B custom messages with parameteers were broken.
frosch <frosch@openttd.org>
parents: 9864
diff changeset
61 SetDParam (3, STR_JUST_RAW_STRING);
2416082e752c (svn r14112) -Fix (r13715)[FS#2232]: Action B custom messages with parameteers were broken.
frosch <frosch@openttd.org>
parents: 9864
diff changeset
62 SetDParamStr(4, c->error->data);
2416082e752c (svn r14112) -Fix (r13715)[FS#2232]: Action B custom messages with parameteers were broken.
frosch <frosch@openttd.org>
parents: 9864
diff changeset
63 for (uint i = 0; i < c->error->num_params; i++) {
11833
e4d9da4d81eb (svn r16223) -Fix (r8881): ActionB should use the online parameters from GRFFile instead of the initial user-specified values from GRFConfig. Also use the values as they were set when the ActionB was executed, not as they are set when the message is shown.
frosch <frosch@openttd.org>
parents: 11796
diff changeset
64 SetDParam(5 + i, c->error->param_value[i]);
6139
3c76c0f47447 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros <maedhros@openttd.org>
parents: 6103
diff changeset
65 }
9957
2416082e752c (svn r14112) -Fix (r13715)[FS#2232]: Action B custom messages with parameteers were broken.
frosch <frosch@openttd.org>
parents: 9864
diff changeset
66 GetString(message, c->error->custom_message == NULL ? c->error->message : STR_JUST_RAW_STRING, lastof(message));
6139
3c76c0f47447 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros <maedhros@openttd.org>
parents: 6103
diff changeset
67
3c76c0f47447 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros <maedhros@openttd.org>
parents: 6103
diff changeset
68 SetDParamStr(0, message);
13017
ab07d6d87608 (svn r17511) -Codechange: Simplify ShowNewGRFInfo() by passing 'right' instead of 'width'.
frosch <frosch@openttd.org>
parents: 12879
diff changeset
69 y = DrawStringMultiLine(x, right, y, bottom, c->error->severity);
6103
e3a3a903fa28 (svn r8838) -Feature: Show newgrf error messages loaded in Action B in the newgrf gui
maedhros <maedhros@openttd.org>
parents: 5893
diff changeset
70 }
e3a3a903fa28 (svn r8838) -Feature: Show newgrf error messages loaded in Action B in the newgrf gui
maedhros <maedhros@openttd.org>
parents: 5893
diff changeset
71
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
72 /* Draw filename or not if it is not known (GRF sent over internet) */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
73 if (c->filename != NULL) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
74 SetDParamStr(0, c->filename);
13017
ab07d6d87608 (svn r17511) -Codechange: Simplify ShowNewGRFInfo() by passing 'right' instead of 'width'.
frosch <frosch@openttd.org>
parents: 12879
diff changeset
75 y = DrawStringMultiLine(x, right, y, bottom, STR_NEWGRF_SETTINGS_FILENAME);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
76 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
77
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
78 /* Prepare and draw GRF ID */
15201
071e920abcfb (svn r19830) -Codechange: Move variable declarations to their first use.
alberth <alberth@openttd.org>
parents: 15200
diff changeset
79 char buff[256];
14676
353df593bee0 (svn r19255) -Codechange: encapsulate GRFIdentifier in GRFConfig instead of subclassing it
yexo <yexo@openttd.org>
parents: 14645
diff changeset
80 snprintf(buff, lengthof(buff), "%08X", BSWAP32(c->ident.grfid));
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
81 SetDParamStr(0, buff);
13017
ab07d6d87608 (svn r17511) -Codechange: Simplify ShowNewGRFInfo() by passing 'right' instead of 'width'.
frosch <frosch@openttd.org>
parents: 12879
diff changeset
82 y = DrawStringMultiLine(x, right, y, bottom, STR_NEWGRF_SETTINGS_GRF_ID);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
83
15602
71b4c310d261 (svn r20263) -Change: only show the NewGRF version when newgrf_developer_tools are enabled
rubidium <rubidium@openttd.org>
parents: 15599
diff changeset
84 if (_settings_client.gui.newgrf_developer_tools && c->version != 0) {
15599
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
85 SetDParam(0, c->version);
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
86 y = DrawStringMultiLine(x, right, y, bottom, STR_NEWGRF_SETTINGS_VERSION);
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
87 }
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
88
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
89 /* Prepare and draw MD5 sum */
14676
353df593bee0 (svn r19255) -Codechange: encapsulate GRFIdentifier in GRFConfig instead of subclassing it
yexo <yexo@openttd.org>
parents: 14645
diff changeset
90 md5sumToString(buff, lastof(buff), c->ident.md5sum);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
91 SetDParamStr(0, buff);
13017
ab07d6d87608 (svn r17511) -Codechange: Simplify ShowNewGRFInfo() by passing 'right' instead of 'width'.
frosch <frosch@openttd.org>
parents: 12879
diff changeset
92 y = DrawStringMultiLine(x, right, y, bottom, STR_NEWGRF_SETTINGS_MD5SUM);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
93
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
94 /* Show GRF parameter list */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
95 if (show_params) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
96 if (c->num_params > 0) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
97 GRFBuildParamList(buff, c, lastof(buff));
9648
b53049484e44 (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 <rubidium@openttd.org>
parents: 9457
diff changeset
98 SetDParam(0, STR_JUST_RAW_STRING);
b53049484e44 (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 <rubidium@openttd.org>
parents: 9457
diff changeset
99 SetDParamStr(1, buff);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
100 } else {
11730
a39da1e4c1f5 (svn r16118) -Change/cleanup: remove the hexadecimal 'in TTD the string had this ID' from 'some' strings and replace the string name with something more sensible.
rubidium <rubidium@openttd.org>
parents: 11524
diff changeset
101 SetDParam(0, STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
102 }
13017
ab07d6d87608 (svn r17511) -Codechange: Simplify ShowNewGRFInfo() by passing 'right' instead of 'width'.
frosch <frosch@openttd.org>
parents: 12879
diff changeset
103 y = DrawStringMultiLine(x, right, y, bottom, STR_NEWGRF_SETTINGS_PARAMETER);
10126
c5ceca8952d5 (svn r14310) -Fix: don't show palette information in the newgrf lists of the network lobby.
rubidium <rubidium@openttd.org>
parents: 10115
diff changeset
104
c5ceca8952d5 (svn r14310) -Fix: don't show palette information in the newgrf lists of the network lobby.
rubidium <rubidium@openttd.org>
parents: 10115
diff changeset
105 /* Draw the palette of the NewGRF */
15593
7d5548deab3f (svn r20253) -Codechange: change GRFConfig::windows_paletted into a bitmask/bitset
rubidium <rubidium@openttd.org>
parents: 15588
diff changeset
106 SetDParamStr(0, (c->palette & GRFP_USE_WINDOWS) ? "Windows" : "DOS");
13017
ab07d6d87608 (svn r17511) -Codechange: Simplify ShowNewGRFInfo() by passing 'right' instead of 'width'.
frosch <frosch@openttd.org>
parents: 12879
diff changeset
107 y = DrawStringMultiLine(x, right, y, bottom, STR_NEWGRF_SETTINGS_PALETTE);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
108 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
109
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
110 /* Show flags */
13017
ab07d6d87608 (svn r17511) -Codechange: Simplify ShowNewGRFInfo() by passing 'right' instead of 'width'.
frosch <frosch@openttd.org>
parents: 12879
diff changeset
111 if (c->status == GCS_NOT_FOUND) y = DrawStringMultiLine(x, right, y, bottom, STR_NEWGRF_SETTINGS_NOT_FOUND);
ab07d6d87608 (svn r17511) -Codechange: Simplify ShowNewGRFInfo() by passing 'right' instead of 'width'.
frosch <frosch@openttd.org>
parents: 12879
diff changeset
112 if (c->status == GCS_DISABLED) y = DrawStringMultiLine(x, right, y, bottom, STR_NEWGRF_SETTINGS_DISABLED);
ab07d6d87608 (svn r17511) -Codechange: Simplify ShowNewGRFInfo() by passing 'right' instead of 'width'.
frosch <frosch@openttd.org>
parents: 12879
diff changeset
113 if (HasBit(c->flags, GCF_COMPATIBLE)) y = DrawStringMultiLine(x, right, y, bottom, STR_NEWGRF_COMPATIBLE_LOADED);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
114
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
115 /* Draw GRF info if it exists */
14711
74b0a8a64ff5 (svn r19295) -Codechange: introduce wrapper functions for GRFConfig::name/info
yexo <yexo@openttd.org>
parents: 14676
diff changeset
116 if (!StrEmpty(c->GetDescription())) {
9648
b53049484e44 (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 <rubidium@openttd.org>
parents: 9457
diff changeset
117 SetDParam(0, STR_JUST_RAW_STRING);
14711
74b0a8a64ff5 (svn r19295) -Codechange: introduce wrapper functions for GRFConfig::name/info
yexo <yexo@openttd.org>
parents: 14676
diff changeset
118 SetDParamStr(1, c->GetDescription());
13017
ab07d6d87608 (svn r17511) -Codechange: Simplify ShowNewGRFInfo() by passing 'right' instead of 'width'.
frosch <frosch@openttd.org>
parents: 12879
diff changeset
119 y = DrawStringMultiLine(x, right, y, bottom, STR_BLACK_STRING);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
120 } else {
13017
ab07d6d87608 (svn r17511) -Codechange: Simplify ShowNewGRFInfo() by passing 'right' instead of 'width'.
frosch <frosch@openttd.org>
parents: 12879
diff changeset
121 y = DrawStringMultiLine(x, right, y, bottom, STR_NEWGRF_SETTINGS_NO_INFO);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
122 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
123 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
124
15598
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
125
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
126 /** Enum referring to the widgets of the NewGRF parameters window */
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
127 enum ShowNewGRFParametersWidgets {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
128 GRFPAR_WIDGET_BACKGROUND, ///< Panel to draw the settings on
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
129 GRFPAR_WIDGET_SCROLLBAR, ///< Scrollbar to scroll through all settings
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
130 GRFPAR_WIDGET_ACCEPT, ///< Accept button
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
131 GRFPAR_WIDGET_DESCRIPTION, ///< Multi-line description of a parameter
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
132 };
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
133
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
134 /**
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
135 * Window for setting the parameters of a NewGRF.
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
136 */
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
137 struct NewGRFParametersWindow : public Window {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
138 static GRFParameterInfo dummy_parameter_info; ///< Dummy info in case a newgrf didn't provide info about some parameter.
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
139 GRFConfig *grf_config; ///< Set the parameters of this GRFConfig.
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
140 uint clicked_button; ///< The row in which a button was clicked or UINT_MAX.
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
141 bool clicked_increase; ///< True if the increase button was clicked, false for the decrease button.
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
142 int timeout; ///< How long before we unpress the last-pressed button?
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
143 uint clicked_row; ///< The selected parameter
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
144 int line_height; ///< Height of a row in the matrix widget.
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
145
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
146 NewGRFParametersWindow(const WindowDesc *desc, GRFConfig *c) : Window(),
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
147 grf_config(c),
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
148 clicked_button(UINT_MAX),
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
149 timeout(0),
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
150 clicked_row(UINT_MAX)
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
151 {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
152 this->InitNested(desc); // Initializes 'this->line_height' as side effect.
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
153
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
154 this->vscroll.SetCount(c->num_valid_params);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
155 }
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
156
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
157 /**
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
158 * Get a dummy parameter-info object with default information.
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
159 * @param nr The param number that should be changed.
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
160 * @return GRFParameterInfo with dummy information about the given parameter.
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
161 */
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
162 static GRFParameterInfo *GetDummyParameterInfo(uint nr)
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
163 {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
164 dummy_parameter_info.param_nr = nr;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
165 return &dummy_parameter_info;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
166 }
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
167
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
168 virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
169 {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
170 switch (widget) {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
171 case GRFPAR_WIDGET_BACKGROUND:
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
172 this->line_height = FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
173
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
174 resize->width = 1;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
175 resize->height = this->line_height;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
176 size->height = GB(this->GetWidget<NWidgetCore>(widget)->widget_data, MAT_ROW_START, MAT_ROW_BITS) * this->line_height;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
177 break;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
178
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
179 case GRFPAR_WIDGET_DESCRIPTION:
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
180 size->height = max<uint>(size->height, FONT_HEIGHT_NORMAL * 4 + WD_TEXTPANEL_TOP + WD_TEXTPANEL_BOTTOM);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
181 break;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
182 }
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
183 }
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
184
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
185 virtual void OnPaint()
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
186 {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
187 this->DrawWidgets();
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
188 }
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
189
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
190 virtual void DrawWidget(const Rect &r, int widget) const
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
191 {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
192 if (widget == GRFPAR_WIDGET_DESCRIPTION) {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
193 const GRFParameterInfo *par_info = (this->clicked_row < this->grf_config->param_info.Length()) ? this->grf_config->param_info[this->clicked_row] : NULL;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
194 if (par_info == NULL) return;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
195 const char *desc = GetGRFStringFromGRFText(par_info->desc);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
196 if (desc == NULL) return;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
197 DrawStringMultiLine(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_TEXTPANEL_TOP, r.bottom - WD_TEXTPANEL_BOTTOM, desc, TC_BLACK);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
198 return;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
199 } else if (widget != GRFPAR_WIDGET_BACKGROUND) {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
200 return;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
201 }
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
202
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
203 bool rtl = _dynlang.text_dir == TD_RTL;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
204 uint buttons_left = rtl ? r.right - 23 : r.left + 4;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
205 uint value_left = r.left + (rtl ? WD_FRAMERECT_LEFT : 28);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
206 uint value_right = r.right - (rtl ? 28 : WD_FRAMERECT_RIGHT);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
207 uint text_left = r.left + (rtl ? WD_FRAMERECT_LEFT : 54);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
208 uint text_right = r.right - (rtl ? 54 : WD_FRAMERECT_RIGHT);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
209
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
210 int y = r.top;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
211 for (uint i = this->vscroll.GetPosition(); this->vscroll.IsVisible(i) && i < this->grf_config->num_valid_params; i++) {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
212 GRFParameterInfo *par_info = (i < this->grf_config->param_info.Length()) ? this->grf_config->param_info[i] : NULL;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
213 if (par_info == NULL) par_info = GetDummyParameterInfo(i);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
214 uint32 current_value = par_info->GetValue(this->grf_config);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
215 bool selected = (i == this->clicked_row);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
216
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
217 uint x = rtl ? r.right : r.left;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
218 if (par_info->type == PTYPE_BOOL) {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
219 DrawFrameRect(buttons_left, y + 2, buttons_left + 19, y + 10, (current_value != 0) ? COLOUR_GREEN : COLOUR_RED, (current_value != 0) ? FR_LOWERED : FR_NONE);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
220 } else if (par_info->type == PTYPE_UINT_ENUM) {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
221 DrawArrowButtons(buttons_left, y + 2, COLOUR_YELLOW, (this->clicked_button == i) ? 1 + (this->clicked_increase != rtl) : 0, current_value > par_info->min_value, current_value < par_info->max_value);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
222 bool draw_numeric = true;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
223 if (par_info->value_names.Find(current_value) != par_info->value_names.End()) {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
224 const char *label = GetGRFStringFromGRFText(par_info->value_names.Find(current_value)->second);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
225 if (label != NULL) {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
226 x = DrawString(value_left, value_right, y + WD_MATRIX_TOP, label, TC_ORANGE);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
227 draw_numeric = false;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
228 }
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
229 }
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
230 if (draw_numeric) {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
231 SetDParam(0, current_value);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
232 x = DrawString(value_left, value_right, y + WD_MATRIX_TOP, STR_JUST_INT, TC_ORANGE);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
233 }
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
234 }
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
235
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
236 const char *name = GetGRFStringFromGRFText(par_info->name);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
237 if (name != NULL) {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
238 DrawString(max(rtl ? 0U : x + 3, text_left), min(rtl ? x - 3 : r.right, text_right), y + WD_MATRIX_TOP, name, selected ? TC_WHITE : TC_LIGHT_BLUE);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
239 } else {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
240 SetDParam(0, i + 1);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
241 DrawString(max(rtl ? 0U : x + 3, text_left), min(rtl ? x - 3 : r.right, text_right), y + WD_MATRIX_TOP, STR_NEWGRF_PARAMETERS_DEFAULT_NAME, selected ? TC_WHITE : TC_LIGHT_BLUE);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
242 }
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
243 y += this->line_height;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
244 }
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
245 }
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
246
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
247 virtual void OnClick(Point pt, int widget, int click_count)
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
248 {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
249 switch (widget) {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
250 case GRFPAR_WIDGET_BACKGROUND: {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
251 uint num = this->vscroll.GetScrolledRowFromWidget(pt.y, this, GRFPAR_WIDGET_BACKGROUND);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
252 if (num >= this->grf_config->num_valid_params) break;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
253 if (this->clicked_row != num) {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
254 DeleteChildWindows(WC_QUERY_STRING);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
255 this->clicked_row = num;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
256 }
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
257
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
258 const NWidgetBase *wid = this->GetWidget<NWidgetBase>(GRFPAR_WIDGET_BACKGROUND);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
259 int x = pt.x - wid->pos_x;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
260 if (_dynlang.text_dir == TD_RTL) x = wid->current_x - x;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
261 x -= 4;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
262
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
263 GRFParameterInfo *par_info = (num < this->grf_config->param_info.Length()) ? this->grf_config->param_info[num] : NULL;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
264 if (par_info == NULL) par_info = GetDummyParameterInfo(num);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
265
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
266 /* One of the arrows is clicked */
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
267 if (IsInsideMM(x, 0, 21)) {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
268 uint32 val = par_info->GetValue(this->grf_config);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
269 if (par_info->type == PTYPE_BOOL) {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
270 val = !val;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
271 } else {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
272 if (x >= 10) {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
273 /* Increase button clicked */
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
274 if (val < par_info->max_value) val++;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
275 this->clicked_increase = true;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
276 } else {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
277 /* Decrease button clicked */
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
278 if (val > par_info->min_value) val--;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
279 this->clicked_increase = false;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
280 }
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
281 }
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
282 par_info->SetValue(this->grf_config, val);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
283
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
284 this->clicked_button = num;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
285 this->timeout = 5;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
286 } else if (par_info->type == PTYPE_UINT_ENUM && click_count >= 2) {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
287 /* Display a query box so users can enter a custom value. */
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
288 SetDParam(0, this->grf_config->param[num]);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
289 ShowQueryString(STR_JUST_INT, STR_CONFIG_SETTING_QUERY_CAPTION, 10, 100, this, CS_NUMERAL, QSF_NONE);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
290 }
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
291
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
292 this->SetDirty();
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
293 break;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
294 }
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
295
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
296 case GRFPAR_WIDGET_ACCEPT:
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
297 delete this;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
298 break;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
299 }
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
300 }
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
301
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
302 virtual void OnQueryTextFinished(char *str)
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
303 {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
304 if (StrEmpty(str)) return;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
305 int32 value = atoi(str);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
306 GRFParameterInfo *par_info = ((uint)this->clicked_row < this->grf_config->param_info.Length()) ? this->grf_config->param_info[this->clicked_row] : NULL;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
307 if (par_info == NULL) par_info = GetDummyParameterInfo(this->clicked_row);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
308 uint32 val = Clamp<uint32>(value, par_info->min_value, par_info->max_value);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
309 par_info->SetValue(this->grf_config, val);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
310 this->SetDirty();
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
311 }
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
312
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
313 virtual void OnResize()
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
314 {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
315 NWidgetCore *nwi = this->GetWidget<NWidgetCore>(GRFPAR_WIDGET_BACKGROUND);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
316 this->vscroll.SetCapacity(nwi->current_y / this->line_height);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
317 nwi->widget_data = (this->vscroll.GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
318 }
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
319
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
320 virtual void OnTick()
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
321 {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
322 if (--this->timeout == 0) {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
323 this->clicked_button = UINT_MAX;
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
324 this->SetDirty();
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
325 }
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
326 }
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
327 };
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
328 GRFParameterInfo NewGRFParametersWindow::dummy_parameter_info(0);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
329
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
330
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
331 static const NWidgetPart _nested_newgrf_parameter_widgets[] = {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
332 NWidget(NWID_HORIZONTAL),
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
333 NWidget(WWT_CLOSEBOX, COLOUR_MAUVE),
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
334 NWidget(WWT_CAPTION, COLOUR_MAUVE), SetDataTip(STR_NEWGRF_PARAMETERS_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
335 EndContainer(),
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
336 NWidget(NWID_HORIZONTAL),
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
337 NWidget(WWT_MATRIX, COLOUR_MAUVE, GRFPAR_WIDGET_BACKGROUND), SetMinimalSize(188, 182), SetResize(1, 1), SetFill(1, 0), SetDataTip(0x501, STR_NULL),
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
338 NWidget(WWT_SCROLLBAR, COLOUR_MAUVE, GRFPAR_WIDGET_SCROLLBAR),
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
339 EndContainer(),
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
340 NWidget(WWT_PANEL, COLOUR_MAUVE, GRFPAR_WIDGET_DESCRIPTION), SetResize(1, 0), SetFill(1, 0),
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
341 EndContainer(),
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
342 NWidget(NWID_HORIZONTAL),
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
343 NWidget(WWT_PUSHTXTBTN, COLOUR_MAUVE, GRFPAR_WIDGET_ACCEPT), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_NEWGRF_PARAMETERS_CLOSE, STR_NULL),
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
344 NWidget(WWT_RESIZEBOX, COLOUR_MAUVE),
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
345 EndContainer(),
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
346 };
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
347
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
348 /* Window definition for the change grf parameters window */
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
349 static const WindowDesc _newgrf_parameters_desc(
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
350 WDP_CENTER, 500, 208,
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
351 WC_GRF_PARAMETERS, WC_NONE,
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
352 WDF_UNCLICK_BUTTONS,
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
353 _nested_newgrf_parameter_widgets, lengthof(_nested_newgrf_parameter_widgets)
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
354 );
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
355
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
356 void OpenGRFParameterWindow(GRFConfig *c)
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
357 {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
358 DeleteWindowByClass(WC_GRF_PARAMETERS);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
359 new NewGRFParametersWindow(&_newgrf_parameters_desc, c);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
360 }
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
361
9677
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
362 static GRFPresetList _grf_preset_list;
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
363
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
364 class DropDownListPresetItem : public DropDownListItem {
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
365 public:
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
366 DropDownListPresetItem(int result) : DropDownListItem(result, false) {}
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
367
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
368 virtual ~DropDownListPresetItem() {}
9864
199cb67d074d (svn r14009) -Cleanup (r14008): Bad whitespace...
peter1138 <peter1138@openttd.org>
parents: 9863
diff changeset
369
9863
3db7ce31355e (svn r14008) -Fix (r14004): NewGRF preset drop down list not working
peter1138 <peter1138@openttd.org>
parents: 9760
diff changeset
370 bool Selectable() const
9677
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
371 {
9863
3db7ce31355e (svn r14008) -Fix (r14004): NewGRF preset drop down list not working
peter1138 <peter1138@openttd.org>
parents: 9760
diff changeset
372 return true;
9677
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
373 }
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
374
11425
532a1c74074d (svn r15783) -Codechange: make the dropdown draw code pass around the left/right instead of the x and width to make drawing text at offsets easier.
rubidium <rubidium@openttd.org>
parents: 11373
diff changeset
375 void Draw(int left, int right, int top, int bottom, bool sel, int bg_colour) const
9677
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
376 {
11425
532a1c74074d (svn r15783) -Codechange: make the dropdown draw code pass around the left/right instead of the x and width to make drawing text at offsets easier.
rubidium <rubidium@openttd.org>
parents: 11373
diff changeset
377 DrawString(left + 2, right + 2, top, _grf_preset_list[this->result], sel ? TC_WHITE : TC_BLACK);
9677
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
378 }
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
379 };
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
380
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
381 static void NewGRFConfirmationCallback(Window *w, bool confirmed);
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
382
11795
8f4775ec6562 (svn r16185) -Codechange: Moving the ShowNewGRFStateWidgets and AddNewGRFWindowWidgets widget enums outside their window structs.
alberth <alberth@openttd.org>
parents: 11730
diff changeset
383 /** Names of the manage newgrfs window widgets. */
8f4775ec6562 (svn r16185) -Codechange: Moving the ShowNewGRFStateWidgets and AddNewGRFWindowWidgets widget enums outside their window structs.
alberth <alberth@openttd.org>
parents: 11730
diff changeset
384 enum ShowNewGRFStateWidgets {
8f4775ec6562 (svn r16185) -Codechange: Moving the ShowNewGRFStateWidgets and AddNewGRFWindowWidgets widget enums outside their window structs.
alberth <alberth@openttd.org>
parents: 11730
diff changeset
385 SNGRFS_PRESET_LIST,
8f4775ec6562 (svn r16185) -Codechange: Moving the ShowNewGRFStateWidgets and AddNewGRFWindowWidgets widget enums outside their window structs.
alberth <alberth@openttd.org>
parents: 11730
diff changeset
386 SNGRFS_PRESET_SAVE,
8f4775ec6562 (svn r16185) -Codechange: Moving the ShowNewGRFStateWidgets and AddNewGRFWindowWidgets widget enums outside their window structs.
alberth <alberth@openttd.org>
parents: 11730
diff changeset
387 SNGRFS_PRESET_DELETE,
8f4775ec6562 (svn r16185) -Codechange: Moving the ShowNewGRFStateWidgets and AddNewGRFWindowWidgets widget enums outside their window structs.
alberth <alberth@openttd.org>
parents: 11730
diff changeset
388 SNGRFS_ADD,
8f4775ec6562 (svn r16185) -Codechange: Moving the ShowNewGRFStateWidgets and AddNewGRFWindowWidgets widget enums outside their window structs.
alberth <alberth@openttd.org>
parents: 11730
diff changeset
389 SNGRFS_REMOVE,
8f4775ec6562 (svn r16185) -Codechange: Moving the ShowNewGRFStateWidgets and AddNewGRFWindowWidgets widget enums outside their window structs.
alberth <alberth@openttd.org>
parents: 11730
diff changeset
390 SNGRFS_MOVE_UP,
8f4775ec6562 (svn r16185) -Codechange: Moving the ShowNewGRFStateWidgets and AddNewGRFWindowWidgets widget enums outside their window structs.
alberth <alberth@openttd.org>
parents: 11730
diff changeset
391 SNGRFS_MOVE_DOWN,
15209
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
392 SNGRFS_FILTER,
11795
8f4775ec6562 (svn r16185) -Codechange: Moving the ShowNewGRFStateWidgets and AddNewGRFWindowWidgets widget enums outside their window structs.
alberth <alberth@openttd.org>
parents: 11730
diff changeset
393 SNGRFS_FILE_LIST,
8f4775ec6562 (svn r16185) -Codechange: Moving the ShowNewGRFStateWidgets and AddNewGRFWindowWidgets widget enums outside their window structs.
alberth <alberth@openttd.org>
parents: 11730
diff changeset
394 SNGRFS_SCROLLBAR,
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
395 SNGRFS_AVAIL_LIST,
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
396 SNGRFS_SCROLL2BAR,
15204
f29231ce72e1 (svn r19833) -Change: Modify NewGRF window towards having combined lists, add captions.
alberth <alberth@openttd.org>
parents: 15203
diff changeset
397 SNGRFS_NEWGRF_INFO_TITLE,
11795
8f4775ec6562 (svn r16185) -Codechange: Moving the ShowNewGRFStateWidgets and AddNewGRFWindowWidgets widget enums outside their window structs.
alberth <alberth@openttd.org>
parents: 11730
diff changeset
398 SNGRFS_NEWGRF_INFO,
8f4775ec6562 (svn r16185) -Codechange: Moving the ShowNewGRFStateWidgets and AddNewGRFWindowWidgets widget enums outside their window structs.
alberth <alberth@openttd.org>
parents: 11730
diff changeset
399 SNGRFS_SET_PARAMETERS,
8f4775ec6562 (svn r16185) -Codechange: Moving the ShowNewGRFStateWidgets and AddNewGRFWindowWidgets widget enums outside their window structs.
alberth <alberth@openttd.org>
parents: 11730
diff changeset
400 SNGRFS_TOGGLE_PALETTE,
8f4775ec6562 (svn r16185) -Codechange: Moving the ShowNewGRFStateWidgets and AddNewGRFWindowWidgets widget enums outside their window structs.
alberth <alberth@openttd.org>
parents: 11730
diff changeset
401 SNGRFS_APPLY_CHANGES,
15211
e28e566488a9 (svn r19840) -Add: Add 'rescan' functionality to the NewGRF window.
alberth <alberth@openttd.org>
parents: 15209
diff changeset
402 SNGRFS_RESCAN_FILES,
11795
8f4775ec6562 (svn r16185) -Codechange: Moving the ShowNewGRFStateWidgets and AddNewGRFWindowWidgets widget enums outside their window structs.
alberth <alberth@openttd.org>
parents: 11730
diff changeset
403 SNGRFS_CONTENT_DOWNLOAD,
8f4775ec6562 (svn r16185) -Codechange: Moving the ShowNewGRFStateWidgets and AddNewGRFWindowWidgets widget enums outside their window structs.
alberth <alberth@openttd.org>
parents: 11730
diff changeset
404 };
8f4775ec6562 (svn r16185) -Codechange: Moving the ShowNewGRFStateWidgets and AddNewGRFWindowWidgets widget enums outside their window structs.
alberth <alberth@openttd.org>
parents: 11730
diff changeset
405
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
406 /**
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
407 * Window for showing NewGRF files
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
408 */
15209
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
409 struct NewGRFWindow : public QueryStringBaseWindow {
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
410 typedef GUIList<const GRFConfig *> GUIGRFConfigList;
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
411
15209
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
412 static const uint EDITBOX_MAX_SIZE = 50;
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
413 static const uint EDITBOX_MAX_LENGTH = 300;
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
414
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
415 static Listing last_sorting; ///< Default sorting of #GUIGRFConfigList.
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
416 static Filtering last_filtering; ///< Default filtering of #GUIGRFConfigList.
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
417 static GUIGRFConfigList::SortFunction * const sorter_funcs[]; ///< Sort functions of the #GUIGRFConfigList.
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
418 static GUIGRFConfigList::FilterFunction * const filter_funcs[]; ///< Filter functions of the #GUIGRFConfigList.
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
419
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
420 GUIGRFConfigList avails; ///< Available (non-active) grfs.
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
421 const GRFConfig *avail_sel; ///< Currently selected available grf. \c NULL is none is selected.
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
422 int avail_pos; ///< Index of #avail_sel if existing, else \c -1.
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
423
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
424 GRFConfig *actives; ///< Temporary active grf list to which changes are made.
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
425 GRFConfig *active_sel; ///< Selected active grf item.
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
426
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
427 GRFConfig **orig_list; ///< List active grfs in the game. Used as initial value, may be updated by the window.
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
428 bool editable; ///< Is the window editable?
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
429 bool show_params; ///< Are the grf-parameters shown in the info-panel?
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
430 bool execute; ///< On pressing 'apply changes' are grf changes applied immediately, or only list is updated.
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
431 int preset; ///< Selected preset.
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
432
15209
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
433 NewGRFWindow(const WindowDesc *desc, bool editable, bool show_params, bool execute, GRFConfig **orig_list) : QueryStringBaseWindow(EDITBOX_MAX_SIZE)
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
434 {
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
435 this->avail_sel = NULL;
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
436 this->avail_pos = -1;
15203
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
437 this->active_sel = NULL;
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
438 this->actives = NULL;
15202
e9db5d2f634e (svn r19831) -Codechange: Rename formal parameters of the constructor to match data member variable names.
alberth <alberth@openttd.org>
parents: 15201
diff changeset
439 this->orig_list = orig_list;
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
440 this->editable = editable;
15202
e9db5d2f634e (svn r19831) -Codechange: Rename formal parameters of the constructor to match data member variable names.
alberth <alberth@openttd.org>
parents: 15201
diff changeset
441 this->execute = execute;
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
442 this->show_params = show_params;
9677
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
443 this->preset = -1;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
444
15203
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
445 CopyGRFConfigList(&this->actives, *orig_list, false);
9677
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
446 GetGRFPresetList(&_grf_preset_list);
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
447
13171
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
448 this->InitNested(desc);
15209
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
449 InitializeTextBuffer(&this->text, this->edit_str_buf, this->edit_str_size, EDITBOX_MAX_LENGTH);
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
450 this->SetFocusedWidget(SNGRFS_FILTER);
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
451
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
452 this->avails.SetListing(this->last_sorting);
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
453 this->avails.SetFiltering(this->last_filtering);
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
454 this->avails.SetSortFuncs(this->sorter_funcs);
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
455 this->avails.SetFilterFuncs(this->filter_funcs);
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
456 this->avails.ForceRebuild();
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
457
13170
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
458 this->OnInvalidateData(2);
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
459 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
460
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
461 ~NewGRFWindow()
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
462 {
15598
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
463 DeleteWindowByClass(WC_GRF_PARAMETERS);
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
464
10910
9276e5a96995 (svn r15245) -Fix: don't "save" the NewGRF settings on closing the NewGRF window when the content of the window isn't editable
rubidium <rubidium@openttd.org>
parents: 10890
diff changeset
465 if (this->editable && !this->execute) {
15203
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
466 CopyGRFConfigList(this->orig_list, this->actives, true);
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
467 ResetGRFConfig(false);
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
468 ReloadNewGRFData();
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
469 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
470
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
471 /* Remove the temporary copy of grf-list used in window */
15203
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
472 ClearGRFConfigList(&this->actives);
9677
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
473 _grf_preset_list.Clear();
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
474 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
475
13705
8dee47e001b2 (svn r18230) -Codechange: Allow fill stepsize to be set from Window::UpdateWidgetSize().
alberth <alberth@openttd.org>
parents: 13704
diff changeset
476 virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
13171
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
477 {
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
478 switch (widget) {
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
479 case SNGRFS_FILE_LIST:
15205
0dca88008a3a (svn r19834) -Change: Replace matrix list widget in NewGRF gui by a panel with black background.
alberth <alberth@openttd.org>
parents: 15204
diff changeset
480 resize->height = max(12, FONT_HEIGHT_NORMAL + 2);
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
481 size->height = max(size->height, WD_FRAMERECT_TOP + 6 * resize->height + WD_FRAMERECT_BOTTOM);
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
482 break;
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
483
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
484 case SNGRFS_AVAIL_LIST:
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
485 resize->height = max(12, FONT_HEIGHT_NORMAL + 2);
15205
0dca88008a3a (svn r19834) -Change: Replace matrix list widget in NewGRF gui by a panel with black background.
alberth <alberth@openttd.org>
parents: 15204
diff changeset
486 size->height = max(size->height, WD_FRAMERECT_TOP + 8 * resize->height + WD_FRAMERECT_BOTTOM);
13171
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
487 break;
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
488
15204
f29231ce72e1 (svn r19833) -Change: Modify NewGRF window towards having combined lists, add captions.
alberth <alberth@openttd.org>
parents: 15203
diff changeset
489 case SNGRFS_NEWGRF_INFO_TITLE: {
f29231ce72e1 (svn r19833) -Change: Modify NewGRF window towards having combined lists, add captions.
alberth <alberth@openttd.org>
parents: 15203
diff changeset
490 Dimension dim = GetStringBoundingBox(STR_NEWGRF_SETTINGS_INFO_TITLE);
f29231ce72e1 (svn r19833) -Change: Modify NewGRF window towards having combined lists, add captions.
alberth <alberth@openttd.org>
parents: 15203
diff changeset
491 size->height = max(size->height, dim.height + WD_FRAMETEXT_TOP + WD_FRAMETEXT_BOTTOM);
f29231ce72e1 (svn r19833) -Change: Modify NewGRF window towards having combined lists, add captions.
alberth <alberth@openttd.org>
parents: 15203
diff changeset
492 size->width = max(size->width, dim.width + WD_FRAMETEXT_LEFT + WD_FRAMETEXT_RIGHT);
f29231ce72e1 (svn r19833) -Change: Modify NewGRF window towards having combined lists, add captions.
alberth <alberth@openttd.org>
parents: 15203
diff changeset
493 break;
f29231ce72e1 (svn r19833) -Change: Modify NewGRF window towards having combined lists, add captions.
alberth <alberth@openttd.org>
parents: 15203
diff changeset
494 }
f29231ce72e1 (svn r19833) -Change: Modify NewGRF window towards having combined lists, add captions.
alberth <alberth@openttd.org>
parents: 15203
diff changeset
495
13171
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
496 case SNGRFS_NEWGRF_INFO:
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
497 size->height = max(size->height, WD_FRAMERECT_TOP + 10 * FONT_HEIGHT_NORMAL + WD_FRAMERECT_BOTTOM + padding.height + 2);
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
498 break;
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
499
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
500 case SNGRFS_PRESET_LIST: {
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
501 Dimension d = GetStringBoundingBox(STR_NUM_CUSTOM);
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
502 for (uint i = 0; i < _grf_preset_list.Length(); i++) {
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
503 if (_grf_preset_list[i] != NULL) {
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
504 SetDParamStr(0, _grf_preset_list[i]);
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
505 d = maxdim(d, GetStringBoundingBox(STR_JUST_RAW_STRING));
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
506 }
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
507 }
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
508 d.width += padding.width;
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
509 *size = maxdim(d, *size);
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
510 break;
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
511 }
15194
2d9d9be17bbe (svn r19823) -Fix: Ensure that both texts of the newgrf gui download button fit.
alberth <alberth@openttd.org>
parents: 15185
diff changeset
512
2d9d9be17bbe (svn r19823) -Fix: Ensure that both texts of the newgrf gui download button fit.
alberth <alberth@openttd.org>
parents: 15185
diff changeset
513 case SNGRFS_CONTENT_DOWNLOAD: {
2d9d9be17bbe (svn r19823) -Fix: Ensure that both texts of the newgrf gui download button fit.
alberth <alberth@openttd.org>
parents: 15185
diff changeset
514 Dimension d = GetStringBoundingBox(STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON);
2d9d9be17bbe (svn r19823) -Fix: Ensure that both texts of the newgrf gui download button fit.
alberth <alberth@openttd.org>
parents: 15185
diff changeset
515 *size = maxdim(d, GetStringBoundingBox(STR_INTRO_ONLINE_CONTENT));
2d9d9be17bbe (svn r19823) -Fix: Ensure that both texts of the newgrf gui download button fit.
alberth <alberth@openttd.org>
parents: 15185
diff changeset
516 size->width += padding.width;
2d9d9be17bbe (svn r19823) -Fix: Ensure that both texts of the newgrf gui download button fit.
alberth <alberth@openttd.org>
parents: 15185
diff changeset
517 size->height += padding.height;
2d9d9be17bbe (svn r19823) -Fix: Ensure that both texts of the newgrf gui download button fit.
alberth <alberth@openttd.org>
parents: 15185
diff changeset
518 break;
2d9d9be17bbe (svn r19823) -Fix: Ensure that both texts of the newgrf gui download button fit.
alberth <alberth@openttd.org>
parents: 15185
diff changeset
519 }
13171
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
520 }
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
521 }
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
522
13344
04b02b2cfa2b (svn r17853) -Codechange: remove the 'delta' parameter from OnResize; it was used in ways that aren't always wanted, causing bugs and the like. Also with nested widgets most reasons for handling OnResize have gone.
rubidium <rubidium@openttd.org>
parents: 13277
diff changeset
523 virtual void OnResize()
13171
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
524 {
14037
ca29deba0f1a (svn r18580) -Codechange: Use widget information only for setting scrollbar capacity.
alberth <alberth@openttd.org>
parents: 13968
diff changeset
525 this->vscroll.SetCapacityFromWidget(this, SNGRFS_FILE_LIST);
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
526 this->vscroll2.SetCapacityFromWidget(this, SNGRFS_AVAIL_LIST);
13171
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
527 }
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
528
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
529 virtual void SetStringParameters(int widget) const
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
530 {
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
531 switch (widget) {
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
532 case SNGRFS_PRESET_LIST:
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
533 if (this->preset == -1) {
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
534 SetDParam(0, STR_NUM_CUSTOM);
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
535 } else {
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
536 SetDParam(0, STR_JUST_RAW_STRING);
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
537 SetDParamStr(1, _grf_preset_list[this->preset]);
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
538 }
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
539 break;
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
540 }
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
541 }
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
542
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
543 virtual void OnPaint()
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
544 {
9273
72a6d2e60834 (svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium <rubidium@openttd.org>
parents: 9207
diff changeset
545 this->DrawWidgets();
15209
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
546 this->DrawEditBox(SNGRFS_FILTER);
13171
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
547 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
548
15207
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
549 /** Pick the palette for the sprite of the grf to display.
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
550 * @param c grf to display.
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
551 * @return Palette for the sprite.
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
552 */
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
553 FORCEINLINE PaletteID GetPalette(const GRFConfig *c) const
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
554 {
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
555 PaletteID pal;
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
556
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
557 /* Pick a colour */
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
558 switch (c->status) {
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
559 case GCS_NOT_FOUND:
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
560 case GCS_DISABLED:
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
561 pal = PALETTE_TO_RED;
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
562 break;
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
563 case GCS_ACTIVATED:
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
564 pal = PALETTE_TO_GREEN;
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
565 break;
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
566 default:
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
567 pal = PALETTE_TO_BLUE;
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
568 break;
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
569 }
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
570
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
571 /* Do not show a "not-failure" colour when it actually failed to load */
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
572 if (pal != PALETTE_TO_RED) {
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
573 if (HasBit(c->flags, GCF_STATIC)) {
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
574 pal = PALETTE_TO_GREY;
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
575 } else if (HasBit(c->flags, GCF_COMPATIBLE)) {
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
576 pal = PALETTE_TO_ORANGE;
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
577 }
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
578 }
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
579
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
580 return pal;
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
581 }
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
582
13171
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
583 virtual void DrawWidget(const Rect &r, int widget) const
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
584 {
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
585 switch (widget) {
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
586 case SNGRFS_FILE_LIST: {
15205
0dca88008a3a (svn r19834) -Change: Replace matrix list widget in NewGRF gui by a panel with black background.
alberth <alberth@openttd.org>
parents: 15204
diff changeset
587 GfxFillRect(r.left + 1, r.top + 1, r.right - 1, r.bottom - 1, 0xD7);
0dca88008a3a (svn r19834) -Change: Replace matrix list widget in NewGRF gui by a panel with black background.
alberth <alberth@openttd.org>
parents: 15204
diff changeset
588
0dca88008a3a (svn r19834) -Change: Replace matrix list widget in NewGRF gui by a panel with black background.
alberth <alberth@openttd.org>
parents: 15204
diff changeset
589 uint step_height = this->GetWidget<NWidgetBase>(SNGRFS_FILE_LIST)->resize_y;
0dca88008a3a (svn r19834) -Change: Replace matrix list widget in NewGRF gui by a panel with black background.
alberth <alberth@openttd.org>
parents: 15204
diff changeset
590 uint y = r.top + WD_FRAMERECT_TOP;
15220
ef4601cbbb98 (svn r19849) -Fix: Center sprite and text seperately in the newgrf gui active list.
alberth <alberth@openttd.org>
parents: 15219
diff changeset
591 int sprite_offset_y = (step_height - 10) / 2;
ef4601cbbb98 (svn r19849) -Fix: Center sprite and text seperately in the newgrf gui active list.
alberth <alberth@openttd.org>
parents: 15219
diff changeset
592 int offset_y = (step_height - FONT_HEIGHT_NORMAL) / 2;
13171
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
593
13659
2c473236b6fd (svn r18183) -Codechange: make the NewGRF window RTL aware
rubidium <rubidium@openttd.org>
parents: 13654
diff changeset
594 bool rtl = _dynlang.text_dir == TD_RTL;
2c473236b6fd (svn r18183) -Codechange: make the NewGRF window RTL aware
rubidium <rubidium@openttd.org>
parents: 13654
diff changeset
595 uint text_left = rtl ? r.left + WD_FRAMERECT_LEFT : r.left + 25;
2c473236b6fd (svn r18183) -Codechange: make the NewGRF window RTL aware
rubidium <rubidium@openttd.org>
parents: 13654
diff changeset
596 uint text_right = rtl ? r.right - 25 : r.right - WD_FRAMERECT_RIGHT;
2c473236b6fd (svn r18183) -Codechange: make the NewGRF window RTL aware
rubidium <rubidium@openttd.org>
parents: 13654
diff changeset
597 uint square_left = rtl ? r.right - 15 : r.left + 5;
2c473236b6fd (svn r18183) -Codechange: make the NewGRF window RTL aware
rubidium <rubidium@openttd.org>
parents: 13654
diff changeset
598 uint warning_left = rtl ? r.right - 30 : r.left + 20;
2c473236b6fd (svn r18183) -Codechange: make the NewGRF window RTL aware
rubidium <rubidium@openttd.org>
parents: 13654
diff changeset
599
13171
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
600 int i = 0;
15203
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
601 for (const GRFConfig *c = this->actives; c != NULL; c = c->next, i++) {
13171
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
602 if (this->vscroll.IsVisible(i)) {
14711
74b0a8a64ff5 (svn r19295) -Codechange: introduce wrapper functions for GRFConfig::name/info
yexo <yexo@openttd.org>
parents: 14676
diff changeset
603 const char *text = c->GetName();
15205
0dca88008a3a (svn r19834) -Change: Replace matrix list widget in NewGRF gui by a panel with black background.
alberth <alberth@openttd.org>
parents: 15204
diff changeset
604 bool h = (this->active_sel == c);
15207
e31a7ac11eb1 (svn r19836) -Codechange: Move sprite palette selection code in NewGRF gui to its own method.
alberth <alberth@openttd.org>
parents: 15205
diff changeset
605 PaletteID pal = this->GetPalette(c);
13171
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
606
15205
0dca88008a3a (svn r19834) -Change: Replace matrix list widget in NewGRF gui by a panel with black background.
alberth <alberth@openttd.org>
parents: 15204
diff changeset
607 if (h) GfxFillRect(r.left + 1, y, r.right - 1, y + step_height - 1, 156);
13696
619a107df4a1 (svn r18221) -Codechange: make the NewGRF window big font aware
rubidium <rubidium@openttd.org>
parents: 13695
diff changeset
608 DrawSprite(SPR_SQUARE, pal, square_left, y + sprite_offset_y);
619a107df4a1 (svn r18221) -Codechange: make the NewGRF window big font aware
rubidium <rubidium@openttd.org>
parents: 13695
diff changeset
609 if (c->error != NULL) DrawSprite(SPR_WARNING_SIGN, 0, warning_left, y + sprite_offset_y);
13659
2c473236b6fd (svn r18183) -Codechange: make the NewGRF window RTL aware
rubidium <rubidium@openttd.org>
parents: 13654
diff changeset
610 uint txtoffset = c->error == NULL ? 0 : 10;
15220
ef4601cbbb98 (svn r19849) -Fix: Center sprite and text seperately in the newgrf gui active list.
alberth <alberth@openttd.org>
parents: 15219
diff changeset
611 DrawString(text_left + (rtl ? 0 : txtoffset), text_right - (rtl ? txtoffset : 0), y + offset_y, text, h ? TC_WHITE : TC_ORANGE);
15205
0dca88008a3a (svn r19834) -Change: Replace matrix list widget in NewGRF gui by a panel with black background.
alberth <alberth@openttd.org>
parents: 15204
diff changeset
612 y += step_height;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
613 }
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
614 }
13171
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
615 } break;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
616
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
617 case SNGRFS_AVAIL_LIST: {
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
618 GfxFillRect(r.left + 1, r.top + 1, r.right - 1, r.bottom - 1, 0xD7);
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
619
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
620 uint step_height = this->GetWidget<NWidgetBase>(SNGRFS_AVAIL_LIST)->resize_y;
15219
861c943801ad (svn r19848) -Fix (r19837): Center the texts of the inactive newgrfs.
alberth <alberth@openttd.org>
parents: 15216
diff changeset
621 int offset_y = (step_height - FONT_HEIGHT_NORMAL) / 2;
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
622 uint y = r.top + WD_FRAMERECT_TOP;
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
623 uint min_index = this->vscroll2.GetPosition();
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
624 uint max_index = min(min_index + this->vscroll2.GetCapacity(), this->avails.Length());
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
625
15599
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
626 for (uint i = min_index; i < max_index; i++) {
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
627 const GRFConfig *c = this->avails[i];
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
628 bool h = (c == this->avail_sel);
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
629 const char *text = c->GetName();
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
630
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
631 if (h) GfxFillRect(r.left + 1, y, r.right - 1, y + step_height - 1, 156);
15219
861c943801ad (svn r19848) -Fix (r19837): Center the texts of the inactive newgrfs.
alberth <alberth@openttd.org>
parents: 15216
diff changeset
632 DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y + offset_y, text, h ? TC_WHITE : TC_SILVER);
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
633 y += step_height;
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
634 }
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
635 break;
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
636 }
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
637
15204
f29231ce72e1 (svn r19833) -Change: Modify NewGRF window towards having combined lists, add captions.
alberth <alberth@openttd.org>
parents: 15203
diff changeset
638 case SNGRFS_NEWGRF_INFO_TITLE:
f29231ce72e1 (svn r19833) -Change: Modify NewGRF window towards having combined lists, add captions.
alberth <alberth@openttd.org>
parents: 15203
diff changeset
639 /* Create the nice grayish rectangle at the details top. */
f29231ce72e1 (svn r19833) -Change: Modify NewGRF window towards having combined lists, add captions.
alberth <alberth@openttd.org>
parents: 15203
diff changeset
640 GfxFillRect(r.left + 1, r.top + 1, r.right - 1, r.bottom - 1, 157);
15400
821c26b30fd9 (svn r20043) -Codechange: Introduce vertical alignment for DrawStringMultiLine().
alberth <alberth@openttd.org>
parents: 15345
diff changeset
641 DrawString(r.left, r.right, (r.top + r.bottom - FONT_HEIGHT_NORMAL) / 2, STR_NEWGRF_SETTINGS_INFO_TITLE, TC_FROMSTRING, SA_HOR_CENTER);
15204
f29231ce72e1 (svn r19833) -Change: Modify NewGRF window towards having combined lists, add captions.
alberth <alberth@openttd.org>
parents: 15203
diff changeset
642 break;
f29231ce72e1 (svn r19833) -Change: Modify NewGRF window towards having combined lists, add captions.
alberth <alberth@openttd.org>
parents: 15203
diff changeset
643
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
644 case SNGRFS_NEWGRF_INFO: {
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
645 const GRFConfig *selected = this->active_sel;
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
646 if (selected == NULL) selected = this->avail_sel;
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
647 if (selected != NULL) {
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
648 ShowNewGRFInfo(selected, r.left + WD_FRAMERECT_LEFT, r.top + WD_FRAMERECT_TOP, r.right - WD_FRAMERECT_RIGHT, r.bottom - WD_FRAMERECT_BOTTOM, this->show_params);
13171
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
649 }
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
650 break;
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
651 }
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
652 }
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
653 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
654
14409
1eaefde497fd (svn r18966) -Codechange: Remove Window::OnDoubleClick() in favour of a parameter for OnClick().
frosch <frosch@openttd.org>
parents: 14391
diff changeset
655 virtual void OnClick(Point pt, int widget, int click_count)
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
656 {
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
657 switch (widget) {
9677
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
658 case SNGRFS_PRESET_LIST: {
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
659 DropDownList *list = new DropDownList();
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
660
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
661 /* Add 'None' option for clearing list */
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
662 list->push_back(new DropDownListStringItem(STR_NONE, -1, false));
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
663
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
664 for (uint i = 0; i < _grf_preset_list.Length(); i++) {
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
665 if (_grf_preset_list[i] != NULL) {
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
666 list->push_back(new DropDownListPresetItem(i));
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
667 }
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
668 }
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
669
15212
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
670 this->DeleteChildWindows(WC_QUERY_STRING); // Remove the parameter query window
9677
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
671 ShowDropDownList(this, list, this->preset, SNGRFS_PRESET_LIST);
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
672 break;
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
673 }
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
674
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
675 case SNGRFS_PRESET_SAVE:
12632
e41943276802 (svn r17075) -Codechange: rename ~750 strings to be more uniform with their relatives
rubidium <rubidium@openttd.org>
parents: 12619
diff changeset
676 ShowQueryString(STR_EMPTY, STR_NEWGRF_SETTINGS_PRESET_SAVE_QUERY, 32, 100, this, CS_ALPHANUMERAL, QSF_NONE);
9677
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
677 break;
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
678
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
679 case SNGRFS_PRESET_DELETE:
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
680 if (this->preset == -1) return;
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
681
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
682 DeleteGRFPresetFromConfig(_grf_preset_list[this->preset]);
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
683 GetGRFPresetList(&_grf_preset_list);
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
684 this->preset = -1;
13170
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
685 this->InvalidateData();
13413
a3d40c489804 (svn r17922) -Fix [FS#3291]: crash when closing NewGRF parameter window with no NewGRF selected
rubidium <rubidium@openttd.org>
parents: 13411
diff changeset
686 this->DeleteChildWindows(WC_QUERY_STRING); // Remove the parameter query window
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
687 break;
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
688
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
689 case SNGRFS_MOVE_UP: { // Move GRF up
15345
52c9ee163c8f (svn r19986) -Fix (r19841): One could add and remove Grfs from the list via doubleclicking even if editing the list is not allowed.
frosch <frosch@openttd.org>
parents: 15331
diff changeset
690 if (this->active_sel == NULL || !this->editable) break;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
691
14390
48685f9d7f68 (svn r18947) -Fix [FS#1510]: after clicking move up/move down in the newgrf/ai the selected item could be out of range
yexo <yexo@openttd.org>
parents: 14319
diff changeset
692 int pos = 0;
15203
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
693 for (GRFConfig **pc = &this->actives; *pc != NULL; pc = &(*pc)->next, pos++) {
15200
0865df725761 (svn r19829) -Codechange: Extract assignment from the condition-check in the for statement.
alberth <alberth@openttd.org>
parents: 15194
diff changeset
694 GRFConfig *c = *pc;
15203
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
695 if (c->next == this->active_sel) {
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
696 c->next = this->active_sel->next;
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
697 this->active_sel->next = c;
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
698 *pc = this->active_sel;
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
699 break;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
700 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
701 }
14390
48685f9d7f68 (svn r18947) -Fix [FS#1510]: after clicking move up/move down in the newgrf/ai the selected item could be out of range
yexo <yexo@openttd.org>
parents: 14319
diff changeset
702 this->vscroll.ScrollTowards(pos);
9677
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
703 this->preset = -1;
13170
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
704 this->InvalidateData();
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
705 break;
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
706 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
707
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
708 case SNGRFS_MOVE_DOWN: { // Move GRF down
15345
52c9ee163c8f (svn r19986) -Fix (r19841): One could add and remove Grfs from the list via doubleclicking even if editing the list is not allowed.
frosch <frosch@openttd.org>
parents: 15331
diff changeset
709 if (this->active_sel == NULL || !this->editable) break;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
710
14390
48685f9d7f68 (svn r18947) -Fix [FS#1510]: after clicking move up/move down in the newgrf/ai the selected item could be out of range
yexo <yexo@openttd.org>
parents: 14319
diff changeset
711 int pos = 1; // Start at 1 as we swap the selected newgrf with the next one
15203
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
712 for (GRFConfig **pc = &this->actives; *pc != NULL; pc = &(*pc)->next, pos++) {
15200
0865df725761 (svn r19829) -Codechange: Extract assignment from the condition-check in the for statement.
alberth <alberth@openttd.org>
parents: 15194
diff changeset
713 GRFConfig *c = *pc;
15203
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
714 if (c == this->active_sel) {
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
715 *pc = c->next;
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
716 c->next = c->next->next;
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
717 (*pc)->next = c;
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
718 break;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
719 }
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
720 }
14390
48685f9d7f68 (svn r18947) -Fix [FS#1510]: after clicking move up/move down in the newgrf/ai the selected item could be out of range
yexo <yexo@openttd.org>
parents: 14319
diff changeset
721 this->vscroll.ScrollTowards(pos);
9677
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
722 this->preset = -1;
13170
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
723 this->InvalidateData();
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
724 break;
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
725 }
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
726
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
727 case SNGRFS_FILE_LIST: { // Select an active GRF.
15563
011c8bee59d1 (svn r20223) -Codechange: Replace scrolled row calculations by a call to GetScrolledRowFromWidget().
alberth <alberth@openttd.org>
parents: 15557
diff changeset
728 uint i = this->vscroll.GetScrolledRowFromWidget(pt.y, this, SNGRFS_FILE_LIST);
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
729
15201
071e920abcfb (svn r19830) -Codechange: Move variable declarations to their first use.
alberth <alberth@openttd.org>
parents: 15200
diff changeset
730 GRFConfig *c;
15203
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
731 for (c = this->actives; c != NULL && i > 0; c = c->next, i--) {}
13413
a3d40c489804 (svn r17922) -Fix [FS#3291]: crash when closing NewGRF parameter window with no NewGRF selected
rubidium <rubidium@openttd.org>
parents: 13411
diff changeset
732
15598
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
733 if (this->active_sel != c) DeleteWindowByClass(WC_GRF_PARAMETERS);
15203
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
734 this->active_sel = c;
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
735 this->avail_sel = NULL;
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
736 this->avail_pos = -1;
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
737
13170
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
738 this->InvalidateData();
15212
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
739 if (click_count == 1) break;
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
740 }
15579
5f128be91f59 (svn r20239) -Doc: Give a common name to all fall throughs (FALL THROUGH).
terkhen <terkhen@openttd.org>
parents: 15563
diff changeset
741 /* FALL THROUGH, with double click. */
15212
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
742 case SNGRFS_REMOVE: { // Remove GRF
15345
52c9ee163c8f (svn r19986) -Fix (r19841): One could add and remove Grfs from the list via doubleclicking even if editing the list is not allowed.
frosch <frosch@openttd.org>
parents: 15331
diff changeset
743 if (this->active_sel == NULL || !this->editable) break;
15598
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
744 DeleteWindowByClass(WC_GRF_PARAMETERS);
15212
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
745
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
746 /* Choose the next GRF file to be the selected file. */
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
747 GRFConfig *newsel = this->active_sel->next;
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
748 for (GRFConfig **pc = &this->actives; *pc != NULL; pc = &(*pc)->next) {
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
749 GRFConfig *c = *pc;
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
750 /* If the new selection is empty (i.e. we're deleting the last item
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
751 * in the list, pick the file just before the selected file */
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
752 if (newsel == NULL && c->next == this->active_sel) newsel = c;
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
753
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
754 if (c == this->active_sel) {
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
755 *pc = c->next;
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
756 delete c;
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
757 break;
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
758 }
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
759 }
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
760
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
761 this->active_sel = newsel;
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
762 this->preset = -1;
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
763 this->avail_pos = -1;
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
764 this->avail_sel = NULL;
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
765 this->avails.ForceRebuild();
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
766 this->InvalidateData(2);
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
767 break;
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
768 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
769
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
770 case SNGRFS_AVAIL_LIST: { // Select a non-active GRF.
15563
011c8bee59d1 (svn r20223) -Codechange: Replace scrolled row calculations by a call to GetScrolledRowFromWidget().
alberth <alberth@openttd.org>
parents: 15557
diff changeset
771 uint i = this->vscroll2.GetScrolledRowFromWidget(pt.y, this, SNGRFS_AVAIL_LIST);
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
772 this->active_sel = NULL;
15598
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
773 DeleteWindowByClass(WC_GRF_PARAMETERS);
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
774 if (i < this->avails.Length()) {
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
775 this->avail_sel = this->avails[i];
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
776 this->avail_pos = i;
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
777 }
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
778 this->InvalidateData();
15212
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
779 if (click_count == 1) break;
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
780 }
15579
5f128be91f59 (svn r20239) -Doc: Give a common name to all fall throughs (FALL THROUGH).
terkhen <terkhen@openttd.org>
parents: 15563
diff changeset
781 /* FALL THROUGH, with double click. */
15212
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
782 case SNGRFS_ADD: {
15345
52c9ee163c8f (svn r19986) -Fix (r19841): One could add and remove Grfs from the list via doubleclicking even if editing the list is not allowed.
frosch <frosch@openttd.org>
parents: 15331
diff changeset
783 if (this->avail_sel == NULL || !this->editable) break;
15212
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
784
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
785 GRFConfig **list;
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
786 /* Find last entry in the list, checking for duplicate grfid on the way */
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
787 for (list = &this->actives; *list != NULL; list = &(*list)->next) {
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
788 if ((*list)->ident.grfid == this->avail_sel->ident.grfid) {
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
789 ShowErrorMessage(STR_NEWGRF_DUPLICATE_GRFID, INVALID_STRING_ID, WL_INFO);
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
790 return;
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
791 }
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
792 }
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
793
15588
04eb4c42c0a0 (svn r20248) -Codechange: use a copy-constructor instead of a separate function co clone GRFConfig/GRFError
yexo <yexo@openttd.org>
parents: 15579
diff changeset
794 GRFConfig *c = new GRFConfig(*this->avail_sel); // Copy GRF details from scanned list.
15212
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
795 *list = c; // Append GRF config to configuration list.
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
796
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
797 /* Select next (or previous, if last one) item in the list. */
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
798 int new_pos = this->avail_pos + 1;
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
799 if (new_pos >= (int)this->avails.Length()) new_pos = this->avail_pos - 1;
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
800 this->avail_pos = new_pos;
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
801 if (new_pos >= 0) this->avail_sel = this->avails[new_pos];
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
802
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
803 this->avails.ForceRebuild();
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
804 this->InvalidateData(2);
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
805 break;
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
806 }
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
807
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
808 case SNGRFS_APPLY_CHANGES: // Apply changes made to GRF list
15345
52c9ee163c8f (svn r19986) -Fix (r19841): One could add and remove Grfs from the list via doubleclicking even if editing the list is not allowed.
frosch <frosch@openttd.org>
parents: 15331
diff changeset
809 if (!this->editable) break;
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
810 if (this->execute) {
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
811 ShowQuery(
12632
e41943276802 (svn r17075) -Codechange: rename ~750 strings to be more uniform with their relatives
rubidium <rubidium@openttd.org>
parents: 12619
diff changeset
812 STR_NEWGRF_POPUP_CAUTION_CAPTION,
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
813 STR_NEWGRF_CONFIRMATION_TEXT,
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
814 this,
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
815 NewGRFConfirmationCallback
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
816 );
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
817 } else {
15203
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
818 CopyGRFConfigList(this->orig_list, this->actives, true);
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
819 ResetGRFConfig(false);
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
820 ReloadNewGRFData();
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
821 }
15212
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
822 this->DeleteChildWindows(WC_QUERY_STRING); // Remove the parameter query window
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
823 break;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
824
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
825 case SNGRFS_SET_PARAMETERS: { // Edit parameters
15345
52c9ee163c8f (svn r19986) -Fix (r19841): One could add and remove Grfs from the list via doubleclicking even if editing the list is not allowed.
frosch <frosch@openttd.org>
parents: 15331
diff changeset
826 if (this->active_sel == NULL || !this->editable || !this->show_params) break;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
827
15598
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
828 OpenGRFParameterWindow(this->active_sel);
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
829 break;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
830 }
10066
42653fe231a2 (svn r14233) -Feature/Fix [FS#2172]: save the palette of the loaded NewGRFs in the savegame, so joining with a server using Windows palette will make a client with the DOS palette do palette conversion and (thus) not cause a desync due to the different palettes disabling different NewGRFs.
rubidium <rubidium@openttd.org>
parents: 9957
diff changeset
831
10793
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
832 case SNGRFS_TOGGLE_PALETTE:
15345
52c9ee163c8f (svn r19986) -Fix (r19841): One could add and remove Grfs from the list via doubleclicking even if editing the list is not allowed.
frosch <frosch@openttd.org>
parents: 15331
diff changeset
833 if (this->active_sel != NULL || !this->editable) {
15593
7d5548deab3f (svn r20253) -Codechange: change GRFConfig::windows_paletted into a bitmask/bitset
rubidium <rubidium@openttd.org>
parents: 15588
diff changeset
834 this->active_sel->palette ^= GRFP_USE_MASK;
10066
42653fe231a2 (svn r14233) -Feature/Fix [FS#2172]: save the palette of the loaded NewGRFs in the savegame, so joining with a server using Windows palette will make a client with the DOS palette do palette conversion and (thus) not cause a desync due to the different palettes disabling different NewGRFs.
rubidium <rubidium@openttd.org>
parents: 9957
diff changeset
835 this->SetDirty();
42653fe231a2 (svn r14233) -Feature/Fix [FS#2172]: save the palette of the loaded NewGRFs in the savegame, so joining with a server using Windows palette will make a client with the DOS palette do palette conversion and (thus) not cause a desync due to the different palettes disabling different NewGRFs.
rubidium <rubidium@openttd.org>
parents: 9957
diff changeset
836 }
42653fe231a2 (svn r14233) -Feature/Fix [FS#2172]: save the palette of the loaded NewGRFs in the savegame, so joining with a server using Windows palette will make a client with the DOS palette do palette conversion and (thus) not cause a desync due to the different palettes disabling different NewGRFs.
rubidium <rubidium@openttd.org>
parents: 9957
diff changeset
837 break;
10793
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
838
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
839 case SNGRFS_CONTENT_DOWNLOAD:
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
840 if (!_network_available) {
14645
b7a22979b84e (svn r19224) -Codechange: change parameters passed to ShowErrorMessage() a bit
smatz <smatz@openttd.org>
parents: 14561
diff changeset
841 ShowErrorMessage(STR_NETWORK_ERROR_NOTAVAILABLE, INVALID_STRING_ID, WL_ERROR);
10793
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
842 } else {
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
843 #if defined(ENABLE_NETWORK)
15331
fcc18215652e (svn r19972) -Change: Use the md5sum from the previous save of the game for BaNaNaS instead of the initial (when the grf was added) md5sum from the gamelog. Neither method is 'better', but this way it is independent from the gamelog.
frosch <frosch@openttd.org>
parents: 15220
diff changeset
844 this->DeleteChildWindows(WC_QUERY_STRING); // Remove the parameter query window
15212
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
845
15331
fcc18215652e (svn r19972) -Change: Use the md5sum from the previous save of the game for BaNaNaS instead of the initial (when the grf was added) md5sum from the gamelog. Neither method is 'better', but this way it is independent from the gamelog.
frosch <frosch@openttd.org>
parents: 15220
diff changeset
846 /* Only show the things in the current list, or everything when nothing's selected */
10793
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
847 ContentVector cv;
15203
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
848 for (const GRFConfig *c = this->actives; c != NULL; c = c->next) {
10886
b22fa54bad95 (svn r15221) -Change [FS#2574]: only show missing NewGRFs when opening the content download window from a NewGRF list and there are missing NewGRFs, otherwise show just all NewGRFs the system knows.
rubidium <rubidium@openttd.org>
parents: 10808
diff changeset
849 if (c->status != GCS_NOT_FOUND && !HasBit(c->flags, GCF_COMPATIBLE)) continue;
b22fa54bad95 (svn r15221) -Change [FS#2574]: only show missing NewGRFs when opening the content download window from a NewGRF list and there are missing NewGRFs, otherwise show just all NewGRFs the system knows.
rubidium <rubidium@openttd.org>
parents: 10808
diff changeset
850
10793
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
851 ContentInfo *ci = new ContentInfo();
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
852 ci->type = CONTENT_TYPE_NEWGRF;
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
853 ci->state = ContentInfo::DOES_NOT_EXIST;
14711
74b0a8a64ff5 (svn r19295) -Codechange: introduce wrapper functions for GRFConfig::name/info
yexo <yexo@openttd.org>
parents: 14676
diff changeset
854 ttd_strlcpy(ci->name, c->GetName(), lengthof(ci->name));
14676
353df593bee0 (svn r19255) -Codechange: encapsulate GRFIdentifier in GRFConfig instead of subclassing it
yexo <yexo@openttd.org>
parents: 14645
diff changeset
855 ci->unique_id = BSWAP32(c->ident.grfid);
15331
fcc18215652e (svn r19972) -Change: Use the md5sum from the previous save of the game for BaNaNaS instead of the initial (when the grf was added) md5sum from the gamelog. Neither method is 'better', but this way it is independent from the gamelog.
frosch <frosch@openttd.org>
parents: 15220
diff changeset
856 memcpy(ci->md5sum, HasBit(c->flags, GCF_COMPATIBLE) ? c->original_md5sum : c->ident.md5sum, sizeof(ci->md5sum));
10793
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
857 *cv.Append() = ci;
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
858 }
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
859 ShowNetworkContentListWindow(cv.Length() == 0 ? NULL : &cv, CONTENT_TYPE_NEWGRF);
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
860 #endif
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
861 }
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
862 break;
15211
e28e566488a9 (svn r19840) -Add: Add 'rescan' functionality to the NewGRF window.
alberth <alberth@openttd.org>
parents: 15209
diff changeset
863
e28e566488a9 (svn r19840) -Add: Add 'rescan' functionality to the NewGRF window.
alberth <alberth@openttd.org>
parents: 15209
diff changeset
864 case SNGRFS_RESCAN_FILES:
e28e566488a9 (svn r19840) -Add: Add 'rescan' functionality to the NewGRF window.
alberth <alberth@openttd.org>
parents: 15209
diff changeset
865 ScanNewGRFFiles();
e28e566488a9 (svn r19840) -Add: Add 'rescan' functionality to the NewGRF window.
alberth <alberth@openttd.org>
parents: 15209
diff changeset
866 this->avail_sel = NULL;
e28e566488a9 (svn r19840) -Add: Add 'rescan' functionality to the NewGRF window.
alberth <alberth@openttd.org>
parents: 15209
diff changeset
867 this->avail_pos = -1;
e28e566488a9 (svn r19840) -Add: Add 'rescan' functionality to the NewGRF window.
alberth <alberth@openttd.org>
parents: 15209
diff changeset
868 this->avails.ForceRebuild();
e28e566488a9 (svn r19840) -Add: Add 'rescan' functionality to the NewGRF window.
alberth <alberth@openttd.org>
parents: 15209
diff changeset
869 this->InvalidateData(1);
15212
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
870 this->DeleteChildWindows(WC_QUERY_STRING); // Remove the parameter query window
15557
14828f61eda6 (svn r20217) -Fix [FS#3969]: Invalidate saveload GUI after rescanning NewGRFs.
frosch <frosch@openttd.org>
parents: 15423
diff changeset
871 InvalidateWindowClassesData(WC_SAVELOAD);
15211
e28e566488a9 (svn r19840) -Add: Add 'rescan' functionality to the NewGRF window.
alberth <alberth@openttd.org>
parents: 15209
diff changeset
872 break;
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
873 }
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
874 }
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
875
9677
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
876 virtual void OnDropdownSelect(int widget, int index)
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
877 {
15345
52c9ee163c8f (svn r19986) -Fix (r19841): One could add and remove Grfs from the list via doubleclicking even if editing the list is not allowed.
frosch <frosch@openttd.org>
parents: 15331
diff changeset
878 if (!this->editable) return;
9677
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
879 if (index == -1) {
15203
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
880 ClearGRFConfigList(&this->actives);
9677
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
881 this->preset = -1;
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
882 } else {
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
883 GRFConfig *c = LoadGRFPresetFromConfig(_grf_preset_list[index]);
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
884
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
885 if (c != NULL) {
15203
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
886 this->active_sel = NULL;
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
887 ClearGRFConfigList(&this->actives);
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
888 this->actives = c;
9677
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
889 this->preset = index;
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
890 this->avails.ForceRebuild();
9677
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
891 }
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
892 }
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
893
15598
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
894 DeleteWindowByClass(WC_GRF_PARAMETERS);
15203
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
895 this->active_sel = NULL;
13170
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
896 this->InvalidateData(3);
9677
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
897 }
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
898
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
899 virtual void OnQueryTextFinished(char *str)
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
900 {
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
901 if (str == NULL) return;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
902
15603
ea0089ca72ef (svn r20264) -Fix (r20258): saving a new preset was broken
yexo <yexo@openttd.org>
parents: 15602
diff changeset
903 SaveGRFPresetToConfig(str, this->actives);
ea0089ca72ef (svn r20264) -Fix (r20258): saving a new preset was broken
yexo <yexo@openttd.org>
parents: 15602
diff changeset
904 GetGRFPresetList(&_grf_preset_list);
ea0089ca72ef (svn r20264) -Fix (r20258): saving a new preset was broken
yexo <yexo@openttd.org>
parents: 15602
diff changeset
905
15598
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
906 /* Switch to this preset */
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
907 for (uint i = 0; i < _grf_preset_list.Length(); i++) {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
908 if (_grf_preset_list[i] != NULL && strcmp(_grf_preset_list[i], str) == 0) {
b5da2954ec59 (svn r20258) -Feature: more user-friendly gui to change NewGRF parameters
yexo <yexo@openttd.org>
parents: 15593
diff changeset
909 this->preset = i;
9677
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
910 break;
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
911 }
44a8397a07d4 (svn r13781) -Feature: NewGRF presets, selected by a drop down list in the NewGRF window. Presets are saved in the config file.
peter1138 <peter1138@openttd.org>
parents: 9648
diff changeset
912 }
13170
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
913
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
914 this->InvalidateData();
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
915 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
916
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
917 /** Calback to update internal data.
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
918 * - 0: (optionally) build availables, update button status.
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
919 * - 1: build availables, Add newly found grfs, update button status.
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
920 * - 2: (optionally) build availables, Reset preset, + 3
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
921 * - 3: (optionally) build availables, Update active scrollbar, update button status.
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
922 * - 4: Force a rebuild of the availables, + 2
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
923 */
13170
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
924 virtual void OnInvalidateData(int data = 0)
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
925 {
10793
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
926 switch (data) {
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
927 default: NOT_REACHED();
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
928 case 0:
13170
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
929 /* Nothing important to do */
10793
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
930 break;
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
931
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
932 case 1:
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
933 /* Search the list for items that are now found and mark them as such. */
15423
fa1322ffb258 (svn r20066) -Fix: When rescanning NewGRFs resp. after content download also check whether compatible grfs are available now.
frosch <frosch@openttd.org>
parents: 15400
diff changeset
934 for (GRFConfig **l = &this->actives; *l != NULL; l = &(*l)->next) {
fa1322ffb258 (svn r20066) -Fix: When rescanning NewGRFs resp. after content download also check whether compatible grfs are available now.
frosch <frosch@openttd.org>
parents: 15400
diff changeset
935 GRFConfig *c = *l;
fa1322ffb258 (svn r20066) -Fix: When rescanning NewGRFs resp. after content download also check whether compatible grfs are available now.
frosch <frosch@openttd.org>
parents: 15400
diff changeset
936 bool compatible = HasBit(c->flags, GCF_COMPATIBLE);
fa1322ffb258 (svn r20066) -Fix: When rescanning NewGRFs resp. after content download also check whether compatible grfs are available now.
frosch <frosch@openttd.org>
parents: 15400
diff changeset
937 if (c->status != GCS_NOT_FOUND && !compatible) continue;
10793
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
938
15423
fa1322ffb258 (svn r20066) -Fix: When rescanning NewGRFs resp. after content download also check whether compatible grfs are available now.
frosch <frosch@openttd.org>
parents: 15400
diff changeset
939 const GRFConfig *f = FindGRFConfig(c->ident.grfid, compatible ? c->original_md5sum : c->ident.md5sum);
10793
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
940 if (f == NULL) continue;
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
941
15588
04eb4c42c0a0 (svn r20248) -Codechange: use a copy-constructor instead of a separate function co clone GRFConfig/GRFError
yexo <yexo@openttd.org>
parents: 15579
diff changeset
942 *l = new GRFConfig(*f);
15423
fa1322ffb258 (svn r20066) -Fix: When rescanning NewGRFs resp. after content download also check whether compatible grfs are available now.
frosch <frosch@openttd.org>
parents: 15400
diff changeset
943 (*l)->next = c->next;
10793
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
944
15423
fa1322ffb258 (svn r20066) -Fix: When rescanning NewGRFs resp. after content download also check whether compatible grfs are available now.
frosch <frosch@openttd.org>
parents: 15400
diff changeset
945 if (active_sel == c) active_sel = *l;
fa1322ffb258 (svn r20066) -Fix: When rescanning NewGRFs resp. after content download also check whether compatible grfs are available now.
frosch <frosch@openttd.org>
parents: 15400
diff changeset
946
fa1322ffb258 (svn r20066) -Fix: When rescanning NewGRFs resp. after content download also check whether compatible grfs are available now.
frosch <frosch@openttd.org>
parents: 15400
diff changeset
947 delete c;
10793
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
948 }
15579
5f128be91f59 (svn r20239) -Doc: Give a common name to all fall throughs (FALL THROUGH).
terkhen <terkhen@openttd.org>
parents: 15563
diff changeset
949 /* FALL THROUGH */
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
950 case 4:
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
951 this->avails.ForceRebuild();
15579
5f128be91f59 (svn r20239) -Doc: Give a common name to all fall throughs (FALL THROUGH).
terkhen <terkhen@openttd.org>
parents: 15563
diff changeset
952 /* FALL THROUGH */
13170
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
953 case 2:
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
954 this->preset = -1;
15579
5f128be91f59 (svn r20239) -Doc: Give a common name to all fall throughs (FALL THROUGH).
terkhen <terkhen@openttd.org>
parents: 15563
diff changeset
955 /* FALL THROUGH */
15201
071e920abcfb (svn r19830) -Codechange: Move variable declarations to their first use.
alberth <alberth@openttd.org>
parents: 15200
diff changeset
956 case 3: {
071e920abcfb (svn r19830) -Codechange: Move variable declarations to their first use.
alberth <alberth@openttd.org>
parents: 15200
diff changeset
957 int i = 0;
15203
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
958 for (const GRFConfig *c = this->actives; c != NULL; c = c->next, i++) {}
13170
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
959
14037
ca29deba0f1a (svn r18580) -Codechange: Use widget information only for setting scrollbar capacity.
alberth <alberth@openttd.org>
parents: 13968
diff changeset
960 this->vscroll.SetCapacityFromWidget(this, SNGRFS_FILE_LIST);
13170
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
961 this->vscroll.SetCount(i);
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
962
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
963 this->vscroll2.SetCapacityFromWidget(this, SNGRFS_AVAIL_LIST);
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
964 if (this->avail_pos >= 0) this->vscroll2.ScrollTowards(this->avail_pos);
13170
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
965 break;
15201
071e920abcfb (svn r19830) -Codechange: Move variable declarations to their first use.
alberth <alberth@openttd.org>
parents: 15200
diff changeset
966 }
10793
0744d383a56b (svn r15126) -Feature: downloading content from a central server (content.openttd.org) where authors can upload they NewGRFS/AI etc. This should make joining servers that use only NewGRFs that are distributed via this system easier as the players can download the NewGRFs from in the game. It should also make it easier to see whether there are updates for NewGRFs and make the necessary updates.
rubidium <rubidium@openttd.org>
parents: 10145
diff changeset
967 }
13170
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
968
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
969 this->BuildAvailables();
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
970
13170
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
971 this->SetWidgetsDisabledState(!this->editable,
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
972 SNGRFS_PRESET_LIST,
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
973 SNGRFS_APPLY_CHANGES,
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
974 SNGRFS_TOGGLE_PALETTE,
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
975 WIDGET_LIST_END
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
976 );
15212
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
977 this->SetWidgetDisabledState(SNGRFS_ADD, !this->editable || this->avail_sel == NULL);
13170
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
978
15203
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
979 bool disable_all = this->active_sel == NULL || !this->editable;
13170
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
980 this->SetWidgetsDisabledState(disable_all,
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
981 SNGRFS_REMOVE,
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
982 SNGRFS_MOVE_UP,
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
983 SNGRFS_MOVE_DOWN,
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
984 WIDGET_LIST_END
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
985 );
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
986 this->SetWidgetDisabledState(SNGRFS_SET_PARAMETERS, !this->show_params || disable_all);
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
987 this->SetWidgetDisabledState(SNGRFS_TOGGLE_PALETTE, disable_all);
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
988
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
989 if (!disable_all) {
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
990 /* All widgets are now enabled, so disable widgets we can't use */
15203
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
991 if (this->active_sel == this->actives) this->DisableWidget(SNGRFS_MOVE_UP);
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
992 if (this->active_sel->next == NULL) this->DisableWidget(SNGRFS_MOVE_DOWN);
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
993 if (this->active_sel->IsOpenTTDBaseGRF()) this->DisableWidget(SNGRFS_REMOVE);
13170
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
994 }
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
995
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
996 this->SetWidgetDisabledState(SNGRFS_PRESET_DELETE, this->preset == -1);
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
997
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
998 bool has_missing = false;
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
999 bool has_compatible = false;
15203
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
1000 for (const GRFConfig *c = this->actives; !has_missing && c != NULL; c = c->next) {
13170
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
1001 has_missing |= c->status == GCS_NOT_FOUND;
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
1002 has_compatible |= HasBit(c->flags, GCF_COMPATIBLE);
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
1003 }
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
1004 if (has_missing || has_compatible) {
13171
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
1005 this->GetWidget<NWidgetCore>(SNGRFS_CONTENT_DOWNLOAD)->widget_data = STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON;
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
1006 this->GetWidget<NWidgetCore>(SNGRFS_CONTENT_DOWNLOAD)->tool_tip = STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_TOOLTIP;
13170
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
1007 } else {
13171
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
1008 this->GetWidget<NWidgetCore>(SNGRFS_CONTENT_DOWNLOAD)->widget_data = STR_INTRO_ONLINE_CONTENT;
93c95e6c1a53 (svn r17676) -Codechange: make the NewGRF GUI nested
rubidium <rubidium@openttd.org>
parents: 13170
diff changeset
1009 this->GetWidget<NWidgetCore>(SNGRFS_CONTENT_DOWNLOAD)->tool_tip = STR_INTRO_TOOLTIP_ONLINE_CONTENT;
13170
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
1010 }
c001604f4ab3 (svn r17675) -Codechange: move the 'state' changes out of the OnPaint of the newgrf window
rubidium <rubidium@openttd.org>
parents: 13168
diff changeset
1011 this->SetWidgetDisabledState(SNGRFS_PRESET_SAVE, has_missing);
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
1012 }
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1013
15209
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1014 virtual void OnMouseLoop()
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1015 {
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1016 this->HandleEditBox(SNGRFS_FILTER);
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1017 }
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1018
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1019 virtual EventState OnKeyPress(uint16 key, uint16 keycode)
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1020 {
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1021 switch (keycode) {
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1022 case WKC_UP:
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1023 /* scroll up by one */
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1024 if (this->avail_pos > 0) this->avail_pos--;
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1025 break;
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1026
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1027 case WKC_DOWN:
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1028 /* scroll down by one */
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1029 if (this->avail_pos < (int)this->avails.Length() - 1) this->avail_pos++;
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1030 break;
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1031
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1032 case WKC_PAGEUP:
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1033 /* scroll up a page */
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1034 this->avail_pos = (this->avail_pos < this->vscroll2.GetCapacity()) ? 0 : this->avail_pos - this->vscroll2.GetCapacity();
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1035 break;
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1036
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1037 case WKC_PAGEDOWN:
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1038 /* scroll down a page */
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1039 this->avail_pos = min(this->avail_pos + this->vscroll2.GetCapacity(), (int)this->avails.Length() - 1);
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1040 break;
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1041
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1042 case WKC_HOME:
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1043 /* jump to beginning */
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1044 this->avail_pos = 0;
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1045 break;
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1046
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1047 case WKC_END:
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1048 /* jump to end */
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1049 this->avail_pos = this->avails.Length() - 1;
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1050 break;
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1051
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1052 default: {
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1053 /* Handle editbox input */
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1054 EventState state = ES_NOT_HANDLED;
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1055 if (this->HandleEditBoxKey(SNGRFS_FILTER, key, keycode, state) == HEBR_EDITING) {
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1056 this->OnOSKInput(SNGRFS_FILTER);
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1057 }
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1058 return state;
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1059 }
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1060 }
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1061
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1062 if (this->avails.Length() == 0) this->avail_pos = -1;
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1063 if (this->avail_pos >= 0) {
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1064 this->avail_sel = this->avails[this->avail_pos];
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1065 this->vscroll2.ScrollTowards(this->avail_pos);
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1066 this->InvalidateData(0);
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1067 }
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1068
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1069 return ES_HANDLED;
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1070 }
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1071
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1072 virtual void OnOSKInput(int wid)
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1073 {
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1074 this->avails.SetFilterState(!StrEmpty(this->edit_str_buf));
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1075 this->avails.ForceRebuild();
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1076 this->InvalidateData(0);
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1077 }
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1078
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1079 private:
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1080 /** Sort grfs by name. */
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1081 static int CDECL NameSorter(const GRFConfig * const *a, const GRFConfig * const *b)
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1082 {
15599
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
1083 int i = strcasecmp((*a)->GetName(), (*b)->GetName());
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
1084 if (i != 0) return i;
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
1085
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
1086 i = (*a)->version - (*b)->version;
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
1087 if (i != 0) return i;
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
1088
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
1089 return memcmp((*a)->ident.md5sum, (*b)->ident.md5sum, lengthof((*b)->ident.md5sum));
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1090 }
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1091
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1092 /** Filter grfs by tags/name */
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1093 static bool CDECL TagNameFilter(const GRFConfig * const *a, const char *filter_string)
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1094 {
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1095 if (strcasestr((*a)->GetName(), filter_string) != NULL) return true;
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1096 if ((*a)->filename != NULL && strcasestr((*a)->filename, filter_string) != NULL) return true;
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1097 if ((*a)->GetDescription() != NULL && strcasestr((*a)->GetDescription(), filter_string) != NULL) return true;
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1098 return false;
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1099 }
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1100
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1101 void BuildAvailables()
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1102 {
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1103 if (!this->avails.NeedRebuild()) return;
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1104
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1105 this->avails.Clear();
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1106
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1107 for (const GRFConfig *c = _all_grfs; c != NULL; c = c->next) {
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1108 bool found = false;
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1109 for (const GRFConfig *grf = this->actives; grf != NULL && !found; grf = grf->next) found = grf->ident.HasGrfIdentifier(c->ident.grfid, c->ident.md5sum);
15599
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
1110 if (found) continue;
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
1111
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
1112 if (_settings_client.gui.newgrf_show_old_versions) {
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
1113 *this->avails.Append() = c;
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
1114 } else {
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
1115 const GRFConfig *best = FindGRFConfig(c->ident.grfid, NULL);
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
1116 /*
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
1117 * If the best version is 0, then all NewGRF with this GRF ID
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
1118 * have version 0, so for backward compatability reasons we
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
1119 * want to show them all.
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
1120 * If we are the best version, then we definitely want to
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
1121 * show that NewGRF!.
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
1122 */
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
1123 if (best->version == 0 || best->ident.HasGrfIdentifier(c->ident.grfid, c->ident.md5sum)) {
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
1124 *this->avails.Append() = c;
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
1125 }
146255899304 (svn r20259) -Add: allow NewGRFs to specify their version and use that to hide old NewGRFs / to choose the newest when loading compatible NewGRFs
rubidium <rubidium@openttd.org>
parents: 15598
diff changeset
1126 }
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1127 }
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1128
15209
eb71d6bac72c (svn r19838) -Change: Add filter capability to the availables list.
alberth <alberth@openttd.org>
parents: 15208
diff changeset
1129 this->avails.Filter(this->edit_str_buf);
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1130 this->avails.Compact();
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1131 this->avails.RebuildDone();
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1132 this->avails.Sort();
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1133
15212
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
1134 if (this->avail_sel != NULL) {
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
1135 this->avail_pos = this->avails.FindIndex(this->avail_sel);
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
1136 if (this->avail_pos < 0) this->avail_sel = NULL;
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
1137 }
a4e976b89e90 (svn r19841) -Feature: Setup NewGRFs from a single window.
alberth <alberth@openttd.org>
parents: 15211
diff changeset
1138
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1139 this->vscroll2.SetCount(this->avails.Length()); // Update the scrollbar
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1140 }
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
1141 };
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1142
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1143 Listing NewGRFWindow::last_sorting = {false, 0};
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1144 Filtering NewGRFWindow::last_filtering = {false, 0};
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1145
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1146 NewGRFWindow::GUIGRFConfigList::SortFunction * const NewGRFWindow::sorter_funcs[] = {
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1147 &NameSorter,
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1148 };
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1149
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1150 NewGRFWindow::GUIGRFConfigList::FilterFunction * const NewGRFWindow::filter_funcs[] = {
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1151 &TagNameFilter,
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1152 };
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1153
15216
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1154 /** Custom nested widget container for the NewGRF gui.
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1155 * Depending on the space in the gui, it uses either
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1156 * - two column mode, put the #acs and the #avs underneath each other and the #info next to it, or
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1157 * - three column mode, put the #avs, #acs, and #info each in its own column.
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1158 */
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1159 class NWidgetNewGRFDisplay : public NWidgetContainer {
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1160 public:
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1161 static const uint INTER_LIST_SPACING; ///< Empty vertical space between both lists in the 2 column mode.
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1162 static const uint INTER_COLUMN_SPACING; ///< Empty horizontal space between two columns.
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1163 static const uint MAX_EXTRA_INFO_WIDTH; ///< Maximal additional width given to the panel.
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1164 static const uint MIN_EXTRA_FOR_3_COLUMNS; ///< Minimal additional width needed before switching to 3 columns.
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1165
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1166 NWidgetBase *avs; ///< Widget with the available grfs list and buttons.
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1167 NWidgetBase *acs; ///< Widget with the active grfs list and buttons.
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1168 NWidgetBase *inf; ///< Info panel.
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1169
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1170 NWidgetNewGRFDisplay(NWidgetBase *avs, NWidgetBase *acs, NWidgetBase *inf) : NWidgetContainer(NWID_HORIZONTAL)
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1171 {
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1172 this->avs = avs;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1173 this->acs = acs;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1174 this->inf = inf;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1175
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1176 this->Add(this->avs);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1177 this->Add(this->acs);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1178 this->Add(this->inf);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1179 }
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1180
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1181 virtual void SetupSmallestSize(Window *w, bool init_array)
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1182 {
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1183 this->avs->SetupSmallestSize(w, init_array);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1184 this->acs->SetupSmallestSize(w, init_array);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1185 this->inf->SetupSmallestSize(w, init_array);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1186
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1187 uint min_avs_width = this->avs->smallest_x + this->avs->padding_left + this->avs->padding_right;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1188 uint min_acs_width = this->acs->smallest_x + this->acs->padding_left + this->acs->padding_right;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1189 uint min_inf_width = this->inf->smallest_x + this->inf->padding_left + this->inf->padding_right;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1190
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1191 uint min_avs_height = this->avs->smallest_y + this->avs->padding_top + this->avs->padding_bottom;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1192 uint min_acs_height = this->acs->smallest_y + this->acs->padding_top + this->acs->padding_bottom;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1193 uint min_inf_height = this->inf->smallest_y + this->inf->padding_top + this->inf->padding_bottom;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1194
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1195 /* Smallest window is in two column mode. */
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1196 this->smallest_x = max(min_avs_width, min_acs_width) + INTER_COLUMN_SPACING + min_inf_width;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1197 this->smallest_y = max(min_inf_height, min_acs_height + INTER_LIST_SPACING + min_avs_height);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1198
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1199 /* Filling. */
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1200 this->fill_x = LeastCommonMultiple(this->avs->fill_x, this->acs->fill_x);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1201 if (this->inf->fill_x > 0 && (this->fill_x == 0 || this->fill_x > this->inf->fill_x)) this->fill_x = this->inf->fill_x;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1202
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1203 this->fill_y = this->avs->fill_y;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1204 if (this->acs->fill_y > 0 && (this->fill_y == 0 || this->fill_y > this->acs->fill_y)) this->fill_y = this->acs->fill_y;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1205 this->fill_y = LeastCommonMultiple(this->fill_y, this->inf->fill_y);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1206
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1207 /* Resizing. */
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1208 this->resize_x = LeastCommonMultiple(this->avs->resize_x, this->acs->resize_x);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1209 if (this->inf->resize_x > 0 && (this->resize_x == 0 || this->resize_x > this->inf->resize_x)) this->resize_x = this->inf->resize_x;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1210
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1211 this->resize_y = this->avs->resize_y;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1212 if (this->acs->resize_y > 0 && (this->resize_y == 0 || this->resize_y > this->acs->resize_y)) this->resize_y = this->acs->resize_y;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1213 this->resize_y = LeastCommonMultiple(this->resize_y, this->inf->resize_y);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1214 }
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1215
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1216 virtual void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl)
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1217 {
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1218 this->StoreSizePosition(sizing, x, y, given_width, given_height);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1219
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1220 uint min_avs_width = this->avs->smallest_x + this->avs->padding_left + this->avs->padding_right;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1221 uint min_acs_width = this->acs->smallest_x + this->acs->padding_left + this->acs->padding_right;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1222 uint min_inf_width = this->inf->smallest_x + this->inf->padding_left + this->inf->padding_right;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1223
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1224 uint min_list_width = max(min_avs_width, min_acs_width); // Smallest width of the lists such that they have equal width (incl padding).
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1225 uint avs_extra_width = min_list_width - min_avs_width; // Additional width needed for avs to reach min_list_width.
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1226 uint acs_extra_width = min_list_width - min_acs_width; // Additional width needed for acs to reach min_list_width.
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1227
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1228 /* Use 2 or 3 colmuns? */
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1229 uint min_three_columns = min_avs_width + min_acs_width + min_inf_width + 2 * INTER_COLUMN_SPACING;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1230 uint min_two_columns = min_list_width + min_inf_width + INTER_COLUMN_SPACING;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1231 bool use_three_columns = (min_three_columns + MIN_EXTRA_FOR_3_COLUMNS <= given_width);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1232
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1233 /* Info panel is a seperate column in both modes. Compute its width first. */
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1234 uint extra_width, inf_width;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1235 if (use_three_columns) {
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1236 extra_width = given_width - min_three_columns;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1237 inf_width = min(MAX_EXTRA_INFO_WIDTH, extra_width / 2);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1238 } else {
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1239 extra_width = given_width - min_two_columns;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1240 inf_width = min(MAX_EXTRA_INFO_WIDTH, extra_width / 2);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1241 }
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1242 inf_width = ComputeMaxSize(this->inf->smallest_x, this->inf->smallest_x + inf_width, this->inf->GetHorizontalStepSize(sizing));
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1243 extra_width -= inf_width - this->inf->smallest_x;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1244
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1245 uint inf_height = ComputeMaxSize(this->inf->smallest_y, given_height, this->inf->GetVerticalStepSize(sizing));
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1246
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1247 if (use_three_columns) {
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1248 /* Three column display, first make both lists equally wide, then divide whatever is left between both lists.
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1249 * Only keep track of what avs gets, all other space goes to acs. */
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1250 uint avs_width = min(avs_extra_width, extra_width);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1251 extra_width -= avs_width;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1252 extra_width -= min(acs_extra_width, extra_width);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1253 avs_width += extra_width / 2;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1254
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1255 avs_width = ComputeMaxSize(this->avs->smallest_x, this->avs->smallest_x + avs_width, this->avs->GetHorizontalStepSize(sizing));
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1256
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1257 uint acs_width = given_width - // Remaining space, including horizontal padding.
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1258 inf_width - this->inf->padding_left - this->inf->padding_right -
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1259 avs_width - this->avs->padding_left - this->avs->padding_right - 2 * INTER_COLUMN_SPACING;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1260 acs_width = ComputeMaxSize(min_acs_width, acs_width, this->acs->GetHorizontalStepSize(sizing)) -
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1261 this->acs->padding_left - this->acs->padding_right;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1262
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1263 uint avs_height = ComputeMaxSize(this->avs->smallest_y, given_height, this->avs->GetVerticalStepSize(sizing));
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1264 uint acs_height = ComputeMaxSize(this->acs->smallest_y, given_height, this->acs->GetVerticalStepSize(sizing));
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1265
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1266 /* Assign size and position to the childs. */
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1267 if (rtl) {
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1268 x += this->inf->padding_left;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1269 this->inf->AssignSizePosition(sizing, x, y + this->inf->padding_top, inf_width, inf_height, rtl);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1270 x += inf_width + this->inf->padding_right + INTER_COLUMN_SPACING;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1271 } else {
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1272 x += this->avs->padding_left;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1273 this->avs->AssignSizePosition(sizing, x, y + this->avs->padding_top, avs_width, avs_height, rtl);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1274 x += avs_width + this->avs->padding_right + INTER_COLUMN_SPACING;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1275 }
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1276
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1277 x += this->acs->padding_left;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1278 this->acs->AssignSizePosition(sizing, x, y + this->acs->padding_top, acs_width, acs_height, rtl);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1279 x += acs_width + this->acs->padding_right + INTER_COLUMN_SPACING;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1280
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1281 if (rtl) {
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1282 x += this->avs->padding_left;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1283 this->avs->AssignSizePosition(sizing, x, y + this->avs->padding_top, avs_width, avs_height, rtl);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1284 } else {
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1285 x += this->inf->padding_left;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1286 this->inf->AssignSizePosition(sizing, x, y + this->inf->padding_top, inf_width, inf_height, rtl);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1287 }
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1288 } else {
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1289 /* Two columns, all space in extra_width goes to both lists. Since the lists are underneath each other,
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1290 * the column is min_list_width wide at least. */
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1291 uint avs_width = ComputeMaxSize(this->avs->smallest_x, this->avs->smallest_x + avs_extra_width + extra_width,
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1292 this->avs->GetHorizontalStepSize(sizing));
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1293 uint acs_width = ComputeMaxSize(this->acs->smallest_x, this->acs->smallest_x + acs_extra_width + extra_width,
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1294 this->acs->GetHorizontalStepSize(sizing));
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1295
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1296 uint min_avs_height = this->avs->smallest_y + this->avs->padding_top + this->avs->padding_bottom;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1297 uint min_acs_height = this->acs->smallest_y + this->acs->padding_top + this->acs->padding_bottom;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1298 uint extra_height = given_height - min_acs_height - min_avs_height - INTER_LIST_SPACING;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1299
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1300 uint avs_height = ComputeMaxSize(this->avs->smallest_y, this->avs->smallest_y + extra_height / 2, this->avs->GetVerticalStepSize(sizing));
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1301 extra_height -= avs_height - this->avs->smallest_y;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1302 uint acs_height = ComputeMaxSize(this->acs->smallest_y, this->acs->smallest_y + extra_height, this->acs->GetVerticalStepSize(sizing));
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1303
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1304 /* Assign size and position to the childs. */
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1305 if (rtl) {
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1306 x += this->inf->padding_left;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1307 this->inf->AssignSizePosition(sizing, x, y + this->inf->padding_top, inf_width, inf_height, rtl);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1308 x += inf_width + this->inf->padding_right + INTER_COLUMN_SPACING;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1309
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1310 uint ypos = y + this->acs->padding_top;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1311 this->acs->AssignSizePosition(sizing, x + this->acs->padding_left, ypos, acs_width, acs_height, rtl);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1312 ypos += acs_height + this->acs->padding_bottom + INTER_LIST_SPACING + this->avs->padding_top;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1313 this->avs->AssignSizePosition(sizing, x + this->avs->padding_left, ypos, avs_width, avs_height, rtl);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1314 } else {
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1315 uint ypos = y + this->acs->padding_top;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1316 this->acs->AssignSizePosition(sizing, x + this->acs->padding_left, ypos, acs_width, acs_height, rtl);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1317 ypos += acs_height + this->acs->padding_bottom + INTER_LIST_SPACING + this->avs->padding_top;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1318 this->avs->AssignSizePosition(sizing, x + this->avs->padding_left, ypos, avs_width, avs_height, rtl);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1319 x += max(this->acs->current_x + this->acs->padding_left + this->acs->padding_right,
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1320 this->avs->current_x + this->avs->padding_left + this->avs->padding_right) + INTER_COLUMN_SPACING;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1321
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1322 x += this->inf->padding_left;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1323 this->inf->AssignSizePosition(sizing, x, y + this->inf->padding_top, inf_width, inf_height, rtl);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1324 }
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1325 }
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1326 }
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1327
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1328 virtual NWidgetCore *GetWidgetFromPos(int x, int y)
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1329 {
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1330 if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return NULL;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1331
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1332 NWidgetCore *nw = this->avs->GetWidgetFromPos(x, y);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1333 if (nw == NULL) nw = this->acs->GetWidgetFromPos(x, y);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1334 if (nw == NULL) nw = this->inf->GetWidgetFromPos(x, y);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1335 return nw;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1336 }
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1337
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1338 virtual void Draw(const Window *w)
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1339 {
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1340 this->avs->Draw(w);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1341 this->acs->Draw(w);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1342 this->inf->Draw(w);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1343 }
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1344 };
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1345
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1346 const uint NWidgetNewGRFDisplay::INTER_LIST_SPACING = WD_RESIZEBOX_WIDTH + 1;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1347 const uint NWidgetNewGRFDisplay::INTER_COLUMN_SPACING = WD_RESIZEBOX_WIDTH;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1348 const uint NWidgetNewGRFDisplay::MAX_EXTRA_INFO_WIDTH = 150;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1349 const uint NWidgetNewGRFDisplay::MIN_EXTRA_FOR_3_COLUMNS = 50;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1350
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1351 static const NWidgetPart _nested_newgrf_actives_widgets[] = {
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1352 /* Left side, presets. */
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1353 NWidget(NWID_HORIZONTAL),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1354 NWidget(WWT_TEXT, COLOUR_MAUVE), SetDataTip(STR_NEWGRF_SETTINGS_SELECT_PRESET, STR_NULL),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1355 SetPadding(0, WD_FRAMETEXT_RIGHT, 0, 0),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1356 NWidget(WWT_DROPDOWN, COLOUR_YELLOW, SNGRFS_PRESET_LIST), SetFill(1, 0), SetResize(1, 0),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1357 SetDataTip(STR_JUST_STRING, STR_NEWGRF_SETTINGS_PRESET_LIST_TOOLTIP),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1358 EndContainer(),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1359 NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1360 NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, SNGRFS_PRESET_SAVE), SetFill(1, 0), SetResize(1, 0),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1361 SetDataTip(STR_NEWGRF_SETTINGS_PRESET_SAVE, STR_NEWGRF_SETTINGS_PRESET_SAVE_TOOLTIP),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1362 NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, SNGRFS_PRESET_DELETE), SetFill(1, 0), SetResize(1, 0),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1363 SetDataTip(STR_NEWGRF_SETTINGS_PRESET_DELETE, STR_NEWGRF_SETTINGS_PRESET_DELETE_TOOLTIP),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1364 EndContainer(),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1365
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1366 NWidget(NWID_SPACER), SetMinimalSize(0, WD_RESIZEBOX_WIDTH), SetResize(1, 0), SetFill(1, 0),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1367 NWidget(WWT_PANEL, COLOUR_MAUVE),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1368 NWidget(WWT_LABEL, COLOUR_MAUVE), SetDataTip(STR_NEWGRF_SETTINGS_ACTIVE_LIST, STR_NULL),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1369 SetFill(1, 0), SetResize(1, 0), SetPadding(3, WD_FRAMETEXT_RIGHT, 0, WD_FRAMETEXT_LEFT),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1370 /* Left side, active grfs. */
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1371 NWidget(NWID_HORIZONTAL), SetPadding(0, 2, 0, 2),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1372 NWidget(WWT_PANEL, COLOUR_MAUVE),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1373 NWidget(WWT_INSET, COLOUR_MAUVE, SNGRFS_FILE_LIST), SetMinimalSize(100, 1), SetPadding(2, 2, 2, 2),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1374 SetFill(1, 1), SetResize(1, 1),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1375 EndContainer(),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1376 EndContainer(),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1377 NWidget(WWT_SCROLLBAR, COLOUR_MAUVE, SNGRFS_SCROLLBAR),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1378 EndContainer(),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1379 /* Buttons. */
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1380 NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPadding(2, 2, 2, 2), SetPIP(0, WD_RESIZEBOX_WIDTH, 0),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1381 NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, SNGRFS_REMOVE), SetFill(1, 0), SetResize(1, 0),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1382 SetDataTip(STR_NEWGRF_SETTINGS_REMOVE, STR_NEWGRF_SETTINGS_REMOVE_TOOLTIP),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1383 NWidget(NWID_VERTICAL),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1384 NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, SNGRFS_MOVE_UP), SetFill(1, 0), SetResize(1, 0),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1385 SetDataTip(STR_NEWGRF_SETTINGS_MOVEUP, STR_NEWGRF_SETTINGS_MOVEUP_TOOLTIP),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1386 NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, SNGRFS_MOVE_DOWN), SetFill(1, 0), SetResize(1, 0),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1387 SetDataTip(STR_NEWGRF_SETTINGS_MOVEDOWN, STR_NEWGRF_SETTINGS_MOVEDOWN_TOOLTIP),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1388 EndContainer(),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1389 EndContainer(),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1390 EndContainer(),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1391 };
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1392
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1393 static const NWidgetPart _nested_newgrf_availables_widgets[] = {
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1394 NWidget(WWT_PANEL, COLOUR_MAUVE),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1395 NWidget(WWT_LABEL, COLOUR_MAUVE), SetDataTip(STR_NEWGRF_SETTINGS_INACTIVE_LIST, STR_NULL),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1396 SetFill(1, 0), SetResize(1, 0), SetPadding(3, WD_FRAMETEXT_RIGHT, 0, WD_FRAMETEXT_LEFT),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1397 /* Left side, available grfs, filter edit box. */
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1398 NWidget(NWID_HORIZONTAL), SetPadding(WD_TEXTPANEL_TOP, 0, WD_TEXTPANEL_BOTTOM, 0),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1399 SetPIP(WD_FRAMETEXT_LEFT, WD_FRAMETEXT_RIGHT, WD_FRAMETEXT_RIGHT),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1400 NWidget(WWT_TEXT, COLOUR_MAUVE), SetFill(0, 1), SetDataTip(STR_NEWGRF_FILTER_TITLE, STR_NULL),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1401 NWidget(WWT_EDITBOX, COLOUR_MAUVE, SNGRFS_FILTER), SetFill(1, 0), SetMinimalSize(50, 12), SetResize(1, 0),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1402 SetDataTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1403 EndContainer(),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1404 /* Left side, available grfs. */
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1405 NWidget(NWID_HORIZONTAL), SetPadding(0, 2, 0, 2),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1406 NWidget(WWT_PANEL, COLOUR_MAUVE),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1407 NWidget(WWT_INSET, COLOUR_MAUVE, SNGRFS_AVAIL_LIST), SetMinimalSize(100, 1), SetPadding(2, 2, 2, 2),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1408 SetFill(1, 1), SetResize(1, 1),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1409 EndContainer(),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1410 EndContainer(),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1411 NWidget(WWT_SCROLL2BAR, COLOUR_MAUVE, SNGRFS_SCROLL2BAR),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1412 EndContainer(),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1413 /* Left side, available grfs, buttons. */
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1414 NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPadding(2, 2, 2, 2), SetPIP(0, WD_RESIZEBOX_WIDTH, 0),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1415 NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, SNGRFS_ADD), SetFill(1, 0), SetResize(1, 0),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1416 SetDataTip(STR_NEWGRF_SETTINGS_ADD, STR_NEWGRF_SETTINGS_ADD_FILE_TOOLTIP),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1417 NWidget(NWID_VERTICAL),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1418 NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, SNGRFS_RESCAN_FILES), SetFill(1, 0), SetResize(1, 0),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1419 SetDataTip(STR_NEWGRF_SETTINGS_RESCAN_FILES, STR_NEWGRF_SETTINGS_RESCAN_FILES_TOOLTIP),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1420 NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, SNGRFS_CONTENT_DOWNLOAD), SetFill(1, 0), SetResize(1, 0),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1421 SetDataTip(STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1422 EndContainer(),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1423 EndContainer(),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1424 EndContainer(),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1425 };
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1426
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1427 static const NWidgetPart _nested_newgrf_infopanel_widgets[] = {
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1428 /* Right side, info panel. */
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1429 NWidget(WWT_PANEL, COLOUR_MAUVE), SetPadding(0, 0, 2, 0),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1430 NWidget(WWT_EMPTY, COLOUR_MAUVE, SNGRFS_NEWGRF_INFO_TITLE), SetFill(1, 0), SetResize(1, 0),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1431 NWidget(WWT_EMPTY, COLOUR_MAUVE, SNGRFS_NEWGRF_INFO), SetFill(1, 1), SetResize(1, 1), SetMinimalSize(150, 100),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1432 EndContainer(),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1433 /* Right side, buttons. */
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1434 NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(0, WD_RESIZEBOX_WIDTH, 0),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1435 NWidget(NWID_VERTICAL),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1436 NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, SNGRFS_SET_PARAMETERS), SetFill(1, 0), SetResize(1, 0),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1437 SetDataTip(STR_NEWGRF_SETTINGS_SET_PARAMETERS, STR_NULL),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1438 NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, SNGRFS_TOGGLE_PALETTE), SetFill(1, 0), SetResize(1, 0),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1439 SetDataTip(STR_NEWGRF_SETTINGS_TOGGLE_PALETTE, STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1440 EndContainer(),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1441 NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, SNGRFS_APPLY_CHANGES), SetFill(1, 0), SetResize(1, 0),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1442 SetDataTip(STR_NEWGRF_SETTINGS_APPLY_CHANGES, STR_NULL),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1443 EndContainer(),
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1444 };
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1445
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1446 /** Construct nested container widget for managing the lists and the info panel of the NewGRF GUI. */
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1447 NWidgetBase* NewGRFDisplay(int *biggest_index)
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1448 {
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1449 NWidgetBase *avs = MakeNWidgets(_nested_newgrf_availables_widgets, lengthof(_nested_newgrf_availables_widgets), biggest_index, NULL);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1450
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1451 int biggest2;
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1452 NWidgetBase *acs = MakeNWidgets(_nested_newgrf_actives_widgets, lengthof(_nested_newgrf_actives_widgets), &biggest2, NULL);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1453 *biggest_index = max(*biggest_index, biggest2);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1454
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1455 NWidgetBase *inf = MakeNWidgets(_nested_newgrf_infopanel_widgets, lengthof(_nested_newgrf_infopanel_widgets), &biggest2, NULL);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1456 *biggest_index = max(*biggest_index, biggest2);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1457
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1458 return new NWidgetNewGRFDisplay(avs, acs, inf);
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1459 }
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1460
8025
7a501cf42789 (svn r11585) -Codechange: Enumify the widgets of the newGRF gui and a slight cleanup there
skidd13 <skidd13@openttd.org>
parents: 8019
diff changeset
1461 /* Widget definition of the manage newgrfs window */
11796
b89215528d20 (svn r16186) -Codechange: Adding nested widgets to _newgrf_desc and _newgrf_add_dlg_desc window descriptions.
alberth <alberth@openttd.org>
parents: 11795
diff changeset
1462 static const NWidgetPart _nested_newgrf_widgets[] = {
b89215528d20 (svn r16186) -Codechange: Adding nested widgets to _newgrf_desc and _newgrf_add_dlg_desc window descriptions.
alberth <alberth@openttd.org>
parents: 11795
diff changeset
1463 NWidget(NWID_HORIZONTAL),
13752
517d77f53919 (svn r18277) -Codechange: remove unneeded widget indices for close, resize and sticky boxes and for window captions
rubidium <rubidium@openttd.org>
parents: 13749
diff changeset
1464 NWidget(WWT_CLOSEBOX, COLOUR_MAUVE),
517d77f53919 (svn r18277) -Codechange: remove unneeded widget indices for close, resize and sticky boxes and for window captions
rubidium <rubidium@openttd.org>
parents: 13749
diff changeset
1465 NWidget(WWT_CAPTION, COLOUR_MAUVE), SetDataTip(STR_NEWGRF_SETTINGS_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
11796
b89215528d20 (svn r16186) -Codechange: Adding nested widgets to _newgrf_desc and _newgrf_add_dlg_desc window descriptions.
alberth <alberth@openttd.org>
parents: 11795
diff changeset
1466 EndContainer(),
13755
bf8a4ced15fe (svn r18280) -Codechange: remove widget indices that are not needed for custom drawing/handling input
rubidium <rubidium@openttd.org>
parents: 13752
diff changeset
1467 NWidget(WWT_PANEL, COLOUR_MAUVE),
15216
7be3e18b9c57 (svn r19845) -Feature: Dynamically switch between 2 and 3 column NewGRF gui for improved user experience.
alberth <alberth@openttd.org>
parents: 15212
diff changeset
1468 NWidgetFunction(NewGRFDisplay), SetPadding(WD_RESIZEBOX_WIDTH, WD_RESIZEBOX_WIDTH, 2, WD_RESIZEBOX_WIDTH),
15211
e28e566488a9 (svn r19840) -Add: Add 'rescan' functionality to the NewGRF window.
alberth <alberth@openttd.org>
parents: 15209
diff changeset
1469 /* Resize button. */
e28e566488a9 (svn r19840) -Add: Add 'rescan' functionality to the NewGRF window.
alberth <alberth@openttd.org>
parents: 15209
diff changeset
1470 NWidget(NWID_HORIZONTAL),
e28e566488a9 (svn r19840) -Add: Add 'rescan' functionality to the NewGRF window.
alberth <alberth@openttd.org>
parents: 15209
diff changeset
1471 NWidget(NWID_SPACER), SetFill(1, 0), SetResize(1, 0),
e28e566488a9 (svn r19840) -Add: Add 'rescan' functionality to the NewGRF window.
alberth <alberth@openttd.org>
parents: 15209
diff changeset
1472 NWidget(WWT_RESIZEBOX, COLOUR_MAUVE),
e28e566488a9 (svn r19840) -Add: Add 'rescan' functionality to the NewGRF window.
alberth <alberth@openttd.org>
parents: 15209
diff changeset
1473 EndContainer(),
11796
b89215528d20 (svn r16186) -Codechange: Adding nested widgets to _newgrf_desc and _newgrf_add_dlg_desc window descriptions.
alberth <alberth@openttd.org>
parents: 11795
diff changeset
1474 EndContainer(),
b89215528d20 (svn r16186) -Codechange: Adding nested widgets to _newgrf_desc and _newgrf_add_dlg_desc window descriptions.
alberth <alberth@openttd.org>
parents: 11795
diff changeset
1475 };
b89215528d20 (svn r16186) -Codechange: Adding nested widgets to _newgrf_desc and _newgrf_add_dlg_desc window descriptions.
alberth <alberth@openttd.org>
parents: 11795
diff changeset
1476
8025
7a501cf42789 (svn r11585) -Codechange: Enumify the widgets of the newGRF gui and a slight cleanup there
skidd13 <skidd13@openttd.org>
parents: 8019
diff changeset
1477 /* Window definition of the manage newgrfs window */
11373
474ba6cc0946 (svn r15723) -Codechange: use a constructor for WindowDescs as that makes expanding them much easier (Alberth)
rubidium <rubidium@openttd.org>
parents: 11208
diff changeset
1478 static const WindowDesc _newgrf_desc(
13796
3e68f07eb821 (svn r18322) -Codechange: remove the WDP duplication; no need to tell the same twice.
rubidium <rubidium@openttd.org>
parents: 13755
diff changeset
1479 WDP_CENTER, 300, 263,
5893
8547517ef719 (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium <rubidium@openttd.org>
parents: 5668
diff changeset
1480 WC_GAME_OPTIONS, WC_NONE,
13749
fc3ab8256c95 (svn r18274) -Codechange: remove the unused WDF flags
rubidium <rubidium@openttd.org>
parents: 13705
diff changeset
1481 WDF_UNCLICK_BUTTONS,
13564
bae287664b02 (svn r18086) -Codechange: remove 'widget' from WindowDesc
rubidium <rubidium@openttd.org>
parents: 13419
diff changeset
1482 _nested_newgrf_widgets, lengthof(_nested_newgrf_widgets)
11373
474ba6cc0946 (svn r15723) -Codechange: use a constructor for WindowDescs as that makes expanding them much easier (Alberth)
rubidium <rubidium@openttd.org>
parents: 11208
diff changeset
1483 );
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1484
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
1485 /** Callback function for the newgrf 'apply changes' confirmation window
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
1486 * @param w Window which is calling this callback
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
1487 * @param confirmed boolean value, true when yes was clicked, false otherwise
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
1488 */
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
1489 static void NewGRFConfirmationCallback(Window *w, bool confirmed)
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
1490 {
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
1491 if (confirmed) {
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
1492 NewGRFWindow *nw = dynamic_cast<NewGRFWindow*>(w);
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
1493
9457
267a95510fdf (svn r13375) -Add: logging of actions that could possibly cause desyncs and crashes to simplify debugging. See readme.txt for details
smatz <smatz@openttd.org>
parents: 9317
diff changeset
1494 GamelogStartAction(GLAT_GRF);
15203
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
1495 GamelogGRFUpdate(_grfconfig, nw->actives); // log GRF changes
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
1496 CopyGRFConfigList(nw->orig_list, nw->actives, false);
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
1497 ReloadNewGRFData();
9457
267a95510fdf (svn r13375) -Add: logging of actions that could possibly cause desyncs and crashes to simplify debugging. See readme.txt for details
smatz <smatz@openttd.org>
parents: 9317
diff changeset
1498 GamelogStopAction();
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
1499
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
1500 /* Show new, updated list */
15201
071e920abcfb (svn r19830) -Codechange: Move variable declarations to their first use.
alberth <alberth@openttd.org>
parents: 15200
diff changeset
1501 GRFConfig *c;
071e920abcfb (svn r19830) -Codechange: Move variable declarations to their first use.
alberth <alberth@openttd.org>
parents: 15200
diff changeset
1502 int i = 0;
15203
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
1503 for (c = nw->actives; c != NULL && c != nw->active_sel; c = c->next, i++) {}
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
1504 CopyGRFConfigList(&nw->actives, *nw->orig_list, false);
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
1505 for (c = nw->actives; c != NULL && i > 0; c = c->next, i--) {}
2ef926c44a98 (svn r19832) -Codechange: Rename variables list->actives, sel->active_sel.
alberth <alberth@openttd.org>
parents: 15202
diff changeset
1506 nw->active_sel = c;
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1507 nw->avails.ForceRebuild();
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
1508
15208
ebff51f3984b (svn r19837) -Change: Display list of available (non-active) grfs in the NewGRF window.
alberth <alberth@openttd.org>
parents: 15207
diff changeset
1509 w->InvalidateData();
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
1510 }
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
1511 }
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
1512
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
1513
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1514
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1515 /** Setup the NewGRF gui
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1516 * @param editable allow the user to make changes to the grfconfig in the window
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1517 * @param show_params show information about what parameters are set for the grf files
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1518 * @param exec_changes if changes are made to the list (editable is true), apply these
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1519 * changes immediately or only update the list
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1520 * @param config pointer to a linked-list of grfconfig's that will be shown */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1521 void ShowNewGRFSettings(bool editable, bool show_params, bool exec_changes, GRFConfig **config)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1522 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1523 DeleteWindowByClass(WC_GAME_OPTIONS);
9207
839a532bf0f6 (svn r13073) -Codechange: make classes of the NewGRF windows
peter1138 <peter1138@openttd.org>
parents: 9164
diff changeset
1524 new NewGRFWindow(&_newgrf_desc, editable, show_params, exec_changes, config);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1525 }