/**
    This file is part of springsettings,
    Copyright (C) 2007-09

    springsettings is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License version 2 as published by
    the Free Software Foundation.

    SpringLobby 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 springsettings.  If not, see <http://www.gnu.org/licenses/>.
**/

// Autohost
// LODScale=1.000
// LODScaleReflection=1.000
// LODScaleRefraction=1.000
// LODScaleShadow=1.000
// MapArchives=1									// multiple maps per archive?
// MetalMapPalette=0
//
// FIXME: VSync Off=-1?



#ifndef DEFS_HPP
#define DEFS_HPP

const unsigned int PWIN_SIZE_X  = 895;
const unsigned int PWIN_SIZE_Y  = 830;
const unsigned int CWIN_SIZE_X  = 580;
const unsigned int CWIN_SIZE_Y  = 360;

// ParentWin menu-item IDs
const int ID_MENUITEM_SAVE  			= 50;
const int ID_MENUITEM_RESET 			= 51;
const int ID_MENUITEM_QUIT  			= 52;
const int ID_MENUITEM_DISABLE_WARN 	= 53;
const int ID_MENUITEM_MODE 			= 60;
const int ID_MENUITEM_EXPERT 			= 62;
const int ID_MENUITEM_SIMPLE 			= 61;

const int ID_MENUITEM_HELP			    = 70;
const int ID_MENUITEM_ABOUT 			= 71;
const int ID_MENUITEM_CONTACT			= 72;
const int ID_MENUITEM_CREDITS 		    = 73;
const int ID_MENUITEM_BUGREPORT 		= 74;

// ParentWin TextInput IDs
const int ID_RES_CHOICES_LBOX_X = 1111;
const int ID_RES_CHOICES_LBOX_Y = 1112;

// ParentWin Rendering Options slider IDs
const int ID_RO_SLI_0 = 100;
const int ID_RO_SLI_1 = 101;
const int ID_RO_SLI_2 = 102;
const int ID_RO_SLI_3 = 103;
const int ID_RO_SLI_4 = 104;
const int ID_RO_SLI_5 = 105;
const int ID_RO_SLI_6 = 106;
const int ID_RO_SLI_7 = 107;
const int ID_RO_SLI_8 = 108;

// ParentWin Video Options checkbox IDs
const int ID_WINDOWP_VO_CBOX_0 = 250;
const int ID_WINDOWP_VO_CBOX_1 = 251;
const int ID_WINDOWP_VO_CBOX_2 = 252;

// ParentWin Video Options radiobutton IDs
const int ID_WINDOWP_VO_RBUT_0 = 280;
const int ID_WINDOWP_VO_RBUT_1 = 281;

// ParentWin Video Options slider IDs
const int ID_VO_SLI_0 = 200;

// tab_simple controls
const int ID_SIMPLE_QUAL_CBX		= 390;
const int ID_SIMPLE_DETAIL_CBX	    = 391;
const int ID_SIMPLE_MODE_CBX		= 392;
const int ID_SIMPLE_GOEXPERT_BUT 	= 393;


// UI Options checkbox IDs
const int ID_WINDOWP_UI_CBOX_1  = 360;
const int ID_WINDOWP_UI_CBOX_2  = 361;
const int ID_WINDOWP_UI_CBOX_3  = 362;
const int ID_WINDOWP_UI_CBOX_4  = 363;
const int ID_WINDOWP_UI_CBOX_5  = 364;
const int ID_WINDOWP_UI_CBOX_6  = 365;
const int ID_WINDOWP_UI_CBOX_7  = 366;
const int ID_WINDOWP_UI_CBOX_8  = 367;
const int ID_WINDOWP_UI_CBOX_9  = 368;
const int ID_WINDOWP_UI_CBOX_10 = 369;
const int ID_WINDOWP_UI_CBOX_11 = 370;
const int ID_WINDOWP_UI_CBOX_12 = 371;
const int ID_WINDOWP_UI_CBOX_13 = 372;
const int ID_WINDOWP_UI_CBOX_14 = 373;
const int ID_WINDOWP_UI_CBOX_15 = 374;
const int ID_WINDOWP_UI_CBOX_16 = 375;
const int ID_WINDOWP_UI_CBOX_17 = 376;
const int ID_WINDOWP_UI_CBOX_18 = 377;

