OpenTTD Source  14.0-beta1
settings_gui.cpp File Reference
#include "stdafx.h"
#include "currency.h"
#include "error.h"
#include "settings_gui.h"
#include "textbuf_gui.h"
#include "command_func.h"
#include "network/network.h"
#include "town.h"
#include "settings_internal.h"
#include "strings_func.h"
#include "window_func.h"
#include "string_func.h"
#include "widgets/dropdown_type.h"
#include "widgets/dropdown_func.h"
#include "widgets/slider_func.h"
#include "highscore.h"
#include "base_media_base.h"
#include "company_base.h"
#include "company_func.h"
#include "viewport_func.h"
#include "core/geometry_func.hpp"
#include "ai/ai.hpp"
#include "blitter/factory.hpp"
#include "language.h"
#include "textfile_gui.h"
#include "stringfilter_type.h"
#include "querystring_gui.h"
#include "fontcache.h"
#include "zoom_func.h"
#include "rev.h"
#include "video/video_driver.hpp"
#include "music/music_driver.hpp"
#include "gui.h"
#include "mixer.h"
#include "newgrf_config.h"
#include "network/core/config.h"
#include "network/network_gui.h"
#include "network/network_survey.h"
#include "social_integration.h"
#include "safeguards.h"

Go to the source code of this file.

Data Structures

struct  BaseSetTextfileWindow< TBaseSet >
 Window for displaying the textfile of a BaseSet. More...
 
class  NWidgetSocialPlugins
 
struct  GameOptionsWindow
 
struct  SettingFilter
 Filter for settings list. More...
 
struct  BaseSettingEntry
 Data structure describing a single setting in a tab. More...
 
struct  SettingEntry
 Standard setting. More...
 
struct  SettingsContainer
 Containers for BaseSettingEntry. More...
 
struct  SettingsPage
 Data structure describing one page of settings in the settings window. More...
 
struct  GameSettingsWindow
 Window to edit settings of the game. More...
 
struct  CustomCurrencyWindow
 

Enumerations

enum  SettingEntryFlags {
  SEF_LEFT_DEPRESSED = 0x01, SEF_RIGHT_DEPRESSED = 0x02, SEF_BUTTONS_MASK = (SEF_LEFT_DEPRESSED | SEF_RIGHT_DEPRESSED), SEF_LAST_FIELD = 0x04,
  SEF_FILTERED = 0x08
}
 Flags for SettingEntry. More...
 
enum  RestrictionMode {
  RM_BASIC, RM_ADVANCED, RM_ALL, RM_CHANGED_AGAINST_DEFAULT,
  RM_CHANGED_AGAINST_NEW, RM_END
}
 How the list of advanced settings is filtered. More...
 
enum  WarnHiddenResult { WHR_NONE, WHR_CATEGORY, WHR_TYPE, WHR_CATEGORY_TYPE }
 Warnings about hidden search results. More...
 

Functions

static const void * ResolveObject (const GameSettings *settings_ptr, const IntSettingDesc *sd)
 
static uint GetCurrentResolutionIndex ()
 Get index of the current screen resolution. More...
 
static void ShowCustCurrency ()
 Open custom currency window.
 
template<class TBaseSet >
void ShowBaseSetTextfileWindow (TextfileType file_type, const TBaseSet *baseset, StringID content_type)
 Open the BaseSet version of the textfile window. More...
 
static void AddCustomRefreshRates ()
 Add the refresh rate from the config and the refresh rates from all the monitors to our list of refresh rates shown in the GUI.
 
std::unique_ptr< NWidgetBaseMakeNWidgetSocialPlugins ()
 Construct nested container widget for managing the list of social plugins.
 
void ShowGameOptions ()
 Open the game options window.
 
static SettingsContainerGetSettingsTree ()
 Construct settings tree.
 
static void ResetAllSettingsConfirmationCallback (Window *w, bool confirmed)
 Callback function for the reset all settings button. More...
 
void ShowGameSettings ()
 Open advanced settings window.
 
void DrawArrowButtons (int x, int y, Colours button_colour, byte state, bool clickable_left, bool clickable_right)
 Draw [<][>] boxes. More...
 
