From: <man...@us...> - 2015-05-28 08:27:27
|
Revision: 5198 http://sourceforge.net/p/modplug/code/5198 Author: manxorist Date: 2015-05-28 08:27:19 +0000 (Thu, 28 May 2015) Log Message: ----------- [Ref] Remove class TrackerDirectories. TrackerDirectories got introduced back in r3074 during the conversion to the Settings framework in order to break circular dependencies between TrackerSettings and SetupPaths. These dependencies have since been refactored and removed, thus there is no need for TrackerDirectories anymore. Merge them back into class TrackerSettings. [Ref] Move the relative/absolute and portable mode handling of configured directories into its own wrapper type instead of handling all directories in own global container class. This further reduces the amount of imperative code during TrackerSettings construction and destruction. Revision Links: -------------- http://sourceforge.net/p/modplug/code/3074 Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/ExternalSamples.cpp trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/Mptrack.h trunk/OpenMPT/mptrack/PathConfigDlg.cpp trunk/OpenMPT/mptrack/SelectPluginDialog.cpp trunk/OpenMPT/mptrack/TrackerSettings.cpp trunk/OpenMPT/mptrack/TrackerSettings.h trunk/OpenMPT/mptrack/TuningDialog.cpp trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/WelcomeDialog.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/plugins/PluginManager.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -1466,7 +1466,7 @@ EndWaitCursor(); if (bOk) { - TrackerDirectories::Instance().SetWorkingDirectory(fileName, DIR_INSTRUMENTS, true); + TrackerSettings::Instance().PathInstruments.SetWorkingDir(fileName, true); ModInstrument *pIns = m_sndFile.Instruments[m_nInstrument]; if (pIns) { @@ -1732,11 +1732,11 @@ "SoundFont 2.0 Banks (*.sf2)|*.sf2;*.sbk|" "DLS Sound Banks (*.dls)|*.dls|" "All Files (*.*)|*.*||") - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_INSTRUMENTS)) + .WorkingDirectory(TrackerSettings::Instance().PathInstruments.GetWorkingDir()) .FilterIndex(&nLastIndex); if(!dlg.Show(this)) return; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_INSTRUMENTS); + TrackerSettings::Instance().PathInstruments.SetWorkingDir(dlg.GetWorkingDirectory()); const FileDialog::PathList &files = dlg.GetFilenames(); for(size_t counter = 0; counter < files.size(); counter++) @@ -1791,7 +1791,7 @@ "Compressed Impulse Tracker Instruments (*.iti)|*.iti|" "Impulse Tracker Instruments with external Samples (*.iti)|*.iti|" "FastTracker II Instruments (*.xi)|*.xi||") - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_INSTRUMENTS)) + .WorkingDirectory(TrackerSettings::Instance().PathInstruments.GetWorkingDir()) .FilterIndex(&index); if(!dlg.Show(this)) return; @@ -1807,7 +1807,7 @@ if (!ok) ErrorBox(IDS_ERR_SAVEINS, this); else - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_INSTRUMENTS); + TrackerSettings::Instance().PathInstruments.SetWorkingDir(dlg.GetWorkingDirectory()); SwitchToView(); } Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -895,7 +895,7 @@ EndWaitCursor(); if (bOk) { - TrackerDirectories::Instance().SetWorkingDirectory(fileName, DIR_SAMPLES, true); + TrackerSettings::Instance().PathSamples.SetWorkingDir(fileName, true); if (!sample.filename[0]) { mpt::PathString name, ext; @@ -1031,11 +1031,11 @@ "AIFF Files (*.aiff;*.8svx)|*.aif;*.aiff;*.iff;*.8sv;*.8svx;*.svx|" "Raw Samples (*.raw,*.snd,*.pcm)|*.raw;*.snd;*.pcm|" "All Files (*.*)|*.*||") - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_SAMPLES)) + .WorkingDirectory(TrackerSettings::Instance().PathSamples.GetWorkingDir()) .FilterIndex(&nLastIndex); if(!dlg.Show(this)) return; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_SAMPLES); + TrackerSettings::Instance().PathSamples.SetWorkingDir(dlg.GetWorkingDirectory()); const FileDialog::PathList &files = dlg.GetFilenames(); for(size_t counter = 0; counter < files.size(); counter++) @@ -1112,7 +1112,7 @@ .ExtensionFilter("Wave File (*.wav)|*.wav|" "FLAC File (*.flac)|*.flac|" "RAW Audio (*.raw)|*.raw||") - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_SAMPLES)) + .WorkingDirectory(TrackerSettings::Instance().PathSamples.GetWorkingDir()) .FilterIndex(&filter); if(!dlg.Show(this)) return; @@ -1189,7 +1189,7 @@ ErrorBox(IDS_ERR_SAVESMP, this); } else { - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_SAMPLES); + TrackerSettings::Instance().PathSamples.SetWorkingDir(dlg.GetWorkingDirectory()); } SwitchToView(); } Modified: trunk/OpenMPT/mptrack/ExternalSamples.cpp =================================================================== --- trunk/OpenMPT/mptrack/ExternalSamples.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/ExternalSamples.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -105,11 +105,11 @@ if(TrackerSettings::Instance().previewInFileDialogs) dlg.EnableAudioPreview(); if(path.empty()) - dlg.WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_SAMPLES)); + dlg.WorkingDirectory(TrackerSettings::Instance().PathSamples.GetWorkingDir()); else dlg.DefaultFilename(path); if(!dlg.Show()) return; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_SAMPLES); + TrackerSettings::Instance().PathSamples.SetWorkingDir(dlg.GetWorkingDirectory()); SetSample(smp, dlg.GetFirstFile()); modDoc.UpdateAllViews(nullptr, SampleHint(smp).Info().Names().Data()); @@ -126,10 +126,10 @@ return; } - BrowseForFolder dlg(TrackerDirectories::Instance().GetWorkingDirectory(DIR_SAMPLES), _T("Select a folder to search for missing samples...")); + BrowseForFolder dlg(TrackerSettings::Instance().PathSamples.GetWorkingDir(), _T("Select a folder to search for missing samples...")); if(dlg.Show()) { - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetDirectory(), DIR_SAMPLES); + TrackerSettings::Instance().PathSamples.SetWorkingDir(dlg.GetDirectory()); FolderScanner scan(dlg.GetDirectory(), true); mpt::PathString fileName; Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -1743,11 +1743,11 @@ //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ { // will also set working directory - TrackerDirectories::Instance().SetDefaultDirectory(szModDir, DIR_MODS); - TrackerDirectories::Instance().SetDefaultDirectory(szSampleDir, DIR_SAMPLES); - TrackerDirectories::Instance().SetDefaultDirectory(szInstrDir, DIR_INSTRUMENTS); - TrackerDirectories::Instance().SetDefaultDirectory(szVstDir, DIR_PLUGINS); - TrackerDirectories::Instance().SetDefaultDirectory(szPresetDir, DIR_PLUGINPRESETS); + TrackerSettings::Instance().PathSongs.SetDefaultDir(szModDir); + TrackerSettings::Instance().PathSamples.SetDefaultDir(szSampleDir); + TrackerSettings::Instance().PathInstruments.SetDefaultDir(szInstrDir); + TrackerSettings::Instance().PathPlugins.SetDefaultDir(szVstDir); + TrackerSettings::Instance().PathPluginPresets.SetDefaultDir(szPresetDir); return TRUE; } @@ -2803,7 +2803,7 @@ pMenu->InsertMenu(firstMenu, MF_STRING | MF_BYPOSITION, ID_MRU_LIST_FIRST, _T("Recent File")); } else { - const mpt::PathString workDir = TrackerDirectories::Instance().GetWorkingDirectory(DIR_MODS); + const mpt::PathString workDir = TrackerSettings::Instance().PathSongs.GetWorkingDir(); for(size_t i = 0; i < TrackerSettings::Instance().mruFiles.size(); i++) { Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -619,10 +619,10 @@ .DefaultExtension(defaultExtension) .DefaultFilename(defaultSaveName) .ExtensionFilter(ModTypeToFilter(m_SndFile)) - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_MODS)); + .WorkingDirectory(TrackerSettings::Instance().PathSongs.GetWorkingDir()); if(!dlg.Show()) return FALSE; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_MODS); + TrackerSettings::Instance().PathSongs.SetWorkingDir(dlg.GetWorkingDirectory()); saveFileName = dlg.GetFirstFile(); } else @@ -1681,11 +1681,11 @@ .DefaultExtension(extension) .DefaultFilename(GetPathNameMpt().GetFileName() + MPT_PATHSTRING(".") + extension) .ExtensionFilter(encFactory->GetTraits().fileDescription + MPT_USTRING(" (*.") + extension.ToUnicode() + MPT_USTRING(")|*.") + extension.ToUnicode() + MPT_USTRING("||")) - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_EXPORT)); + .WorkingDirectory(TrackerSettings::Instance().PathExport.GetWorkingDir()); if(!dlg.Show()) return; // will set default dir here because there's no setup option for export dir yet (feel free to add one...) - TrackerDirectories::Instance().SetDefaultDirectory(dlg.GetWorkingDirectory(), DIR_EXPORT, true); + TrackerSettings::Instance().PathExport.SetDefaultDir(dlg.GetWorkingDirectory(), true); mpt::PathString drive, dir, name, ext; dlg.GetFirstFile().SplitPath(&drive, &dir, &name, &ext); @@ -1966,7 +1966,7 @@ .DefaultExtension(ext) .DefaultFilename(filename) .ExtensionFilter(pattern) - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_MODS)); + .WorkingDirectory(TrackerSettings::Instance().PathSongs.GetWorkingDir()); if(!dlg.Show()) return; ScopedLogCapturer logcapturer(*this); @@ -2888,7 +2888,7 @@ //---------------------------------- { // Create template folder if doesn't exist already. - const mpt::PathString templateFolder = TrackerDirectories::Instance().GetDefaultDirectory(DIR_TEMPLATE_FILES_USER); + const mpt::PathString templateFolder = TrackerSettings::Instance().PathUserTemplates.GetDefaultDir(); if (!templateFolder.IsDirectory()) { if (!CreateDirectoryW(templateFolder.AsNative().c_str(), nullptr)) Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -645,7 +645,6 @@ CTrackApp::CTrackApp() //-------------------- : m_GuiThreadId(0) - , m_pTrackerDirectories(nullptr) , m_pSettingsIniFile(nullptr) , m_pSongSettings(nullptr) , m_pSettings(nullptr) @@ -942,13 +941,12 @@ m_pSettingsIniFile = new IniFileSettingsBackend(m_szConfigFileName); m_pSettings = new SettingsContainer(m_pSettingsIniFile); - m_pTrackerDirectories = new TrackerDirectories(); m_pTrackerSettings = new TrackerSettings(*m_pSettings); // Create missing diretories - if(!TrackerDirectories::Instance().GetDefaultDirectory(DIR_TUNING).IsDirectory()) + if(!TrackerSettings::Instance().PathTunings.GetDefaultDir().IsDirectory()) { - CreateDirectoryW(TrackerDirectories::Instance().GetDefaultDirectory(DIR_TUNING).AsNative().c_str(), 0); + CreateDirectoryW(TrackerSettings::Instance().PathTunings.GetDefaultDir().AsNative().c_str(), 0); } m_pSongSettingsIniFile = new IniFileSettingsBackend(m_szConfigDirectory + MPT_PATHSTRING("SongSettings.ini")); @@ -1151,8 +1149,6 @@ m_pComponentManagerSettings = nullptr; delete m_pTrackerSettings; m_pTrackerSettings = nullptr; - delete m_pTrackerDirectories; - m_pTrackerDirectories = nullptr; delete m_pSettings; m_pSettings = nullptr; delete m_pSettingsIniFile; @@ -1299,11 +1295,11 @@ "Wave Files (*.wav)|*.wav|" "MIDI Files (*.mid,*.rmi)|*.mid;*.rmi;*.smf|" "All Files (*.*)|*.*||") - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_MODS)) + .WorkingDirectory(TrackerSettings::Instance().PathSongs.GetWorkingDir()) .FilterIndex(&nFilterIndex); if(!dlg.Show()) return; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_MODS); + TrackerSettings::Instance().PathSongs.SetWorkingDir(dlg.GetWorkingDirectory()); files = dlg.GetFilenames(); } Modified: trunk/OpenMPT/mptrack/Mptrack.h =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.h 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/Mptrack.h 2015-05-28 08:27:19 UTC (rev 5198) @@ -28,7 +28,6 @@ class Manager; } // namespace SoundDevice class CDLSBank; -class TrackerDirectories; class TrackerSettings; class ComponentManagerSettings; @@ -204,7 +203,6 @@ IniFileSettingsBackend *m_pSettingsIniFile; SettingsContainer *m_pSettings; - TrackerDirectories *m_pTrackerDirectories; TrackerSettings *m_pTrackerSettings; IniFileSettingsBackend *m_pSongSettingsIniFile; SettingsContainer *m_pSongSettings; @@ -258,11 +256,6 @@ void GetDefaultMidiMacro(MIDIMacroConfig &cfg) const { cfg = m_MidiCfg; } void SetDefaultMidiMacro(const MIDIMacroConfig &cfg) { m_MidiCfg = cfg; } mpt::PathString GetConfigFileName() const { return m_szConfigFileName; } - TrackerDirectories & GetTrackerDirectories() - { - ASSERT(m_pTrackerDirectories); - return *m_pTrackerDirectories; - } SettingsContainer & GetSettings() { ASSERT(m_pSettings); Modified: trunk/OpenMPT/mptrack/PathConfigDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/PathConfigDlg.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/PathConfigDlg.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -61,11 +61,11 @@ CPropertyPage::OnInitDialog(); // Paths - ::SetDlgItemTextW(m_hWnd, IDC_OPTIONS_DIR_MODS, TrackerDirectories::Instance().GetDefaultDirectory(DIR_MODS).AsNative().c_str()); - ::SetDlgItemTextW(m_hWnd, IDC_OPTIONS_DIR_SAMPS, TrackerDirectories::Instance().GetDefaultDirectory(DIR_SAMPLES).AsNative().c_str()); - ::SetDlgItemTextW(m_hWnd, IDC_OPTIONS_DIR_INSTS, TrackerDirectories::Instance().GetDefaultDirectory(DIR_INSTRUMENTS).AsNative().c_str()); - ::SetDlgItemTextW(m_hWnd, IDC_OPTIONS_DIR_VSTS, TrackerDirectories::Instance().GetDefaultDirectory(DIR_PLUGINS).AsNative().c_str()); - ::SetDlgItemTextW(m_hWnd, IDC_OPTIONS_DIR_VSTPRESETS, TrackerDirectories::Instance().GetDefaultDirectory(DIR_PLUGINPRESETS).AsNative().c_str()); + ::SetDlgItemTextW(m_hWnd, IDC_OPTIONS_DIR_MODS, TrackerSettings::Instance().PathSongs.GetDefaultDir().AsNative().c_str()); + ::SetDlgItemTextW(m_hWnd, IDC_OPTIONS_DIR_SAMPS, TrackerSettings::Instance().PathSamples.GetDefaultDir().AsNative().c_str()); + ::SetDlgItemTextW(m_hWnd, IDC_OPTIONS_DIR_INSTS, TrackerSettings::Instance().PathInstruments.GetDefaultDir().AsNative().c_str()); + ::SetDlgItemTextW(m_hWnd, IDC_OPTIONS_DIR_VSTS, TrackerSettings::Instance().PathPlugins.GetDefaultDir().AsNative().c_str()); + ::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); Modified: trunk/OpenMPT/mptrack/SelectPluginDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/SelectPluginDialog.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/SelectPluginDialog.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -549,10 +549,10 @@ .AllowMultiSelect() .DefaultExtension("dll") .ExtensionFilter("VST Plugins (*.dll)|*.dll||") - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_PLUGINS)); + .WorkingDirectory(TrackerSettings::Instance().PathPlugins.GetWorkingDir()); if(!dlg.Show(this)) return; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_PLUGINS); + TrackerSettings::Instance().PathPlugins.SetWorkingDir(dlg.GetWorkingDirectory()); CVstPluginManager *pManager = theApp.GetPluginManager(); @@ -619,10 +619,10 @@ void CSelectPluginDlg::OnScanFolder() //----------------------------------- { - BrowseForFolder dlg(TrackerDirectories::Instance().GetWorkingDirectory(DIR_PLUGINS), "Select a folder that should be scanned for VST plugins (including sub-folders)"); + BrowseForFolder dlg(TrackerSettings::Instance().PathPlugins.GetWorkingDir(), "Select a folder that should be scanned for VST plugins (including sub-folders)"); if(!dlg.Show(this)) return; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetDirectory(), DIR_PLUGINS); + TrackerSettings::Instance().PathPlugins.SetWorkingDir(dlg.GetDirectory()); VSTPluginLib *plugLib = ScanPlugins(dlg.GetDirectory(), this); UpdatePluginsList(plugLib ? plugLib->pluginId2 : 0); } Modified: trunk/OpenMPT/mptrack/TrackerSettings.cpp =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/TrackerSettings.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -37,16 +37,6 @@ #define OLD_SOUNDSETUP_NOBOOSTTHREADPRIORITY 0x80 -TrackerDirectories &TrackerDirectories::Instance() -//------------------------------------------------ -{ - return theApp.GetTrackerDirectories(); -} - - -const TCHAR *TrackerDirectories::m_szDirectoryToSettingsName[NUM_DIRS] = { _T("Songs_Directory"), _T("Samples_Directory"), _T("Instruments_Directory"), _T("Plugins_Directory"), _T("Plugin_Presets_Directory"), _T("Export_Directory"), _T(""), _T("") }; - - TrackerSettings &TrackerSettings::Instance() //------------------------------------------ { @@ -233,6 +223,15 @@ // Components , ComponentsLoadOnStartup(conf, "Components", "LoadOnStartup", ComponentManagerSettingsDefault().LoadOnStartup()) , ComponentsKeepLoaded(conf, "Components", "KeepLoaded", ComponentManagerSettingsDefault().KeepLoaded()) + // Paths + , PathSongs(conf, "Paths", "Songs_Directory", mpt::PathString()) + , PathSamples(conf, "Paths", "Samples_Directory", mpt::PathString()) + , PathInstruments(conf, "Paths", "Instruments_Directory", mpt::PathString()) + , PathPlugins(conf, "Paths", "Plugins_Directory", mpt::PathString()) + , PathPluginPresets(conf, "Paths", "Plugin_Presets_Directory", mpt::PathString()) + , PathExport(conf, "Paths", "Export_Directory", mpt::PathString()) + , PathTunings(theApp.GetConfigPath() + MPT_PATHSTRING("tunings\\")) + , PathUserTemplates(theApp.GetConfigPath() + MPT_PATHSTRING("TemplateModules\\")) // Default template , defaultTemplateFile(conf, "Paths", "DefaultTemplate", mpt::PathString()) , defaultArtist(conf, "Misc", "DefaultArtist", mpt::ToUnicode(mpt::CharsetLocale, std::getenv("USERNAME"))) @@ -294,19 +293,6 @@ CMainFrame::m_pAutoSaver->SetUseOriginalPath(conf.Read<bool>("AutoSave", "UseOriginalPath", CMainFrame::m_pAutoSaver->GetUseOriginalPath())); CMainFrame::m_pAutoSaver->SetPath(theApp.RelativePathToAbsolute(conf.Read<mpt::PathString>("AutoSave", "Path", CMainFrame::m_pAutoSaver->GetPath()))); // Paths - TrackerDirectories::Instance().SetDefaultDirectory(theApp.GetConfigPath() + MPT_PATHSTRING("tunings\\"), DIR_TUNING); - TrackerDirectories::Instance().SetDefaultDirectory(theApp.GetConfigPath() + MPT_PATHSTRING("TemplateModules\\"), DIR_TEMPLATE_FILES_USER); - for(size_t i = 0; i < NUM_DIRS; i++) - { - if(TrackerDirectories::Instance().m_szDirectoryToSettingsName[i][0] == '\0') - { - continue; - } - const CString settingKey = TrackerDirectories::Instance().m_szDirectoryToSettingsName[i]; - mpt::PathString path = conf.Read<mpt::PathString>(MPT_USTRING("Paths"), mpt::ToUnicode(settingKey), TrackerDirectories::Instance().GetDefaultDirectory(static_cast<Directory>(i))); - path = theApp.RelativePathToAbsolute(path); - TrackerDirectories::Instance().SetDefaultDirectory(path, static_cast<Directory>(i), false); - } m_szKbdFile = conf.Read<mpt::PathString>("Paths", "Key_Config_File", mpt::PathString()); conf.Forget("Paths", "Key_Config_File"); @@ -589,10 +575,6 @@ theApp.SetDefaultMidiMacro(macros); // Paths - for(size_t i = 0; i < NUM_DIRS; i++) - { - TrackerDirectories::Instance().m_szWorkingDirectory[i] = TrackerDirectories::Instance().m_szDefaultDirectory[i]; - } m_szKbdFile = theApp.RelativePathToAbsolute(m_szKbdFile); // Sample undo buffer size (used to be a hidden, absolute setting in MiB) @@ -912,19 +894,6 @@ conf.Write<mpt::PathString>("AutoSave", "Path", path); // Paths - for(size_t i = 0; i < NUM_DIRS; i++) - { - if(TrackerDirectories::Instance().m_szDirectoryToSettingsName[i][0] == '\0') - { - continue; - } - mpt::PathString path = TrackerDirectories::Instance().GetDefaultDirectory(static_cast<Directory>(i)); - if(theApp.IsPortableMode()) - { - path = theApp.AbsolutePathToRelative(path); - } - conf.Write<mpt::PathString>("Paths", TrackerDirectories::Instance().m_szDirectoryToSettingsName[i], path); - } // 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. conf.Remove("Paths", "Key_Config_File"); @@ -1075,83 +1044,84 @@ } -// Retrieve / set default directory from given string and store it our setup variables -// If stripFilename is true, the filenameFrom parameter is assumed to be a full path including a filename. -void TrackerDirectories::SetDirectory(const mpt::PathString &filenameFrom, Directory dir, mpt::PathString (&directories)[NUM_DIRS], bool stripFilename) -//----------------------------------------------------------------------------------------------------------------------------------------------------- +DefaultAndWorkingDirectory::DefaultAndWorkingDirectory() +//------------------------------------------------------ { - mpt::PathString path; + return; +} - if(stripFilename) - { - path = filenameFrom.GetPath(); - } else - { - path = filenameFrom; - } +DefaultAndWorkingDirectory::DefaultAndWorkingDirectory(const mpt::PathString &def) +//-------------------------------------------------------------------------------- + : m_Default(def) + , m_Working(def) +{ + return; +} - if(!path.empty() && !path.HasTrailingSlash()) - { - path += MPT_PATHSTRING("\\"); - } +DefaultAndWorkingDirectory::~DefaultAndWorkingDirectory() +//------------------------------------------------------- +{ + return; +} - const mpt::PathString oldDir = directories[dir]; // for comparison - - directories[dir] = path; - - // When updating default directory, also update the working directory. - if(!path.empty() && directories == m_szDefaultDirectory) +void DefaultAndWorkingDirectory::SetDefaultDir(const mpt::PathString &filenameFrom, bool stripFilename) +//----------------------------------------------------------------------------------------------------- +{ + if(InternalSet(m_Default, filenameFrom, stripFilename) && !m_Default.empty()) { - if(oldDir != path) // update only if default directory has changed - SetWorkingDirectory(path, dir); + // When updating default directory, also update the working directory. + InternalSet(m_Working, filenameFrom, stripFilename); } } - -void TrackerDirectories::SetDefaultDirectory(const mpt::PathString &szFilenameFrom, Directory dir, bool bStripFilename) -//--------------------------------------------------------------------------------------------------------------------- +void DefaultAndWorkingDirectory::SetWorkingDir(const mpt::PathString &filenameFrom, bool stripFilename) +//----------------------------------------------------------------------------------------------------- { - SetDirectory(szFilenameFrom, dir, m_szDefaultDirectory, bStripFilename); + InternalSet(m_Working, filenameFrom, stripFilename); } - -void TrackerDirectories::SetWorkingDirectory(const mpt::PathString &szFilenameFrom, Directory dir, bool bStripFilename) -//--------------------------------------------------------------------------------------------------------------------- +mpt::PathString DefaultAndWorkingDirectory::GetDefaultDir() const +//--------------------------------------------------------------- { - SetDirectory(szFilenameFrom, dir, m_szWorkingDirectory, bStripFilename); + return m_Default; } - -// Get slash-terminated default directory of given type. -mpt::PathString TrackerDirectories::GetDefaultDirectory(Directory dir) const -//-------------------------------------------------------------------------- +mpt::PathString DefaultAndWorkingDirectory::GetWorkingDir() const +//--------------------------------------------------------------- { - return m_szDefaultDirectory[dir]; + return m_Working; } - -// Get slash-terminated working directory of given type. -mpt::PathString TrackerDirectories::GetWorkingDirectory(Directory dir) const -//-------------------------------------------------------------------------- +// Retrieve / set default directory from given string and store it our setup variables +// If stripFilename is true, the filenameFrom parameter is assumed to be a full path including a filename. +// Return true if the value changed. +bool DefaultAndWorkingDirectory::InternalSet(mpt::PathString &dest, const mpt::PathString &filenameFrom, bool stripFilename) +//-------------------------------------------------------------------------------------------------------------------------- { - return m_szWorkingDirectory[dir]; + mpt::PathString newPath = (stripFilename ? filenameFrom.GetPath() : filenameFrom); + if(!newPath.empty() && !newPath.HasTrailingSlash()) + { + newPath += MPT_PATHSTRING("\\"); + } + mpt::PathString oldPath = dest; + dest = newPath; + return newPath != oldPath; } - - - -TrackerDirectories::TrackerDirectories() -//-------------------------------------- +ConfigurableDirectory::ConfigurableDirectory(SettingsContainer &conf, const AnyStringLocale §ion, const AnyStringLocale &key, const mpt::PathString &def) +//----------------------------------------------------------------------------------------------------------------------------------------------------------- + : conf(conf) + , m_Setting(conf, section, key, def) { - return; + SetDefaultDir(theApp.RelativePathToAbsolute(m_Setting), false); } - -TrackerDirectories::~TrackerDirectories() -//--------------------------------------- +ConfigurableDirectory::~ConfigurableDirectory() +//--------------------------------------------- { - return; + m_Setting = theApp.IsPortableMode() ? theApp.AbsolutePathToRelative(m_Default) : m_Default; } + OPENMPT_NAMESPACE_END Modified: trunk/OpenMPT/mptrack/TrackerSettings.h =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.h 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/TrackerSettings.h 2015-05-28 08:27:19 UTC (rev 5198) @@ -28,23 +28,7 @@ OPENMPT_NAMESPACE_BEGIN -///////////////////////////////////////////////////////////////////////// -// Default directories -enum Directory -{ - DIR_MODS = 0, - DIR_SAMPLES, - DIR_INSTRUMENTS, - DIR_PLUGINS, - DIR_PLUGINPRESETS, - DIR_EXPORT, - DIR_TUNING, - DIR_TEMPLATE_FILES_USER, - NUM_DIRS -}; - - // User-defined colors enum { @@ -387,6 +371,37 @@ return setting; } + +class DefaultAndWorkingDirectory +{ +protected: + mpt::PathString m_Default; + mpt::PathString m_Working; +public: + DefaultAndWorkingDirectory(); + DefaultAndWorkingDirectory(const mpt::PathString &def); + ~DefaultAndWorkingDirectory(); +public: + void SetDefaultDir(const mpt::PathString &filenameFrom, bool stripFilename = false); + void SetWorkingDir(const mpt::PathString &filenameFrom, bool stripFilename = false); + mpt::PathString GetDefaultDir() const; + mpt::PathString GetWorkingDir() const; +private: + bool InternalSet(mpt::PathString &dest, const mpt::PathString &filenameFrom, bool stripFilename); +}; + +class ConfigurableDirectory + : public DefaultAndWorkingDirectory +{ +protected: + SettingsContainer &conf; + Setting<mpt::PathString> m_Setting; +public: + ConfigurableDirectory(SettingsContainer &conf, const AnyStringLocale §ion, const AnyStringLocale &key, const mpt::PathString &def); + ~ConfigurableDirectory(); +}; + + //=================== class TrackerSettings //=================== @@ -554,6 +569,14 @@ // Paths + ConfigurableDirectory PathSongs; + ConfigurableDirectory PathSamples; + ConfigurableDirectory PathInstruments; + ConfigurableDirectory PathPlugins; + ConfigurableDirectory PathPluginPresets; + ConfigurableDirectory PathExport; + DefaultAndWorkingDirectory PathTunings; + DefaultAndWorkingDirectory PathUserTemplates; mpt::PathString m_szKbdFile; // Default template @@ -608,37 +631,5 @@ }; -//====================== -class TrackerDirectories -//====================== -{ - friend class TrackerSettings; -private: - // Directory Arrays (default dir + last dir) - mpt::PathString m_szDefaultDirectory[NUM_DIRS]; - mpt::PathString m_szWorkingDirectory[NUM_DIRS]; - // Directory to INI setting translation - static const TCHAR *m_szDirectoryToSettingsName[NUM_DIRS]; - -public: - - TrackerDirectories(); - ~TrackerDirectories(); - - // access to default + working directories - void SetWorkingDirectory(const mpt::PathString &filenameFrom, Directory dir, bool stripFilename = false); - mpt::PathString GetWorkingDirectory(Directory dir) const; - void SetDefaultDirectory(const mpt::PathString &filenameFrom, Directory dir, bool stripFilename = false); - mpt::PathString GetDefaultDirectory(Directory dir) const; - - static TrackerDirectories &Instance(); - -protected: - - void SetDirectory(const mpt::PathString &szFilenameFrom, Directory dir, mpt::PathString (&pDirs)[NUM_DIRS], bool bStripFilename); - -}; - - OPENMPT_NAMESPACE_END Modified: trunk/OpenMPT/mptrack/TuningDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/TuningDialog.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/TuningDialog.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -631,7 +631,7 @@ FileDialog dlg = SaveFileDialog() .DefaultExtension(CTuning::s_FileExtension) .ExtensionFilter(filter) - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_TUNING)) + .WorkingDirectory(TrackerSettings::Instance().PathTunings.GetWorkingDir()) .FilterIndex(&filterIndex); if(!dlg.Show(this)) return; @@ -672,11 +672,11 @@ FileDialog dlg = OpenFileDialog() .AllowMultiSelect() .ExtensionFilter(sFilter) - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_TUNING)); + .WorkingDirectory(TrackerSettings::Instance().PathTunings.GetWorkingDir()); if(!dlg.Show(this)) return; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_TUNING); + TrackerSettings::Instance().PathTunings.SetWorkingDir(dlg.GetWorkingDirectory()); std::wstring sLoadReport; Modified: trunk/OpenMPT/mptrack/View_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_ins.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/View_ins.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -2552,9 +2552,9 @@ FileDialog dlg = OpenFileDialog() .DefaultExtension("envelope") .ExtensionFilter("Instrument Envelopes (*.envelope)|*.envelope||") - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_INSTRUMENTS)); + .WorkingDirectory(TrackerSettings::Instance().PathInstruments.GetWorkingDir()); if(!dlg.Show(this)) return; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_INSTRUMENTS); + TrackerSettings::Instance().PathInstruments.SetWorkingDir(dlg.GetWorkingDirectory()); if(GetDocument()->LoadEnvelope(m_nInstrument, m_nEnv, dlg.GetFirstFile())) { @@ -2576,9 +2576,9 @@ FileDialog dlg = SaveFileDialog() .DefaultExtension("envelope") .ExtensionFilter("Instrument Envelopes (*.envelope)|*.envelope||") - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_INSTRUMENTS)); + .WorkingDirectory(TrackerSettings::Instance().PathInstruments.GetWorkingDir()); if(!dlg.Show(this)) return; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_INSTRUMENTS); + TrackerSettings::Instance().PathInstruments.SetWorkingDir(dlg.GetWorkingDirectory()); if(!GetDocument()->SaveEnvelope(m_nInstrument, m_nEnv, dlg.GetFirstFile())) { Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -200,10 +200,14 @@ if(!IsSampleBrowser()) { - const Directory dirs[] = { DIR_SAMPLES, DIR_INSTRUMENTS, DIR_MODS }; + const mpt::PathString dirs[] = { + TrackerSettings::Instance().PathSamples.GetDefaultDir(), + TrackerSettings::Instance().PathInstruments.GetDefaultDir(), + TrackerSettings::Instance().PathSongs.GetDefaultDir() + }; for(int i = 0; i < CountOf(dirs); i++) { - m_InstrLibPath = TrackerDirectories::Instance().GetDefaultDirectory(dirs[i]); + m_InstrLibPath = dirs[i]; if(!m_InstrLibPath.empty()) { break; @@ -3228,11 +3232,11 @@ FileDialog dlg = OpenFileDialog() .ExtensionFilter("All Samples|*.wav;*.flac|All files(*.*)|*.*||"); // Only show samples that we actually can save as well. if(path.empty()) - dlg.WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_SAMPLES)); + dlg.WorkingDirectory(TrackerSettings::Instance().PathSamples.GetWorkingDir()); else dlg.DefaultFilename(path); if(!dlg.Show()) return; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_SAMPLES); + TrackerSettings::Instance().PathSamples.SetWorkingDir(dlg.GetWorkingDirectory()); if(dlg.GetFirstFile() != pModDoc->GetrSoundFile().GetSamplePath(smpID)) { Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -406,7 +406,7 @@ //Log("VST plugin to host: Get Directory\n"); // Need to allocate space for path only, but I guess noone relies on this anyway. //return ToVstPtr(pVstPlugin->GetPluginFactory().szDllPath); - //return ToVstPtr(TrackerDirectories::Instance().GetDefaultDirectory(DIR_PLUGINS)); + //return ToVstPtr(TrackerSettings::Instance().PathPlugins.GetDefaultDir()); break; // something has changed, update 'multi-fx' display @@ -524,7 +524,7 @@ } else { // Plugins are probably looking for presets...? - //workingDir = TrackerDirectories::Instance().GetWorkingDirectory(DIR_PLUGINPRESETS); + //workingDir = TrackerSettings::Instance().PathPluginPresets.GetWorkingDir(); } FileDialog dlg = OpenFileDialog(); @@ -977,7 +977,7 @@ bool CVstPlugin::SaveProgram() //---------------------------- { - mpt::PathString defaultDir = TrackerDirectories::Instance().GetWorkingDirectory(DIR_PLUGINPRESETS); + mpt::PathString defaultDir = TrackerSettings::Instance().PathPluginPresets.GetWorkingDir(); bool useDefaultDir = !defaultDir.empty(); if(!useDefaultDir) { @@ -999,7 +999,7 @@ if(useDefaultDir) { - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_PLUGINPRESETS); + TrackerSettings::Instance().PathPluginPresets.SetWorkingDir(dlg.GetWorkingDirectory()); } bool bank = (dlg.GetExtension() == MPT_PATHSTRING("fxb")); @@ -1020,7 +1020,7 @@ bool CVstPlugin::LoadProgram(mpt::PathString fileName) //---------------------------------------------------- { - mpt::PathString defaultDir = TrackerDirectories::Instance().GetWorkingDirectory(DIR_PLUGINPRESETS); + mpt::PathString defaultDir = TrackerSettings::Instance().PathPluginPresets.GetWorkingDir(); bool useDefaultDir = !defaultDir.empty(); if(!useDefaultDir) { @@ -1040,7 +1040,7 @@ if(useDefaultDir) { - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_PLUGINPRESETS); + TrackerSettings::Instance().PathPluginPresets.SetWorkingDir(dlg.GetWorkingDirectory()); } fileName = dlg.GetFirstFile(); } Modified: trunk/OpenMPT/mptrack/WelcomeDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/WelcomeDialog.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/WelcomeDialog.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -68,9 +68,9 @@ if(!vstPath.empty()) { ::SetDlgItemTextW(m_hWnd, IDC_EDIT1, vstPath.AsNative().c_str()); - if(TrackerDirectories::Instance().GetDefaultDirectory(DIR_PLUGINS).empty()) + if(TrackerSettings::Instance().PathPlugins.GetDefaultDir().empty()) { - TrackerDirectories::Instance().SetDefaultDirectory(vstPath, DIR_PLUGINS); + TrackerSettings::Instance().PathPlugins.SetDefaultDir(vstPath); } } else { Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -1629,7 +1629,7 @@ // Load local tunings. s_pTuningsSharedLocal->SetSavefilePath( - TrackerDirectories::Instance().GetDefaultDirectory(DIR_TUNING) + TrackerSettings::Instance().PathTunings.GetDefaultDir() + MPT_PATHSTRING("local_tunings") + mpt::PathString::FromUTF8(CTuningCollection::s_FileExtension) ); Modified: trunk/OpenMPT/soundlib/plugins/PluginManager.cpp =================================================================== --- trunk/OpenMPT/soundlib/plugins/PluginManager.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/soundlib/plugins/PluginManager.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -526,7 +526,7 @@ if(!pFound && strcmp(mixPlugin.GetLibraryName(), "")) { // Try finding the plugin DLL in the plugin directory or plugin cache instead. - mpt::PathString fullPath = TrackerDirectories::Instance().GetDefaultDirectory(DIR_PLUGINS); + mpt::PathString fullPath = TrackerSettings::Instance().PathPlugins.GetDefaultDir(); if(fullPath.empty()) { fullPath = theApp.GetAppDirPath() + MPT_PATHSTRING("Plugins\\"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |