diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /hammer/optgeneral.cpp | |
| download | archived-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.cpp | 294 |
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; +} + |