void DrawDropDownButton (int x, int y, Colours button_colour, bool state, bool clickable)
 Draw a dropdown button. More...
 
void DrawBoolButton (int x, int y, bool state, bool clickable)
 Draw a toggle button. More...
 

Variables

static const StringID _autosave_dropdown []
 
static const uint32_t _autosave_dropdown_to_minutes []
 Available settings for autosave intervals. More...
 
static Dimension _circle_size
 Dimension of the circle +/- icon. This is here as not all users are within the class of the settings window.
 
std::set< int > _refresh_rates = { 30, 60, 75, 90, 100, 120, 144, 240 }
 
static const std::map< int, StringID_scale_labels
 
static const std::map< int, StringID_volume_labels
 
static const NWidgetPart _nested_social_plugins_widgets []
 
static const NWidgetPart _nested_social_plugins_none_widgets []
 
static constexpr NWidgetPart _nested_game_options_widgets []
 
static WindowDesc _game_options_desc (__FILE__, __LINE__, WDP_CENTER, nullptr, 0, 0, WC_GAME_OPTIONS, WC_NONE, 0, std::begin(_nested_game_options_widgets), std::end(_nested_game_options_widgets))
 
static int SETTING_HEIGHT = 11
 Height of a single setting in the tree view in pixels.
 
static const StringID _game_settings_restrict_dropdown []
 
static constexpr NWidgetPart _nested_settings_selection_widgets []
 
static WindowDesc _settings_selection_desc (__FILE__, __LINE__, WDP_CENTER, "settings", 510, 450, WC_GAME_OPTIONS, WC_NONE, 0, std::begin(_nested_settings_selection_widgets), std::end(_nested_settings_selection_widgets))
 
static constexpr NWidgetPart _nested_cust_currency_widgets []
 
static WindowDesc _cust_currency_desc (__FILE__, __LINE__, WDP_CENTER, nullptr, 0, 0, WC_CUSTOM_CURRENCY, WC_NONE, 0, std::begin(_nested_cust_currency_widgets), std::end(_nested_cust_currency_widgets))
 

Detailed Description

GUI for settings.

Definition in file settings_gui.cpp.

Enumeration Type Documentation

◆ RestrictionMode

How the list of advanced settings is filtered.

Enumerator
RM_BASIC 

Display settings associated to the "basic" list.

RM_ADVANCED 

Display settings associated to the "advanced" list.

RM_ALL 

List all settings regardless of the default/newgame/... values.

RM_CHANGED_AGAINST_DEFAULT 

Show only settings which are different compared to default values.

RM_CHANGED_AGAINST_NEW 

Show only settings which are different compared to the user's new game setting values.

RM_END 

End for iteration.

Definition at line 1205 of file settings_gui.cpp.

◆ SettingEntryFlags

Flags for SettingEntry.

Note
The SEF_BUTTONS_MASK matches expectations of the formal parameter 'state' of DrawArrowButtons
Enumerator
SEF_LEFT_DEPRESSED 

Of a numeric setting entry, the left button is depressed.

SEF_RIGHT_DEPRESSED 

Of a numeric setting entry, the right button is depressed.

SEF_BUTTONS_MASK 

Bit-mask for button flags.

SEF_LAST_FIELD 

This entry is the last one in a (sub-)page.

SEF_FILTERED 

Entry is hidden by the string filter.

Definition at line 1195 of file settings_gui.cpp.

◆ WarnHiddenResult

Warnings about hidden search results.

Enumerator
WHR_NONE 

Nothing was filtering matches away.

WHR_CATEGORY 

Category setting filtered matches away.

WHR_TYPE 

Type setting filtered matches away.

WHR_CATEGORY_TYPE 

Both category and type settings filtered matches away.

Definition at line 2285 of file settings_gui.cpp.

Function Documentation

◆ DrawArrowButtons()

void DrawArrowButtons ( int  x,
int  y,
Colours  button_colour,
byte  state,
bool  clickable_left,
bool  clickable_right 
)

Draw [<][>] boxes.

Parameters
xthe x position to draw
ythe y position to draw
button_colourthe colour of the button
state0 = none clicked, 1 = first clicked, 2 = second clicked
clickable_leftis the left button clickable?
clickable_rightis the right button clickable?

