From: <man...@us...> - 2015-06-08 15:04:41
|
Revision: 5274 http://sourceforge.net/p/modplug/code/5274 Author: manxorist Date: 2015-06-08 15:04:34 +0000 (Mon, 08 Jun 2015) Log Message: ----------- [Ref] Autosaver: Avoid duplicate configuration setting state (in CAutoSaver and TrackerSettings) by just querying the global TrackerSettings when a setting value is needed. Breaks up initialization dependency circle caused by the unusual implementation of CAutoSaver in the code base. Modified Paths: -------------- trunk/OpenMPT/mptrack/AutoSaver.cpp trunk/OpenMPT/mptrack/AutoSaver.h trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/PathConfigDlg.cpp trunk/OpenMPT/mptrack/PathConfigDlg.h trunk/OpenMPT/mptrack/TrackerSettings.cpp trunk/OpenMPT/mptrack/TrackerSettings.h Modified: trunk/OpenMPT/mptrack/AutoSaver.cpp =================================================================== --- trunk/OpenMPT/mptrack/AutoSaver.cpp 2015-06-08 14:21:37 UTC (rev 5273) +++ trunk/OpenMPT/mptrack/AutoSaver.cpp 2015-06-08 15:04:34 UTC (rev 5274) @@ -29,19 +29,45 @@ // Construction/Destruction /////////////////////////// -CAutoSaver::CAutoSaver(bool enabled, uint32_t saveInterval, uint32_t backupHistory, bool useOriginalPath, mpt::PathString path) -//----------------------------------------------------------------------------------------------------------------------------- +CAutoSaver::CAutoSaver() +//---------------------- : m_bSaveInProgress(false) , m_nLastSave(timeGetTime()) - , m_bEnabled(enabled) - , m_nSaveInterval(saveInterval * 60 * 1000) //minutes to milliseconds - , m_nBackupHistory(backupHistory) - , m_bUseOriginalPath(useOriginalPath) - , m_csPath(path) { } +bool CAutoSaver::IsEnabled() const +//-------------------------------- +{ + return TrackerSettings::Instance().AutosaveEnabled; +} + +bool CAutoSaver::GetUseOriginalPath() const +//----------------------------------------- +{ + return TrackerSettings::Instance().AutosaveUseOriginalPath; +} + +mpt::PathString CAutoSaver::GetPath() const +//----------------------------------------- +{ + return TrackerSettings::Instance().AutosavePath.GetDefaultDir(); +} + +uint32 CAutoSaver::GetHistoryDepth() const +//---------------------------------------- +{ + return TrackerSettings::Instance().AutosaveHistoryDepth; +} + +uint32 CAutoSaver::GetSaveInterval() const +//---------------------------------------- +{ + return TrackerSettings::Instance().AutosaveIntervalMinutes; +} + + ////////////// // Entry Point ////////////// @@ -70,7 +96,7 @@ CleanUpBackups(modDoc); } else { - m_bEnabled = false; + TrackerSettings::Instance().AutosaveEnabled = false; Reporting::Warning("Warning: Auto Save failed and has been disabled. Please:\n- Review your Auto Save paths\n- Check available disk space and filesystem access rights"); success = false; } @@ -95,7 +121,7 @@ //---------------------------------------- { DWORD curInterval = curTime - m_nLastSave; - return (curInterval >= m_nSaveInterval); + return (curInterval >= GetSaveIntervalMilliseconds()); } @@ -104,7 +130,7 @@ { mpt::PathString name; - if(m_bUseOriginalPath) + if(GetUseOriginalPath()) { if(modDoc.m_bHasValidPath && !(name = modDoc.GetPathNameMpt()).empty()) { @@ -121,7 +147,7 @@ } } else { - name = m_csPath + mpt::PathString::FromCStringSilent(modDoc.GetTitle()).SanitizeComponent(); + name = GetPath() + mpt::PathString::FromCStringSilent(modDoc.GetTitle()).SanitizeComponent(); } const mpt::ustring timeStamp = mpt::ToUnicode((CTime::GetCurrentTime()).Format(_T(".AutoSave.%Y%m%d.%H%M%S."))); @@ -178,7 +204,7 @@ { mpt::PathString path; - if (m_bUseOriginalPath) + if(GetUseOriginalPath()) { if (modDoc.m_bHasValidPath && !(path = modDoc.GetPathNameMpt()).empty()) { @@ -191,7 +217,7 @@ } } else { - path = m_csPath; + path = GetPath(); } std::vector<mpt::PathString> foundfiles; @@ -214,7 +240,7 @@ } std::sort(foundfiles.begin(), foundfiles.end()); - while(foundfiles.size() > (size_t)m_nBackupHistory) + while(foundfiles.size() > static_cast<size_t>(GetHistoryDepth())) { DeleteFileW(foundfiles[0].AsNative().c_str()); foundfiles.erase(foundfiles.begin()); Modified: trunk/OpenMPT/mptrack/AutoSaver.h =================================================================== --- trunk/OpenMPT/mptrack/AutoSaver.h 2015-06-08 14:21:37 UTC (rev 5273) +++ trunk/OpenMPT/mptrack/AutoSaver.h 2015-06-08 15:04:34 UTC (rev 5274) @@ -20,26 +20,21 @@ { public: //Cons/Destr - CAutoSaver(bool enabled = true, uint32_t saveInterval = 10, uint32_t backupHistory = 3, - bool useOriginalPath = true, mpt::PathString path = mpt::PathString()); + CAutoSaver(); //Work bool DoSave(DWORD curTime); //Member access - void SetEnabled(bool enabled) { m_bEnabled = enabled; } - bool IsEnabled() const { return m_bEnabled; } - void SetUseOriginalPath(bool useOrgPath) { m_bUseOriginalPath = useOrgPath; } - bool GetUseOriginalPath() const { return m_bUseOriginalPath; } - void SetPath(const mpt::PathString &path) { m_csPath = path; } - mpt::PathString GetPath() const { return m_csPath; } - void SetHistoryDepth(uint32_t history) { m_nBackupHistory = Clamp(history, 1u, 1000u); } - uint32_t GetHistoryDepth() const { return m_nBackupHistory; } - void SetSaveInterval(uint32_t minutes) + bool IsEnabled() const; + bool GetUseOriginalPath() const; + mpt::PathString GetPath() const; + uint32 GetHistoryDepth() const; + uint32 GetSaveInterval() const; + uint32 GetSaveIntervalMilliseconds() const { - m_nSaveInterval = Clamp(minutes, 1u, 10000u) * 60u * 1000u; //minutes to milliseconds + return Clamp(GetSaveInterval(), 0u, (1u<<30)/60u/1000u) * 60 * 1000; } - uint32_t GetSaveInterval() const { return m_nSaveInterval / 60u / 1000u; } //internal implementation private: @@ -54,12 +49,7 @@ //Flag to prevent autosave from starting new saving if previous is still in progress. bool m_bSaveInProgress; - bool m_bEnabled; DWORD m_nLastSave; - uint32_t m_nSaveInterval; - uint32_t m_nBackupHistory; - bool m_bUseOriginalPath; - mpt::PathString m_csPath; }; Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2015-06-08 14:21:37 UTC (rev 5273) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2015-06-08 15:04:34 UTC (rev 5274) @@ -1886,7 +1886,7 @@ COptionsColors colors; COptionsMixer mixerdlg; CMidiSetupDlg mididlg(TrackerSettings::Instance().m_dwMidiSetup, TrackerSettings::Instance().m_nMidiDevice); - PathConfigDlg pathsdlg(*m_pAutoSaver); + PathConfigDlg pathsdlg; CUpdateSetupDlg updatedlg; #if defined(MPT_SETTINGS_CACHE) COptionsAdvanced advanced; Modified: trunk/OpenMPT/mptrack/PathConfigDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/PathConfigDlg.cpp 2015-06-08 14:21:37 UTC (rev 5273) +++ trunk/OpenMPT/mptrack/PathConfigDlg.cpp 2015-06-08 15:04:34 UTC (rev 5274) @@ -10,7 +10,6 @@ #include "stdafx.h" #include "resource.h" -#include "AutoSaver.h" #include "PathConfigDlg.h" #include "FileDialog.h" #include "Mainfrm.h" @@ -19,9 +18,8 @@ IMPLEMENT_DYNAMIC(PathConfigDlg, CPropertyPage) -PathConfigDlg::PathConfigDlg(CAutoSaver &autoSaver) +PathConfigDlg::PathConfigDlg() : CPropertyPage(IDD_OPTIONS_AUTOSAVE) - , m_AutoSaver(autoSaver) { } @@ -68,12 +66,12 @@ ::SetDlgItemTextW(m_hWnd, IDC_OPTIONS_DIR_VSTPRESETS, TrackerSettings::Instance().PathPluginPresets.GetDefaultDir().AsNative().c_str()); // Autosave - CheckDlgButton(IDC_AUTOSAVE_ENABLE, m_AutoSaver.IsEnabled() ? BST_CHECKED : BST_UNCHECKED); - SetDlgItemInt(IDC_AUTOSAVE_HISTORY, m_AutoSaver.GetHistoryDepth()); - ::SetDlgItemTextW(m_hWnd, IDC_AUTOSAVE_PATH, m_AutoSaver.GetPath().AsNative().c_str()); - SetDlgItemInt(IDC_AUTOSAVE_INTERVAL, m_AutoSaver.GetSaveInterval()); - CheckDlgButton(IDC_AUTOSAVE_USEORIGDIR, m_AutoSaver.GetUseOriginalPath() ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(IDC_AUTOSAVE_USECUSTOMDIR, m_AutoSaver.GetUseOriginalPath() ? BST_UNCHECKED : BST_CHECKED); + CheckDlgButton(IDC_AUTOSAVE_ENABLE, TrackerSettings::Instance().AutosaveEnabled ? BST_CHECKED : BST_UNCHECKED); + SetDlgItemInt(IDC_AUTOSAVE_HISTORY, TrackerSettings::Instance().AutosaveHistoryDepth); + ::SetDlgItemTextW(m_hWnd, IDC_AUTOSAVE_PATH, TrackerSettings::Instance().AutosavePath.GetDefaultDir().AsNative().c_str()); + SetDlgItemInt(IDC_AUTOSAVE_INTERVAL, TrackerSettings::Instance().AutosaveIntervalMinutes); + CheckDlgButton(IDC_AUTOSAVE_USEORIGDIR, TrackerSettings::Instance().AutosaveUseOriginalPath ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(IDC_AUTOSAVE_USECUSTOMDIR, TrackerSettings::Instance().AutosaveUseOriginalPath ? BST_UNCHECKED : BST_CHECKED); //enable/disable stuff as appropriate OnAutosaveEnable(); OnAutosaveUseOrigDir(); @@ -101,13 +99,13 @@ mpt::PathString::FromNative(szPresetDir)); WCHAR tempPath[MAX_PATH]; - m_AutoSaver.SetEnabled(IsDlgButtonChecked(IDC_AUTOSAVE_ENABLE) != BST_UNCHECKED); - m_AutoSaver.SetHistoryDepth(GetDlgItemInt(IDC_AUTOSAVE_HISTORY)); - m_AutoSaver.SetSaveInterval(GetDlgItemInt(IDC_AUTOSAVE_INTERVAL)); - m_AutoSaver.SetUseOriginalPath(IsDlgButtonChecked(IDC_AUTOSAVE_USEORIGDIR) == BST_CHECKED); + TrackerSettings::Instance().AutosaveEnabled = (IsDlgButtonChecked(IDC_AUTOSAVE_ENABLE) != BST_UNCHECKED); + TrackerSettings::Instance().AutosaveHistoryDepth = (GetDlgItemInt(IDC_AUTOSAVE_HISTORY)); + TrackerSettings::Instance().AutosaveIntervalMinutes = (GetDlgItemInt(IDC_AUTOSAVE_INTERVAL)); + TrackerSettings::Instance().AutosaveUseOriginalPath = (IsDlgButtonChecked(IDC_AUTOSAVE_USEORIGDIR) == BST_CHECKED); ::GetDlgItemTextW(m_hWnd, IDC_AUTOSAVE_PATH, tempPath, CountOf(tempPath)); mpt::PathString path = mpt::PathString::FromNative(tempPath).EnsureTrailingSlash(); - m_AutoSaver.SetPath(path); + TrackerSettings::Instance().AutosavePath.SetDefaultDir(path); CPropertyPage::OnOK(); } Modified: trunk/OpenMPT/mptrack/PathConfigDlg.h =================================================================== --- trunk/OpenMPT/mptrack/PathConfigDlg.h 2015-06-08 14:21:37 UTC (rev 5273) +++ trunk/OpenMPT/mptrack/PathConfigDlg.h 2015-06-08 15:04:34 UTC (rev 5274) @@ -12,14 +12,12 @@ OPENMPT_NAMESPACE_BEGIN -class CAutoSaver; - class PathConfigDlg : public CPropertyPage { DECLARE_DYNAMIC(PathConfigDlg) public: - PathConfigDlg(CAutoSaver &autoSaver); + PathConfigDlg(); protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support @@ -30,9 +28,6 @@ virtual BOOL OnInitDialog(); virtual BOOL OnKillActive(); -private: - CAutoSaver &m_AutoSaver; - protected: afx_msg void OnAutosaveEnable(); afx_msg void OnAutosaveUseOrigDir(); Modified: trunk/OpenMPT/mptrack/TrackerSettings.cpp =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.cpp 2015-06-08 14:21:37 UTC (rev 5273) +++ trunk/OpenMPT/mptrack/TrackerSettings.cpp 2015-06-08 15:04:34 UTC (rev 5274) @@ -301,12 +301,6 @@ const std::string colorName = mpt::String::Print("Color%1", mpt::fmt::dec0<2>(ncol)); rgbCustomColors[ncol] = conf.Read<uint32>("Display", colorName, rgbCustomColors[ncol]); } - // AutoSave - CMainFrame::m_pAutoSaver->SetEnabled(AutosaveEnabled); - CMainFrame::m_pAutoSaver->SetSaveInterval(AutosaveIntervalMinutes); - CMainFrame::m_pAutoSaver->SetHistoryDepth(AutosaveHistoryDepth); - CMainFrame::m_pAutoSaver->SetUseOriginalPath(AutosaveUseOriginalPath); - CMainFrame::m_pAutoSaver->SetPath(AutosavePath); // Paths m_szKbdFile = conf.Read<mpt::PathString>("Paths", "Key_Config_File", mpt::PathString()); conf.Forget("Paths", "Key_Config_File"); @@ -896,18 +890,6 @@ conf.Write<uint32>("Display", mpt::String::Print("Color%1", mpt::fmt::dec0<2>(ncol)), rgbCustomColors[ncol]); } - // AutoSave - mpt::PathString path = CMainFrame::m_pAutoSaver->GetPath(); - if(theApp.IsPortableMode()) - { - path = theApp.AbsolutePathToRelative(path); - } - AutosaveEnabled = CMainFrame::m_pAutoSaver->IsEnabled(); - AutosaveIntervalMinutes = CMainFrame::m_pAutoSaver->GetSaveInterval(); - AutosaveHistoryDepth = CMainFrame::m_pAutoSaver->GetHistoryDepth(); - AutosaveUseOriginalPath = CMainFrame::m_pAutoSaver->GetUseOriginalPath(); - AutosavePath = path; - // Paths // Obsolete, since we always write to Keybindings.mkb now. // Older versions of OpenMPT 1.18+ will look for this file if this entry is missing, so removing this entry after having read it is kind of backwards compatible. Modified: trunk/OpenMPT/mptrack/TrackerSettings.h =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.h 2015-06-08 14:21:37 UTC (rev 5273) +++ trunk/OpenMPT/mptrack/TrackerSettings.h 2015-06-08 15:04:34 UTC (rev 5274) @@ -570,11 +570,11 @@ // AutoSave - Setting<bool> AutosaveEnabled; - Setting<uint32> AutosaveIntervalMinutes; - Setting<uint32> AutosaveHistoryDepth; - Setting<bool> AutosaveUseOriginalPath; - Setting<mpt::PathString> AutosavePath; + CachedSetting<bool> AutosaveEnabled; + CachedSetting<uint32> AutosaveIntervalMinutes; + CachedSetting<uint32> AutosaveHistoryDepth; + CachedSetting<bool> AutosaveUseOriginalPath; + ConfigurableDirectory AutosavePath; // Paths This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |