From 875d7b7d12df15599c8207fd58aeb84271eb3ae3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Tue, 23 Oct 2012 09:59:57 +0200 Subject: [PATCH] Resinsight: Made Home path the default path for file dialog browsing, and added remembering of the last opened path. Added -startdir command line argument to override the default file browse path p4#: 19263 --- ApplicationCode/Application/RIApplication.cpp | 71 +++++++++++++++++-- ApplicationCode/Application/RIApplication.h | 6 ++ .../ProjectDataModel/RimUiTreeView.cpp | 10 ++- .../UserInterface/RIMainWindow.cpp | 27 +++++-- cafUserInterface/cafPdmUiFilePathEditor.cpp | 16 ++++- 5 files changed, 114 insertions(+), 16 deletions(-) diff --git a/ApplicationCode/Application/RIApplication.cpp b/ApplicationCode/Application/RIApplication.cpp index 8f5795f521..0770cc203d 100644 --- a/ApplicationCode/Application/RIApplication.cpp +++ b/ApplicationCode/Application/RIApplication.cpp @@ -111,6 +111,14 @@ RIApplication::RIApplication(int& argc, char** argv) m_socketServer = new RiaSocketServer( this); m_workerProcess = NULL; + + + m_startupDefaultDirectory = QDir::homePath(); + +#ifdef WIN32 + //m_startupDefaultDirectory += "/My Documents/"; +#endif + } @@ -282,6 +290,8 @@ bool RIApplication::saveProjectPromptForFileName() { //if (m_project.isNull()) return true; + RIApplication* app = RIApplication::instance(); + QString startPath; if (!m_project->fileName().isEmpty()) { @@ -290,7 +300,7 @@ bool RIApplication::saveProjectPromptForFileName() } else { - startPath = QDir::currentPath(); + startPath = app->defaultFileDialogDirectory("BINARY_GRID"); } startPath += "/ResInsightProject.rip"; @@ -301,6 +311,9 @@ bool RIApplication::saveProjectPromptForFileName() return false; } + // Remember the directory to next time + app->setDefaultFileDialogDirectory("BINARY_GRID", QFileInfo(fileName).absolutePath()); + bool bSaveOk = saveProjectAs(fileName); setWindowCaptionFromAppState(); @@ -591,38 +604,52 @@ bool RIApplication::parseArguments() bool isParsingProjectFile = false; bool isParsingCaseNames = false; + bool isParsingStartDir = false; bool showHelp = false; int i; for (i = 1; i < arguments.size(); i++) { QString arg = arguments[i]; - bool argParsedAsFlag = false; + bool foundKnownOption = false; if (arg.toLower() == "-help" || arg.toLower() == "-?") { showHelp = true; + foundKnownOption = true; } if (arg.toLower() == "-last") { openLatestProject = true; - argParsedAsFlag = true; + foundKnownOption = true; } else if (arg.toLower() == "-project") { isParsingCaseNames = false; isParsingProjectFile = true; - argParsedAsFlag = true; + isParsingStartDir = false; + + foundKnownOption = true; } else if (arg.toLower() == "-case") { isParsingCaseNames = true; isParsingProjectFile = false; - argParsedAsFlag = true; + isParsingStartDir = false; + + foundKnownOption = true; + } + else if (arg.toLower() == "-startdir") + { + isParsingCaseNames = false; + isParsingProjectFile = false; + isParsingStartDir = true; + + foundKnownOption = true; } - if (!argParsedAsFlag) + if (!foundKnownOption) { if (isParsingProjectFile && QFile::exists(arg)) { @@ -633,6 +660,11 @@ bool RIApplication::parseArguments() { caseNames.append(arg); } + + if (isParsingStartDir) + { + m_startupDefaultDirectory = arg; + } } } @@ -648,6 +680,8 @@ bool RIApplication::parseArguments() "-project Open project file \n" "-case Open Eclipse case \n" " (do not include .GRID/.EGRID)\n" + "-startdir The default directory for open/save commands\n" + "-help \n" "-? Displays help text\n" "-----------------------------------------------------------------"; @@ -883,3 +917,28 @@ void RIApplication::terminateProcess() m_workerProcess = NULL; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RIApplication::defaultFileDialogDirectory(const QString& dialogName) +{ + QString defaultDirectory = m_startupDefaultDirectory; + std::map::iterator it; + it = m_fileDialogDefaultDirectories.find(dialogName); + + if ( it != m_fileDialogDefaultDirectories.end()) + { + defaultDirectory = it->second; + } + + return defaultDirectory; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RIApplication::setDefaultFileDialogDirectory(const QString& dialogName, const QString& defaultDirectory) +{ + m_fileDialogDefaultDirectories[dialogName] = defaultDirectory; +} diff --git a/ApplicationCode/Application/RIApplication.h b/ApplicationCode/Application/RIApplication.h index c0c9fe5b03..722d103f7d 100644 --- a/ApplicationCode/Application/RIApplication.h +++ b/ApplicationCode/Application/RIApplication.h @@ -75,6 +75,9 @@ public: void createLargeResultsMockModel(); void createInputMockModel(); + QString defaultFileDialogDirectory(const QString& dialogName); + void setDefaultFileDialogDirectory(const QString& dialogName, const QString& defaultDirectory); + bool openEclipseCaseFromFile(const QString& fileName); bool openEclipseCase(const QString& caseName, const QString& caseFileName); bool openInputEclipseCase(const QString& caseName, const QStringList& caseFileNames); @@ -129,4 +132,7 @@ private: caf::UiProcess* m_workerProcess; RIPreferences* m_preferences; + + std::map m_fileDialogDefaultDirectories; + QString m_startupDefaultDirectory; }; diff --git a/ApplicationCode/ProjectDataModel/RimUiTreeView.cpp b/ApplicationCode/ProjectDataModel/RimUiTreeView.cpp index 1917b12e67..a355fda711 100644 --- a/ApplicationCode/ProjectDataModel/RimUiTreeView.cpp +++ b/ApplicationCode/ProjectDataModel/RimUiTreeView.cpp @@ -558,9 +558,17 @@ void RimUiTreeView::setModel(QAbstractItemModel* model) //-------------------------------------------------------------------------------------------------- void RimUiTreeView::slotAddInputProperty() { - QStringList fileNames = QFileDialog::getOpenFileNames(this, "Select Eclipse Input Property Files", NULL, "All Files (*.* *)"); + RIApplication* app = RIApplication::instance(); + QString defaultDir = app->defaultFileDialogDirectory("INPUT_FILES"); + QStringList fileNames = QFileDialog::getOpenFileNames(this, "Select Eclipse Input Property Files", defaultDir, "All Files (*.* *)"); + if (fileNames.isEmpty()) return; + // Remember the directory to next time + defaultDir = QFileInfo(fileNames.last()).absolutePath(); + app->setDefaultFileDialogDirectory("INPUT_FILES", defaultDir); + + QModelIndex index = currentIndex(); RimUiTreeModelPdm* myModel = dynamic_cast(model()); caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(currentIndex()); diff --git a/ApplicationCode/UserInterface/RIMainWindow.cpp b/ApplicationCode/UserInterface/RIMainWindow.cpp index ad28df1019..0934800e08 100644 --- a/ApplicationCode/UserInterface/RIMainWindow.cpp +++ b/ApplicationCode/UserInterface/RIMainWindow.cpp @@ -595,13 +595,19 @@ void RIMainWindow::slotOpenBinaryGridFiles() { if (checkForDocumentModifications()) { + RIApplication* app = RIApplication::instance(); + #ifdef USE_ECL_LIB - QStringList fileNames = QFileDialog::getOpenFileNames(this, "Open Eclipse File", NULL, "Eclipse Grid Files (*.GRID *.EGRID)"); + + QString defaultDir = app->defaultFileDialogDirectory("BINARY_GRID"); + QStringList fileNames = QFileDialog::getOpenFileNames(this, "Open Eclipse File", defaultDir, "Eclipse Grid Files (*.GRID *.EGRID)"); + if (fileNames.size()) defaultDir = QFileInfo(fileNames.last()).absolutePath(); + app->setDefaultFileDialogDirectory("BINARY_GRID", defaultDir); + #else QStringList fileNames; fileNames << "dummy"; #endif - RIApplication* app = RIApplication::instance(); int i; for (i = 0; i < fileNames.size(); i++) @@ -624,11 +630,15 @@ void RIMainWindow::slotOpenInputFiles() { if (checkForDocumentModifications()) { - QStringList fileNames = QFileDialog::getOpenFileNames(this, "Open Eclipse Input Files", NULL, "Eclipse Input Files and Input Properties (*.GRDECL *)"); + RIApplication* app = RIApplication::instance(); + QString defaultDir = app->defaultFileDialogDirectory("INPUT_FILES"); + QStringList fileNames = QFileDialog::getOpenFileNames(this, "Open Eclipse Input Files", defaultDir, "Eclipse Input Files and Input Properties (*.GRDECL *)"); if (fileNames.isEmpty()) return; - RIApplication* app = RIApplication::instance(); + // Remember the path to next time + app->setDefaultFileDialogDirectory("INPUT_FILES", QFileInfo(fileNames.last()).absolutePath()); + app->openInputEclipseCase("Eclipse Input Files", fileNames); } } @@ -641,10 +651,15 @@ void RIMainWindow::slotOpenProject() { if (checkForDocumentModifications()) { - QString fileName = QFileDialog::getOpenFileName(this, "Open ResInsight Project", NULL, "ResInsight project (*.rip)"); + RIApplication* app = RIApplication::instance(); + QString defaultDir = app->defaultFileDialogDirectory("BINARY_GRID"); + QString fileName = QFileDialog::getOpenFileName(this, "Open ResInsight Project", defaultDir, "ResInsight project (*.rip)"); + if (fileName.isEmpty()) return; - RIApplication* app = RIApplication::instance(); + // Remember the path to next time + app->setDefaultFileDialogDirectory("BINARY_GRID", QFileInfo(fileName).absolutePath()); + app->loadProject(fileName); } diff --git a/cafUserInterface/cafPdmUiFilePathEditor.cpp b/cafUserInterface/cafPdmUiFilePathEditor.cpp index 408fde660a..c6e581b718 100644 --- a/cafUserInterface/cafPdmUiFilePathEditor.cpp +++ b/cafUserInterface/cafPdmUiFilePathEditor.cpp @@ -122,11 +122,21 @@ void PdmUiFilePathEditor::slotEditingFinished() //-------------------------------------------------------------------------------------------------- void PdmUiFilePathEditor::fileSelectionClicked() { + QString defaultPath; + if ( m_lineEdit->text().isEmpty()) + { + defaultPath = QDir::homePath(); + } + else + { + defaultPath = m_lineEdit->text(); + } + if (m_attributes.m_selectDirectory) { QString directoryPath = QFileDialog::getExistingDirectory(m_lineEdit, tr("Get existing directory"), - m_lineEdit->text(), + defaultPath, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); if (!directoryPath.isEmpty()) @@ -140,11 +150,11 @@ void PdmUiFilePathEditor::fileSelectionClicked() QString filePath; if (m_attributes.m_selectSaveFileName) { - filePath = QFileDialog::getSaveFileName(m_lineEdit, tr("Save File"), m_lineEdit->text(), m_attributes.m_fileSelectionFilter); + filePath = QFileDialog::getSaveFileName(m_lineEdit, tr("Save File"), defaultPath, m_attributes.m_fileSelectionFilter); } else { - filePath = QFileDialog::getOpenFileName(m_lineEdit, tr("Choose a file"), m_lineEdit->text(), m_attributes.m_fileSelectionFilter); + filePath = QFileDialog::getOpenFileName(m_lineEdit, tr("Choose a file"), defaultPath, m_attributes.m_fileSelectionFilter); } if (!filePath.isEmpty())