summaryrefslogtreecommitdiff
path: root/hammer/optgeneral.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /hammer/optgeneral.cpp
downloadarchived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.tar.xz
archived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.zip
Diffstat (limited to 'hammer/optgeneral.cpp')
-rw-r--r--hammer/optgeneral.cpp294
1 files changed, 294 insertions, 0 deletions
diff --git a/hammer/optgeneral.cpp b/hammer/optgeneral.cpp
new file mode 100644
index 0000000..4a3e3ff
--- /dev/null
+++ b/hammer/optgeneral.cpp
@@ -0,0 +1,294 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+#include "stdafx.h"
+#include "hammer.h"
+#include "OPTGeneral.h"
+#include "Options.h"
+
+
+#pragma warning(disable:4244)
+
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include <tier0/memdbgon.h>
+
+void EditorUtil_ConvertPath(CString &str, bool bSave);
+
+IMPLEMENT_DYNCREATE(COPTGeneral, CPropertyPage)
+
+
+BEGIN_MESSAGE_MAP(COPTGeneral, CPropertyPage)
+ //{{AFX_MSG_MAP(COPTGeneral)
+ ON_BN_CLICKED(IDC_INDEPENDENTWINDOWS, OnIndependentwindows)
+ ON_BN_CLICKED(IDC_BROWSEAUTOSAVEDIR, OnBrowseAutosaveDir)
+ ON_BN_CLICKED(IDC_ENABLEAUTOSAVE, OnEnableAutosave)
+ //}}AFX_MSG_MAP
+END_MESSAGE_MAP()
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+COPTGeneral::COPTGeneral(void) : CPropertyPage(COPTGeneral::IDD)
+{
+ //{{AFX_DATA_INIT(COPTGeneral)
+ m_iMaxAutosavesPerMap = 0;
+ m_iUndoLevels = 0;
+ m_nMaxCameras = 5;
+ //}}AFX_DATA_INIT
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+COPTGeneral::~COPTGeneral(void)
+{
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Ensures that our undo levels are at least 5.
+//-----------------------------------------------------------------------------
+void PASCAL DDV_UndoLevels(CDataExchange *pDX, int value)
+{
+ if (value < 5)
+ {
+ AfxMessageBox("Undo levels must be at least 5.", MB_ICONEXCLAMATION | MB_OK);
+ pDX->Fail();
+ }
+}
+
+void PASCAL DDV_MaxCameras(CDataExchange *pDX, int value)
+{
+ if (value < 1 || value > 100)
+ {
+ AfxMessageBox("Max cameras must be between 1 and 1000.", MB_ICONEXCLAMATION | MB_OK);
+ pDX->Fail();
+ }
+}
+
+void PASCAL DDV_AutosaveSpace(CDataExchange *pDX, int value)
+{
+ if ( value > 10000 )
+ {
+ AfxMessageBox("You have selected too much space for autosaving. The maximum value is 10000.", MB_ICONEXCLAMATION | MB_OK);
+ pDX->Fail();
+ }
+}
+
+void PASCAL DDV_NumberAutosaves(CDataExchange *pDX, int value)
+{
+ if ( value > 999 )
+ {
+ AfxMessageBox("Number of autosaves must be 0-999.", MB_ICONEXCLAMATION | MB_OK);
+ pDX->Fail();
+ }
+}
+
+void PASCAL DDV_AutosaveTimer(CDataExchange *pDX, int value)
+{
+ if ( value < 1 || value > 120 )
+ {
+ AfxMessageBox("Time must be between 1 - 120 minutes.", MB_ICONEXCLAMATION | MB_OK);
+ pDX->Fail();
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Input : pDX -
+//-----------------------------------------------------------------------------
+void COPTGeneral::DoDataExchange(CDataExchange* pDX)
+{
+ CPropertyPage::DoDataExchange(pDX);
+ //{{AFX_DATA_MAP(COPTGeneral)
+ DDX_Control(pDX, IDC_LOADWINPOSITIONS, m_cLoadWinPos);
+ DDX_Control(pDX, IDC_INDEPENDENTWINDOWS, m_cIndependentWin);
+ DDX_Control(pDX, IDC_UNDOSPIN, m_UndoSpin);
+ DDX_Text(pDX, IDC_UNDO, m_iUndoLevels);
+ DDX_Text(pDX, IDC_MAX_CAMERAS, m_nMaxCameras);
+ DDX_Check(pDX, IDC_STRETCH_ARCH, Options.general.bStretchArches);
+ DDX_Check(pDX, IDC_GROUPWHILEIGNOREGROUPS, Options.general.bGroupWhileIgnore);
+ DDX_Check(pDX, IDC_INDEPENDENTWINDOWS, Options.general.bIndependentwin);
+ DDX_Check(pDX, IDC_LOADWINPOSITIONS, Options.general.bLoadwinpos);
+ DDV_UndoLevels( pDX, m_iUndoLevels );
+ DDV_MaxCameras( pDX, m_nMaxCameras );
+ DDX_Control(pDX, IDC_ENABLEAUTOSAVE, m_cEnableAutosave);
+ DDX_Check(pDX, IDC_ENABLEAUTOSAVE, Options.general.bEnableAutosave);
+ DDX_Text(pDX, IDC_MAPITERATIONS, m_iMaxAutosavesPerMap);
+ DDX_Text(pDX, IDC_AUTOSAVESPACE, m_iMaxAutosaveSpace);
+ DDX_Text(pDX, IDC_SAVETIME, m_iTimeBetweenSaves);
+ DDX_Control(pDX, IDC_AUTOSAVEDIR, m_cAutosaveDir);
+ DDX_Control(pDX, IDC_AUTOSAVETIMELABEL, m_cAutosaveTimeLabel);
+ DDX_Control(pDX, IDC_SAVETIME, m_cAutosaveTime);
+ DDX_Control(pDX, IDC_AUTOSAVESPACELABEL, m_cAutosaveSpaceLabel);
+ DDX_Control(pDX, IDC_AUTOSAVESPACE, m_cAutosaveSpace);
+ DDX_Control(pDX, IDC_AUTOSAVEITERATIONLABEL, m_cAutosaveIterationLabel);
+ DDX_Control(pDX, IDC_MAPITERATIONS, m_cAutosaveIterations);
+ DDX_Control(pDX, IDC_AUTOSAVEDIRECTORYLABEL, m_cAutosaveDirectoryLabel);
+ DDX_Control(pDX, IDC_BROWSEAUTOSAVEDIR, m_cAutosaveBrowseButton);
+
+ DDV_AutosaveSpace( pDX, m_iMaxAutosaveSpace );
+ DDV_NumberAutosaves( pDX, m_iMaxAutosavesPerMap );
+ DDV_AutosaveTimer( pDX, m_iTimeBetweenSaves );
+ DDX_Check(pDX, IDC_VGUI_MODELBROWSER, Options.general.bUseVGUIModelBrowser);
+ //}}AFX_DATA_MAP
+
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Output : Returns TRUE on success, FALSE on failure.
+//-----------------------------------------------------------------------------
+BOOL COPTGeneral::OnInitDialog(void)
+{
+ char szAutosaveDir[MAX_PATH];
+ APP()->GetDirectory( DIR_AUTOSAVE, szAutosaveDir );
+ CString str( szAutosaveDir );
+
+ m_nMaxCameras = Options.general.nMaxCameras;
+ m_iUndoLevels = Options.general.iUndoLevels;
+ m_iMaxAutosavesPerMap = Options.general.iMaxAutosavesPerMap;
+ m_iMaxAutosaveSpace = Options.general.iMaxAutosaveSpace;
+ m_iTimeBetweenSaves = Options.general.iTimeBetweenSaves;
+
+ CPropertyPage::OnInitDialog();
+
+ m_cEnableAutosave.SetCheck( Options.general.bEnableAutosave );
+
+ m_cAutosaveDir.SetWindowText( str );
+
+ // set undo range
+ m_UndoSpin.SetRange(5, 999);
+
+ OnEnableAutosave();
+ OnIndependentwindows();
+
+ return TRUE;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Output : Returns TRUE on success, FALSE on failure.
+//-----------------------------------------------------------------------------
+BOOL COPTGeneral::OnApply(void)
+{
+ BOOL bResetTimer = FALSE;
+
+ if( Options.general.iTimeBetweenSaves != m_iTimeBetweenSaves )
+ {
+ //if the time value has changed, the timer needs to be reset so autosaves
+ //happen at the new interval in this instance of hammer
+ bResetTimer = TRUE;
+ }
+
+ if( ( Options.general.iMaxAutosavesPerMap != 0 && m_iMaxAutosavesPerMap == 0 ) ||
+ ( Options.general.iMaxAutosavesPerMap == 0 && m_iMaxAutosavesPerMap != 0 ) )
+ {
+ //if the number of autosaves per map has changed to or away from 0 then
+ //the timer needs to be reset
+ bResetTimer = TRUE;
+ }
+
+ Options.general.iUndoLevels = m_iUndoLevels;
+ Options.general.nMaxCameras = m_nMaxCameras;
+ Options.general.iMaxAutosavesPerMap = m_iMaxAutosavesPerMap;
+ Options.general.iMaxAutosaveSpace = m_iMaxAutosaveSpace;
+ Options.general.iTimeBetweenSaves = m_iTimeBetweenSaves;
+ Options.general.bEnableAutosave = m_cEnableAutosave.GetCheck();
+ CString str;
+ m_cAutosaveDir.GetWindowText(str);
+
+ if ( strcmp( Options.general.szAutosaveDir, str ) )
+ {
+ strcpy( Options.general.szAutosaveDir, str );
+ bResetTimer = TRUE;
+ }
+
+ if( bResetTimer == TRUE )
+ {
+ APP()->ResetAutosaveTimer();
+ }
+
+ Options.PerformChanges(COptions::secGeneral);
+
+ if ( Options.general.bEnableAutosave )
+ {
+ if ( !APP()->VerifyAutosaveDirectory( Options.general.szAutosaveDir ) )
+ {
+ Options.general.bEnableAutosave = false;
+ m_cEnableAutosave.SetCheck( Options.general.bEnableAutosave );
+ OnEnableAutosave();
+ return FALSE;
+ }
+ }
+
+ return(CPropertyPage::OnApply());
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void COPTGeneral::OnIndependentwindows(void)
+{
+ m_cLoadWinPos.EnableWindow(m_cIndependentWin.GetCheck());
+}
+
+void COPTGeneral::OnEnableAutosave(void)
+{
+ int iEnabled = m_cEnableAutosave.GetCheck();
+ m_cAutosaveDir.EnableWindow( iEnabled );
+ m_cAutosaveTime.EnableWindow( iEnabled );
+ m_cAutosaveTimeLabel.EnableWindow( iEnabled );
+ m_cAutosaveSpaceLabel.EnableWindow( iEnabled );
+ m_cAutosaveSpace.EnableWindow( iEnabled );
+ m_cAutosaveIterationLabel.EnableWindow( iEnabled );
+ m_cAutosaveIterations.EnableWindow( iEnabled );
+ m_cAutosaveDirectoryLabel.EnableWindow( iEnabled );
+ m_cAutosaveBrowseButton.EnableWindow( iEnabled );
+}
+
+
+void COPTGeneral::OnBrowseAutosaveDir(void)
+{
+ char szTmp[MAX_PATH];
+ if (!BrowseForFolder("Select Autosave Directory", szTmp))
+ {
+ return;
+ }
+
+ CString str(szTmp);
+ EditorUtil_ConvertPath(str, false);
+ m_cAutosaveDir.SetWindowText(str);
+}
+
+BOOL COPTGeneral::BrowseForFolder(char *pszTitle, char *pszDirectory)
+{
+ char szTmp[MAX_PATH];
+
+ BROWSEINFO bi;
+ memset(&bi, 0, sizeof bi);
+ bi.hwndOwner = m_hWnd;
+ bi.pszDisplayName = szTmp;
+ bi.lpszTitle = pszTitle;
+ bi.ulFlags = BIF_RETURNONLYFSDIRS;
+
+ LPITEMIDLIST idl = SHBrowseForFolder(&bi);
+
+ if(idl == NULL)
+ return FALSE;
+
+ SHGetPathFromIDList(idl, pszDirectory);
+ CoTaskMemFree(idl);
+
+ return TRUE;
+}
+