; This file is part of OpenTTD.
; 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.
; 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.
; 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/>.
;

; Various of settings that are stored in global variables. They are all
; located under "misc" in the configuration files.

[pre-amble]
extern std::string _config_language_file;

static constexpr std::initializer_list<const char*> _support8bppmodes{"no", "system", "hardware"};
static constexpr std::initializer_list<const char*> _display_opt_modes{"SHOW_TOWN_NAMES", "SHOW_STATION_NAMES", "SHOW_SIGNS", "FULL_ANIMATION", "", "FULL_DETAIL", "WAYPOINTS", "SHOW_COMPETITOR_SIGNS"};

#ifdef WITH_COCOA
extern bool _allow_hidpi_window;
#endif
#ifndef WITH_COCOA
#define WITHOUT_COCOA
#endif

static const SettingVariant _misc_settings_table[] = {
[post-amble]
};
[templates]
SDTG_LIST  =  SDTG_LIST($name, $type, $flags, $var, $def,       $length,                                                            $from, $to, $cat, $extra, $startup),
SDTG_MMANY = SDTG_MMANY($name, $type, $flags, $var, $def,                        $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
SDTG_OMANY = SDTG_OMANY($name, $type, $flags, $var, $def,       $max,            $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
SDTG_SSTR  =  SDTG_SSTR($name, $type, $flags, $var, $def,       0,                                               $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
SDTG_BOOL  =  SDTG_BOOL($name,        $flags, $var, $def,                               $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
SDTG_VAR   =   SDTG_VAR($name, $type, $flags, $var, $def, $min, $max, $interval,        $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),

[validation]
SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
SDTG_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");

[defaults]
flags    = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
interval = 0
str      = STR_NULL
strhelp  = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
strval   = STR_NULL
pre_cb   = nullptr
post_cb  = nullptr
load     = nullptr
from     = SL_MIN_VERSION
to       = SL_MAX_VERSION
cat      = SC_ADVANCED
extra    = 0
startup  = true



[SDTG_MMANY]
name     = ""display_opt""
type     = SLE_UINT8
var      = _display_opt
def      = (1 << DO_SHOW_TOWN_NAMES | 1 << DO_SHOW_STATION_NAMES | 1 << DO_SHOW_SIGNS | 1 << DO_FULL_ANIMATION | 1 << DO_FULL_DETAIL | 1 << DO_SHOW_WAYPOINT_NAMES | 1 << DO_SHOW_COMPETITOR_SIGNS)
full     = _display_opt_modes

[SDTG_BOOL]
name     = ""fullscreen""
var      = _fullscreen
def      = false
cat      = SC_BASIC

[SDTG_BOOL]
ifdef    = WITH_COCOA
name     = ""video_hw_accel""
var      = _video_hw_accel
def      = false
cat      = SC_BASIC

[SDTG_BOOL]
ifdef    = WITHOUT_COCOA
name     = ""video_hw_accel""
var      = _video_hw_accel
def      = true
cat      = SC_BASIC

[SDTG_BOOL]
name     = ""video_vsync""
var      = _video_vsync
def      = false
cat      = SC_BASIC

[SDTG_OMANY]
name     = ""support8bpp""
type     = SLE_UINT8
var      = _support8bpp
def      = 0
max      = 2
full     = _support8bppmodes
cat      = SC_BASIC

[SDTG_SSTR]
name     = ""graphicsset""
type     = SLE_STRQ
var      = BaseGraphics::ini_set
def      = nullptr
cat      = SC_BASIC

[SDTG_SSTR]
name     = ""soundsset""
type     = SLE_STRQ
var      = BaseSounds::ini_set
def      = nullptr
cat      = SC_BASIC

[SDTG_SSTR]
name     = ""musicset""
type     = SLE_STRQ
var      = BaseMusic::ini_set
def      = nullptr
cat      = SC_BASIC

[SDTG_SSTR]
name     = ""videodriver""
type     = SLE_STRQ
var      = _ini_videodriver
def      = nullptr
cat      = SC_EXPERT

[SDTG_SSTR]
name     = ""musicdriver""
type     = SLE_STRQ
var      = _ini_musicdriver
def      = nullptr
cat      = SC_EXPERT

[SDTG_SSTR]
name     = ""sounddriver""
type     = SLE_STRQ
var      = _ini_sounddriver
def      = nullptr
cat      = SC_EXPERT

[SDTG_SSTR]
name     = ""blitter""
type     = SLE_STRQ
var      = _ini_blitter
def      = nullptr

[SDTG_SSTR]
name     = ""language""
type     = SLE_STR
var      = _config_language_file
def      = nullptr
cat      = SC_BASIC

; workaround for implicit lengthof() in SDTG_LIST
[SDTG_LIST]
name     = ""resolution""
type     = SLE_INT
length   = 2
var      = _cur_resolution
def      = ""0,0""
cat      = SC_BASIC

[SDTG_SSTR]
name     = ""screenshot_format""
type     = SLE_STR
var      = _screenshot_format_name
def      = nullptr
cat      = SC_EXPERT

[SDTG_SSTR]
name     = ""savegame_format""
type     = SLE_STR
var      = _savegame_format
def      = nullptr
cat      = SC_EXPERT

[SDTG_BOOL]
name     = ""rightclick_emulate""
var      = _rightclick_emulate
def      = false

[SDTG_SSTR]
ifdef    = HAS_TRUETYPE_FONT
name     = ""small_font""
type     = SLE_STR
var      = _freetype.small.font
def      = nullptr

[SDTG_SSTR]
ifdef    = HAS_TRUETYPE_FONT
name     = ""medium_font""
type     = SLE_STR
var      = _freetype.medium.font
def      = nullptr

[SDTG_SSTR]
ifdef    = HAS_TRUETYPE_FONT
name     = ""large_font""
type     = SLE_STR
var      = _freetype.large.font
def      = nullptr

[SDTG_SSTR]
ifdef    = HAS_TRUETYPE_FONT
name     = ""mono_font""
type     = SLE_STR
var      = _freetype.mono.font
def      = nullptr

[SDTG_VAR]
ifdef    = HAS_TRUETYPE_FONT
name     = ""small_size""
type     = SLE_UINT
var      = _freetype.small.size
def      = 0
min      = 0
max      = 72

[SDTG_VAR]
ifdef    = HAS_TRUETYPE_FONT
name     = ""medium_size""
type     = SLE_UINT
var      = _freetype.medium.size
def      = 0
min      = 0
max      = 72

[SDTG_VAR]
ifdef    = HAS_TRUETYPE_FONT
name     = ""large_size""
type     = SLE_UINT
var      = _freetype.large.size
def      = 0
min      = 0
max      = 72

[SDTG_VAR]
ifdef    = HAS_TRUETYPE_FONT
name     = ""mono_size""
type     = SLE_UINT
var      = _freetype.mono.size
def      = 0
min      = 0
max      = 72

[SDTG_BOOL]
ifdef    = HAS_TRUETYPE_FONT
name     = ""small_aa""
var      = _freetype.small.aa
def      = false

[SDTG_BOOL]
ifdef    = HAS_TRUETYPE_FONT
name     = ""medium_aa""
var      = _freetype.medium.aa
def      = false

[SDTG_BOOL]
ifdef    = HAS_TRUETYPE_FONT
name     = ""large_aa""
var      = _freetype.large.aa
def      = false

[SDTG_BOOL]
ifdef    = HAS_TRUETYPE_FONT
name     = ""mono_aa""
var      = _freetype.mono.aa
def      = false

[SDTG_VAR]
name     = ""sprite_cache_size_px""
type     = SLE_UINT
var      = _sprite_cache_size
def      = 128
min      = 1
max      = 512
cat      = SC_EXPERT

[SDTG_VAR]
name     = ""player_face""
type     = SLE_UINT32
var      = _company_manager_face
def      = 0
min      = 0
max      = 0xFFFFFFFF
cat      = SC_BASIC

[SDTG_VAR]
name     = ""transparency_options""
type     = SLE_UINT
var      = _transparency_opt
def      = 0
min      = 0
max      = 0x1FF
cat      = SC_BASIC

[SDTG_VAR]
name     = ""transparency_locks""
type     = SLE_UINT
var      = _transparency_lock
def      = 0
min      = 0
max      = 0x1FF
cat      = SC_BASIC

[SDTG_VAR]
name     = ""invisibility_options""
type     = SLE_UINT
var      = _invisibility_opt
def      = 0
min      = 0
max      = 0xFF
cat      = SC_BASIC

[SDTG_SSTR]
name     = ""keyboard""
type     = SLE_STR
var      = _keyboard_opt[0]
def      = nullptr
cat      = SC_EXPERT

[SDTG_SSTR]
name     = ""keyboard_caps""
type     = SLE_STR
var      = _keyboard_opt[1]
def      = nullptr
cat      = SC_EXPERT

[SDTG_VAR]
name     = ""last_newgrf_count""
type     = SLE_UINT32
var      = _settings_client.gui.last_newgrf_count
def      = 100
min      = 0
max      = UINT32_MAX
cat      = SC_EXPERT

[SDTG_VAR]
name     = ""gui_zoom""
type     = SLE_INT8
var      = _gui_zoom_cfg
def      = ZOOM_LVL_CFG_AUTO
min      = ZOOM_LVL_CFG_AUTO
max      = ZOOM_LVL_OUT_4X
cat      = SC_BASIC

[SDTG_VAR]
name     = ""font_zoom""
type     = SLE_INT8
var      = _font_zoom_cfg
def      = ZOOM_LVL_CFG_AUTO
min      = ZOOM_LVL_CFG_AUTO
max      = ZOOM_LVL_OUT_4X
cat      = SC_BASIC

[SDTG_BOOL]
ifdef    = WITH_COCOA
name     = ""allow_hidpi""
var      = _allow_hidpi_window
def      = true