Definition at line 2909 of file settings_gui.cpp.

◆ DrawBoolButton()

void DrawBoolButton ( int  x,
int  y,
bool  state,
bool  clickable 
)

Draw a toggle button.

Parameters
xthe x position to draw
ythe y position to draw
statetrue = lowered
clickableis the button clickable?

Definition at line 2961 of file settings_gui.cpp.

◆ DrawDropDownButton()

void DrawDropDownButton ( int  x,
int  y,
Colours  button_colour,
bool  state,
bool  clickable 
)

Draw a dropdown button.

Parameters
xthe x position to draw
ythe y position to draw
button_colourthe colour of the button
statetrue = lowered
clickableis the button clickable?

Definition at line 2940 of file settings_gui.cpp.

◆ GetCurrentResolutionIndex()

static uint GetCurrentResolutionIndex ( )
static

Get index of the current screen resolution.

Returns
Index of the current screen resolution if it is a known resolution, _resolutions.size() otherwise.

Definition at line 84 of file settings_gui.cpp.

References _resolutions.

◆ ResetAllSettingsConfirmationCallback()

static void ResetAllSettingsConfirmationCallback ( Window w,
bool  confirmed 
)
static

Callback function for the reset all settings button.

Parameters
wWindow which is calling this callback
confirmedboolean value, true when yes was clicked, false otherwise

Definition at line 2297 of file settings_gui.cpp.

References SettingsContainer::FoldAll(), GetSettingsTree(), Window::InvalidateData(), and SettingsContainer::ResetAll().

◆ ShowBaseSetTextfileWindow()

template<class TBaseSet >
void ShowBaseSetTextfileWindow ( TextfileType  file_type,
const TBaseSet *  baseset,
StringID  content_type 
)

Open the BaseSet version of the textfile window.

Parameters
file_typeThe type of textfile to display.
basesetThe BaseSet to use.
content_typeSTR_CONTENT_TYPE_xxx for title.

Definition at line 122 of file settings_gui.cpp.

References CloseWindowById(), and WC_TEXTFILE.

Variable Documentation

◆ _autosave_dropdown

const StringID _autosave_dropdown[]
static
Initial value:
= {
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF,
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_10_MINUTES,
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_30_MINUTES,
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_60_MINUTES,
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_120_MINUTES,
}

Definition at line 58 of file settings_gui.cpp.

◆ _autosave_dropdown_to_minutes

const uint32_t _autosave_dropdown_to_minutes[]
static
Initial value:
= {
0,
10,
30,
60,
120,
}

Available settings for autosave intervals.

Definition at line 68 of file settings_gui.cpp.

◆ _game_settings_restrict_dropdown

const StringID _game_settings_restrict_dropdown[]
static
Initial value:
= {
STR_CONFIG_SETTING_RESTRICT_BASIC,
STR_CONFIG_SETTING_RESTRICT_ADVANCED,
STR_CONFIG_SETTING_RESTRICT_ALL,
STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT,
STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW,
}

Definition at line 2275 of file settings_gui.cpp.

◆ _nested_social_plugins_none_widgets

const NWidgetPart _nested_social_plugins_none_widgets[]
static
Initial value:
= {
NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE, STR_NULL),
}

Definition at line 191 of file settings_gui.cpp.

◆ _nested_social_plugins_widgets

const NWidgetPart _nested_social_plugins_widgets[]
static
Initial value:
= {
NWidget(WWT_FRAME, COLOUR_GREY, WID_GO_SOCIAL_PLUGIN_TITLE), SetDataTip(STR_JUST_STRING2, STR_NULL),
NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM, STR_NULL),
NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_SOCIAL_PLUGIN_PLATFORM), SetMinimalSize(100, 12), SetDataTip(STR_JUST_RAW_STRING, STR_NULL), SetAlignment(SA_RIGHT),
NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE, STR_NULL),
NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_SOCIAL_PLUGIN_STATE), SetMinimalSize(100, 12), SetDataTip(STR_JUST_STRING1, STR_NULL), SetAlignment(SA_RIGHT),
}

Definition at line 176 of file settings_gui.cpp.

◆ _scale_labels

const std::map<int, StringID> _scale_labels
static
Initial value:
= {
{ 100, STR_GAME_OPTIONS_GUI_SCALE_1X },
{ 125, STR_NULL },
{ 150, STR_NULL },
{ 175, STR_NULL },
{ 200, STR_GAME_OPTIONS_GUI_SCALE_2X },
{ 225, STR_NULL },
{ 250, STR_NULL },
{ 275, STR_NULL },
{ 300, STR_GAME_OPTIONS_GUI_SCALE_3X },
{ 325, STR_NULL },
{ 350, STR_NULL },
{ 375, STR_NULL },
{ 400, STR_GAME_OPTIONS_GUI_SCALE_4X },
{ 425, STR_NULL },
{ 450, STR_NULL },
{ 475, STR_NULL },
{ 500, STR_GAME_OPTIONS_GUI_SCALE_5X },
}

Definition at line 144 of file settings_gui.cpp.

◆ _volume_labels

const std::map<int, StringID> _volume_labels
static
Initial value:
= {
{ 0, STR_GAME_OPTIONS_VOLUME_0 },
{ 15, STR_NULL },
{ 31, STR_GAME_OPTIONS_VOLUME_25 },
{ 47, STR_NULL },
{ 63, STR_GAME_OPTIONS_VOLUME_50 },
{ 79, STR_NULL },
{ 95, STR_GAME_OPTIONS_VOLUME_75 },
{ 111, STR_NULL },
{ 127, STR_GAME_OPTIONS_VOLUME_100 },
}

Definition at line 164 of file settings_gui.cpp.

SetFill
constexpr NWidgetPart SetFill(uint16_t fill_x, uint16_t fill_y)
Widget part function for setting filling.
Definition: widget_type.h:1141
WID_GO_SOCIAL_PLUGIN_PLATFORM
@ WID_GO_SOCIAL_PLUGIN_PLATFORM
Platform of the social plugin.
Definition: settings_widget.h:59
SetAlignment
constexpr NWidgetPart SetAlignment(StringAlignment align)
Widget part function for setting the alignment of text/images.
Definition: widget_type.h:1130
NWID_HORIZONTAL
@ NWID_HORIZONTAL
Horizontal container.
Definition: widget_type.h:77
EndContainer
constexpr NWidgetPart EndContainer()
Widget part function for denoting the end of a container (horizontal, vertical, WWT_FRAME,...
Definition: widget_type.h:1151
WID_GO_SOCIAL_PLUGIN_TITLE
@ WID_GO_SOCIAL_PLUGIN_TITLE
Title of the frame of the social plugin.
Definition: settings_widget.h:58
SA_RIGHT
@ SA_RIGHT
Right align the text (must be a single bit).
Definition: gfx_type.h:340
NWidget
constexpr NWidgetPart NWidget(WidgetType tp, Colours col, WidgetID idx=-1)
Widget part function for starting a new 'real' widget.
Definition: widget_type.h:1258
WID_GO_SOCIAL_PLUGIN_STATE
@ WID_GO_SOCIAL_PLUGIN_STATE
State of the social plugin.
Definition: settings_widget.h:60
WWT_FRAME
@ WWT_FRAME
Frame.
Definition: widget_type.h:62
WidgetDimensions::unscaled
static const WidgetDimensions unscaled
Unscaled widget dimensions.
Definition: window_gui.h:67
WWT_TEXT
@ WWT_TEXT
Pure simple text.
Definition: widget_type.h:60
SetPIP
constexpr NWidgetPart SetPIP(uint8_t pre, uint8_t inter, uint8_t post)
Widget part function for setting a pre/inter/post spaces.
Definition: widget_type.h:1220
SetMinimalSize
constexpr NWidgetPart SetMinimalSize(int16_t x, int16_t y)
Widget part function for setting the minimal size.
Definition: widget_type.h:1097
SetDataTip
constexpr NWidgetPart SetDataTip(uint32_t data, StringID tip)
Widget part function for setting the data and tooltip.
Definition: widget_type.h:1162
INVALID_STRING_ID
static const StringID INVALID_STRING_ID
Constant representing an invalid string (16bit in case it is used in savegames)
Definition: strings_type.h:17