From 49236839a388a2bd7b7fb93ff473a2fa37289446 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 21 Feb 2013 16:46:34 +0100 Subject: [PATCH] Added menu item for multiple case import Find EGRID files recursively in subfolders p4#: 20603 --- ApplicationCode/Application/RIApplication.cpp | 25 +++++++ ApplicationCode/Application/RIApplication.h | 1 + .../UserInterface/RIMainWindow.cpp | 70 +++++++++++++++++++ ApplicationCode/UserInterface/RIMainWindow.h | 2 + 4 files changed, 98 insertions(+) diff --git a/ApplicationCode/Application/RIApplication.cpp b/ApplicationCode/Application/RIApplication.cpp index 1423818f87..90e70ceaef 100644 --- a/ApplicationCode/Application/RIApplication.cpp +++ b/ApplicationCode/Application/RIApplication.cpp @@ -1291,3 +1291,28 @@ void RIApplication::updateRegressionTest(const QString& testRootPath) } } } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RIApplication::addEclipseCase(const QString& fileName) +{ + QFileInfo gridFileName(fileName); + + QString caseName = gridFileName.completeBaseName(); + QString casePath = gridFileName.absolutePath(); + + RimResultReservoir* rimResultReservoir = new RimResultReservoir(); + rimResultReservoir->caseName = caseName; + rimResultReservoir->caseFileName = fileName; + rimResultReservoir->caseDirectory = casePath; + + m_project->reservoirs.push_back(rimResultReservoir); + + rimResultReservoir->openEclipseGridFile(); + + onProjectOpenedOrClosed(); + + return true; + +} diff --git a/ApplicationCode/Application/RIApplication.h b/ApplicationCode/Application/RIApplication.h index 06c5822593..6603b52380 100644 --- a/ApplicationCode/Application/RIApplication.h +++ b/ApplicationCode/Application/RIApplication.h @@ -80,6 +80,7 @@ public: bool openEclipseCaseFromFile(const QString& fileName); bool openEclipseCase(const QString& caseName, const QString& caseFileName); + bool addEclipseCase(const QString& fileName); bool openInputEclipseCase(const QString& caseName, const QStringList& caseFileNames); bool loadLastUsedProject(); diff --git a/ApplicationCode/UserInterface/RIMainWindow.cpp b/ApplicationCode/UserInterface/RIMainWindow.cpp index 625373fcf2..407ae81226 100644 --- a/ApplicationCode/UserInterface/RIMainWindow.cpp +++ b/ApplicationCode/UserInterface/RIMainWindow.cpp @@ -177,6 +177,8 @@ void RIMainWindow::createActions() // File actions m_openAction = new QAction(QIcon(":/AppLogo48x48.png"), "&Open Eclipse Case", this); m_openInputEclipseFileAction= new QAction(QIcon(":/EclipseInput48x48.png"), "&Open Input Eclipse Case", this); + m_openMultipleEclipseCasesAction = new QAction(QIcon(":/EclipseInput48x48.png"), "&Open Multiple Eclipse Folders", this); + m_openProjectAction = new QAction(style()->standardIcon(QStyle::SP_DirOpenIcon), "&Open Project", this); m_openLastUsedProjectAction = new QAction("Open &Last Used Project", this); @@ -197,6 +199,7 @@ void RIMainWindow::createActions() connect(m_openAction, SIGNAL(triggered()), SLOT(slotOpenBinaryGridFiles())); connect(m_openInputEclipseFileAction,SIGNAL(triggered()), SLOT(slotOpenInputFiles())); + connect(m_openMultipleEclipseCasesAction,SIGNAL(triggered()), SLOT(slotOpenMultipleCases())); connect(m_openProjectAction, SIGNAL(triggered()), SLOT(slotOpenProject())); connect(m_openLastUsedProjectAction,SIGNAL(triggered()), SLOT(slotOpenLastUsedProject())); @@ -264,6 +267,7 @@ void RIMainWindow::createMenus() QMenu* fileMenu = menuBar()->addMenu("&File"); fileMenu->addAction(m_openAction); fileMenu->addAction(m_openInputEclipseFileAction); + fileMenu->addAction(m_openMultipleEclipseCasesAction); fileMenu->addAction(m_openProjectAction); fileMenu->addAction(m_openLastUsedProjectAction); @@ -1249,3 +1253,69 @@ void RIMainWindow::hideAllDockWindows() dockWidgets[i]->close(); } } + + +void appendEGRIDFilesRecursively(const QString& folderName, QStringList& gridFileNames) +{ + { + QDir baseDir(folderName); + baseDir.setFilter(QDir::Files); + + QStringList nameFilters; + nameFilters << "*.egrid" << ".EGRID"; + baseDir.setNameFilters(nameFilters); + + QStringList fileNames = baseDir.entryList(); + + for (int i = 0; i < fileNames.size(); ++i) + { + QString fileName = fileNames[i]; + + QString absoluteFolderName = baseDir.absoluteFilePath(fileName); + + gridFileNames.append(absoluteFolderName); + } + } + + + { + QDir baseDir(folderName); + baseDir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot); + + QStringList subFolders = baseDir.entryList(); + + for (int i = 0; i < subFolders.size(); ++i) + { + QString folderName = subFolders[i]; + + QString absoluteFolderName = baseDir.absoluteFilePath(folderName); + appendEGRIDFilesRecursively(absoluteFolderName, gridFileNames); + } + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RIMainWindow::slotOpenMultipleCases() +{ + RIApplication* app = RIApplication::instance(); + + + QStringList folderNames; + QStringList gridFileNames; + + for (int i = 0; i < folderNames.size(); i++) + { + QString fileName = folderNames[i]; + + appendEGRIDFilesRecursively(fileName, gridFileNames); + } + + for (int i = 0; i < gridFileNames.size(); i++) + { + QString fileName = gridFileNames[i]; + + app->addEclipseCase(fileName); + } +} diff --git a/ApplicationCode/UserInterface/RIMainWindow.h b/ApplicationCode/UserInterface/RIMainWindow.h index 0f133900bd..284ab19bdd 100644 --- a/ApplicationCode/UserInterface/RIMainWindow.h +++ b/ApplicationCode/UserInterface/RIMainWindow.h @@ -106,6 +106,7 @@ private: // File actions QAction* m_openAction; QAction* m_openInputEclipseFileAction; + QAction* m_openMultipleEclipseCasesAction; QAction* m_openProjectAction; QAction* m_openLastUsedProjectAction; QAction* m_saveProjectAction; @@ -162,6 +163,7 @@ private slots: // File slots void slotOpenBinaryGridFiles(); void slotOpenInputFiles(); + void slotOpenMultipleCases(); void slotOpenProject(); void slotOpenLastUsedProject(); void slotSaveProject();