//Zoom opt
const int ID_WINDOWP_UI_MW_SPD  = 385;

//QUALITY OPTIONS checkbox IDs
const int ID_WINDOWP_QA_CBOX_0  = 300;
const int ID_WINDOWP_QA_CBOX_1  = 301;
const int ID_WINDOWP_QA_CBOX_2  = 302;
const int ID_WINDOWP_QA_CBOX_3  = 303;
const int ID_WINDOWP_QA_CBOX_4  = 304;
const int ID_WINDOWP_QA_CBOX_5  = 305;
const int ID_WINDOWP_QA_CBOX_6  = 306;
const int ID_WINDOWP_QA_CBOX_7  = 307;
const int ID_WINDOWP_QA_CBOX_8  = 308;
const int ID_WINDOWP_QA_CBOX_9  = 309;
const int ID_WINDOWP_QA_CBOX_10 = 310;
const int ID_WINDOWP_QA_CBOX_11 = 311;

const int ID_WINDOWP_WR_COMBOX  = 320;

// ParentWin Audio Options slider IDs
const int ID_AO_SLI_0 = 400;
const int ID_AO_SLI_1 = 401;
const int ID_AO_SLI_2 = 402;
const int ID_AO_SLI_3 = 403;
const int ID_AO_SLI_4 = 404;
const int ID_AO_SLI_5 = 405;
const int ID_AO_SLI_6 = 406;

// ParentWin Debug Options checkbox IDs
const int ID_WINDOWP_DO_CBOX_0 = 540;


// ParentWin Debug Options slider IDs
const int ID_DO_SLI_0 = 500;

// ParentWin Water Rendering radiobutton IDs
const int ID_WINDOWP_WR_RBUT_0 = 550;
const int ID_WINDOWP_WR_RBUT_1 = 551;
const int ID_WINDOWP_WR_RBUT_2 = 552;
const int ID_WINDOWP_WR_RBUT_3 = 553;

// ChildWin Mouse Options checkbox IDs
const int ID_WINDOWC_MO_CBOX_0 = 650;
const int ID_WINDOWC_MO_CBOX_1 = 651;

// ChildWin Mouse Options radiobutton IDs
const int ID_WINDOWC_MO_RBUT_0 = 680;
const int ID_WINDOWC_MO_RBUT_1 = 681;
const int ID_WINDOWC_MO_RBUT_2 = 682;
const int ID_WINDOWC_MO_RBUT_3 = 683;
const int ID_WINDOWC_MO_RBUT_4 = 684;

// ChildWin Mouse Options slider IDs
const int ID_MO_SLI_0 = 660;
const int ID_MO_SLI_1 = 661;
const int ID_MO_SLI_2 = 662;
const int ID_MO_SLI_3 = 663;
const int ID_MO_SLI_4 = 664;

// panel_paths ids
const int ID_PATH_USYNC_BTN		= 701;
const int ID_PATH_OK_BTN			= 702;

//water 4 specific options
const int ID_W4_BumpWaterBlurReflection       = 720;
const int ID_W4_BumpWaterUseDepthTexture      = 721;
const int ID_W4_BumpWaterShoreWaves           = 722;
const int ID_W4_BumpWaterReflection           = 723;
const int ID_W4_BumpWaterTexSizeReflection    = 724;
const int ID_W4_BumpWaterRefraction           = 725;
const int ID_W4_BumpWaterAnisotropy           = 726;

const int ID_SHADOW_CHOICES	= 740;

#define SLI_STYLE (wxSL_LABELS )
#define WX_DEF_V wxDefaultValidator
const wxPoint WX_DEF_P(-1, -1);
const wxSize WX_DEF_S(-1, -1);
const wxSize WX_SLI_S(200, -1);

const int UPDATE_W4_CONTROLS 	                    = 2003;
const int UPDATE_VIDEO_MODE 	                    = 2002;
const int UPDATE_QA_BOXES	  	                    = 2001;
const int UPDATE_ALL			                    = 2000;
const int UPDATE_EXPERTMODE_WARNING_ON_SIMPLETAB   = 2003;

