home *** CD-ROM | disk | FTP | other *** search
/ PC PowerPlay 58 / pcpp58a.iso / extras / quake 3 source / Q3A_ToolSource.exe / Main / PrefsDlg.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2001-01-02  |  22.6 KB  |  557 lines

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