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
This commit is contained in:
Jacob Støren 2012-10-23 09:59:57 +02:00
parent ac26fd8e0c
commit 875d7b7d12
5 changed files with 114 additions and 16 deletions

View File

@ -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 <filename> Open project file <filename>\n"
"-case <casename> Open Eclipse case <casename>\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<QString, QString>::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;
}

View File

@ -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<QString, QString> m_fileDialogDefaultDirectories;
QString m_startupDefaultDirectory;
};

View File

@ -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<RimUiTreeModelPdm*>(model());
caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(currentIndex());

View File

@ -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);
}

View File

@ -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())