#define configHandler (susynclib())
const wxSize TAB_SIZE (700,500);

//#include <wx/string.h>
#include <wx/intl.h>
//#include <string>
#include <map>

struct Control {
    const wxString lbl;
    const wxString key;
    int id;
    const wxString def; //default value for confighandler, not control
    const wxString tTip [1];
};

const int Control_size = sizeof(Control);

typedef std::map<const wxString,const int> category_sizes_map ;
typedef category_sizes_map::value_type category_sizes_map_type;

const Control UI_ZOOM[] = {
	{_("Scrollwheel speed"),           _T("ScrollWheelSpeed"),      ID_WINDOWP_UI_MW_SPD,	_T("{{defaults['ScrollWheelSpeed']}}"),
			{_("Higher values mean faster zoom with mouse wheel.\n"
				"Negative values will invert zoom direction.\n"
				"Results may vary depending on camera mode!")}	}

};

const category_sizes_map_type UI_ZOOM_entry ( _T("UI_ZOOM"), sizeof(UI_ZOOM) / Control_size );

//TODO is max_texture stages obsolte?
const Control RO_SLI[] = {
	{_("Shadow-map size"),              _T("ShadowMapSize"),       ID_RO_SLI_0,	_T("{{defaults['ShadowMapSize']}}"), {_("higher value = better looking shadows\n"
																								"possible values: 1024, 2048, 4096, 8192")}	},
	{_("Tree view-distance"),           _T("TreeRadius"),          ID_RO_SLI_1,	_T("{{defaults['TreeRadius']}}"), {_("sets the maximum distance at which trees will still be rendered")}	},
	{_("Terrain detail"),               _T("GroundDetail"),        ID_RO_SLI_2,	_T("{{defaults['GroundDetail']}}"), {_("higher value = more terrain details")}	},
	{_("Unit LOD distance"),                  _T("UnitLodDist"),         ID_RO_SLI_3,	_T("{{defaults['UnitLodDist']}}"), {_("higher value = units will remain detailed even when zooming out")}	},
	{_("Grass detail"),                 _T("GrassDetail"),         ID_RO_SLI_4,	_T("{{defaults['GrassDetail']}}"), {_("higher value = more detailed grass")}	},
	{_("Ground decals"),                _T("GroundDecals"),        ID_RO_SLI_5,	_T("{{defaults['GroundDecals']}}"), {_("settings higher than 1 might have unwelcome side-effects / be very resource hungry")}	},
	{_("Unit icon distance"),           _T("UnitIconDist"),        ID_RO_SLI_6,	_T("{{defaults['UnitIconDist']}}"), {_("determines at which range units are still fully rendered\n"
																								"higher value = greater range = more units rendered at the same time")}	},
	{_("Max simultaneous particles"),     _T("MaxParticles"),        ID_RO_SLI_7,	_T("{{defaults['MaxParticles']}}")	, {_("limits how many particles are displayed at the same time")}},
	{_("Max nano simultaneous particles"),     _T("MaxNanoParticles"),        ID_RO_SLI_8,	_T("{{defaults['MaxNanoParticles']}}")	, {_("limits how many particles are displayed at the same time")}}
	//  not needed atm {_("Max texture stages (SM3)"), _T("SM3MaxTextureStages"), ID_RO_SLI_8,	"6"	, {_("Decrease this if you are having bad perfomance on maps in sm3 format,\nincrease if sm3 maps look ugly.")}}
};

const category_sizes_map_type RO_SLI_entry ( _T("RO_SLI"), sizeof(RO_SLI) / Control_size );

const Control VO_CBOX[] = {
	{_("Run full-screen"),                _T("Fullscreen"),              ID_WINDOWP_VO_CBOX_0,	_T("{{defaults['Fullscreen']}}"), {_("run fullscreen or in a window?")}},
	{_("Dual-screen mode"),               _T("DualScreenMode"),          ID_WINDOWP_VO_CBOX_1,	_T("{{defaults['DualScreenMode']}}"), {_("if you have two monitors you can use both")}},
	{_("Enable v-sync"),                  _T("VSync"),                   ID_WINDOWP_VO_CBOX_2,	_T("{{defaults['VSync']}}"), {_("V-Sync on/off")}}
};

const category_sizes_map_type VO_CBOX_entry ( _T("VO_BOX"), sizeof(VO_CBOX) / Control_size );

const Control VO_RBUT[] = {
	{_("16-bit Z-buffer"), _T("DepthBufferBits"), ID_WINDOWP_VO_RBUT_0,	_T("{{defaults['DepthBufferBits']}}"), {_("placeholder")}},
	{_("24-bit Z-buffer"), _T("DepthBufferBits"), ID_WINDOWP_VO_RBUT_1,	_T("{{defaults['DepthBufferBits']}}"), {_("placeholder")}}
};

const category_sizes_map_type VO_RBUT_entry ( _T("VO_RBUT"), sizeof(VO_RBUT) / Control_size );


const Control VO_SLI[] = {
	{_("Full-scene anti-aliasing samples"), _T("FSAALevel"), ID_VO_SLI_0,	_T("{{defaults['FSAALevel']}}"), {_("how much anti-aliasing should be applied")}}
};

const category_sizes_map_type VO_SLI_entry ( _T("VO_SLI"), sizeof(VO_SLI) / Control_size );

const Control VO_SLI_EXT[] = {
	{_T(""), _T("FSAA"), -1, _T("{{defaults['FSAA']}}"), {_T("")}}
};

const category_sizes_map_type VO_SLI_EXT_entry ( _T("VO_SLI_EXT"), sizeof(VO_SLI_EXT) / Control_size );

const Control AO_SLI[] = {
	{_("Maximum simultaneous sounds"), _T("MaxSounds"),            ID_AO_SLI_0,	_T("{{defaults['MaxSounds']}}") , {_("maximum different sounds played at the same time\n"
																								"Set this to zero to disable sound completely.")}},
	{_("Master sound volume"),   _T("snd_volmaster"),                ID_AO_SLI_1,	_T("{{defaults['snd_volmaster']}}"), {_("master sound volume")}},
	{_("General sound volume"),   _T("snd_general"),                ID_AO_SLI_2,	_T("{{defaults['snd_general']}}"), {_("general volume relative to master volume")}},
	{_("Unit reply volume"),     _T("snd_volunitreply"),       ID_AO_SLI_3,	_T("{{defaults['snd_volunitreply']}}") , {_("reply volume relative to master volume")}},
	{_("Battle volume"),     _T("snd_volbattle"),       ID_AO_SLI_4,	_T("{{defaults['snd_volbattle']}}") , {_("battle volume relative to global volume")}},
	{_("User interface volume"),     _T("snd_volui"),       ID_AO_SLI_5,	_T("{{defaults['snd_volui']}}") , {_("ui volume relative to global volume")}},
	{_("Air Absorbtion factor"),     _T("snd_airAbsorption"),       ID_AO_SLI_6,	_T("{{defaults['snd_airAbsorption']}}") , {_("How far sounds will have high frequencies dampened")}}

};

const category_sizes_map_type AO_SLI_entry ( _T("AO_SLI"), sizeof(AO_SLI) / Control_size );

