]> git.xonotic.org Git - xonotic/netradiant.git/blobdiff - radiant/preferences.h
Add support for W:ET to the game setup dialog
[xonotic/netradiant.git] / radiant / preferences.h
index 581c8fe780dcfc464b494553c33d33ab02510d3b..3d0647148fae457f3026c541929afa8bf64bba33 100644 (file)
@@ -1,23 +1,23 @@
 /*
-Copyright (C) 1999-2007 id Software, Inc. and contributors.
-For a list of contributors, see the accompanying CONTRIBUTORS file.
+   Copyright (C) 1999-2007 id Software, Inc. and contributors.
+   For a list of contributors, see the accompanying CONTRIBUTORS file.
 
-This file is part of GtkRadiant.
+   This file is part of GtkRadiant.
 
-GtkRadiant 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; either version 2 of the License, or
-(at your option) any later version.
+   GtkRadiant 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; either version 2 of the License, or
+   (at your option) any later version.
 
-GtkRadiant 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.
+   GtkRadiant 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 GtkRadiant; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-*/
+   You should have received a copy of the GNU General Public License
+   along with GtkRadiant; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
 
 #ifndef _PREFERENCES_H_
 #define _PREFERENCES_H_
@@ -26,603 +26,695 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #include "gtkr_list.h"
 //#include "profile.h"
 
+#ifdef _WIN32
+#define NVIDIA_AERO_HACK
+#endif
+
 #define MAX_TEXTURE_QUALITY 3
 
 enum PrefTypes_t
 {
-  PREF_STR,
-  PREF_INT,
-  PREF_BOOL,
-  PREF_FLOAT,
-  PREF_VEC3,
-  PREF_WNDPOS,
+       PREF_STR,
+       PREF_INT,
+       PREF_BOOL,
+       PREF_FLOAT,
+       PREF_VEC3,
+       PREF_WNDPOS,
 };
 
 /*!
-a preference assignment, name, type and pointer to value
-we don't store the xmlNodePtr because the document itself can be thrown away upon any LoadPref
-(see CGameDialog::UpdatePrefTree)
-*/
+   a preference assignment, name, type and pointer to value
+   we don't store the xmlNodePtr because the document itself can be thrown away upon any LoadPref
+   (see CGameDialog::UpdatePrefTree)
+ */
 class CPrefAssignment
 {
 public:
-  Str mName;
-  PrefTypes_t mType;
-  void *mVal;
-
-  CPrefAssignment(char *name, PrefTypes_t Type, void *Val)
-  {
-    mName = name; mType = Type; mVal = Val;
-  }
-  CPrefAssignment() { mVal = NULL; }
-  CPrefAssignment(const CPrefAssignment& ass);
-  virtual ~CPrefAssignment() { }
-  virtual CPrefAssignment& operator =(const CPrefAssignment& ass);
+Str mName;
+PrefTypes_t mType;
+void *mVal;
+
+CPrefAssignment( const char *name, PrefTypes_t Type, void *Val ){
+       mName = name; mType = Type; mVal = Val;
+}
+CPrefAssignment() { mVal = NULL; }
+CPrefAssignment( const CPrefAssignment& ass );
+virtual ~CPrefAssignment() { }
+virtual CPrefAssignment& operator =( const CPrefAssignment& ass );
 };
 
 
 /*!
-generic preferences storage class, using xml files
-*/
+   generic preferences storage class, using xml files
+ */
 class CXMLPropertyBag
 {
 private:
-  /*!
-  local prefs file
 */
-  xmlDocPtr mpDoc;
-  xmlNodePtr mpDocNode;
-
-  /*!
-  prefs assignments (what pref name, what type, what variable)
 */
-  list<CPrefAssignment> mPrefAssignments;
-
-  /*!
-  name of file to load/save as
 */
-  Str mStrFilename;
-
-  /*!
-  store assignment in the property list if not already there
 */
-  void PushAssignment(char *name, PrefTypes_t type, void *pV);
-
-  /*!
-  find the xmlnode relating to the epair name
 */
-  xmlNodePtr EpairForName(const char *name);
+/*!
+   local prefs file
+ */
+xmlDocPtr mpDoc;
+xmlNodePtr mpDocNode;
+
+/*!
+   prefs assignments (what pref name, what type, what variable)
+ */
+list<CPrefAssignment> mPrefAssignments;
+
+/*!
+   name of file to load/save as
+ */
+Str mStrFilename;
+
+/*!
+   store assignment in the property list if not already there
+ */
+void PushAssignment( const char *name, PrefTypes_t type, void *pV );
+
+/*!
+   find the xmlnode relating to the epair name
+ */
+xmlNodePtr EpairForName( const char *name );
 
 public:
-  CXMLPropertyBag();
-  virtual ~CXMLPropertyBag() 
-  {
-    if (InUse())
-      Clear();
-  };
-
-  /*!
-  read a pref setting, if doesn't exist, will add it to the xml tree (using default value provided)
-  \arg name the name of the pref
-  \arg pV pointer to the value
-  \arg V default value
-  those functions will fill in the list of preferences assignments
-    (name, type and pointer to value)
-    this is used in UpdatePrefTree
-  */
-  void GetPref(char *name, Str *pV, char *V);
-  void GetPref(char *name, int *pV, int V);
-  void GetPref(char *name, bool *pV, bool V);
-  void GetPref(char *name, float *pV, float V);
-  void GetPref(char *name, float *pV, float* V);
-  void GetPref(char *name, window_position_t* pV, window_position_t V);
-
-  /*!
-  returns whether or not the property bag is already open
-  */
-  qboolean InUse() { return (mpDoc != NULL); };
-
-  /*!
-  unload the xml doc, and free the tree
-  */
-  void Clear();
-
-  /*|
-  read data from our XML file
-  */
-  void ReadXMLFile(const char* pFilename);
-
-  /*|
-  write out the property bag to an XML data file
-  return is success/fail
-  */
-  qboolean WriteXMLFile(const char* pFilename);
-
-  /*!
-  update the xml tree with data form the property list, usually in preparation for a write
-  */
-  void UpdatePrefTree();
-
-  /*!
-  did the file have any data or not?
-  */
-  qboolean mbEmpty;
+CXMLPropertyBag();
+virtual ~CXMLPropertyBag(){
+       if ( InUse() ) {
+               Clear();
+       }
 };
 
 /*!
-holds information for a given game
-I'm a bit unclear on that still
-it holds game specific configuration stuff
-such as base names, engine names, some game specific features to activate in the various modules
-it is not strictly a prefs thing since the user is not supposed to edit that (unless he is hacking
-support for a new game)
+   read a pref setting, if doesn't exist, will add it to the xml tree (using default value provided)
+   \arg name the name of the pref
+   \arg pV pointer to the value
+   \arg V default value
+   those functions will fill in the list of preferences assignments
+   (name, type and pointer to value)
+   this is used in UpdatePrefTree
+ */
+void GetPref( const char *name, Str *pV, const char *V );
+void GetPref( const char *name, int *pV, int V );
+void GetPref( const char *name, bool *pV, bool V );
+void GetPref( const char *name, float *pV, float V );
+void GetPref( const char *name, float *pV, float* V );
+void GetPref( const char *name, window_position_t* pV, window_position_t V );
 
-what we do now is fully generate the information for this during the setup. We might want to
-generate a piece that just says "the game pack is there", but put the rest of the config somwhere
-else (i.e. not generated, copied over during setup .. for instance in the game tools directory)
-*/
+/*!
+   returns whether or not the property bag is already open
+ */
+qboolean InUse() { return ( mpDoc != NULL ); };
+
+/*!
+   unload the xml doc, and free the tree
+ */
+void Clear();
+
+/*|
+   read data from our XML file
+ */
+void ReadXMLFile( const char* pFilename );
+
+/*|
+   write out the property bag to an XML data file
+   return is success/fail
+ */
+qboolean WriteXMLFile( const char* pFilename );
+
+/*!
+   update the xml tree with data form the property list, usually in preparation for a write
+ */
+void UpdatePrefTree();
+
+/*!
+   did the file have any data or not?
+ */
+qboolean mbEmpty;
+};
+
+/*!
+   holds information for a given game
+   I'm a bit unclear on that still
+   it holds game specific configuration stuff
+   such as base names, engine names, some game specific features to activate in the various modules
+   it is not strictly a prefs thing since the user is not supposed to edit that (unless he is hacking
+   support for a new game)
+
+   what we do now is fully generate the information for this during the setup. We might want to
+   generate a piece that just says "the game pack is there", but put the rest of the config somwhere
+   else (i.e. not generated, copied over during setup .. for instance in the game tools directory)
+ */
 class CGameDescription
 {
 public:
-  xmlDocPtr mpDoc; ///< the game description xml tree
-  Str mGameToolsPath; ///< the explicit path to the game-dependent modules
-  Str mGameName; ///< name of the game used in dialogs
-  Str mGameFile; ///< the .game file that describes this game
-  Str mBaseGame; ///< basegame directory
-  Str mEnginePath; ///< path to the engine
-  Str mEngine; ///< engine name
-#if defined (__linux__) || defined (__APPLE__)
-  Str mUserPathPrefix; ///< prefix for ~/.q3a ~/.wolf init, only on *nix
+xmlDocPtr mpDoc;   ///< the game description xml tree
+Str mGameToolsPath;   ///< the explicit path to the game-dependent modules
+Str mGameName;   ///< name of the game used in dialogs
+Str mGameFile;   ///< the .game file that describes this game
+Str mBaseGame;   ///< basegame directory
+Str mEnginePath;   ///< path to the engine
+Str mEngine;   ///< engine name
+Str mMultiplayerEngine;   ///< engine name
+#if defined ( __linux__ ) || defined ( __APPLE__ )
+Str mUserPathPrefix;   ///< prefix for ~/.q3a ~/.wolf init, only on *nix
 #endif
-  Str mShaderPath; ///< the path in which to look for shaders
-  Str mShaderlist; ///< shaderlist file
-  float mTextureDefaultScale; ///< default scale (0.5 in q3, 1.0 in q1/q2, 0.25 in JK2 ..)
-  bool mEClassSingleLoad; ///< only load a single eclass definition file
-  bool mNoPatch; ///< this game doesn't support patch technology
-  Str mCaulkShader; ///< the shader to use for caulking
-
-  CGameDescription() { mpDoc = NULL; }
-  /*!
-  \todo parse basic info from the node
-  user-friendly name of the game
-  essential parameters (such as the start dir)
-  */
-  CGameDescription(xmlDocPtr pDoc, const Str &GameFile);
-  virtual ~CGameDescription() { xmlFreeDoc(mpDoc); }
-
-  void Dump();
+Str mShaderPath;   ///< the path in which to look for shaders
+Str mShaderlist;   ///< shaderlist file
+float mTextureDefaultScale;   ///< default scale (0.5 in q3, 1.0 in q1/q2, 0.25 in JK2 ..)
+bool mEClassSingleLoad;   ///< only load a single eclass definition file
+bool mNoPatch;   ///< this game doesn't support patch technology
+Str mCaulkShader;   ///< the shader to use for caulking
+bool quake2;   ///< set this to true to get quake2
+bool noMapsInHome;   ///< set this if you want to open the engine path/base dir/maps dir for map open/save dialoges */
+
+CGameDescription() { mpDoc = NULL; }
+/*!
+   \todo parse basic info from the node
+   user-friendly name of the game
+   essential parameters (such as the start dir)
+ */
+CGameDescription( xmlDocPtr pDoc, const Str &GameFile );
+virtual ~CGameDescription() { xmlFreeDoc( mpDoc ); }
+
+void Dump();
+};
+
+/*!
+   select games, copy editing assets and write out configuration files
+ */
+
+#define Q3_PACK "Q3Pack"
+#define URT_PACK "UrTPack"
+#define UFOAI_PACK "UFOAIPack"
+#define Q2W_PACK "Q2WPack"
+#define WARSOW_PACK "WarsowPack"
+#define NEXUIZ_PACK "NexuizPack"
+#define Q2_PACK "Q2Pack"
+#define TREMULOUS_PACK "TremulousPack"
+#define JA_PACK "JAPack"
+#define REACTION_PACK "ReactionPack"
+#define ET_PACK "ETPack"
+
+class CGameInstall : public Dialog {
+public:
+CGameInstall();
+void ScanGames();
+void Run();
+void BuildDialog();
+
+static void OnBtnBrowseEngine( GtkWidget *widget, gpointer data );
+static void OnGameSelectChanged( GtkWidget *widget, gpointer data );
+
+enum gameType_e {
+       GAME_NONE = 0,
+       GAME_Q3 = 1,
+       GAME_URT,
+       GAME_UFOAI,
+       GAME_Q2W,
+       GAME_WARSOW,
+       GAME_NEXUIZ,
+       GAME_Q2,
+       GAME_TREMULOUS,
+       GAME_JA,
+       GAME_REACTION,
+       GAME_ET,
+       GAME_COUNT
+};
+
+protected:
+Str m_strName;
+Str m_strMod;
+Str m_strEngine;
+int m_nComboSelect;
+
+// maps from m_nComboSelect to the games
+int m_availGames[GAME_COUNT];
 };
 
 /*!
-standalone dialog for games selection, and more generally global settings
-*/
+   standalone dialog for games selection, and more generally global settings
+ */
 class CGameDialog : public Dialog
 {
-  GtkWidget *mFrame; ///< this is built on-demand first time it's used
-  GtkWidget *mTopBox; ///< top level box used to store the dialog frame, must unhook after modal use
+GtkWidget *mFrame;   ///< this is built on-demand first time it's used
+GtkWidget *mTopBox;   ///< top level box used to store the dialog frame, must unhook after modal use
 
+GtkComboBox   *mGameCombo;      // combo box holds the selection of available game
 
-  /*!
-  global prefs storage
 */
-  CXMLPropertyBag mGlobalPrefs;
+/*!
+   global prefs storage
+ */
+CXMLPropertyBag mGlobalPrefs;
 
 #ifdef _WIN32
-  /*!
-  run from a network share
-  this one is not being saved out in prefs, since we need to know before we load prefs
-  we use a dummy file NETRUN_FILENAME as flag
-  all done with static stuff
 */
-  static bool m_bNetRun;
+/*!
+   run from a network share
+   this one is not being saved out in prefs, since we need to know before we load prefs
+   we use a dummy file NETRUN_FILENAME as flag
+   all done with static stuff
+ */
+static bool m_bNetRun;
 #endif
 
+bool m_bDoGameInstall;
+
+CGameInstall mGameInstall;
+
 protected:
-  
-  int m_nComboSelect; ///< intermediate int value for combo in dialog box
+
+int m_nComboSelect;   ///< intermediate int value for combo in dialog box
 
 public:
 
-  /*! 
-  those settings are saved in the global prefs file 
-  I'm too lazy to wrap behind protected access, not sure this needs to be public
-  NOTE: those are preference settings. if you change them it is likely that you would
-  have to restart the editor for them to take effect
-  */
-  /*@{*/
-  /*!
-  what game has been selected
-  this is the name of the .game file
-  */
-  Str m_sGameFile;
-  /*!
-  auto-load the game on startup
-  this is linked to auto-load checkbox
-  */
-  bool m_bAutoLoadGame;
-  /*!
-  log console to radiant.log
-  m_bForceLogConsole is an obscure forced latching situation
-  */
-  bool m_bLogConsole;
-  bool m_bForceLogConsole;
-  /*@}*/
-
-  /*!
-  points somewhere in mGames, set once at startup
-  */
-  CGameDescription *m_pCurrentGameDescription;
-
-  /*!
-  the list of game descriptions we scanned from the game/ dir
-  */
-  list<CGameDescription *> mGames;
-
-  CGameDialog() { mFrame = NULL; m_pCurrentGameDescription = NULL; m_bLogConsole = false; m_bForceLogConsole = false; }
-  virtual ~CGameDialog(); 
-
-  void AddPacksURL(Str &s);  
-    
-  /*!
-  intialize the game dialog, called at CPrefsDlg::Init
-  will scan for games, load prefs, and do game selection dialog if needed
-  */
-  void Init();
-
-  /*!
-  reset the global settings by removing the file
-  */
-  void Reset();
-
-  /*!
-  run the dialog UI for the list of games 
-  */
-  void DoGameDialog();
-
-  /*!
-  Dialog API
-  this is only called when the dialog is built at startup for main engine select
-  */
-  void BuildDialog ();
-  void UpdateData (bool retrieve);
-
-  /*!
-  construction of the dialog frame
-  this is the part to be re-used in prefs dialog
-  for the standalone dialog, we include this in a modal box
-  for prefs, we hook the frame in the main notebook
-  build the frame on-demand (only once)
-  */
-  GtkWidget *GetGlobalFrame();
-
-  /*!
-  global preferences subsystem
-  XML-based this time, hopefully this will generalize to other prefs
-  LoadPrefs has hardcoded defaults
-  NOTE: it may not be strictly 'CGameDialog' to put the global prefs here
-    could have named the class differently I guess
-  */
-  /*@{*/
-  void LoadPrefs(); ///< load from file into variables
-  void SavePrefs(); ///< save pref variables to file
-  /*@}*/
-
-  /*!
-  read or set netrun (check file)
-  \param retrieve 
-    if false, will check if netrun file is present and will set m_bNetRun
-    if true, will create/erase the netrun file depending on m_bNetRun
-    NOTE: this is not backwards, 'retrieve' means 'retrieve from settings dialog' - in terms of UI
-  */
-  static void UpdateNetrun(bool retrieve);
-  /*!
-  get current netrun setting
-  */
-  static bool GetNetrun();
+/*!
+   those settings are saved in the global prefs file
+   I'm too lazy to wrap behind protected access, not sure this needs to be public
+   NOTE: those are preference settings. if you change them it is likely that you would
+   have to restart the editor for them to take effect
+ */
+/*@{*/
+/*!
+   what game has been selected
+   this is the name of the .game file
+ */
+Str m_sGameFile;
+/*!
+   auto-load the game on startup
+   this is linked to auto-load checkbox
+ */
+bool m_bAutoLoadGame;
+/*!
+   log console to radiant.log
+   m_bForceLogConsole is an obscure forced latching situation
+ */
+bool m_bLogConsole;
+bool m_bForceLogConsole;
+/*@}*/
+
+/*!
+   points somewhere in mGames, set once at startup
+ */
+CGameDescription *m_pCurrentGameDescription;
+
+/*!
+   the list of game descriptions we scanned from the game/ dir
+ */
+list<CGameDescription *> mGames;
+
+CGameDialog() {
+       mFrame = NULL;
+       m_pCurrentGameDescription = NULL;
+       m_bLogConsole = false;
+       m_bForceLogConsole = false;
+       m_bDoGameInstall = true;    // go through DoModal at least once
+       mGameCombo = NULL;
+}
+virtual ~CGameDialog();
+
+void AddPacksURL( Str &s );
+
+/*!
+   intialize the game dialog, called at CPrefsDlg::Init
+   will scan for games, load prefs, and do game selection dialog if needed
+ */
+void Init();
+
+/*!
+   reset the global settings by removing the file
+ */
+void Reset();
+
+/*!
+   run the dialog UI for the list of games
+ */
+void DoGameDialog();
+
+/*!
+   call out to the game installation dialog
+ */
+void DoGameInstall();
+
+/*!
+   Dialog API
+   this is only called when the dialog is built at startup for main engine select
+ */
+void BuildDialog();
+void UpdateData( bool retrieve );
+
+/*!
+   construction of the dialog frame
+   this is the part to be re-used in prefs dialog
+   for the standalone dialog, we include this in a modal box
+   for prefs, we hook the frame in the main notebook
+   build the frame on-demand (only once)
+ */
+GtkWidget *GetGlobalFrame();
+
+/*!
+   global preferences subsystem
+   XML-based this time, hopefully this will generalize to other prefs
+   LoadPrefs has hardcoded defaults
+   NOTE: it may not be strictly 'CGameDialog' to put the global prefs here
+   could have named the class differently I guess
+ */
+/*@{*/
+void LoadPrefs();   ///< load from file into variables
+void SavePrefs();   ///< save pref variables to file
+/*@}*/
+
+/*!
+   read or set netrun (check file)
+   \param retrieve
+   if false, will check if netrun file is present and will set m_bNetRun
+   if true, will create/erase the netrun file depending on m_bNetRun
+   NOTE: this is not backwards, 'retrieve' means 'retrieve from settings dialog' - in terms of UI
+ */
+static void UpdateNetrun( bool retrieve );
+/*!
+   get current netrun setting
+ */
+static bool GetNetrun();
 
 private:
-  /*!
-  scan for .game files, load them
-  */
-  void ScanForGames();
-
-  /*!
-  inits g_PrefsDlg.m_global_rc_path
-  */
-  void InitGlobalPrefPath();
-
-  /*!
-  uses m_nComboItem to find the right mGames
-  */
-  CGameDescription *GameDescriptionForComboItem();
+/*!
+   scan for .game files, load them
+ */
+void ScanForGames();
+
+/*!
+   inits g_PrefsDlg.m_global_rc_path
+ */
+void InitGlobalPrefPath();
+
+/*!
+   uses m_nComboItem to find the right mGames
+ */
+CGameDescription *GameDescriptionForComboItem();
+
+/*!
+   callback for the game install button
+ */
+static void SInstallCallback( GtkWidget *widget, gpointer data );
+
+void UpdateGameCombo();
 };
 
 typedef struct {
-  int nEntitySplit1;
-  int nEntitySplit2;
-  
-  window_position_t position;
-
-  window_position_t posEntityWnd;
-  window_position_t posMapInfoWnd;
-  window_position_t posCamWnd;
-  window_position_t posZWnd;
-  window_position_t posXYWnd;
-  window_position_t posXZWnd;
-  window_position_t posYZWnd;
-  window_position_t posPatchWnd;
-  window_position_t posSurfaceWnd;
-  window_position_t posEntityInfoWnd;
-
-  int nXYHeight;
-  int nZWidth;
-  int nXYWidth;
-  int nCamWidth;
-  int nCamHeight;
-  int nZFloatWidth;
-  int nState;
+       int nEntitySplit1;
+       int nEntitySplit2;
+
+       window_position_t position;
+
+       window_position_t posEntityWnd;
+       window_position_t posMapInfoWnd;
+       window_position_t posCamWnd;
+       window_position_t posZWnd;
+       window_position_t posXYWnd;
+       window_position_t posXZWnd;
+       window_position_t posYZWnd;
+       window_position_t posPatchWnd;
+       window_position_t posSurfaceWnd;
+       window_position_t posEntityInfoWnd;
+
+       int nXYHeight;
+       int nZWidth;
+       int nXYWidth;
+       int nCamWidth;
+       int nCamHeight;
+       int nZFloatWidth;
+       int nState;
 } windowPosInfo_t;
 
 class PrefsDlg : public Dialog
 {
-  
+
 public:
-  /*!
-  local prefs file
 */
-  CXMLPropertyBag mLocalPrefs;
-
-  // will enable/disable stuff according to the situation
-  void DoSensitivity();
-  void PreModal() { DoSensitivity(); }
-  
-  // enable/disable custom editor entry
-  void DoEditorSensitivity();
-  
-  /*!
-  this holds global level preferences
 */
-  CGameDialog mGamesDialog;
+/*!
+   local prefs file
+ */
+CXMLPropertyBag mLocalPrefs;
+
+// will enable/disable stuff according to the situation
+void DoSensitivity();
+void PreModal() { DoSensitivity(); }
+
+// enable/disable custom editor entry
+void DoEditorSensitivity();
+
+/*!
+   this holds global level preferences
+ */
+CGameDialog mGamesDialog;
 protected:
-  // warning about old project files
-  bool m_bWarn;
-  list<CGameDescription *> mGames;
-  
+// warning about old project files
+bool m_bWarn;
+list<CGameDescription *> mGames;
+
 public:
-  // last light intensity used in the CLightPrompt dialog, stored in registry
-  int m_iLastLightIntensity;
-  // these mirror what goes in the combo box
-  // see PrefDlg::m_nShader, tells wether to load NONE / COMMON or ALL shaders at parsing stage
-  enum {SHADER_NONE = 0, SHADER_COMMON, SHADER_ALL};
-
-  // Gef: updated preferences dialog
-  /*! Preference notebook page numbers */
-  enum {PTAB_FRONT = 0, PTAB_GAME_SETTINGS, PTAB_2D, PTAB_CAMERA, PTAB_TEXTURE, PTAB_LAYOUT, PTAB_MOUSE,
-        PTAB_EDITING, PTAB_STARTUP, PTAB_PATHS, PTAB_MISC, PTAB_BSPMONITOR} pref_tabs;
-  
-  GtkWidget *notebook;
-       
-  void UpdateTextureCompression();
+// last light intensity used in the CLightPrompt dialog, stored in registry
+int m_iLastLightIntensity;
+// these mirror what goes in the combo box
+// see PrefDlg::m_nShader, tells wether to load NONE / COMMON or ALL shaders at parsing stage
+enum {SHADER_NONE = 0, SHADER_COMMON, SHADER_ALL};
+
+// Gef: updated preferences dialog
+/*! Preference notebook page numbers */
+enum {PTAB_FRONT = 0, PTAB_GAME_SETTINGS, PTAB_2D, PTAB_CAMERA, PTAB_TEXTURE, PTAB_LAYOUT, PTAB_MOUSE,
+         PTAB_EDITING, PTAB_STARTUP, PTAB_PATHS, PTAB_BRUSH, PTAB_MISC, PTAB_BSPMONITOR} pref_tabs;
+
+GtkWidget *notebook;
+
+void UpdateTextureCompression();
 
 #ifdef ATIHACK_812
-  void UpdateATIHack();
+void UpdateATIHack();
 #endif
-        
-  void LoadPrefs();
-  void SavePrefs();
-  void LoadTexdefPref(texdef_t* pTexdef, char* pName);
-
-  PrefsDlg ();
-  virtual ~PrefsDlg ()
-  {
-    g_string_free (m_rc_path, true );
-    g_string_free (m_inipath, true );
-  }
-
-  /*!
-  path for global settings
-  win32: g_strAppPath
-  linux: ~/.radiant/<version>/
-  */
-  GString *m_global_rc_path;
-
-  /*!
-  path to per-game settings
-  used for various game dependant storage
-  win32: g_strGameToolsPath
-  linux: ~/.radiant/<version>/<gamename>/
-  */
-  GString *m_rc_path;
-
-  /*!
-  holds per-game settings
-  m_rc_path+"local.pref"
-  \todo FIXME at some point this should become XML property bag code too
-  */
-  GString *m_inipath;
-
-  // initialize the above paths
-  void Init();
+
+#ifdef NVIDIA_AERO_HACK
+void UpdateNvidiaAeroHack();
+#endif
+
+void LoadPrefs();
+void SavePrefs();
+void LoadTexdefPref( texdef_t* pTexdef, const char* pName );
+
+PrefsDlg ();
+virtual ~PrefsDlg (){
+       g_string_free( m_rc_path, true );
+       g_string_free( m_inipath, true );
+}
+
+/*!
+   path for global settings
+   win32: g_strAppPath
+   linux: ~/.radiant/<version>/
+ */
+GString *m_global_rc_path;
+
+/*!
+   path to per-game settings
+   used for various game dependant storage
+   win32: g_strGameToolsPath
+   linux: ~/.radiant/<version>/<gamename>/
+ */
+GString *m_rc_path;
+
+/*!
+   holds per-game settings
+   m_rc_path+"local.pref"
+   \todo FIXME at some point this should become XML property bag code too
+ */
+GString *m_inipath;
+
+// initialize the above paths
+void Init();
 
 #if 0
-  // DEPRECATED: use engine path from the current game description instead
-       // path to the top-level installation
-       Str     m_strEnginePath;
-  // name of executable
-  // quake2 quake3 etc
-       Str     m_strEngine;
-  // we use this Str to store the full path to the engine: m_strEnginePath + m_strEngine
-  // it's not stored in the registry or anything, just ued for display in prefs
-  Str   m_strPrefsDlgEngine;
+// DEPRECATED: use engine path from the current game description instead
+// path to the top-level installation
+Str m_strEnginePath;
+// name of executable
+// quake2 quake3 etc
+Str m_strEngine;
+// we use this Str to store the full path to the engine: m_strEnginePath + m_strEngine
+// it's not stored in the registry or anything, just ued for display in prefs
+Str m_strPrefsDlgEngine;
 #endif
 
-  // Dialog Data
-  int   m_nMouse;
-  MainFrame::EViewStyle m_nView;
-  bool  m_bTextureLock;
-  bool  m_bLoadLast;
-       // path to the project loaded at startup
-       // if g_PrefsDlg can't find the information in the ini file
-       // it will try to guess and eventually ask the user
-  Str   m_strLastProject;  
-  /*!
-  version of last loaded project file
-  says -1 if there's no version loaded
-  if it's a manually constructed project file, will be 0
-  otherwise the actual 'version' epair
-  */
-  int   m_nLastProjectVer;
-  Str   m_strLastMap;
-  bool  m_bInternalBSP;
-  bool  m_bRightClick;
-  bool  m_bSetGame;
-  bool  m_bAutoSave;
-  bool  m_bLoadLastMap;
-  bool  m_bTextureWindow;
-  bool  m_bSnapShots;
-  float m_fTinySize;
-  bool  m_bCleanTiny;
-  bool  m_bCamXYUpdate;
-  int   m_nCamDragMultiSelect;
-  bool  m_bCamDragMultiSelect;
-  bool  m_bCamFreeLook;
-  bool  m_bCamFreeLookStrafe;
-  bool m_bCamInverseMouse;
-  bool m_bCamDiscrete;
-  bool  m_bNewLightDraw;
-  Str   m_strPrefabPath;
-  int   m_nWhatGame;
-  bool  m_bALTEdge;
-  bool  m_bFaceColors;
-  bool  m_bXZVis;
-  bool  m_bYZVis;
-  bool  m_bZVis;
-  bool  m_bSizePaint;
-  bool  m_bDLLEntities;
-  bool  m_bRotateLock;
-  bool  m_bDetachableMenus;
-  bool  m_bPatchToolbar;
-  bool  m_bWideToolbar;
-  bool  m_bPluginToolbar;
-  bool  m_bNoClamp;
-       //++timo this is most likely broken, I don't know what it's supposed to do
-  Str   m_strUserPath;
-  int   m_nRotation;
-  bool  m_bChaseMouse;
-  bool  m_bTextureScrollbar;
-  bool  m_bDisplayLists;
-  bool m_bAntialiasedPointsAndLines; // Fishman - Add antialiazed points and lines support. 09/03/00
-  bool  m_bShowShaders;
-  int   m_nShader;
-  bool  m_bNoStipple;
-  int   m_nUndoLevels;
-  bool  m_bVertexSplit;
-
-  int   m_nMouseButtons;
-  int   m_nAngleSpeed;
-  int   m_nMoveSpeed;
-  int   m_nAutoSave;
-  bool  m_bCubicClipping;
-  int   m_nCubicScale;
-  bool  m_bSelectCurves;
-  bool  m_bSelectModels;
-  int   m_nEntityShowState;
-  int   m_nTextureScale;
-  bool  m_bNormalizeColors;
-  bool  m_bSwitchClip;
-  bool  m_bSelectWholeEntities;
-  int   m_nTextureQuality;
-  bool  m_bGLLighting;
-  bool  m_bTexturesShaderlistOnly;
-  int   m_nSubdivisions;
-  bool  m_bFloatingZ;
-  bool  m_bLatchedFloatingZ;
-  // Gef: Kyro GL_POINT workaround
-  bool m_bGlPtWorkaround;
-
-  // how many menus in the texture thing before we split?
-  int   m_nTextureMenuSplit;
-
-  // watch the BSP process through network connections
-  // true: trigger the BSP steps one by one and monitor them through the network
-  // false: create a BAT / .sh file and execute it. don't bother monitoring it.
-  bool  m_bWatchBSP;
-  // do we stop the compilation process if we come accross a leak?
-  bool  m_bLeakStop;
-  // timeout when beginning a step (in seconds)
-  // if we don't get a connection quick enough we assume something failed and go back to idling
-  int   m_iTimeout;
-  bool  m_bRunQuake;
-  // store prefs setting for automatic sleep mode activation
-  bool  m_bDoSleep;
-  
-  bool m_bClipCaulk;
-
-  // make the texture increments match the grid changes
-  bool m_bSnapTToGrid;
-
-  // try to fix the target/targetname conflicts when importing a map (default true)
-  bool m_bDoTargetFix;
-
-  // the increment step we use against the wheel mouse
-  int m_nWheelInc;
+// Dialog Data
+int m_nMouse;
+MainFrame::EViewStyle m_nView;
+bool m_bTextureLock;
+bool m_bLoadLast;
+// path to the project loaded at startup
+// if g_PrefsDlg can't find the information in the ini file
+// it will try to guess and eventually ask the user
+Str m_strLastProject;
+/*!
+   version of last loaded project file
+   says -1 if there's no version loaded
+   if it's a manually constructed project file, will be 0
+   otherwise the actual 'version' epair
+ */
+int m_nLastProjectVer;
+Str m_strLastMap;
+bool m_bInternalBSP;
+bool m_bRightClick;
+bool m_bSetGame;
+bool m_bAutoSave;
+bool m_bLoadLastMap;
+bool m_bTextureWindow;
+bool m_bSnapShots;
+float m_fTinySize;
+bool m_bCleanTiny;
+bool m_bCamXYUpdate;
+int m_nCamDragMultiSelect;
+bool m_bCamDragMultiSelect;
+bool m_bCamFreeLook;
+bool m_bCamFreeLookStrafe;
+bool m_bCamInverseMouse;
+bool m_bCamDiscrete;
+bool m_bNewLightDraw;
+Str m_strPrefabPath;
+int m_nWhatGame;
+bool m_bALTEdge;
+bool m_bFaceColors;
+bool m_bXZVis;
+bool m_bYZVis;
+bool m_bZVis;
+bool m_bSizePaint;
+bool m_bDLLEntities;
+bool m_bRotateLock;
+bool m_bDetachableMenus;
+bool m_bPatchToolbar;
+bool m_bWideToolbar;
+bool m_bPluginToolbar;
+bool m_bNoClamp;
+//++timo this is most likely broken, I don't know what it's supposed to do
+bool m_bSnap;
+Str m_strUserPath;
+int m_nRotation;
+bool m_bChaseMouse;
+bool m_bTextureScrollbar;
+bool m_bDisplayLists;
+bool m_bAntialiasedPointsAndLines;    // Fishman - Add antialiazed points and lines support. 09/03/00
+bool m_bShowShaders;
+int m_nShader;
+bool m_bNoStipple;
+int m_nUndoLevels;
+bool m_bVertexSplit;
+
+int m_nMouseButtons;
+int m_nAngleSpeed;
+int m_nMoveSpeed;
+int m_nAutoSave;
+bool m_bCubicClipping;
+int m_nCubicScale;
+bool m_bSelectCurves;
+bool m_bSelectModels;
+int m_nEntityShowState;
+int m_nTextureScale;
+bool m_bNormalizeColors;
+bool m_bSwitchClip;
+bool m_bSelectWholeEntities;
+int m_nTextureQuality;
+bool m_bGLLighting;
+bool m_bTexturesShaderlistOnly;
+int m_nSubdivisions;
+float m_fDefTextureScale;
+bool m_bFloatingZ;
+bool m_bLatchedFloatingZ;
+// Gef: Kyro GL_POINT workaround
+bool m_bGlPtWorkaround;
+
+// how many menus in the texture thing before we split?
+int m_nTextureMenuSplit;
+
+// watch the BSP process through network connections
+// true: trigger the BSP steps one by one and monitor them through the network
+// false: create a BAT / .sh file and execute it. don't bother monitoring it.
+bool m_bWatchBSP;
+// do we stop the compilation process if we come accross a leak?
+bool m_bLeakStop;
+// timeout when beginning a step (in seconds)
+// if we don't get a connection quick enough we assume something failed and go back to idling
+int m_iTimeout;
+bool m_bRunQuake;
+// store prefs setting for automatic sleep mode activation
+bool m_bDoSleep;
+
+bool m_bClipCaulk;
+
+// make the texture increments match the grid changes
+bool m_bSnapTToGrid;
+
+// try to fix the target/targetname conflicts when importing a map (default true)
+bool m_bDoTargetFix;
+
+// the increment step we use against the wheel mouse
+int m_nWheelInc;
 
 #ifdef _WIN32
-  // use the file associations to open files instead of builtin Gtk editor
-  bool m_bUseWin32Editor;
+// use the file associations to open files instead of builtin Gtk editor
+bool m_bUseWin32Editor;
 #else
-  // custom shader editor
-  bool m_bUseCustomEditor;
-  Str  m_strEditorCommand;  // this is the command executed
+// custom shader editor
+bool m_bUseCustomEditor;
+Str m_strEditorCommand;     // this is the command executed
 #endif
 
 #ifdef _WIN32
-  bool m_bNativeGUI;
-  bool m_bStartOnPrimMon;
+bool m_bNativeGUI;
+bool m_bStartOnPrimMon;
 #endif
 
-  bool m_bPatchBBoxSelect;
+bool m_bPatchBBoxSelect;
 
-  // RR2DO2: latched data, for settings that require a restart. We don't want to set
-  // these directly in case users set them under preferences and then continue working
-  // with the editor.
-  MainFrame::EViewStyle m_nLatchedView;
-  int m_nMRUCount;
-  Str m_strMRUFiles[4];
+// RR2DO2: latched data, for settings that require a restart. We don't want to set
+// these directly in case users set them under preferences and then continue working
+// with the editor.
+MainFrame::EViewStyle m_nLatchedView;
+int m_nMRUCount;
+Str m_strMRUFiles[4];
 
-  windowPosInfo_t mWindowInfo;
+windowPosInfo_t mWindowInfo;
 
-  bool  m_bLatchedDetachableMenus;
-  bool  m_bLatchedPatchToolbar;
-  bool  m_bLatchedWideToolbar;
-  bool  m_bLatchedPluginToolbar;
-  int   m_nLatchedShader;
-  int   m_nLatchedTextureQuality;
+bool m_bLatchedDetachableMenus;
+bool m_bLatchedPatchToolbar;
+bool m_bLatchedWideToolbar;
+bool m_bLatchedPluginToolbar;
+int m_nLatchedShader;
+int m_nLatchedTextureQuality;
 
-  // RIANT
-  // texture compression format
-  int m_nTextureCompressionFormat;
+// RIANT
+// texture compression format
+int m_nTextureCompressionFormat;
 
-  int m_nLightRadiuses;
-  
-  bool m_bQ3Map2Texturing;
+int m_nLightRadiuses;
+
+bool m_bQ3Map2Texturing;
 
 #ifdef ATIHACK_812
-       bool m_bGlATIHack;
+bool m_bGlATIHack;
+#endif
+
+#ifdef NVIDIA_AERO_HACK
+bool m_bGlNvidiaAeroHack;
+int m_bGlNvidiaAeroHackPrevState;
 #endif
 
-  void UpdateData (bool retrieve);
+void UpdateData( bool retrieve );
 
-  /*! Utility function for swapping notebook pages for tree list selections */
-  void showPrefPage(int prefpage);
+/*! Utility function for swapping notebook pages for tree list selections */
+void showPrefPage( int prefpage );
 
 protected:
-  /*! Scan for game description files and build a list */
-  void ScanForGames();
+/*! Scan for game description files and build a list */
+void ScanForGames();
 
-  /*! Dialog API */
-  void BuildDialog ();
-  void PostModal (int code);
+/*! Dialog API */
+void BuildDialog();
+void PostModal( int code );
 };
 
 #endif // _PREFERENCES_H_