; 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 <https://www.gnu.org/licenses/old-licenses/gpl-2.0>.
;

; 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<std::string_view> _support8bppmodes{"no"sv, "system"sv, "hardware"sv};
static constexpr std::initializer_list<std::string_view> _display_opt_modes{"SHOW_TOWN_NAMES"sv, "SHOW_STATION_NAMES"sv, "SHOW_SIGNS"sv, "FULL_ANIMATION"sv, ""sv, "FULL_DETAIL"sv, "WAYPOINTS"sv, "SHOW_COMPETITOR_SIGNS"sv};
static constexpr std::initializer_list<std::string_view> _facility_display_opt_modes{"TRAIN"sv, "TRUCK_STOP"sv, "BUS_STOP"sv, "AIRPORT"sv, "DOCK"sv, ""sv, "GHOST"sv};

#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, SettingFlags({$flags}), $var, $def,       $length,                                                            $from, $to, $cat, $extra, $startup),
SDTG_MMANY = SDTG_MMANY($name, $type, SettingFlags({$flags}), $var, $def,                        $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTG_OMANY = SDTG_OMANY($name, $type, SettingFlags({$flags}), $var, $def,       $max,            $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTG_SSTR  =  SDTG_SSTR($name, $type, SettingFlags({$flags}), $var, $def,       0,                                               $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
SDTG_BOOL  =  SDTG_BOOL($name,        SettingFlags({$flags}), $var, $def,                               $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTG_VAR   =   SDTG_VAR($name, $type, SettingFlags({$flags}), $var, $def, $min, $max, $interval,        $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $range_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    = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
interval = 0
str      = STR_NULL
strhelp  = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
strval   = STR_NULL
pre_cb   = nullptr
post_cb  = nullptr
str_cb   = nullptr
help_cb  = nullptr
val_cb   = nullptr
def_cb   = nullptr
range_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_MMANY]
name     = ""facility_display_opt""
type     = SLE_UINT8
var      = _facility_display_opt
def      = StationFacilities({StationFacility::Train, StationFacility::TruckStop, StationFacility::BusStop, StationFacility::Airport, StationFacility::Dock, STATION_FACILITY_GHOST})
full     = _facility_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     = ""soundsset""
type     = SLE_STRQ
var      = BaseSounds::ini_set
def      = """"
cat      = SC_BASIC

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

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

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

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

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

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

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

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

[SDTG_SSTR]
name     = ""savegame_format""
type     = SLE_STR
var      = _savegame_format
def      = """"
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      = _fcsettings.small.font
def      = """"

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

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

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

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

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

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

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

[SDTG_BOOL]
ifdef    = HAS_TRUETYPE_FONT
name     = ""global_aa""
var      = _fcsettings.global_aa
def      = true

[SDTG_BOOL]
ifdef    = HAS_TRUETYPE_FONT
name     = ""prefer_sprite_font""
var      = _fcsettings.prefer_sprite
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_SSTR]
name     = ""player_face""
type     = SLE_STR
var      = _company_manager_face
def      = """"
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      = """"
cat      = SC_EXPERT

[SDTG_SSTR]
name     = ""keyboard_caps""
type     = SLE_STR
var      = _keyboard_opt[1]
def      = """"
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_scale""
type     = SLE_INT32
var      = _gui_scale_cfg
def      = -1
min      = -1
max      = MAX_INTERFACE_SCALE
cat      = SC_BASIC

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