const Control QA_CBOX[] = {
    {_("Shadows (slow)"),                                  _T("Shadows"),             ID_WINDOWP_QA_CBOX_0,	_T("{{defaults['Shadows']}}"), {_("enable shadows?")}},
	{_("3D trees"),                 _T("3DTrees"),             ID_WINDOWP_QA_CBOX_1,	_T("{{defaults['3DTrees']}}"), {_("want better looking trees?\n"
														"needs Geforce 2/Radeon 8500/Intel 830 or later class graphic card")}},
	{_("High-resolution clouds"), _T("AdvSky"),              ID_WINDOWP_QA_CBOX_2,	_T("{{defaults['AdvSky']}}"), {_("want better looking sky?\n"
														"needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card")}},
	{_("Dynamic clouds (slow)"),                           _T("DynamicSky"),          ID_WINDOWP_QA_CBOX_3,	_T("{{defaults['DynamicSky']}}"), {_("want moving clouds in the sky?")}},
	{_("Reflective units"),       _T("AdvUnitShading"),      ID_WINDOWP_QA_CBOX_4,	_T("{{defaults['AdvUnitShading']}}"), {_("shiny units?\n"
														"needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card")}},
	{_("Never use shaders when rendering SM3 maps"),       _T("SM3ForceFallbackTex"), ID_WINDOWP_QA_CBOX_5,	_T("{{defaults['SM3ForceFallbackTex']}}"), {_("problems with sm3 maps? enable this")}},
	{_("Enable LuaShaders support"),                       _T("LuaShaders"),          ID_WINDOWP_QA_CBOX_6,	_T("{{defaults['LuaShaders']}}"), {_("makes for some cool effects")}},
	{_("Use Pixelbuffer objects"),                       _T("UsePBO"),          ID_WINDOWP_QA_CBOX_7,	_T("{{defaults['UsePBO']}}"), {_("If supported, it speeds up the dynamic loading of terrain textures -> smoother camera movement")}},
	{_("Compress textures"),                                _T("CompressTextures"),ID_WINDOWP_QA_CBOX_8,	_T("{{defaults['CompressTextures']}}"), {_("Runtime texture compression. (Ideal for graphic cards with small amount of vram)")}},
	{_("High-resolution LOS textures"),                    _T("HighResLos"),          ID_WINDOWP_QA_CBOX_9,	_T("{{defaults['HighResLos']}}"), {_("smoother Line of Sight overlays")}},
    {_("Draw smooth points"),                              _T("SmoothPoints"),        ID_WINDOWP_QA_CBOX_10,	_T("{{defaults['SmoothPoints']}}"), {_("should points be anti-aliased")}},
	{_("Draw smooth lines"),                               _T("SmoothLines"),         ID_WINDOWP_QA_CBOX_11,	_T("{{defaults['SmoothLines']}}"), {_("should lines be anti-aliased")}},
};

const category_sizes_map_type QA_CBOX_entry ( _T("QA_CBOX"), sizeof(QA_CBOX) / Control_size );

const Control UI_CBOX[] = {

    {_("Issue commands on mini-map"),                       _T("MiniMapFullProxy"), ID_WINDOWP_UI_CBOX_2, _T("{{defaults['MiniMapFullProxy']}}"), {_("Issue orders on the mini-map like you would ")}},
	{_("Show commands on mini-map"),                       _T("MiniMapDrawCommands"), ID_WINDOWP_UI_CBOX_3,	_T("{{defaults['MiniMapDrawCommands']}}"), {_("default value is \"on\"")}},
	{_("Draw icons on mini-map"),                          _T("MiniMapIcons"),        ID_WINDOWP_UI_CBOX_4,	_T("{{defaults['MiniMapIcons']}}"), {_("default value is \"on\"")}},
	{_("Draw markers on mini-map"),                        _T("MiniMapMarker"),       ID_WINDOWP_UI_CBOX_5,	_T("{{defaults['MiniMapMarker']}}"), {_("default value is \"on\"")}},
	{_("Mini-map on left (single screen)"), 				_T("MinimapOnLeft"),       ID_WINDOWP_UI_CBOX_6,	_T("{{defaults['MinimapOnLeft']}}"), {_("left is the default")}},
	{_("Mini-map on left (dual screen)"),   				_T("DualScreenMiniMapOnLeft"), ID_WINDOWP_UI_CBOX_7,_T("{{defaults['DualScreenMiniMapOnLeft']}}"), {_("left is the default")}},
	{_("Simplified mini-map colors"),                      _T("SimpleMiniMapColors"), ID_WINDOWP_UI_CBOX_8,	_T("{{defaults['SimpleMiniMapColors']}}"), {_("Use less colors")}},

	{_("Team-colored nanospray"),                          _T("TeamNanoSpray"),       ID_WINDOWP_UI_CBOX_9,	_T("{{defaults['TeamNanoSpray']}}"),
																				{_("Should nano particels be the color of your team?")}},
	{_("Colorized elevation map"),                         _T("ColorElev"),           ID_WINDOWP_UI_CBOX_10,	_T("{{defaults['ColorElev']}}"), {_("makes differences in height clearer")}},

	{_("Show in-game clock"),                              _T("ShowClock"),           ID_WINDOWP_UI_CBOX_11,	_T("{{defaults['ShowClock']}}"),
										{_("requires \"Enable LuaWidgets\" to be set.\nWill be displayed in the bottom right corner")}},
	{_("Show in-game player information"),                 _T("ShowPlayerInfo"),      ID_WINDOWP_UI_CBOX_12,	_T("{{defaults['ShowPlayerInfo']}}"),
										{_("requires \"Enable LuaWidgets\" to be set.\nWill be displayed in the bottom right corner")}},
	{_("Show in-game framerate"),                          _T("ShowFPS"),             ID_WINDOWP_UI_CBOX_13,	_T("{{defaults['ShowFPS']}}"),
										{_("requires \"Enable LuaWidgets\" to be set.\nWill be displayed in the bottom right corner")}},
//TODO is there even a reason that it should be disabled?
	{_("Fix rendering on alt-tab"),                        _T("FixAltTab"),           ID_WINDOWP_UI_CBOX_14,	_T("{{defaults['FixAltTab']}}"), {_("Do not change if not needed")}},
	{_("Disallow helper AI's"),                            _T("NoHelperAIs"),         ID_WINDOWP_UI_CBOX_15,	_T("{{defaults['NoHelperAIs']}}"), {_("Disables Economy AI, etc.\nIf enabled might screw with LuaUi.")}},
	{_("Enable scroll on window edge"),					_T("WindowedEdgeMove"),	ID_WINDOWP_UI_CBOX_16,	_T("{{defaults['WindowedEdgeMove']}}"), {_("Scroll the screen when mouse reaches the screen's edge.")}},
	{_("Invert Mouse"),									_T("InvertMouse"),			ID_WINDOWP_UI_CBOX_17,	_T("{{defaults['InvertMouse']}}"), {_("Inverts the Mouse Y-axis in FPS mode")}},
	{_("Use Hardware Cursor"),									_T("HardwareCursor"),			ID_WINDOWP_UI_CBOX_18,	_T("{{defaults['HardwareCursor']}}"), {_("Use native OS mouse cursor (hardware accelerated)")}},


};

const category_sizes_map_type UI_CBOX_entry ( _T("UI_CBOX"), sizeof(UI_CBOX) / Control_size );

const Control MO_SLI[] = {
	{_("Overhead camera"),    _T("OverheadScrollSpeed"),    ID_MO_SLI_0,	_T("{{defaults['OverheadScrollSpeed']}}"), {_("set the scroll speed (mouse + keyboard) for this mode")}},
	{_("Rotatable overhead camera"), _T("RotOverheadScrollSpeed"), ID_MO_SLI_1,	_T("{{defaults['RotOverheadScrollSpeed']}}") , {_("set the scroll speed (mouse + keyboard) for this mode")}},
	{_("Total war camera"),          _T("TWScrollSpeed"),          ID_MO_SLI_2,	_T("{{defaults['TWScrollSpeed']}}") , {_("set the scroll speed (mouse + keyboard) for this mode")}},
	{_("First person camera"),         _T("FPSScrollSpeed"),         ID_MO_SLI_3,	_T("{{defaults['FPSScrollSpeed']}}") , {_("set the scroll speed (mouse + keyboard) for this mode")}},
	{_("Free camera"),          _T("CamFreeScrollSpeed"),     ID_MO_SLI_4,	_T("{{defaults['CamFreeScrollSpeed']}}") , {_("set the scroll speed (mouse + keyboard) for this mode")}}
};

const category_sizes_map_type MO_SLI_entry ( _T("MO_SLI"), sizeof(MO_SLI) / Control_size );

const Control MO_SLI_EXT[] = {
	{_T(""), _T("OverheadEnabled"), -1,	_T("{{defaults['OverheadEnabled']}}"), {_("Make this the default view when startins Spring.\n"
													"Can be changed ingame.")}},
	{_T(""), _T("RotOverheadEnabled"), -1,	_T("{{defaults['RotOverheadEnabled']}}"), {_("Make this the default view when startins Spring.\n"
													"Can be changed ingame.")}},
	{_T(""), _T("TWEnabled"), -1,		_T("{{defaults['TWEnabled']}}"), {_("Make this the default view when startins Spring.\n"
												"Can be changed ingame.")}},
	{_T(""), _T("FPSEnabled"), -1,		_T("{{defaults['FPSEnabled']}}"), {_("Make this the default view when startins Spring.\n"
												"Can be changed ingame.")}},
	{_T(""), _T("CamFreeEnabled"), -1,	_T("{{defaults['CamFreeEnabled']}}"), {_("Make this the default view when startins Spring.\n"
												"Can be changed ingame.")}},
};

const category_sizes_map_type MO_SLI_EXT_entry ( _T("MO_SLI_EXT"), sizeof(MO_SLI_EXT) / Control_size );

const Control DO_SLI[] = {
	{_("Console verbose level (0=min,10=max)"), _T("VerboseLevel"), ID_DO_SLI_0,	_T("{{defaults['VerboseLevel']}}"), {_("How much information should be outputted?")}}
};

const category_sizes_map_type DO_SLI_entry ( _T("DO_SLI"), sizeof(DO_SLI) / Control_size );

const Control DO_CBOX[] = {
	{_("Catch AI exceptions"),        _T("CatchAIExceptions"), ID_WINDOWP_DO_CBOX_0,	_T("{{defaults['CatchAIExceptions']}}"), {_("disable for AI debugging")}}
};

const category_sizes_map_type DO_CBOX_entry ( _T("DO_CBOX"), sizeof(DO_CBOX) / Control_size );

const Control WR_COMBOX[] = {
		{_("Basic"),                  _T("ReflectiveWater"), ID_WINDOWP_WR_COMBOX,	_T("{{defaults['ReflectiveWater']}}"), {_("Depending on the power of your graphics card,\n"
																								"selecting higher quality than basic can have a\n"
																								"major impact on Spring's performance.\n")}}
	/*{_("reflective",              "ReflectiveWater", ID_WINDOWP_WR_COMBOX_1,	"1"},
	{_("reflective + refractive", "ReflectiveWater", ID_WINDOWP_WR_COMBOX_2,	"1"},
	{_("dynamic",                 "ReflectiveWater", ID_WINDOWP_WR_COMBOX_3,	"1"}*/
};

const category_sizes_map_type WR_COMBOX_entry ( _T("WR_COMBOX"), sizeof(WR_COMBOX) / Control_size );

const wxString WR_COMBOX_CHOICES[] = {
	_("Basic"), _("Reflective"), _("Reflective + refractive"), _("Dynamic"), _("Bump-mapped")
};

const Control MO_CBOX[] = {
	{_("Invert mouse y-axis"),             _T("InvertMouse"),      ID_WINDOWC_MO_CBOX_0,	_T("{{defaults['InvertMouse']}}"), {_("swap up/down with down/up")}},
	{_("Mini-map 3-button mouse support"), _T("MiniMapFullProxy"), ID_WINDOWC_MO_CBOX_1,	_T("{{defaults['MiniMapFullProxy']}}"), {_("if you don't want to able to use that button, disable it here")}}
};

const category_sizes_map_type MO_CBOX_entry ( _T("MO_CBOX"), sizeof(MO_CBOX) / Control_size );

const Control MO_RBUT[] = {
	{_("Overhead"),            _T("CamMode"), ID_WINDOWC_MO_RBUT_0,	_T("{{defaults['CamMode']}}"), {_("Static bird's eye view")}},
	{_("Rotatable overhead"), _T("CamMode"), ID_WINDOWC_MO_RBUT_1,	_T("{{defaults['CamMode']}}"), {_("Same as overhead, but you can rotate around the z-axis")}},
	{_("Total war"),           _T("CamMode"), ID_WINDOWC_MO_RBUT_2,	_T("{{defaults['CamMode']}}"), {_("top-view camera, which can be tilted on the X axis")}},
	{_("First person"),        _T("CamMode"), ID_WINDOWC_MO_RBUT_3,	_T("{{defaults['CamMode']}}"), {_("Camera from unit's point of view")}},
	{_("Free camera"),         _T("CamMode"), ID_WINDOWC_MO_RBUT_4,	_T("{{defaults['CamMode']}}"), {_("Modify the view anyway you want")}}
};

const category_sizes_map_type MO_RBUT_entry ( _T("MO_RBUT"), sizeof(MO_RBUT) / Control_size );

const Control RC_TEXT[] = {
	{_T(""), _T("XResolution"), -1,	_T("{{defaults['']}}"), {_("screen width")}},
	{_T(""), _T("YResolution"), -1,	_T("{{defaults['']}}") , {_("screen height")}}
};

const category_sizes_map_type RC_TEXT_entry ( _T("RC_TEXT"), sizeof(RC_TEXT) / Control_size );


const Control W4_CONTROLS[] = {
    //booleans = checkboxes
	{_("Blur reflection"), _T("BumpWaterBlurReflection"), ID_W4_BumpWaterBlurReflection , _T("{{defaults['BumpWaterBlurReflection']}}"), {_T("")}},
    {_("Use depth texture"), _T("BumpWaterUseDepthTexture"), ID_W4_BumpWaterUseDepthTexture , _T("{{defaults['BumpWaterUseDepthTexture']}}"), {_("enables smoother blending on coastlines")}},
    {_("Shore waves"), _T("BumpWaterShoreWaves"), ID_W4_BumpWaterShoreWaves , _T("{{defaults['BumpWaterShoreWaves']}}"), {_("Enables shorewaves")}},
    {_("Reflection"), _T("BumpWaterReflection"), ID_W4_BumpWaterReflection , _T("{{defaults['BumpWaterReflection']}}"), {_("Turn on water reflections")}},
    // select boxes
	{_("Reflection texture size"), _T("BumpWaterTexSizeReflection"), ID_W4_BumpWaterTexSizeReflection , _T("{{defaults['BumpWaterTexSizeReflection']}}"), {_T("")}},
    {_("Refraction"), _T("BumpWaterRefraction"), ID_W4_BumpWaterRefraction , _T("{{defaults['BumpWaterRefraction']}}"), {_("Turn on water refractions.\n(0:=off, 1:=screencopy(fast), 2:=own rendering pass(slow)).")}},
    // spin control
	{_("Anisotropy"), _T("BumpWaterAnisotropy"), ID_W4_BumpWaterAnisotropy , _T("{{defaults['BumpWaterAnisotropy']}}"), {_T("")}},
	//     {_T(""), _T(""), ID_W4_ , _T(""), {_T("")}},
	//     {_T(""), _T(""), ID_W4_ , _T(""), {_T("")}},
	//     {_T(""), _T(""), ID_W4_ , _T(""), {_T("")}},
	//     {_T(""), _T(""), ID_W4_ , _T(""), {_T("")}},

};

const wxString W4_REFRACTION_CHOICES[] = { _("off"), _("screencopy(fast)"), _("own rendering pass(slow)") };
const wxString W4_TEXSIZE_CHOICES[] = { _T("128"), _T("256"), _T("512"), _T("1024") };
const wxString SHADOW_CHOICES[] = { _T("disabled"), _T("off"), _T("on") };

const category_sizes_map_type W4_CONTROLS_entry ( _T("W4_CONTROLS"), sizeof(W4_CONTROLS) / Control_size );

const category_sizes_map_type entries_[] = { RC_TEXT_entry, MO_RBUT_entry, MO_CBOX_entry, WR_COMBOX_entry, DO_CBOX_entry, DO_SLI_entry, MO_SLI_EXT_entry,
                                            MO_SLI_entry, UI_CBOX_entry, QA_CBOX_entry, AO_SLI_entry, AO_SLI_entry, VO_SLI_EXT_entry, VO_SLI_entry,
                                            VO_RBUT_entry, VO_CBOX_entry, RO_SLI_entry, UI_ZOOM_entry, W4_CONTROLS_entry};

static category_sizes_map s_category_sizes ( entries_ , entries_ + sizeof(entries_) / sizeof(entries_[0]) );

#endif
