From b84f66f741e1ecb291d1b57470f0b5dbb213f69c Mon Sep 17 00:00:00 2001 From: lordmulder Date: Tue, 23 Aug 2011 18:48:16 +0200 Subject: [PATCH] Remember most recent path for "add file(s)" and "add directory" dialogs. --- src/Config.h | 2 +- src/Dialog_CueImport.cpp | 24 +++++++++++++++- src/Dialog_MainWindow.cpp | 60 ++++++++++++++++++++++++++++++++------- src/Model_Settings.cpp | 13 +++++++-- src/Model_Settings.h | 1 + 5 files changed, 86 insertions(+), 14 deletions(-) diff --git a/src/Config.h b/src/Config.h index c85863db..bb7c6e01 100644 --- a/src/Config.h +++ b/src/Config.h @@ -30,7 +30,7 @@ #define VER_LAMEXP_MINOR_LO 3 #define VER_LAMEXP_TYPE Alpha #define VER_LAMEXP_PATCH 15 -#define VER_LAMEXP_BUILD 662 +#define VER_LAMEXP_BUILD 664 /////////////////////////////////////////////////////////////////////////////// // Tools versions diff --git a/src/Dialog_CueImport.cpp b/src/Dialog_CueImport.cpp index d1de65a5..92739b9a 100644 --- a/src/Dialog_CueImport.cpp +++ b/src/Dialog_CueImport.cpp @@ -159,7 +159,29 @@ void CueImportDialog::modelChanged(void) void CueImportDialog::browseButtonClicked(void) { - QString newOutDir = QFileDialog::getExistingDirectory(this, tr("Choose Output Directory")); + QString newOutDir, currentDir = m_outputDir; + + while(QDir(currentDir).exists()) + { + int pos = max(currentDir.lastIndexOf(QChar('\\')), currentDir.lastIndexOf(QChar('/'))); + if(pos > 0) currentDir.left(pos - 1); else break; + } + + if(lamexp_themes_enabled() || ((QSysInfo::windowsVersion() & QSysInfo::WV_NT_based) < QSysInfo::WV_XP)) + { + newOutDir = QFileDialog::getExistingDirectory(this, tr("Choose Output Directory"), currentDir); + } + else + { + QFileDialog dialog(this, tr("Choose Output Directory")); + dialog.setFileMode(QFileDialog::DirectoryOnly); + dialog.setDirectory(currentDir); + if(dialog.exec()) + { + newOutDir = dialog.selectedFiles().first(); + } + } + if(!newOutDir.isEmpty()) { m_outputDir = newOutDir; diff --git a/src/Dialog_MainWindow.cpp b/src/Dialog_MainWindow.cpp index 82c8241c..3cbf5394 100644 --- a/src/Dialog_MainWindow.cpp +++ b/src/Dialog_MainWindow.cpp @@ -73,7 +73,8 @@ #define SET_TEXT_COLOR(WIDGET,COLOR) { QPalette _palette = WIDGET->palette(); _palette.setColor(QPalette::WindowText, (COLOR)); _palette.setColor(QPalette::Text, (COLOR)); WIDGET->setPalette(_palette); } #define SET_FONT_BOLD(WIDGET,BOLD) { QFont _font = WIDGET->font(); _font.setBold(BOLD); WIDGET->setFont(_font); } #define LINK(URL) QString("%2").arg(URL).arg(URL) -#define TEMP_HIDE_DROPBOX(CMD) { bool __dropBoxVisible = m_dropBox->isVisible(); if(__dropBoxVisible) m_dropBox->hide(); CMD; if(__dropBoxVisible) m_dropBox->show(); } +#define TEMP_HIDE_DROPBOX(CMD) { bool __dropBoxVisible = m_dropBox->isVisible(); if(__dropBoxVisible) m_dropBox->hide(); {CMD}; if(__dropBoxVisible) m_dropBox->show(); } +#define USE_NATIVE_FILE_DIALOG (lamexp_themes_enabled() || ((QSysInfo::windowsVersion() & QSysInfo::WV_NT_based) < QSysInfo::WV_XP)) //////////////////////////////////////////////////////////// // Constructor @@ -1516,9 +1517,27 @@ void MainWindow::importCueSheetActionTriggered(bool checked) TEMP_HIDE_DROPBOX ( - QString selectedCueFile = QFileDialog::getOpenFileName(this, tr("Open Cue Sheet"), QString(), QString("%1 (*.cue)").arg(tr("Cue Sheet File"))); + QString selectedCueFile; + + if(USE_NATIVE_FILE_DIALOG) + { + selectedCueFile = QFileDialog::getOpenFileName(this, tr("Open Cue Sheet"), m_settings->mostRecentInputPath(), QString("%1 (*.cue)").arg(tr("Cue Sheet File"))); + } + else + { + QFileDialog dialog(this, tr("Open Cue Sheet")); + dialog.setFileMode(QFileDialog::ExistingFile); + dialog.setNameFilter(QString("%1 (*.cue)").arg(tr("Cue Sheet File"))); + dialog.setDirectory(m_settings->mostRecentInputPath()); + if(dialog.exec()) + { + selectedCueFile = dialog.selectedFiles().first(); + } + } + if(!selectedCueFile.isEmpty()) { + m_settings->mostRecentInputPath(QFileInfo(selectedCueFile).canonicalPath()); CueImportDialog *cueImporter = new CueImportDialog(this, m_fileListModel, selectedCueFile); cueImporter->exec(); LAMEXP_DELETE(cueImporter); @@ -1695,12 +1714,13 @@ void MainWindow::addFilesButtonClicked(void) TEMP_HIDE_DROPBOX ( - if(lamexp_themes_enabled() || ((QSysInfo::windowsVersion() & QSysInfo::WV_NT_based) < QSysInfo::WV_XP)) + if(USE_NATIVE_FILE_DIALOG) { QStringList fileTypeFilters = DecoderRegistry::getSupportedTypes(); - QStringList selectedFiles = QFileDialog::getOpenFileNames(this, tr("Add file(s)"), QString(), fileTypeFilters.join(";;")); + QStringList selectedFiles = QFileDialog::getOpenFileNames(this, tr("Add file(s)"), m_settings->mostRecentInputPath(), fileTypeFilters.join(";;")); if(!selectedFiles.isEmpty()) { + m_settings->mostRecentInputPath(QFileInfo(selectedFiles.first()).canonicalPath()); addFiles(selectedFiles); } } @@ -1710,10 +1730,15 @@ void MainWindow::addFilesButtonClicked(void) QStringList fileTypeFilters = DecoderRegistry::getSupportedTypes(); dialog.setFileMode(QFileDialog::ExistingFiles); dialog.setNameFilter(fileTypeFilters.join(";;")); + dialog.setDirectory(m_settings->mostRecentInputPath()); if(dialog.exec()) { QStringList selectedFiles = dialog.selectedFiles(); - addFiles(selectedFiles); + if(!selectedFiles.isEmpty()) + { + m_settings->mostRecentInputPath(QFileInfo(selectedFiles.first()).canonicalPath()); + addFiles(selectedFiles); + } } } ) @@ -1731,15 +1756,15 @@ void MainWindow::openFolderActionActivated(void) { TEMP_HIDE_DROPBOX ( - if(lamexp_themes_enabled() || ((QSysInfo::windowsVersion() & QSysInfo::WV_NT_based) < QSysInfo::WV_XP)) + if(USE_NATIVE_FILE_DIALOG) { - selectedFolder = QFileDialog::getExistingDirectory(this, tr("Add Folder"), QDesktopServices::storageLocation(QDesktopServices::MusicLocation)); + selectedFolder = QFileDialog::getExistingDirectory(this, tr("Add Folder"), m_settings->mostRecentInputPath()); } else { QFileDialog dialog(this, tr("Add Folder")); dialog.setFileMode(QFileDialog::DirectoryOnly); - dialog.setDirectory(QDesktopServices::storageLocation(QDesktopServices::MusicLocation)); + dialog.setDirectory(m_settings->mostRecentInputPath()); if(dialog.exec()) { selectedFolder = dialog.selectedFiles().first(); @@ -1748,6 +1773,7 @@ void MainWindow::openFolderActionActivated(void) if(!selectedFolder.isEmpty()) { + m_settings->mostRecentInputPath(QDir(selectedFolder).canonicalPath()); addFolder(selectedFolder, action->data().toBool()); } ) @@ -1866,7 +1892,6 @@ void MainWindow::sourceFilesContextMenu(const QPoint &pos) */ void MainWindow::sourceFilesScrollbarMoved(int) { - qDebug("sourceFileView->resizeColumnToContents(0);"); sourceFileView->resizeColumnToContents(0); } @@ -2854,7 +2879,22 @@ void MainWindow::autoDetectInstancesChanged(bool checked) */ void MainWindow::browseCustomTempFolderButtonClicked(void) { - QString newTempFolder = QFileDialog::getExistingDirectory(this); + QString newTempFolder; + + if(USE_NATIVE_FILE_DIALOG) + { + newTempFolder = QFileDialog::getExistingDirectory(this, QString(), m_settings->customTempPath()); + } + else + { + QFileDialog dialog(this); + dialog.setFileMode(QFileDialog::DirectoryOnly); + dialog.setDirectory(m_settings->customTempPath()); + if(dialog.exec()) + { + newTempFolder = dialog.selectedFiles().first(); + } + } if(!newTempFolder.isEmpty()) { diff --git a/src/Model_Settings.cpp b/src/Model_Settings.cpp index 32edd086..9cf51861 100644 --- a/src/Model_Settings.cpp +++ b/src/Model_Settings.cpp @@ -76,6 +76,7 @@ LAMEXP_MAKE_ID(outputDir, "OutputDirectory/SelectedPath"); LAMEXP_MAKE_ID(outputToSourceDir, "OutputDirectory/OutputToSourceFolder"); LAMEXP_MAKE_ID(prependRelativeSourcePath, "OutputDirectory/PrependRelativeSourcePath"); LAMEXP_MAKE_ID(favoriteOutputFolders, "OutputDirectory/Favorites"); +LAMEXP_MAKE_ID(mostRecentInputPath, "InputDirectory/MostRecentPath"); LAMEXP_MAKE_ID(writeMetaTags, "Flags/WriteMetaTags"); LAMEXP_MAKE_ID(createPlaylist, "Flags/AutoCreatePlaylist"); LAMEXP_MAKE_ID(autoUpdateLastCheck, "AutoUpdate/LastCheck"); @@ -213,7 +214,14 @@ void SettingsModel::validate(void) if(this->outputDir().isEmpty() || !QFileInfo(this->outputDir()).isDir()) { - this->outputDir(QDesktopServices::storageLocation(QDesktopServices::MusicLocation)); + QString musicLocation = QDesktopServices::storageLocation(QDesktopServices::MusicLocation); + this->outputDir(musicLocation.isEmpty() ? QDesktopServices::storageLocation(QDesktopServices::HomeLocation) : musicLocation); + } + + if(this->mostRecentInputPath().isEmpty() || !QFileInfo(this->mostRecentInputPath()).isDir()) + { + QString musicLocation = QDesktopServices::storageLocation(QDesktopServices::MusicLocation); + this->outputDir(musicLocation.isEmpty() ? QDesktopServices::storageLocation(QDesktopServices::HomeLocation) : musicLocation); } if(!lamexp_query_translations().contains(this->currentLanguage(), Qt::CaseInsensitive)) @@ -268,7 +276,7 @@ LAMEXP_MAKE_OPTION_I(interfaceStyle, 0) LAMEXP_MAKE_OPTION_I(compressionEncoder, 0) LAMEXP_MAKE_OPTION_I(compressionRCMode, 0) LAMEXP_MAKE_OPTION_I(compressionBitrate, 7) -LAMEXP_MAKE_OPTION_S(outputDir, QString()) +LAMEXP_MAKE_OPTION_S(outputDir, QDesktopServices::storageLocation(QDesktopServices::MusicLocation)) LAMEXP_MAKE_OPTION_B(outputToSourceDir, false) LAMEXP_MAKE_OPTION_B(prependRelativeSourcePath, false) LAMEXP_MAKE_OPTION_S(favoriteOutputFolders, QString()); @@ -312,3 +320,4 @@ LAMEXP_MAKE_OPTION_U(maximumInstances, 0); LAMEXP_MAKE_OPTION_S(customTempPath, QDesktopServices::storageLocation(QDesktopServices::TempLocation)); LAMEXP_MAKE_OPTION_B(customTempPathEnabled, false); LAMEXP_MAKE_OPTION_B(slowStartup, false); +LAMEXP_MAKE_OPTION_S(mostRecentInputPath, QDesktopServices::storageLocation(QDesktopServices::MusicLocation)); diff --git a/src/Model_Settings.h b/src/Model_Settings.h index 5a624729..ffa63df1 100644 --- a/src/Model_Settings.h +++ b/src/Model_Settings.h @@ -126,6 +126,7 @@ public: LAMEXP_MAKE_OPTION_S(customTempPath); LAMEXP_MAKE_OPTION_B(customTempPathEnabled); LAMEXP_MAKE_OPTION_B(slowStartup); + LAMEXP_MAKE_OPTION_S(mostRecentInputPath); //Misc void validate(void);