Quake-III-Arena

Quake III Arena GPL Source Release
Log | Files | Refs

PrefsDlg.cpp (23518B)


      1 /*
      2 ===========================================================================
      3 Copyright (C) 1999-2005 Id Software, Inc.
      4 
      5 This file is part of Quake III Arena source code.
      6 
      7 Quake III Arena source code is free software; you can redistribute it
      8 and/or modify it under the terms of the GNU General Public License as
      9 published by the Free Software Foundation; either version 2 of the License,
     10 or (at your option) any later version.
     11 
     12 Quake III Arena source code is distributed in the hope that it will be
     13 useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 GNU General Public License for more details.
     16 
     17 You should have received a copy of the GNU General Public License
     18 along with Foobar; if not, write to the Free Software
     19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
     20 ===========================================================================
     21 */
     22 // PrefsDlg.cpp : implementation file
     23 //
     24 
     25 #include "stdafx.h"
     26 #include "PrefsDlg.h"
     27 #include "shlobj.h"
     28 
     29 #ifdef _DEBUG
     30 #define new DEBUG_NEW
     31 #undef THIS_FILE
     32 static char THIS_FILE[] = __FILE__;
     33 #endif
     34 
     35 #define PREF_SECTION      "Prefs"
     36 #define INTERNAL_SECTION  "Internals"
     37 #define MOUSE_KEY         "MouseButtons"
     38 #define WINDOW_KEY        "QE4StyleWindows"
     39 #define LAYOUT_KEY        "WindowLayout"
     40 #define Q2_KEY            "Quake2Dir"
     41 #define RUNQ2_KEY         "RunQuake2Run"
     42 #define TLOCK_KEY         "TextureLock"
     43 #define RLOCK_KEY         "RotateLock"
     44 #define LOADLAST_KEY      "LoadLast"
     45 #define LOADLASTMAP_KEY   "LoadLastMap"
     46 #define LASTPROJ_KEY      "LastProject"
     47 #define LASTMAP_KEY       "LastMap"
     48 #define RUN_KEY           "RunBefore"
     49 #define _3DFX_KEY         "Use3Dfx"
     50 #define FACE_KEY          "NewFaceGrab"
     51 #define BSP_KEY           "InternalBSP"
     52 #define RCLICK_KEY        "NewRightClick"
     53 #define VERTEX_KEY        "NewVertex"
     54 #define AUTOSAVE_KEY      "Autosave"
     55 #define AUTOSAVETIME_KEY  "AutosaveMinutes"
     56 #define PAK_KEY           "UsePAK"
     57 #define NEWAPPLY_KEY      "ApplyDismissesSurface"
     58 #define HACK_KEY          "Gatewayescapehack"
     59 #define TEXTURE_KEY       "NewTextureWindowStuff"
     60 #define TINYBRUSH_KEY     "CleanTinyBrushes"
     61 #define TINYSIZE_KEY      "CleanTinyBrusheSize"
     62 #define SNAPSHOT_KEY      "Snapshots"
     63 #define PAKFILE_KEY       "PAKFile"
     64 #define STATUS_KEY        "StatusPointSize"
     65 #define MOVESPEED_KEY     "MoveSpeed"
     66 #define ANGLESPEED_KEY    "AngleSpeed"
     67 #define SETGAME_KEY       "UseSetGame"
     68 #define CAMXYUPDATE_KEY   "CamXYUpdate"
     69 #define LIGHTDRAW_KEY     "NewLightStyle"
     70 #define WHATGAME_KEY      "WhichGame"
     71 #define CUBICCLIP_KEY     "CubicClipping"
     72 #define CUBICSCALE_KEY    "CubicScale"
     73 #define ALTEDGE_KEY       "ALTEdgeDrag"
     74 #define TEXTUREBAR_KEY    "UseTextureBar"
     75 #define FACECOLORS_KEY    "FaceColors"
     76 #define QE4PAINT_KEY      "QE4Paint"
     77 #define SNAPT_KEY         "SnapT"
     78 #define XZVIS_KEY         "XZVIS"
     79 #define YZVIS_KEY         "YZVIS"
     80 #define ZVIS_KEY          "ZVIS"
     81 #define SIZEPAINT_KEY     "SizePainting"
     82 #define DLLENTITIES_KEY   "DLLEntities"
     83 #define WIDETOOLBAR_KEY   "WideToolBar"
     84 #define NOCLAMP_KEY       "NoClamp"
     85 #define PREFAB_KEY        "PrefabPath"
     86 #define USERINI_KEY       "UserINIPath"
     87 #define ROTATION_KEY      "Rotation"
     88 #define SGIOPENGL_KEY     "SGIOpenGL"
     89 #define BUGGYICD_KEY      "BuggyICD"
     90 #define HICOLOR_KEY       "HiColorTextures"
     91 #define CHASEMOUSE_KEY    "ChaseMouse"
     92 #define ENTITYSHOW_KEY    "EntityShow"
     93 #define TEXTURESCALE_KEY  "TextureScale"
     94 #define TEXTURESCROLLBAR_KEY  "TextureScrollbar"
     95 #define DISPLAYLISTS_KEY  "UseDisplayLists"
     96 #define NORMALIZECOLORS_KEY  "NormalizeColors"
     97 #define SHADERS_KEY       "UseShaders"
     98 #define SWITCHCLIP_KEY     "SwitchClipKey"
     99 #define SELWHOLEENTS_KEY		"SelectWholeEntitiesKey"
    100 #define TEXTURESUBSET_KEY		"UseTextureSubsetLoading"
    101 #define TEXTUREQUALITY_KEY 	"TextureQuality"
    102 #define SHOWSHADERS_KEY 	"ShowShaders"
    103 #define SHADERTEST_KEY 	  "ShaderTest"
    104 #define GLLIGHTING_KEY "UseGLLighting"
    105 #define LOADSHADERS_KEY "LoadShaders"
    106 #define NOSTIPPLE_KEY "NoStipple"
    107 #define UNDOLEVELS_KEY "UndoLevels"
    108 
    109 #define MOUSE_DEF 1
    110 #define WINDOW_DEF 0
    111 #define Q2_DEF "c:\\quake2\\quake2.exe"
    112 #define Q3_DEF "c:\\Program Files\\Quake III Arena\\quake3.exe"
    113 #define PAKFILE_DEF "c:\\quake2\\baseq2\\pak0.pak"
    114 #define RUNQ2_DEF 0
    115 #define TLOCK_DEF 1
    116 #define LOADLAST_DEF 1
    117 #define RUN_DEF 0
    118 
    119 /////////////////////////////////////////////////////////////////////////////
    120 // CPrefsDlg dialog
    121 
    122 
    123 CPrefsDlg::CPrefsDlg(CWnd* pParent /*=NULL*/)
    124 	: CDialog(CPrefsDlg::IDD, pParent)
    125 {
    126 	//{{AFX_DATA_INIT(CPrefsDlg)
    127 	m_strQuake2 = _T("c:\\quake3\\");
    128 	m_nMouse = 1;
    129 	m_nView = 0;
    130 	m_bLoadLast = FALSE;
    131 	m_bFace = FALSE;
    132 	m_bInternalBSP = FALSE;
    133 	m_bRightClick = FALSE;
    134 	m_bRunQuake = FALSE;
    135 	m_bSetGame = FALSE;
    136 	m_bVertex = FALSE;
    137 	m_bAutoSave = TRUE;
    138   m_bNewApplyHandling = FALSE;
    139 	m_strAutoSave = _T("5");
    140 	m_bPAK = FALSE;
    141 	m_bLoadLastMap = FALSE;
    142 	m_bTextureWindow = FALSE;
    143 	m_bSnapShots = FALSE;
    144   m_fTinySize = 0.5;
    145   m_bCleanTiny = FALSE;
    146 	m_strPAKFile = _T("c:\\quake2\\baseq2\\pak0.pak");
    147 	m_nStatusSize = 10;
    148 	m_bCamXYUpdate = FALSE;
    149 	m_bNewLightDraw = FALSE;
    150 	m_strPrefabPath = _T("");
    151 	m_nWhatGame = 0;
    152 	m_strWhatGame = _T("Quake3");
    153 	m_bALTEdge = FALSE;
    154 	m_bTextureBar = FALSE;
    155 	m_bFaceColors = FALSE;
    156 	m_bQE4Painting = TRUE;
    157 	m_bSnapTToGrid = FALSE;
    158   m_bXZVis = FALSE;
    159   m_bYZVis = FALSE;
    160   m_bZVis = FALSE;
    161 	m_bSizePaint = FALSE;
    162 	m_bDLLEntities = FALSE;
    163 	m_bWideToolbar = TRUE;
    164 	m_bNoClamp = FALSE;
    165 	m_strUserPath = _T("");
    166 	m_nRotation = 0;
    167 	m_bSGIOpenGL = FALSE;
    168 	m_bBuggyICD = FALSE;
    169 	m_bHiColorTextures = TRUE;
    170 	m_bChaseMouse = FALSE;
    171 	m_bTextureScrollbar = TRUE;
    172 	m_bDisplayLists = TRUE;
    173 	m_bShowShaders = FALSE;
    174 	m_nShader = -1;
    175 	m_bNoStipple = FALSE;
    176 	//}}AFX_DATA_INIT
    177   //LoadPrefs();
    178   m_bSelectCurves = TRUE;
    179   m_bSelectTerrain = TRUE;
    180   m_nEntityShowState = 0;
    181   m_nTextureScale = 2;
    182   m_bSwitchClip = FALSE;
    183   m_bSelectWholeEntities = TRUE;
    184   m_nTextureQuality = 3;
    185   m_bShowShaders = TRUE;
    186   m_bGLLighting = FALSE;
    187   m_nShader = 0;
    188   m_nUndoLevels = 64;
    189 }
    190 
    191 
    192 
    193 
    194 void CPrefsDlg::DoDataExchange(CDataExchange* pDX)
    195 {
    196 	CDialog::DoDataExchange(pDX);
    197 	//{{AFX_DATA_MAP(CPrefsDlg)
    198 	DDX_Control(pDX, IDC_SPIN_UNDO, m_wndUndoSpin);
    199 	DDX_Control(pDX, IDC_SPIN_POINTSIZE, m_wndFontSpin);
    200 	DDX_Control(pDX, IDC_SLIDER_TEXTUREQUALITY, m_wndTexturequality);
    201 	DDX_Control(pDX, IDC_COMBO_WHATGAME, m_wndWhatGame);
    202 	DDX_Control(pDX, IDC_SLIDER_CAMSPEED, m_wndCamSpeed);
    203 	DDX_Control(pDX, IDC_SPIN_AUTOSAVE, m_wndSpin);
    204 	DDX_Text(pDX, IDC_EDIT_QUAKE2, m_strQuake2);
    205 	DDX_Radio(pDX, IDC_RADIO_MOUSE, m_nMouse);
    206 	DDX_Radio(pDX, IDC_RADIO_VIEWTYPE, m_nView);
    207 	DDX_Check(pDX, IDC_CHECK_LOADLAST, m_bLoadLast);
    208 	DDX_Check(pDX, IDC_CHECK_FACE, m_bFace);
    209 	DDX_Check(pDX, IDC_CHECK_INTERNALBSP, m_bInternalBSP);
    210 	DDX_Check(pDX, IDC_CHECK_RIGHTCLICK, m_bRightClick);
    211 	DDX_Check(pDX, IDC_CHECK_RUNQUAKE, m_bRunQuake);
    212 	DDX_Check(pDX, IDC_CHECK_SETGAME, m_bSetGame);
    213 	DDX_Check(pDX, IDC_CHECK_VERTEX, m_bVertex);
    214 	DDX_Check(pDX, IDC_CHECK_AUTOSAVE, m_bAutoSave);
    215 	DDX_Text(pDX, IDC_EDIT_AUTOSAVE, m_strAutoSave);
    216 	DDX_Check(pDX, IDC_CHECK_PAK, m_bPAK);
    217 	DDX_Check(pDX, IDC_CHECK_LOADLASTMAP, m_bLoadLastMap);
    218 	DDX_Check(pDX, IDC_CHECK_TEXTUREWINDOW, m_bTextureWindow);
    219 	DDX_Check(pDX, IDC_CHECK_SNAPSHOTS, m_bSnapShots);
    220 	DDX_Text(pDX, IDC_EDIT_PAKFILE, m_strPAKFile);
    221 	DDX_Text(pDX, IDC_EDIT_STATUSPOINTSIZE, m_nStatusSize);
    222 	DDV_MinMaxInt(pDX, m_nStatusSize, 2, 14);
    223 	DDX_Check(pDX, IDC_CHECK_CAMXYUPDATE, m_bCamXYUpdate);
    224 	DDX_Check(pDX, IDC_CHECK_LIGHTDRAW, m_bNewLightDraw);
    225 	DDX_Text(pDX, IDC_EDIT_PREFABPATH, m_strPrefabPath);
    226 	DDX_CBString(pDX, IDC_COMBO_WHATGAME, m_strWhatGame);
    227 	DDX_Check(pDX, IDC_CHECK_ALTDRAG, m_bALTEdge);
    228 	DDX_Check(pDX, IDC_CHECK_TEXTURETOOLBAR, m_bTextureBar);
    229 	DDX_Check(pDX, IDC_CHECK_FACECOLOR, m_bFaceColors);
    230 	DDX_Check(pDX, IDC_CHECK_QE4PAINTING, m_bQE4Painting);
    231 	DDX_Check(pDX, IDC_CHECK_SNAPT, m_bSnapTToGrid);
    232 	DDX_Check(pDX, IDC_CHECK_SIZEPAINT, m_bSizePaint);
    233 	DDX_Check(pDX, IDC_CHECK_DLLENTITIES, m_bDLLEntities);
    234 	DDX_Check(pDX, IDC_CHECK_WIDETOOLBAR, m_bWideToolbar);
    235 	DDX_Check(pDX, IDC_CHECK_NOCLAMP, m_bNoClamp);
    236 	DDX_Text(pDX, IDC_EDIT_USERPATH, m_strUserPath);
    237 	DDX_Text(pDX, IDC_EDIT_ROTATION, m_nRotation);
    238 	DDX_Check(pDX, IDC_CHECK_SGIOPENGL, m_bSGIOpenGL);
    239 	DDX_Check(pDX, IDC_CHECK_BUGGYICD, m_bBuggyICD);
    240 	DDX_Check(pDX, IDC_CHECK_HICOLOR, m_bHiColorTextures);
    241 	DDX_Check(pDX, IDC_CHECK_MOUSECHASE, m_bChaseMouse);
    242 	DDX_Check(pDX, IDC_CHECK_TEXTURESCROLLBAR, m_bTextureScrollbar);
    243 	DDX_Check(pDX, IDC_CHECK_DISPLAYLISTS, m_bDisplayLists);
    244 	DDX_CBIndex(pDX, IDC_COMBO_SHADERS, m_nShader);
    245 	DDX_Check(pDX, IDC_CHECK_NOSTIPPLE, m_bNoStipple);
    246 	DDX_Text(pDX, IDC_EDIT_UNDOLEVELS, m_nUndoLevels);
    247 	DDV_MinMaxInt(pDX, m_nUndoLevels, 1, 64);
    248 	//}}AFX_DATA_MAP
    249 }
    250 
    251 
    252 BEGIN_MESSAGE_MAP(CPrefsDlg, CDialog)
    253 	//{{AFX_MSG_MAP(CPrefsDlg)
    254 	ON_BN_CLICKED(IDC_BTN_BROWSE, OnBtnBrowse)
    255 	ON_BN_CLICKED(IDC_BTN_BROWSEPAK, OnBtnBrowsepak)
    256 	ON_BN_CLICKED(IDC_BTN_BROWSEPREFAB, OnBtnBrowseprefab)
    257 	ON_BN_CLICKED(IDC_BTN_BROWSEUSERINI, OnBtnBrowseuserini)
    258 	ON_CBN_SELCHANGE(IDC_COMBO_WHATGAME, OnSelchangeComboWhatgame)
    259 	//}}AFX_MSG_MAP
    260 END_MESSAGE_MAP()
    261 
    262 /////////////////////////////////////////////////////////////////////////////
    263 // CPrefsDlg message handlers
    264 
    265 void CPrefsDlg::OnBtnBrowse() 
    266 {
    267   UpdateData(TRUE);
    268   CFileDialog dlg(true, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Executables (*.exe)|*.exe||", this);
    269   if (dlg.DoModal() == IDOK)
    270   {
    271     m_strQuake2 = dlg.GetPathName();
    272     UpdateData(FALSE);
    273   }
    274 }
    275 
    276 BOOL CPrefsDlg::OnInitDialog() 
    277 {
    278 	CDialog::OnInitDialog();
    279   m_wndSpin.SetRange(1,60);
    280   m_wndCamSpeed.SetRange(10, 800);
    281   m_wndCamSpeed.SetPos(m_nMoveSpeed);
    282 
    283   this->m_wndTexturequality.SetRange(0, 3);
    284   this->m_wndTexturequality.SetPos(m_nTextureQuality);
    285 
    286   m_wndFontSpin.SetRange(4,24);
    287   m_wndUndoSpin.SetRange(1,64);
    288 
    289   m_wndWhatGame.AddString("Quake2"); 
    290   m_wndWhatGame.AddString("Quake3"); 
    291 
    292   GetDlgItem(IDC_CHECK_HICOLOR)->EnableWindow(TRUE);
    293   GetDlgItem(IDC_CHECK_NOCLAMP)->EnableWindow(TRUE);
    294 
    295   //GetDlgItem(IDC_CHECK_NOCLAMP)->EnableWindow(FALSE);
    296 
    297   m_wndWhatGame.SelectString(-1,m_strWhatGame);
    298   if (strstr(m_strWhatGame, "Quake3") != NULL)
    299   {
    300     GetDlgItem(IDC_EDIT_PAKFILE)->EnableWindow(FALSE);
    301     GetDlgItem(IDC_BTN_BROWSEPAK)->EnableWindow(FALSE);
    302     GetDlgItem(IDC_CHECK_INTERNALBSP)->EnableWindow(FALSE);
    303   }
    304   else
    305   {
    306     GetDlgItem(IDC_EDIT_PAKFILE)->EnableWindow(TRUE);
    307     GetDlgItem(IDC_BTN_BROWSEPAK)->EnableWindow(TRUE);
    308     GetDlgItem(IDC_CHECK_INTERNALBSP)->EnableWindow(TRUE);
    309   }
    310 
    311   return TRUE;  // return TRUE unless you set the focus to a control
    312 	              // EXCEPTION: OCX Property Pages should return FALSE
    313 }
    314 
    315 void CPrefsDlg::OnOK() 
    316 {
    317   m_nMoveSpeed = m_wndCamSpeed.GetPos();
    318   m_nAngleSpeed = (float)m_nMoveSpeed * 0.50;
    319   this->m_nTextureQuality = m_wndTexturequality.GetPos();
    320 	SavePrefs();
    321 
    322   if (g_pParentWnd)
    323     g_pParentWnd->SetGridStatus();
    324   Sys_UpdateWindows(W_ALL);
    325   Undo_SetMaxSize(m_nUndoLevels);
    326 	CDialog::OnOK();
    327 }
    328 
    329 void CPrefsDlg::LoadPrefs()
    330 {
    331   CString strBuff;
    332   CString strPrefab = g_strAppPath;
    333   AddSlash(strPrefab);
    334   strPrefab += "Prefabs\\";
    335   
    336   m_nMouse = AfxGetApp()->GetProfileInt(PREF_SECTION, MOUSE_KEY, MOUSE_DEF);
    337   if (m_nMouse == 0)
    338     m_nMouseButtons = 2;
    339   else
    340     m_nMouseButtons = 3;
    341 
    342   m_nView = AfxGetApp()->GetProfileInt(PREF_SECTION, WINDOW_KEY, WINDOW_DEF);
    343   m_strQuake2 = AfxGetApp()->GetProfileString(PREF_SECTION, Q2_KEY, Q2_DEF);
    344   m_bRunQuake = AfxGetApp()->GetProfileInt(PREF_SECTION, RUNQ2_KEY, RUNQ2_DEF);
    345   m_bTextureLock = AfxGetApp()->GetProfileInt(PREF_SECTION, TLOCK_KEY, TLOCK_DEF);
    346   m_bRotateLock = AfxGetApp()->GetProfileInt(PREF_SECTION, RLOCK_KEY, TLOCK_DEF);
    347   m_strLastProject = AfxGetApp()->GetProfileString(PREF_SECTION, LASTPROJ_KEY, "");
    348   m_strLastMap = AfxGetApp()->GetProfileString(PREF_SECTION, LASTMAP_KEY, "");
    349   m_bLoadLast = AfxGetApp()->GetProfileInt(PREF_SECTION, LOADLAST_KEY, LOADLAST_DEF);
    350   m_bRunBefore = AfxGetApp()->GetProfileInt(INTERNAL_SECTION, RUN_KEY, RUN_DEF);
    351   //m_b3Dfx = AfxGetApp()->GetProfileInt(PREF_SECTION, _3DFX_KEY, 0);
    352   m_bFace = AfxGetApp()->GetProfileInt(PREF_SECTION, FACE_KEY, 1);
    353   m_bInternalBSP = AfxGetApp()->GetProfileInt(PREF_SECTION, BSP_KEY, 0);
    354   m_bRightClick = AfxGetApp()->GetProfileInt(PREF_SECTION, RCLICK_KEY, 1);
    355   m_bVertex = AfxGetApp()->GetProfileInt(PREF_SECTION, VERTEX_KEY, 1);
    356   m_bAutoSave = AfxGetApp()->GetProfileInt(PREF_SECTION, AUTOSAVE_KEY, 1);
    357   m_bPAK = AfxGetApp()->GetProfileInt(PREF_SECTION, PAK_KEY, 1);
    358   m_bNewApplyHandling = AfxGetApp()->GetProfileInt(PREF_SECTION, NEWAPPLY_KEY, 0);
    359   m_bLoadLastMap = AfxGetApp()->GetProfileInt(PREF_SECTION, LOADLASTMAP_KEY, 0);
    360   m_bGatewayHack = AfxGetApp()->GetProfileInt(PREF_SECTION, HACK_KEY, 0);
    361   m_bTextureWindow = AfxGetApp()->GetProfileInt(PREF_SECTION, TEXTURE_KEY, 0);
    362   m_bCleanTiny = AfxGetApp()->GetProfileInt(PREF_SECTION, TINYBRUSH_KEY, 0);
    363   strBuff = AfxGetApp()->GetProfileString(PREF_SECTION, TINYSIZE_KEY, "0.5");
    364   m_fTinySize = atof(strBuff);
    365   m_nAutoSave = AfxGetApp()->GetProfileInt(PREF_SECTION, AUTOSAVETIME_KEY, 5);
    366   m_strAutoSave.Format("%i", m_nAutoSave);
    367   m_bSnapShots = AfxGetApp()->GetProfileInt(PREF_SECTION, SNAPSHOT_KEY, 0);
    368   m_strPAKFile = AfxGetApp()->GetProfileString(PREF_SECTION, PAKFILE_KEY, PAKFILE_DEF);
    369   m_nStatusSize = AfxGetApp()->GetProfileInt(PREF_SECTION, STATUS_KEY, 10);
    370   m_nMoveSpeed = AfxGetApp()->GetProfileInt(PREF_SECTION, MOVESPEED_KEY, 400);
    371   m_nAngleSpeed = AfxGetApp()->GetProfileInt(PREF_SECTION, ANGLESPEED_KEY, 300);
    372   m_bSetGame = AfxGetApp()->GetProfileInt(PREF_SECTION, SETGAME_KEY, 0);
    373 	m_bCamXYUpdate = AfxGetApp()->GetProfileInt(PREF_SECTION, CAMXYUPDATE_KEY, 1);
    374   m_bNewLightDraw = AfxGetApp()->GetProfileInt(PREF_SECTION, LIGHTDRAW_KEY, 1);
    375   m_bCubicClipping = AfxGetApp()->GetProfileInt(PREF_SECTION, CUBICCLIP_KEY, 1);
    376   m_nCubicScale = AfxGetApp()->GetProfileInt(PREF_SECTION, CUBICSCALE_KEY, 13);
    377   m_bALTEdge = AfxGetApp()->GetProfileInt(PREF_SECTION, ALTEDGE_KEY, 0);
    378   m_bTextureBar = AfxGetApp()->GetProfileInt(PREF_SECTION, TEXTUREBAR_KEY, 0);
    379   m_strWhatGame = AfxGetApp()->GetProfileString(PREF_SECTION, WHATGAME_KEY, "Quake3");
    380   m_bFaceColors = AfxGetApp()->GetProfileInt(PREF_SECTION, FACECOLORS_KEY, 0);
    381   m_bQE4Painting = AfxGetApp()->GetProfileInt(PREF_SECTION, QE4PAINT_KEY, 1);
    382   m_bSnapTToGrid = AfxGetApp()->GetProfileInt(PREF_SECTION, SNAPT_KEY, 0);
    383   m_bXZVis = AfxGetApp()->GetProfileInt(PREF_SECTION, XZVIS_KEY, 0);
    384   m_bYZVis = AfxGetApp()->GetProfileInt(PREF_SECTION, YZVIS_KEY, 0);
    385   m_bZVis = AfxGetApp()->GetProfileInt(PREF_SECTION, ZVIS_KEY, 1);
    386   m_bSizePaint = AfxGetApp()->GetProfileInt(PREF_SECTION, SIZEPAINT_KEY, 0);
    387   m_bDLLEntities = AfxGetApp()->GetProfileInt(PREF_SECTION, DLLENTITIES_KEY, 0);
    388   m_bWideToolbar = AfxGetApp()->GetProfileInt(PREF_SECTION, WIDETOOLBAR_KEY, 1);
    389   m_bNoClamp = AfxGetApp()->GetProfileInt(PREF_SECTION, NOCLAMP_KEY, 0);
    390   m_strPrefabPath = AfxGetApp()->GetProfileString(PREF_SECTION, PREFAB_KEY, strPrefab);
    391   m_strUserPath = AfxGetApp()->GetProfileString(PREF_SECTION, USERINI_KEY, "");
    392   m_nRotation = AfxGetApp()->GetProfileInt(PREF_SECTION, ROTATION_KEY, 45);
    393   m_bSGIOpenGL = AfxGetApp()->GetProfileInt(PREF_SECTION, SGIOPENGL_KEY, 0);
    394   m_bBuggyICD = AfxGetApp()->GetProfileInt(PREF_SECTION, BUGGYICD_KEY, 0);
    395   m_bHiColorTextures = AfxGetApp()->GetProfileInt(PREF_SECTION, HICOLOR_KEY, 1);
    396   m_bChaseMouse = AfxGetApp()->GetProfileInt(PREF_SECTION, CHASEMOUSE_KEY, 1);
    397   m_nEntityShowState = AfxGetApp()->GetProfileInt(PREF_SECTION, ENTITYSHOW_KEY, 0);
    398   m_nTextureScale = AfxGetApp()->GetProfileInt(PREF_SECTION, TEXTURESCALE_KEY, 50);
    399   m_bTextureScrollbar = AfxGetApp()->GetProfileInt(PREF_SECTION, TEXTURESCROLLBAR_KEY, TRUE);
    400   m_bDisplayLists = AfxGetApp()->GetProfileInt(PREF_SECTION, DISPLAYLISTS_KEY, TRUE);
    401   m_bSwitchClip = AfxGetApp()->GetProfileInt(PREF_SECTION, SWITCHCLIP_KEY, TRUE);
    402   m_bSelectWholeEntities = AfxGetApp()->GetProfileInt(PREF_SECTION, SELWHOLEENTS_KEY, TRUE);
    403   m_nTextureQuality = AfxGetApp()->GetProfileInt(PREF_SECTION, TEXTUREQUALITY_KEY, 6);
    404   m_bShowShaders = AfxGetApp()->GetProfileInt(PREF_SECTION, SHOWSHADERS_KEY, TRUE);
    405   m_bGLLighting = AfxGetApp()->GetProfileInt(PREF_SECTION, GLLIGHTING_KEY, FALSE);
    406   m_nShader = AfxGetApp()->GetProfileInt(PREF_SECTION, LOADSHADERS_KEY, 0);
    407   m_bNoStipple = AfxGetApp()->GetProfileInt(PREF_SECTION, NOSTIPPLE_KEY, 0);
    408   m_nUndoLevels = AfxGetApp()->GetProfileInt(PREF_SECTION, UNDOLEVELS_KEY, 0);
    409   
    410   if (m_bRunBefore == FALSE)
    411   {
    412     SetGamePrefs();
    413   }
    414 }
    415 
    416 
    417 void CPrefsDlg::SavePrefs()
    418 {
    419   if (GetSafeHwnd())
    420     UpdateData(TRUE);
    421   AfxGetApp()->WriteProfileInt(PREF_SECTION, MOUSE_KEY, m_nMouse);
    422   if (m_nMouse == 0)
    423     m_nMouseButtons = 2;
    424   else
    425     m_nMouseButtons = 3;
    426   AfxGetApp()->WriteProfileInt(PREF_SECTION, WINDOW_KEY, m_nView);
    427   AfxGetApp()->WriteProfileString(PREF_SECTION, Q2_KEY, m_strQuake2);
    428   AfxGetApp()->WriteProfileInt(PREF_SECTION, RUNQ2_KEY, m_bRunQuake);
    429   AfxGetApp()->WriteProfileInt(PREF_SECTION, TLOCK_KEY, m_bTextureLock);
    430   AfxGetApp()->WriteProfileInt(PREF_SECTION, RLOCK_KEY, m_bRotateLock);
    431   AfxGetApp()->WriteProfileInt(PREF_SECTION, LOADLAST_KEY, m_bLoadLast);
    432   AfxGetApp()->WriteProfileString(PREF_SECTION, LASTPROJ_KEY, m_strLastProject);
    433   AfxGetApp()->WriteProfileString(PREF_SECTION, LASTMAP_KEY, m_strLastMap);
    434   AfxGetApp()->WriteProfileInt(INTERNAL_SECTION, RUN_KEY, m_bRunBefore);
    435   //AfxGetApp()->WriteProfileInt(PREF_SECTION, _3DFX_KEY, m_b3Dfx);
    436   AfxGetApp()->WriteProfileInt(PREF_SECTION, FACE_KEY, m_bFace);
    437   AfxGetApp()->WriteProfileInt(PREF_SECTION, BSP_KEY, m_bInternalBSP);
    438   AfxGetApp()->WriteProfileInt(PREF_SECTION, RCLICK_KEY, m_bRightClick);
    439   AfxGetApp()->WriteProfileInt(PREF_SECTION, VERTEX_KEY, m_bVertex);
    440   AfxGetApp()->WriteProfileInt(PREF_SECTION, AUTOSAVE_KEY, m_bAutoSave);
    441   AfxGetApp()->WriteProfileInt(PREF_SECTION, PAK_KEY, m_bPAK);
    442   AfxGetApp()->WriteProfileInt(PREF_SECTION, LOADLASTMAP_KEY, m_bLoadLastMap);
    443   AfxGetApp()->WriteProfileInt(PREF_SECTION, TEXTURE_KEY, m_bTextureWindow);
    444   m_nAutoSave = atoi(m_strAutoSave);
    445   AfxGetApp()->WriteProfileInt(PREF_SECTION, AUTOSAVETIME_KEY, m_nAutoSave);
    446   AfxGetApp()->WriteProfileInt(PREF_SECTION, SNAPSHOT_KEY, m_bSnapShots);
    447   AfxGetApp()->WriteProfileString(PREF_SECTION, PAKFILE_KEY, m_strPAKFile);
    448   AfxGetApp()->WriteProfileInt(PREF_SECTION, STATUS_KEY, m_nStatusSize);
    449   AfxGetApp()->WriteProfileInt(PREF_SECTION, SETGAME_KEY, m_bSetGame);
    450   AfxGetApp()->WriteProfileInt(PREF_SECTION, CAMXYUPDATE_KEY, m_bCamXYUpdate);
    451   AfxGetApp()->WriteProfileInt(PREF_SECTION, LIGHTDRAW_KEY, m_bNewLightDraw);
    452   AfxGetApp()->WriteProfileInt(PREF_SECTION, MOVESPEED_KEY, m_nMoveSpeed);
    453   AfxGetApp()->WriteProfileInt(PREF_SECTION, ANGLESPEED_KEY, m_nAngleSpeed);
    454   AfxGetApp()->WriteProfileInt(PREF_SECTION, CUBICCLIP_KEY, m_bCubicClipping);
    455   AfxGetApp()->WriteProfileInt(PREF_SECTION, CUBICSCALE_KEY, m_nCubicScale);
    456   AfxGetApp()->WriteProfileInt(PREF_SECTION, ALTEDGE_KEY, m_bALTEdge);
    457   AfxGetApp()->WriteProfileInt(PREF_SECTION, TEXTUREBAR_KEY, m_bTextureBar);
    458   AfxGetApp()->WriteProfileInt(PREF_SECTION, FACECOLORS_KEY, m_bFaceColors);
    459   AfxGetApp()->WriteProfileString(PREF_SECTION, WHATGAME_KEY, m_strWhatGame);
    460   AfxGetApp()->WriteProfileInt(PREF_SECTION, QE4PAINT_KEY, m_bQE4Painting);
    461   AfxGetApp()->WriteProfileInt(PREF_SECTION, SNAPT_KEY, m_bSnapTToGrid);
    462   AfxGetApp()->WriteProfileInt(PREF_SECTION, XZVIS_KEY, m_bXZVis);
    463   AfxGetApp()->WriteProfileInt(PREF_SECTION, YZVIS_KEY, m_bYZVis);
    464   AfxGetApp()->WriteProfileInt(PREF_SECTION, ZVIS_KEY, m_bZVis);
    465   AfxGetApp()->WriteProfileInt(PREF_SECTION, SIZEPAINT_KEY, m_bSizePaint);
    466   AfxGetApp()->WriteProfileInt(PREF_SECTION, DLLENTITIES_KEY, m_bDLLEntities);
    467   AfxGetApp()->WriteProfileInt(PREF_SECTION, WIDETOOLBAR_KEY, m_bWideToolbar);
    468   AfxGetApp()->WriteProfileInt(PREF_SECTION, NOCLAMP_KEY, m_bNoClamp);
    469   AfxGetApp()->WriteProfileString(PREF_SECTION, PREFAB_KEY, m_strPrefabPath);
    470   AfxGetApp()->WriteProfileString(PREF_SECTION, USERINI_KEY, m_strUserPath);
    471   AfxGetApp()->WriteProfileInt(PREF_SECTION, ROTATION_KEY, m_nRotation);
    472   AfxGetApp()->WriteProfileInt(PREF_SECTION, SGIOPENGL_KEY, m_bSGIOpenGL);
    473   AfxGetApp()->WriteProfileInt(PREF_SECTION, BUGGYICD_KEY, m_bBuggyICD);
    474   AfxGetApp()->WriteProfileInt(PREF_SECTION, HICOLOR_KEY, m_bHiColorTextures);
    475   AfxGetApp()->WriteProfileInt(PREF_SECTION, CHASEMOUSE_KEY, m_bChaseMouse);
    476   AfxGetApp()->WriteProfileInt(PREF_SECTION, ENTITYSHOW_KEY, m_nEntityShowState);
    477   AfxGetApp()->WriteProfileInt(PREF_SECTION, TEXTURESCALE_KEY, m_nTextureScale);
    478   AfxGetApp()->WriteProfileInt(PREF_SECTION, TEXTURESCROLLBAR_KEY, m_bTextureScrollbar);
    479   AfxGetApp()->WriteProfileInt(PREF_SECTION, DISPLAYLISTS_KEY, m_bDisplayLists);
    480   AfxGetApp()->WriteProfileInt(PREF_SECTION, SWITCHCLIP_KEY, m_bSwitchClip);
    481   AfxGetApp()->WriteProfileInt(PREF_SECTION, SELWHOLEENTS_KEY, m_bSelectWholeEntities);
    482   AfxGetApp()->WriteProfileInt(PREF_SECTION, TEXTUREQUALITY_KEY, m_nTextureQuality);
    483   AfxGetApp()->WriteProfileInt(PREF_SECTION, SHOWSHADERS_KEY, m_bShowShaders);
    484   AfxGetApp()->WriteProfileInt(PREF_SECTION, GLLIGHTING_KEY, m_bGLLighting);
    485   AfxGetApp()->WriteProfileInt(PREF_SECTION, LOADSHADERS_KEY, m_nShader);
    486   AfxGetApp()->WriteProfileInt(PREF_SECTION, NOSTIPPLE_KEY, m_bNoStipple);
    487   AfxGetApp()->WriteProfileInt(PREF_SECTION, UNDOLEVELS_KEY, m_nUndoLevels);
    488 }
    489 
    490                         
    491 
    492 void CPrefsDlg::OnBtnBrowsepak() 
    493 {
    494   UpdateData(TRUE);
    495   CFileDialog dlg(true, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "PAK files (*.pak)|*.pak||", this);
    496   if (dlg.DoModal() == IDOK)
    497   {
    498     m_strPAKFile = dlg.GetPathName();
    499     UpdateData(FALSE);
    500   }
    501 }
    502 
    503 void CPrefsDlg::OnBtnBrowseprefab() 
    504 {
    505   UpdateData(TRUE);
    506   BROWSEINFO bi;
    507   CString strPath;
    508   char* p = strPath.GetBuffer(MAX_PATH+1);
    509   bi.hwndOwner = GetSafeHwnd();
    510   bi.pidlRoot = NULL;
    511   bi.pszDisplayName = p;
    512   bi.lpszTitle = "Load textures from path";
    513   bi.ulFlags = 0;
    514   bi.lpfn = NULL;
    515   bi.lParam = NULL;
    516   bi.iImage = 0;
    517   LPITEMIDLIST pidlBrowse;
    518   pidlBrowse = SHBrowseForFolder(&bi);
    519   if (pidlBrowse)
    520   {
    521     SHGetPathFromIDList(pidlBrowse, p);
    522     strPath.ReleaseBuffer();
    523     AddSlash(strPath);
    524     m_strPrefabPath = strPath;
    525     UpdateData(FALSE);
    526   }
    527 }
    528 
    529 void CPrefsDlg::OnBtnBrowseuserini() 
    530 {
    531   UpdateData(TRUE);
    532   CFileDialog dlg(true, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "INI files (*.ini)|*.ini||", this);
    533   if (dlg.DoModal() == IDOK)
    534   {
    535     m_strUserPath = dlg.GetPathName();
    536     UpdateData(FALSE);
    537   }
    538 }
    539 
    540 void CPrefsDlg::OnSelchangeComboWhatgame() 
    541 {
    542   int n = m_wndWhatGame.GetCurSel();
    543   if (n >= 0)
    544   {
    545     m_wndWhatGame.GetLBText(n, m_strWhatGame);
    546   }
    547   SetGamePrefs();
    548 }
    549 
    550 void CPrefsDlg::SetGamePrefs()
    551 {
    552   if (strstr(m_strWhatGame, "Quake3") != NULL)
    553   {
    554     m_bHiColorTextures = TRUE;
    555   	m_bWideToolbar = TRUE;
    556     m_strPAKFile = "PK3 files are loaded from the baseq3 path";
    557   	m_bInternalBSP = FALSE;
    558     if (GetSafeHwnd())
    559     {
    560       GetDlgItem(IDC_EDIT_PAKFILE)->EnableWindow(FALSE);
    561       GetDlgItem(IDC_BTN_BROWSEPAK)->EnableWindow(FALSE);
    562       GetDlgItem(IDC_CHECK_INTERNALBSP)->EnableWindow(FALSE);
    563     }
    564   }
    565   else
    566   {
    567     m_bHiColorTextures = FALSE;
    568   	m_bWideToolbar = FALSE;
    569     m_strPAKFile = PAKFILE_DEF;
    570     if (GetSafeHwnd())
    571     {
    572       GetDlgItem(IDC_EDIT_PAKFILE)->EnableWindow(TRUE);
    573       GetDlgItem(IDC_BTN_BROWSEPAK)->EnableWindow(TRUE);
    574       GetDlgItem(IDC_CHECK_INTERNALBSP)->EnableWindow(TRUE);
    575     }
    576   }
    577   SavePrefs();
    578 }