From: <man...@us...> - 2013-11-08 21:58:41
|
Revision: 3137 http://sourceforge.net/p/modplug/code/3137 Author: manxorist Date: 2013-11-08 21:58:32 +0000 (Fri, 08 Nov 2013) Log Message: ----------- [Fix] Make FileDialog work with unicode paths. [Ref] Convert TrackerDirectories completely to mpt::PathString. [Ref] Resulting conversions from these changes all over the place. Modified Paths: -------------- trunk/OpenMPT/common/mptString.h trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/FileDialog.cpp trunk/OpenMPT/mptrack/FileDialog.h trunk/OpenMPT/mptrack/KeyConfigDlg.cpp trunk/OpenMPT/mptrack/KeyConfigDlg.h trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moptions.cpp trunk/OpenMPT/mptrack/Mptrack.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_tre.cpp trunk/OpenMPT/mptrack/Vstplug.cpp Modified: trunk/OpenMPT/common/mptString.h =================================================================== --- trunk/OpenMPT/common/mptString.h 2013-11-08 18:34:48 UTC (rev 3136) +++ trunk/OpenMPT/common/mptString.h 2013-11-08 21:58:32 UTC (rev 3137) @@ -228,6 +228,10 @@ return a.AsNative() != b.AsNative(); } bool empty() const { return path.empty(); } + const RawPathString &NativeRef() const + { + return path; + } public: Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2013-11-08 18:34:48 UTC (rev 3136) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2013-11-08 21:58:32 UTC (rev 3137) @@ -1439,7 +1439,7 @@ { TCHAR szName[_MAX_FNAME], szExt[_MAX_EXT]; _tsplitpath(lpszFileName, nullptr, nullptr, szName, szExt); - TrackerDirectories::Instance().SetWorkingDirectory(lpszFileName, DIR_INSTRUMENTS, true); + TrackerDirectories::Instance().SetWorkingDirectory(mpt::PathString::FromCString(lpszFileName), DIR_INSTRUMENTS, true); if (!pIns->name[0] && m_sndFile.GetModSpecifications().instrNameLengthMax > 0) { @@ -1693,7 +1693,7 @@ .FilterIndex(&nLastIndex); if(!dlg.Show()) return; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory().c_str(), DIR_INSTRUMENTS, true); + TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_INSTRUMENTS, true); const FileDialog::PathList &files = dlg.GetFilenames(); for(size_t counter = 0; counter < files.size(); counter++) @@ -1711,7 +1711,7 @@ OnInstrumentNew(); } - if(!OpenInstrument(files[counter].c_str())) + if(!OpenInstrument(files[counter].ToCString())) ErrorBox(IDS_ERR_FILEOPEN, this); } @@ -1753,16 +1753,16 @@ BeginWaitCursor(); - _splitpath(dlg.GetFirstFile().c_str(), drive, path, NULL, ext); + _splitpath(dlg.GetFirstFile().ToLocale().c_str(), drive, path, NULL, ext); bool ok = false; if (!lstrcmpi(ext, ".iti")) - ok = m_sndFile.SaveITIInstrument(m_nInstrument, dlg.GetFirstFile().c_str(), index == (m_sndFile.GetType() == MOD_TYPE_XM ? 3 : 2)); + ok = m_sndFile.SaveITIInstrument(m_nInstrument, dlg.GetFirstFile().ToLocale().c_str(), index == (m_sndFile.GetType() == MOD_TYPE_XM ? 3 : 2)); else - ok = m_sndFile.SaveXIInstrument(m_nInstrument, dlg.GetFirstFile().c_str()); + ok = m_sndFile.SaveXIInstrument(m_nInstrument, dlg.GetFirstFile().ToLocale().c_str()); // -> CODE#0023 // -> DESC="IT project files (.itp)" - m_sndFile.m_szInstrumentPath[m_nInstrument - 1] = dlg.GetFirstFile(); + m_sndFile.m_szInstrumentPath[m_nInstrument - 1] = dlg.GetFirstFile().ToLocale(); SetInstrumentModified(false); // -! NEW_FEATURE#0023 @@ -1772,7 +1772,7 @@ strcpy(szFileName, drive); strcat(szFileName, path); - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory().c_str(), DIR_INSTRUMENTS); + TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_INSTRUMENTS); // -> CODE#0023 // -> DESC="IT project files (.itp)" Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2013-11-08 18:34:48 UTC (rev 3136) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2013-11-08 21:58:32 UTC (rev 3137) @@ -819,7 +819,7 @@ if (bOk) { ModSample &sample = m_sndFile.GetSample(m_nSample); - TrackerDirectories::Instance().SetWorkingDirectory(lpszFileName, DIR_SAMPLES, true); + TrackerDirectories::Instance().SetWorkingDirectory(mpt::PathString::FromLocale(lpszFileName), DIR_SAMPLES, true); if (!sample.filename[0]) { CHAR szName[_MAX_PATH], szExt[_MAX_EXT]; @@ -965,7 +965,7 @@ .FilterIndex(&nLastIndex); if(!dlg.Show()) return; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory().c_str(), DIR_SAMPLES, true); + TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_SAMPLES, true); const FileDialog::PathList &files = dlg.GetFilenames(); for(size_t counter = 0; counter < files.size(); counter++) @@ -976,7 +976,7 @@ OnSampleNew(); } - if(!OpenSample(files[counter].c_str())) + if(!OpenSample(files[counter].ToCString())) ErrorBox(IDS_ERR_FILEOPEN, this); } SwitchToView(); @@ -1048,11 +1048,11 @@ BeginWaitCursor(); TCHAR ext[_MAX_EXT]; - _splitpath(dlg.GetFirstFile().c_str(), NULL, NULL, NULL, ext); + mpt::String::Copy(ext, dlg.GetFirstFile().GetFileExt().ToCString().GetString()); bool bOk = false; SAMPLEINDEX iMinSmp = m_nSample, iMaxSmp = m_nSample; - CString sFilename = dlg.GetFirstFile().c_str(), sNumberFormat; + CString sFilename = dlg.GetFirstFile().ToCString(), sNumberFormat; if(doBatchSave) { iMinSmp = 1; @@ -1075,7 +1075,7 @@ SanitizeFilename(sSampleName); SanitizeFilename(sSampleFilename); - sFilename = dlg.GetFirstFile().c_str(); + sFilename = dlg.GetFirstFile().ToCString(); sFilename.Replace("%sample_number%", sSampleNumber); sFilename.Replace("%sample_filename%", sSampleFilename); sFilename.Replace("%sample_name%", sSampleName); @@ -1095,7 +1095,7 @@ ErrorBox(IDS_ERR_SAVESMP, this); } else { - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory().c_str(), DIR_SAMPLES, true); + TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_SAMPLES, true); } SwitchToView(); } Modified: trunk/OpenMPT/mptrack/FileDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/FileDialog.cpp 2013-11-08 18:34:48 UTC (rev 3136) +++ trunk/OpenMPT/mptrack/FileDialog.cpp 2013-11-08 21:58:32 UTC (rev 3137) @@ -27,14 +27,14 @@ extFilter.push_back(0); // Prepare filename buffer. - std::vector<TCHAR> filenameBuffer(uint16_max, 0); + std::vector<WCHAR> filenameBuffer(uint16_max, 0); filenameBuffer.insert(filenameBuffer.begin(), defaultFilename.begin(), defaultFilename.end()); filenameBuffer.push_back(0); // First, set up the dialog... - OPENFILENAME ofn; + OPENFILENAMEW ofn; MemsetZero(ofn); - ofn.lStructSize = sizeof(OPENFILENAME); + ofn.lStructSize = sizeof(OPENFILENAMEW); ofn.hwndOwner = theApp.m_pMainWnd->GetSafeHwnd(); ofn.hInstance = theApp.m_hInstance; ofn.lpstrFilter = extFilter.c_str(); @@ -45,7 +45,7 @@ ofn.nMaxFile = filenameBuffer.size(); ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; - ofn.lpstrInitialDir = workingDirectory.empty() ? NULL : workingDirectory.c_str(); + ofn.lpstrInitialDir = workingDirectory.empty() ? NULL : workingDirectory.NativeRef().c_str(); ofn.lpstrTitle = NULL; ofn.Flags = OFN_EXPLORER | OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | (multiSelect ? OFN_ALLOWMULTISELECT : 0) | (load ? 0 : (OFN_OVERWRITEPROMPT | OFN_NOREADONLYRETURN)); ofn.nFileOffset = 0; @@ -60,7 +60,7 @@ // Do it! CMainFrame::GetInputHandler()->Bypass(true); - BOOL result = load ? GetOpenFileName(&ofn) : GetSaveFileName(&ofn); + BOOL result = load ? GetOpenFileNameW(&ofn) : GetSaveFileNameW(&ofn); CMainFrame::GetInputHandler()->Bypass(false); if(result == FALSE) @@ -76,21 +76,21 @@ { // Multiple files might have been selected int pos = ofn.nFileOffset; - const TCHAR *currentFile = ofn.lpstrFile + pos; - TCHAR filePath[MAX_PATH + 1]; - lstrcpy(filePath, ofn.lpstrFile); - lstrcat(filePath, "\\"); + const WCHAR *currentFile = ofn.lpstrFile + pos; + WCHAR filePath[MAX_PATH + 1]; + lstrcpyW(filePath, ofn.lpstrFile); + lstrcatW(filePath, L"\\"); while(currentFile[0] != 0) { - lstrcpy(&filePath[ofn.nFileOffset], currentFile); - currentFile += lstrlen(currentFile) + 1; - filenames.push_back(filePath); + lstrcpyW(&filePath[ofn.nFileOffset], currentFile); + currentFile += lstrlenW(currentFile) + 1; + filenames.push_back(mpt::PathString::FromNative(filePath)); } } else { // Only one file - filenames.push_back(ofn.lpstrFile); + filenames.push_back(mpt::PathString::FromNative(ofn.lpstrFile)); } if(filenames.empty()) @@ -98,8 +98,8 @@ return false; } - workingDirectory = filenames.front().substr(0, ofn.nFileOffset); - defaultExtension = filenames.front().substr(ofn.nFileExtension); + workingDirectory = mpt::PathString::FromNative(filenames.front().AsNative().substr(0, ofn.nFileOffset)); + extension = mpt::PathString::FromNative(filenames.front().AsNative().substr(ofn.nFileExtension)); return true; } Modified: trunk/OpenMPT/mptrack/FileDialog.h =================================================================== --- trunk/OpenMPT/mptrack/FileDialog.h 2013-11-08 18:34:48 UTC (rev 3136) +++ trunk/OpenMPT/mptrack/FileDialog.h 2013-11-08 21:58:32 UTC (rev 3137) @@ -16,14 +16,15 @@ class FileDialog { public: - typedef std::vector<std::string> PathList; + typedef std::vector<mpt::PathString> PathList; protected: - std::string defaultExtension; - std::string defaultFilename; - std::string extFilter; - std::string workingDirectory; - std::string lastPreviewFile; + std::wstring defaultExtension; + std::wstring defaultFilename; + std::wstring extFilter; + mpt::PathString workingDirectory; + mpt::PathString lastPreviewFile; + mpt::PathString extension; PathList filenames; int *filterIndex; bool load; @@ -34,13 +35,19 @@ public: // Default extension to use if none is specified. - FileDialog &DefaultExtension(const std::string &ext) { defaultExtension = ext; return *this; } + FileDialog &DefaultExtension(const mpt::PathString &ext) { defaultExtension = ext.ToWide(); return *this; } + FileDialog &DefaultExtension(const std::wstring &ext) { defaultExtension = ext; return *this; } + FileDialog &DefaultExtension(const std::string &ext) { defaultExtension = mpt::String::Decode(ext, mpt::CharsetLocale); return *this; } // Default suggested filename. - FileDialog &DefaultFilename(const std::string &name) { defaultFilename = name; return *this; } + FileDialog &DefaultFilename(const mpt::PathString &name) { defaultFilename = name.ToWide(); return *this; } + FileDialog &DefaultFilename(const std::wstring &name) { defaultFilename = name; return *this; } + FileDialog &DefaultFilename(const std::string &name) { defaultFilename = mpt::String::Decode(name, mpt::CharsetLocale); return *this; } // List of possible extensions. Format: "description|extensions|...|description|extensions||" - FileDialog &ExtensionFilter(const std::string &filter) { extFilter = filter; return *this; } + FileDialog &ExtensionFilter(const mpt::PathString &filter) { extFilter = filter.ToWide(); return *this; } + FileDialog &ExtensionFilter(const std::wstring &filter) { extFilter = filter; return *this; } + FileDialog &ExtensionFilter(const std::string &filter) { extFilter = mpt::String::Decode(filter, mpt::CharsetLocale); return *this; } // Default directory of the dialog. - FileDialog &WorkingDirectory(const std::string &dir) { workingDirectory = dir; return *this; } + FileDialog &WorkingDirectory(const mpt::PathString &dir) { workingDirectory = dir; return *this; } // Pointer to a variable holding the index of the last extension filter to use. Holds the selected filter after the dialog has been closed. FileDialog &FilterIndex(int *index) { filterIndex = index; return *this; } @@ -48,13 +55,13 @@ bool Show(); // Get some selected file. Mostly useful when only one selected file is possible anyway. - const std::string &GetFirstFile() const { return filenames.front(); } + const mpt::PathString &GetFirstFile() const { return filenames.front(); } // Gets all selected files. const PathList &GetFilenames() const { return filenames; } // Gets directory in which the selected files are placed. - const std::string &GetWorkingDirectory() const { return workingDirectory; } + const mpt::PathString &GetWorkingDirectory() const { return workingDirectory; } // Gets the extension of the first selected file, without dot. - const std::string &GetExtension() const { return defaultExtension; } + const mpt::PathString &GetExtension() const { return extension; } protected: static UINT_PTR CALLBACK OFNHookProc(HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam); Modified: trunk/OpenMPT/mptrack/KeyConfigDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/KeyConfigDlg.cpp 2013-11-08 18:34:48 UTC (rev 3136) +++ trunk/OpenMPT/mptrack/KeyConfigDlg.cpp 2013-11-08 21:58:32 UTC (rev 3137) @@ -162,7 +162,7 @@ m_nCurKeyChoice = -1; m_bModified = false; m_bChoiceModified = false; - m_sFullPathName = TrackerSettings::Instance().m_szKbdFile.ToCString(); + m_sFullPathName = TrackerSettings::Instance().m_szKbdFile; plocalCmdSet = new CCommandSet(); plocalCmdSet->Copy(CMainFrame::GetInputHandler()->activeCommandSet); @@ -840,13 +840,13 @@ { FileDialog dlg = OpenFileDialog() .DefaultExtension("mkb") - .DefaultFilename(std::string(m_sFullPathName)) + .DefaultFilename(m_sFullPathName) .ExtensionFilter("OpenMPT Key Bindings (*.mkb)|*.mkb||") - .WorkingDirectory(TrackerSettings::Instance().m_szKbdFile.ToLocale()); + .WorkingDirectory(TrackerSettings::Instance().m_szKbdFile); if(!dlg.Show()) return; - m_sFullPathName = dlg.GetFirstFile().c_str(); - plocalCmdSet->LoadFile(m_sFullPathName); + m_sFullPathName = dlg.GetFirstFile(); + plocalCmdSet->LoadFile(m_sFullPathName.ToCString()); ForceUpdateGUI(); //TentativeSetToDefaultFile(m_sFullPathName); } @@ -857,13 +857,13 @@ { FileDialog dlg = SaveFileDialog() .DefaultExtension("mkb") - .DefaultFilename(std::string(m_sFullPathName)) + .DefaultFilename(m_sFullPathName) .ExtensionFilter("OpenMPT Key Bindings (*.mkb)|*.mkb||") - .WorkingDirectory(TrackerSettings::Instance().m_szKbdFile.ToLocale()); + .WorkingDirectory(TrackerSettings::Instance().m_szKbdFile); if(!dlg.Show()) return; - m_sFullPathName = dlg.GetFirstFile().c_str(); - plocalCmdSet->SaveFile(m_sFullPathName); + m_sFullPathName = dlg.GetFirstFile(); + plocalCmdSet->SaveFile(m_sFullPathName.ToCString()); //TentativeSetToDefaultFile(m_sFullPathName); } Modified: trunk/OpenMPT/mptrack/KeyConfigDlg.h =================================================================== --- trunk/OpenMPT/mptrack/KeyConfigDlg.h 2013-11-08 18:34:48 UTC (rev 3136) +++ trunk/OpenMPT/mptrack/KeyConfigDlg.h 2013-11-08 21:58:32 UTC (rev 3137) @@ -103,7 +103,7 @@ CEdit m_eReport, m_eChordWaitTime; UINT m_nKeyboardCfg; int m_nCurHotKey, m_nCurCategory, m_nCurKeyChoice; - CString m_sFullPathName; + mpt::PathString m_sFullPathName; CCommandSet *plocalCmdSet; bool m_bForceUpdate; bool m_bModified; Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2013-11-08 18:34:48 UTC (rev 3136) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2013-11-08 21:58:32 UTC (rev 3137) @@ -1598,8 +1598,8 @@ } -BOOL CMainFrame::SetupDirectories(LPCTSTR szModDir, LPCTSTR szSampleDir, LPCTSTR szInstrDir, LPCTSTR szVstDir, LPCTSTR szPresetDir) -//--------------------------------------------------------------------------------------------------------------------------------- +BOOL CMainFrame::SetupDirectories(const mpt::PathString &szModDir, const mpt::PathString &szSampleDir, const mpt::PathString &szInstrDir, const mpt::PathString &szVstDir, const mpt::PathString &szPresetDir) +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ { // will also set working directory TrackerDirectories::Instance().SetDefaultDirectory(szModDir, DIR_MODS); @@ -1857,7 +1857,7 @@ const FileDialog::PathList &files = dlg.GetFilenames(); for(size_t counter = 0; counter < files.size(); counter++) { - CTrackApp::AddDLSBank(files[counter].c_str()); + CTrackApp::AddDLSBank(files[counter].ToLocale().c_str()); } m_wndTree.RefreshDlsBanks(); EndWaitCursor(); @@ -1876,7 +1876,7 @@ if(!dlg.Show()) return; BeginWaitCursor(); - CTrackApp::ImportMidiConfig(dlg.GetFirstFile().c_str()); + CTrackApp::ImportMidiConfig(dlg.GetFirstFile().ToLocale().c_str()); m_wndTree.RefreshMidiLibrary(); EndWaitCursor(); } Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2013-11-08 18:34:48 UTC (rev 3136) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2013-11-08 21:58:32 UTC (rev 3137) @@ -441,7 +441,7 @@ BOOL SetupMiscOptions(); BOOL SetupPlayer(); - BOOL SetupDirectories(LPCTSTR szModDir, LPCTSTR szSampleDir, LPCTSTR szInstrDir, LPCTSTR szVstDir, LPCTSTR szPresetDir); + BOOL SetupDirectories(const mpt::PathString &szModDir, const mpt::PathString &szSampleDir, const mpt::PathString &szInstrDir, const mpt::PathString &szVstDir, const mpt::PathString &szPresetDir); BOOL SetupMidi(DWORD d, LONG n); void SetPreAmp(UINT n); HWND GetFollowSong() const; Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2013-11-08 18:34:48 UTC (rev 3136) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2013-11-08 21:58:32 UTC (rev 3137) @@ -610,9 +610,9 @@ .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_MODS)); if(!dlg.Show()) return FALSE; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory().c_str(), DIR_MODS, true); + TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_MODS, true); - strcpy(s, dlg.GetFirstFile().c_str()); + strcpy(s, dlg.GetFirstFile().ToLocale().c_str()); _splitpath(s, drive, path, fname, fext); } else { @@ -1671,10 +1671,10 @@ 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().c_str(), DIR_EXPORT, true); + TrackerDirectories::Instance().SetDefaultDirectory(dlg.GetWorkingDirectory(), DIR_EXPORT, true); char drive[_MAX_DRIVE], dir[_MAX_DIR], name[_MAX_FNAME], ext[_MAX_EXT]; - _splitpath(dlg.GetFirstFile().c_str(), drive, dir, name, ext); + _splitpath(dlg.GetFirstFile().ToLocale().c_str(), drive, dir, name, ext); const CString fileName = CString(drive) + CString(dir) + CString(name); const CString fileExt = CString(ext); @@ -1890,7 +1890,7 @@ .ExtensionFilter("Midi Files (*.mid,*.rmi)|*.mid;*.rmi||"); if(!dlg.Show()) return; - CModToMidi mididlg(dlg.GetFirstFile().c_str(), &m_SndFile, pMainFrm); + CModToMidi mididlg(dlg.GetFirstFile().ToLocale().c_str(), &m_SndFile, pMainFrm); if(mididlg.DoModal() == IDOK) { BeginWaitCursor(); @@ -1953,10 +1953,10 @@ switch (type) { case MOD_TYPE_XM: - m_SndFile.SaveXM(dlg.GetFirstFile().c_str(), true); + m_SndFile.SaveXM(dlg.GetFirstFile().ToLocale().c_str(), true); break; case MOD_TYPE_IT: - m_SndFile.SaveIT(dlg.GetFirstFile().c_str(), true); + m_SndFile.SaveIT(dlg.GetFirstFile().ToLocale().c_str(), true); break; } } @@ -2872,10 +2872,12 @@ //---------------------------------- { // Create template folder if doesn't exist already. - const LPCTSTR pszTemplateFolder = TrackerDirectories::Instance().GetDefaultDirectory(DIR_TEMPLATE_FILES_USER); - if (!PathIsDirectory(pszTemplateFolder)) + const mpt::PathString templateFolder = TrackerDirectories::Instance().GetDefaultDirectory(DIR_TEMPLATE_FILES_USER); + const CString templateFolderDummy = templateFolder.ToCString(); + const LPCTSTR pszTemplateFolder = templateFolderDummy; + if (!PathIsDirectoryW(templateFolder.AsNative().c_str())) { - if (!CreateDirectory(pszTemplateFolder, nullptr)) + if (!CreateDirectoryW(templateFolder.AsNative().c_str(), nullptr)) { CString sErrMsg; AfxFormatString1(sErrMsg, IDS_UNABLE_TO_CREATE_USER_TEMPLATE_FOLDER, pszTemplateFolder); @@ -2899,12 +2901,12 @@ .DefaultExtension(m_SndFile.GetModSpecifications().fileExtension) .DefaultFilename(std::string(sName)) .ExtensionFilter(ModTypeToFilter(m_SndFile)) - .WorkingDirectory(pszTemplateFolder); + .WorkingDirectory(templateFolder); if(!dlg.Show()) return; const CString sOldPath = m_strPathName; - OnSaveDocument(dlg.GetFirstFile().c_str(), true/*template file*/); + OnSaveDocument(dlg.GetFirstFile().ToCString(), true/*template file*/); m_strPathName = sOldPath; } Modified: trunk/OpenMPT/mptrack/Moptions.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moptions.cpp 2013-11-08 18:34:48 UTC (rev 3136) +++ trunk/OpenMPT/mptrack/Moptions.cpp 2013-11-08 21:58:32 UTC (rev 3137) @@ -491,13 +491,13 @@ FileDialog dlg = OpenFileDialog() .DefaultExtension("mptcolor") .ExtensionFilter("OpenMPT Color Schemes|*.mptcolor||") - .WorkingDirectory(theApp.GetConfigPath().ToLocale()); + .WorkingDirectory(theApp.GetConfigPath()); if(!dlg.Show()) return; // Ensure that all colours are reset (for outdated colour schemes) OnPresetMPT(); { - IniFileSettingsContainer file(mpt::PathString::FromLocale(dlg.GetFirstFile())); + IniFileSettingsContainer file(dlg.GetFirstFile()); for(int i = 0; i < MAX_MODCOLORS; i++) { TCHAR sKeyName[16]; @@ -514,11 +514,11 @@ FileDialog dlg = SaveFileDialog() .DefaultExtension("mptcolor") .ExtensionFilter("OpenMPT Color Schemes|*.mptcolor||") - .WorkingDirectory(theApp.GetConfigPath().ToLocale()); + .WorkingDirectory(theApp.GetConfigPath()); if(!dlg.Show()) return; { - IniFileSettingsContainer file(mpt::PathString::FromLocale(dlg.GetFirstFile())); + IniFileSettingsContainer file(dlg.GetFirstFile()); for(int i = 0; i < MAX_MODCOLORS; i++) { TCHAR sKeyName[16]; @@ -607,11 +607,11 @@ m_CheckList.SetCurSel(0); OnOptionSelChanged(); - SetDlgItemText(IDC_OPTIONS_DIR_MODS, TrackerDirectories::Instance().GetDefaultDirectory(DIR_MODS)); - SetDlgItemText(IDC_OPTIONS_DIR_SAMPS, TrackerDirectories::Instance().GetDefaultDirectory(DIR_SAMPLES)); - SetDlgItemText(IDC_OPTIONS_DIR_INSTS, TrackerDirectories::Instance().GetDefaultDirectory(DIR_INSTRUMENTS)); - SetDlgItemText(IDC_OPTIONS_DIR_VSTS, TrackerDirectories::Instance().GetDefaultDirectory(DIR_PLUGINS)); - SetDlgItemText(IDC_OPTIONS_DIR_VSTPRESETS, TrackerDirectories::Instance().GetDefaultDirectory(DIR_PLUGINPRESETS)); + SetDlgItemText(IDC_OPTIONS_DIR_MODS, TrackerDirectories::Instance().GetDefaultDirectory(DIR_MODS).ToCString()); + SetDlgItemText(IDC_OPTIONS_DIR_SAMPS, TrackerDirectories::Instance().GetDefaultDirectory(DIR_SAMPLES).ToCString()); + SetDlgItemText(IDC_OPTIONS_DIR_INSTS, TrackerDirectories::Instance().GetDefaultDirectory(DIR_INSTRUMENTS).ToCString()); + SetDlgItemText(IDC_OPTIONS_DIR_VSTS, TrackerDirectories::Instance().GetDefaultDirectory(DIR_PLUGINS).ToCString()); + SetDlgItemText(IDC_OPTIONS_DIR_VSTPRESETS, TrackerDirectories::Instance().GetDefaultDirectory(DIR_PLUGINPRESETS).ToCString()); return TRUE; } @@ -640,7 +640,13 @@ CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); if (pMainFrm) { - pMainFrm->SetupDirectories(szModDir, szSmpDir, szInsDir, szVstDir, szPresetDir); + pMainFrm->SetupDirectories( + mpt::PathString::FromCString(szModDir), + mpt::PathString::FromCString(szSmpDir), + mpt::PathString::FromCString(szInsDir), + mpt::PathString::FromCString(szVstDir), + mpt::PathString::FromCString(szPresetDir) + ); pMainFrm->SetupMiscOptions(); } Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2013-11-08 18:34:48 UTC (rev 3136) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2013-11-08 21:58:32 UTC (rev 3137) @@ -750,11 +750,11 @@ // Create tunings dir mpt::PathString sTuningPath = m_szConfigDirectory + mpt::PathString::FromUTF8("tunings\\"); - TrackerDirectories::Instance().SetDefaultDirectory(sTuningPath.ToLocale().c_str(), DIR_TUNING); + TrackerDirectories::Instance().SetDefaultDirectory(sTuningPath, DIR_TUNING); - if(PathIsDirectoryW(mpt::PathString::FromLocale(TrackerDirectories::Instance().GetDefaultDirectory(DIR_TUNING)).AsNative().c_str()) == 0) + if(PathIsDirectoryW(TrackerDirectories::Instance().GetDefaultDirectory(DIR_TUNING).AsNative().c_str()) == 0) { - CreateDirectoryW(mpt::PathString::FromLocale(TrackerDirectories::Instance().GetDefaultDirectory(DIR_TUNING)).AsNative().c_str(), 0); + CreateDirectoryW(TrackerDirectories::Instance().GetDefaultDirectory(DIR_TUNING).AsNative().c_str(), 0); } if(!bIsAppDir) @@ -793,7 +793,7 @@ mpt::PathString szTemplatePath; szTemplatePath = m_szConfigDirectory; szTemplatePath += mpt::PathString::FromUTF8("TemplateModules\\"); - TrackerDirectories::Instance().SetDefaultDirectory(szTemplatePath.ToLocale().c_str(), DIR_TEMPLATE_FILES_USER); + TrackerDirectories::Instance().SetDefaultDirectory(szTemplatePath, DIR_TEMPLATE_FILES_USER); //Force use of custom ini file rather than windowsDir\executableName.ini if(m_pszProfileName) @@ -1144,12 +1144,12 @@ .FilterIndex(&nFilterIndex); if(!dlg.Show()) return; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory().c_str(), DIR_MODS, true); + TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_MODS, true); const FileDialog::PathList &files = dlg.GetFilenames(); for(size_t counter = 0; counter < files.size(); counter++) { - OpenDocumentFile(files[counter].c_str()); + OpenDocumentFile(files[counter].ToCString()); } } Modified: trunk/OpenMPT/mptrack/SelectPluginDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/SelectPluginDialog.cpp 2013-11-08 18:34:48 UTC (rev 3136) +++ trunk/OpenMPT/mptrack/SelectPluginDialog.cpp 2013-11-08 21:58:32 UTC (rev 3137) @@ -461,7 +461,7 @@ .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_PLUGINS)); if(!dlg.Show()) return; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory().c_str(), DIR_PLUGINS, true); + TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_PLUGINS, true); CVstPluginManager *pManager = theApp.GetPluginManager(); bool bOk = false; @@ -471,7 +471,7 @@ for(size_t counter = 0; counter < files.size(); counter++) { - CString sFilename = files[counter].c_str(); + CString sFilename = files[counter].ToCString(); if (pManager) { Modified: trunk/OpenMPT/mptrack/TrackerSettings.cpp =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.cpp 2013-11-08 18:34:48 UTC (rev 3136) +++ trunk/OpenMPT/mptrack/TrackerSettings.cpp 2013-11-08 21:58:32 UTC (rev 3137) @@ -242,7 +242,7 @@ continue; } const std::string settingKey = TrackerDirectories::Instance().m_szDirectoryToSettingsName[i]; - CString path = conf.Read<CString>("Paths", settingKey, TrackerDirectories::Instance().GetDefaultDirectory(static_cast<Directory>(i))); + mpt::PathString path = conf.Read<mpt::PathString>("Paths", settingKey, TrackerDirectories::Instance().GetDefaultDirectory(static_cast<Directory>(i))); path = theApp.RelativePathToAbsolute(path); TrackerDirectories::Instance().SetDefaultDirectory(path, static_cast<Directory>(i), false); } @@ -438,7 +438,6 @@ for(size_t i = 0; i < NUM_DIRS; i++) { TrackerDirectories::Instance().m_szWorkingDirectory[i] = TrackerDirectories::Instance().m_szDefaultDirectory[i]; - mpt::String::Copy(TrackerDirectories::Instance().m_szWorkingDirectoryCache[i], TrackerDirectories::Instance().m_szDefaultDirectoryCache[i]); } if(!TrackerDirectories::Instance().m_szDefaultDirectory[DIR_MODS].empty()) { @@ -654,12 +653,12 @@ { continue; } - CString path = TrackerDirectories::Instance().GetDefaultDirectory(static_cast<Directory>(i)); + mpt::PathString path = TrackerDirectories::Instance().GetDefaultDirectory(static_cast<Directory>(i)); if(theApp.IsPortableMode()) { path = theApp.AbsolutePathToRelative(path); } - conf.Write<CString>("Paths", TrackerDirectories::Instance().m_szDirectoryToSettingsName[i], 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. @@ -784,8 +783,8 @@ // retrieve / set default directory from given string and store it our setup variables -void TrackerDirectories::SetDirectory(const mpt::PathString &szFilenameFrom, Directory dir, mpt::PathString (&directories)[NUM_DIRS], TCHAR (&pDirsCache)[NUM_DIRS][MAX_PATH], bool bStripFilename) -//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +void TrackerDirectories::SetDirectory(const mpt::PathString &szFilenameFrom, Directory dir, mpt::PathString (&directories)[NUM_DIRS], bool bStripFilename) +//-------------------------------------------------------------------------------------------------------------------------------------------------------- { mpt::PathString path; @@ -801,7 +800,6 @@ mpt::PathString szOldDir = directories[dir]; // for comparison directories[dir] = path; - _tcscpy(pDirsCache[dir], path.ToCString()); // When updating default directory, also update the working directory. if(!path.empty() && directories == m_szDefaultDirectory) @@ -814,60 +812,37 @@ void TrackerDirectories::SetDefaultDirectory(const mpt::PathString &szFilenameFrom, Directory dir, bool bStripFilename) //--------------------------------------------------------------------------------------------------------------------- { - SetDirectory(szFilenameFrom, dir, m_szDefaultDirectory, m_szDefaultDirectoryCache, bStripFilename); + SetDirectory(szFilenameFrom, dir, m_szDefaultDirectory, bStripFilename); } void TrackerDirectories::SetWorkingDirectory(const mpt::PathString &szFilenameFrom, Directory dir, bool bStripFilename) //--------------------------------------------------------------------------------------------------------------------- { - SetDirectory(szFilenameFrom, dir, m_szWorkingDirectory, m_szWorkingDirectoryCache, bStripFilename); + SetDirectory(szFilenameFrom, dir, m_szWorkingDirectory, bStripFilename); } -mpt::PathString TrackerDirectories::GetDefaultDirectoryAsPathString(Directory dir) const -//-------------------------------------------------------------------------------------- +mpt::PathString TrackerDirectories::GetDefaultDirectory(Directory dir) const +//-------------------------------------------------------------------------- { return m_szDefaultDirectory[dir]; } -mpt::PathString TrackerDirectories::GetWorkingDirectoryAsPathString(Directory dir) const -//-------------------------------------------------------------------------------------- +mpt::PathString TrackerDirectories::GetWorkingDirectory(Directory dir) const +//-------------------------------------------------------------------------- { return m_szWorkingDirectory[dir]; } -void TrackerDirectories::SetDefaultDirectory(LPCTSTR szFilenameFrom, Directory dir, bool bStripFilename) -//--------------------------------------------------------------------------------------------------------------------- -{ - SetDefaultDirectory(mpt::PathString::FromLocale(szFilenameFrom), dir, bStripFilename); -} -void TrackerDirectories::SetWorkingDirectory(LPCTSTR szFilenameFrom, Directory dir, bool bStripFilename) -//--------------------------------------------------------------------------------------------------------------------- -{ - SetWorkingDirectory(mpt::PathString::FromLocale(szFilenameFrom), dir, bStripFilename); -} -LPCTSTR TrackerDirectories::GetDefaultDirectory(Directory dir) const -//------------------------------------------------------------------ -{ - return m_szDefaultDirectoryCache[dir]; -} -LPCTSTR TrackerDirectories::GetWorkingDirectory(Directory dir) const -//------------------------------------------------------------------ -{ - return m_szWorkingDirectoryCache[dir]; -} - - TrackerDirectories::TrackerDirectories() //-------------------------------------- { - MemsetZero(m_szDefaultDirectoryCache); - MemsetZero(m_szWorkingDirectoryCache); + return; } Modified: trunk/OpenMPT/mptrack/TrackerSettings.h =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.h 2013-11-08 18:34:48 UTC (rev 3136) +++ trunk/OpenMPT/mptrack/TrackerSettings.h 2013-11-08 21:58:32 UTC (rev 3137) @@ -395,11 +395,6 @@ // Directory to INI setting translation static const TCHAR *m_szDirectoryToSettingsName[NUM_DIRS]; - // Cache is necessary because users might expect long lifetimes of pointers returned from Get*Directory. - // Cache can be removed when all users are converted to PathString. - MPT_DEPRECATED_PATH TCHAR m_szDefaultDirectoryCache[NUM_DIRS][MAX_PATH]; - MPT_DEPRECATED_PATH TCHAR m_szWorkingDirectoryCache[NUM_DIRS][MAX_PATH]; - public: TrackerDirectories(); @@ -407,19 +402,14 @@ // access to default + working directories void SetWorkingDirectory(const mpt::PathString &szFilenameFrom, Directory dir, bool bStripFilename = false); - mpt::PathString GetWorkingDirectoryAsPathString(Directory dir) const; + mpt::PathString GetWorkingDirectory(Directory dir) const; void SetDefaultDirectory(const mpt::PathString &szFilenameFrom, Directory dir, bool bStripFilename = false); - mpt::PathString GetDefaultDirectoryAsPathString(Directory dir) const; + mpt::PathString GetDefaultDirectory(Directory dir) const; - void SetWorkingDirectory(LPCTSTR szFilenameFrom, Directory dir, bool bStripFilename = false); - void SetDefaultDirectory(LPCTSTR szFilenameFrom, Directory dir, bool bStripFilename = false); - MPT_DEPRECATED_PATH LPCTSTR GetWorkingDirectory(Directory dir) const; - MPT_DEPRECATED_PATH LPCTSTR GetDefaultDirectory(Directory dir) const; - static TrackerDirectories &Instance(); protected: - void SetDirectory(const mpt::PathString &szFilenameFrom, Directory dir, mpt::PathString (&pDirs)[NUM_DIRS], TCHAR (&pDirsCache)[NUM_DIRS][MAX_PATH], bool bStripFilename); + void SetDirectory(const mpt::PathString &szFilenameFrom, Directory dir, mpt::PathString (&pDirs)[NUM_DIRS], bool bStripFilename); }; Modified: trunk/OpenMPT/mptrack/TuningDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/TuningDialog.cpp 2013-11-08 18:34:48 UTC (rev 3136) +++ trunk/OpenMPT/mptrack/TuningDialog.cpp 2013-11-08 21:58:32 UTC (rev 3137) @@ -643,7 +643,7 @@ bool failure = true; - mpt::ofstream fout(dlg.GetFirstFile().c_str(), std::ios::binary); + mpt::ofstream fout(dlg.GetFirstFile().AsNative().c_str(), std::ios::binary); if(filterIndex == 0) { @@ -680,7 +680,7 @@ if(!dlg.Show()) return; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory().c_str(), DIR_TUNING, true); + TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_TUNING, true); CString sLoadReport; @@ -689,7 +689,7 @@ for(size_t counter = 0; counter < nFiles; counter++) { TCHAR szFileName[_MAX_FNAME], szExt[_MAX_EXT]; - _tsplitpath(files[counter].c_str(), nullptr, nullptr, szFileName, szExt); + _tsplitpath(files[counter].ToCString(), nullptr, nullptr, szFileName, szExt); _tcslwr(szExt); // Convert extension to lower case. @@ -702,7 +702,7 @@ if (bIsTun) { - mpt::ifstream fin(files[counter].c_str(), std::ios::binary); + mpt::ifstream fin(files[counter].AsNative().c_str(), std::ios::binary); pT = CTuningRTI::DeserializeOLD(fin); if(pT == 0) {fin.clear(); fin.seekg(0); pT = CTuningRTI::Deserialize(fin);} @@ -736,7 +736,7 @@ } else // scl import. { - EnSclImport a = ImportScl(files[counter].c_str(), szFileName); + EnSclImport a = ImportScl(files[counter].ToCString(), szFileName); if (a != enSclImportOk) { if (a == enSclImportAddTuningFailure && m_TempTunings.GetNumTunings() >= CTuningCollection::s_nMaxTuningCount) @@ -770,7 +770,7 @@ // a separate collection - no possibility to // directly replace some collection. CTuningCollection* pNewTCol = new CTuningCollection; - pNewTCol->SetSavefilePath(files[counter]); + pNewTCol->SetSavefilePath(files[counter].ToLocale()); if (pNewTCol->Deserialize()) { delete pNewTCol; pNewTCol = 0; Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2013-11-08 18:34:48 UTC (rev 3136) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2013-11-08 21:58:32 UTC (rev 3137) @@ -164,7 +164,7 @@ m_dwStatus |= TREESTATUS_SINGLEEXPAND; } ModifyStyle(dwRemove, dwAdd); - strcpy(m_szInstrLibPath, TrackerDirectories::Instance().GetDefaultDirectory(DIR_SAMPLES)); + mpt::String::Copy(m_szInstrLibPath, TrackerDirectories::Instance().GetDefaultDirectory(DIR_SAMPLES).ToLocale()); SetImageList(CMainFrame::GetMainFrame()->GetImageList(), TVSIL_NORMAL); if (!IsSampleBrowser()) { @@ -1521,9 +1521,9 @@ if(!dlg.Show()) return FALSE; if (dwItem & 0x80) - return SetMidiPercussion(dwItem & 0x7F, dlg.GetFirstFile().c_str()); + return SetMidiPercussion(dwItem & 0x7F, dlg.GetFirstFile().ToCString()); else - return SetMidiInstrument(dwItem, dlg.GetFirstFile().c_str()); + return SetMidiInstrument(dwItem, dlg.GetFirstFile().ToCString()); } @@ -3089,7 +3089,7 @@ .ExtensionFilter("All files(*.*)|*.*||"); if(!dlg.Show()) return; - pSndFile->m_szInstrumentPath[modItem.val1 - 1] = dlg.GetFirstFile(); + pSndFile->m_szInstrumentPath[modItem.val1 - 1] = dlg.GetFirstFile().ToLocale(); OnRefreshTree(); } } @@ -3117,7 +3117,7 @@ "FastTracker II Instruments (*.xi)|*.xi||"); if(!dlg.Show()) return; - pSndFile->m_szInstrumentPath[modItem.val1 - 1] = dlg.GetFirstFile(); + pSndFile->m_szInstrumentPath[modItem.val1 - 1] = dlg.GetFirstFile().ToLocale(); } pModDoc->SaveInstrument(static_cast<INSTRUMENTINDEX>(modItem.val1)); @@ -3155,7 +3155,7 @@ "All Files (*.*)|*.*||"); if(!dlg.Show()) return; - CTrackApp::ExportMidiConfig(dlg.GetFirstFile().c_str()); + CTrackApp::ExportMidiConfig(dlg.GetFirstFile().ToLocale().c_str()); } Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2013-11-08 18:34:48 UTC (rev 3136) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2013-11-08 21:58:32 UTC (rev 3137) @@ -538,7 +538,7 @@ { // Try finding the plugin DLL in the plugin directory instead. CHAR s[_MAX_PATH]; - mpt::String::CopyN(s, TrackerDirectories::Instance().GetDefaultDirectory(DIR_PLUGINS)); + mpt::String::Copy(s, TrackerDirectories::Instance().GetDefaultDirectory(DIR_PLUGINS).ToLocale()); if(!s[0]) { mpt::String::CopyN(s, theApp.GetAppDirPath().ToLocale().c_str()); @@ -1123,7 +1123,7 @@ dlg = OpenFileDialog().AllowMultiSelect(); } dlg.ExtensionFilter(extensions) - .WorkingDirectory(workingDir); + .WorkingDirectory(mpt::PathString::FromLocale(workingDir)); if(!dlg.Show()) { return 0; @@ -1137,8 +1137,8 @@ fileSel->returnMultiplePaths = new char *[fileSel->nbReturnPath]; for(size_t i = 0; i < files.size(); i++) { - char *fname = new char[files[i].length() + 1]; - strcpy(fname, files[i].c_str()); + char *fname = new char[files[i].ToLocale().length() + 1]; + strcpy(fname, files[i].ToLocale().c_str()); fileSel->returnMultiplePaths[i] = fname; } return 1; @@ -1156,7 +1156,7 @@ { // Provide some memory for the return path. - fileSel->sizeReturnPath = dlg.GetFirstFile().length() + 1; + fileSel->sizeReturnPath = dlg.GetFirstFile().ToLocale().length() + 1; fileSel->returnPath = new char[fileSel->sizeReturnPath]; if(fileSel->returnPath == nullptr) { @@ -1168,7 +1168,7 @@ { fileSel->reserved = 0; } - strncpy(fileSel->returnPath, dlg.GetFirstFile().c_str(), fileSel->sizeReturnPath - 1); + strncpy(fileSel->returnPath, dlg.GetFirstFile().ToLocale().c_str(), fileSel->sizeReturnPath - 1); fileSel->nbReturnPath = 1; fileSel->returnMultiplePaths = nullptr; } @@ -1592,7 +1592,7 @@ bool CVstPlugin::SaveProgram() //---------------------------- { - std::string defaultDir = TrackerDirectories::Instance().GetWorkingDirectory(DIR_PLUGINPRESETS); + std::string defaultDir = TrackerDirectories::Instance().GetWorkingDirectory(DIR_PLUGINPRESETS).ToLocale(); bool useDefaultDir = !defaultDir.empty(); if(!useDefaultDir) { @@ -1606,21 +1606,21 @@ mpt::String::SetNullTerminator(rawname); FileDialog dlg = SaveFileDialog() - .DefaultExtension("fxp") + .DefaultExtension(mpt::PathString::FromUTF8("fxb")) .DefaultFilename(rawname) .ExtensionFilter("VST Plugin Programs (*.fxp)|*.fxp|" "VST Plugin Banks (*.fxb)|*.fxb||") - .WorkingDirectory(defaultDir); + .WorkingDirectory(mpt::PathString::FromLocale(defaultDir)); if(!dlg.Show()) return false; if(useDefaultDir) { - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory().c_str(), DIR_PLUGINPRESETS, true); + TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_PLUGINPRESETS, true); } - bool bank = (dlg.GetExtension() == "fxb"); + bool bank = (dlg.GetExtension() == mpt::PathString::FromUTF8("fxb")); - mpt::fstream f(dlg.GetFirstFile().c_str(), std::ios::out | std::ios::trunc | std::ios::binary); + mpt::fstream f(dlg.GetFirstFile().AsNative().c_str(), std::ios::out | std::ios::trunc | std::ios::binary); if(f.good() && VSTPresets::SaveFile(f, *this, bank)) { return true; @@ -1636,7 +1636,7 @@ bool CVstPlugin::LoadProgram() //---------------------------- { - std::string defaultDir = TrackerDirectories::Instance().GetWorkingDirectory(DIR_PLUGINPRESETS); + std::string defaultDir = TrackerDirectories::Instance().GetWorkingDirectory(DIR_PLUGINPRESETS).ToLocale(); bool useDefaultDir = !defaultDir.empty(); if(!useDefaultDir) { @@ -1650,17 +1650,17 @@ "VST Plugin Programs (*.fxp)|*.fxp|" "VST Plugin Banks (*.fxb)|*.fxb|" "All Files|*.*||") - .WorkingDirectory(defaultDir); + .WorkingDirectory(mpt::PathString::FromLocale(defaultDir)); if(!dlg.Show()) return false; if(useDefaultDir) { - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory().c_str(), DIR_PLUGINPRESETS, true); + TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_PLUGINPRESETS, true); } CMappedFile f; const char *errorStr = nullptr; - if(f.Open(dlg.GetFirstFile().c_str())) + if(f.Open(dlg.GetFirstFile().ToCString())) { FileReader file = f.GetFile(); errorStr = VSTPresets::GetErrorMessage(VSTPresets::LoadFile(file, *this)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |