#2555 Handle import to separate cases

This commit is contained in:
Bjørn Erik Jensen 2018-03-19 11:02:22 +01:00
parent 8889bdf6d4
commit 2a84cb6ddf
10 changed files with 186 additions and 106 deletions

View File

@ -31,7 +31,7 @@
#include "RiaViewRedrawScheduler.h" #include "RiaViewRedrawScheduler.h"
#include "RicImportInputEclipseCaseFeature.h" #include "RicImportInputEclipseCaseFeature.h"
#include "RicImportSummaryCaseFeature.h" #include "RicImportSummaryCasesFeature.h"
#include "ExportCommands/RicSnapshotAllViewsToFileFeature.h" #include "ExportCommands/RicSnapshotAllViewsToFileFeature.h"
#include "Rim2dIntersectionViewCollection.h" #include "Rim2dIntersectionViewCollection.h"
@ -1872,7 +1872,7 @@ bool RiaApplication::openFile(const QString& fileName)
} }
else if (fileName.contains(".smspec", Qt::CaseInsensitive)) else if (fileName.contains(".smspec", Qt::CaseInsensitive))
{ {
loadingSucceded = RicImportSummaryCaseFeature::createAndAddSummaryCaseFromFile(fileName); loadingSucceded = RicImportSummaryCasesFeature::createAndAddSummaryCaseFromFileWithDialog(fileName);
if (loadingSucceded) if (loadingSucceded)
{ {
getOrCreateAndShowMainPlotWindow(); getOrCreateAndShowMainPlotWindow();

View File

@ -21,7 +21,7 @@
#include "RiaApplication.h" #include "RiaApplication.h"
#include "RiaPreferences.h" #include "RiaPreferences.h"
#include "RicSummaryCaseRestartDialog.h" #include "RicImportSummaryCasesFeature.h"
#include "RimGridSummaryCase.h" #include "RimGridSummaryCase.h"
#include "RimMainPlotCollection.h" #include "RimMainPlotCollection.h"
@ -61,15 +61,11 @@ void RicImportSummaryCaseFeature::onActionTriggered(bool isChecked)
// Remember the path to next time // Remember the path to next time
app->setLastUsedDialogDirectory("INPUT_FILES", QFileInfo(fileNames.last()).absolutePath()); app->setLastUsedDialogDirectory("INPUT_FILES", QFileInfo(fileNames.last()).absolutePath());
RimProject* proj = app->project(); if (fileNames.isEmpty()) return;
RimSummaryCaseMainCollection* sumCaseColl = proj->activeOilField() ? proj->activeOilField()->summaryCaseMainCollection() : nullptr; std::vector<RicSummaryCaseFileInfo> fileInfos = RicImportSummaryCasesFeature::getFilesToImportWithDialog(fileNames, true);
if (!sumCaseColl) return;
for (auto f : fileNames) RicImportSummaryCasesFeature::createAndAddSummaryCaseFromFileInfo(fileInfos);
{
RicImportSummaryCaseFeature::createAndAddSummaryCaseFromFile(f);
}
std::vector<RimCase*> cases; std::vector<RimCase*> cases;
app->project()->allCases(cases); app->project()->allCases(cases);
@ -88,34 +84,3 @@ void RicImportSummaryCaseFeature::setupActionLook(QAction* actionToSetup)
actionToSetup->setIcon(QIcon(":/SummaryCase48x48.png")); actionToSetup->setIcon(QIcon(":/SummaryCase48x48.png"));
actionToSetup->setText("Import Summary Case"); actionToSetup->setText("Import Summary Case");
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RicImportSummaryCaseFeature::createAndAddSummaryCaseFromFile(const QString& fileName)
{
RiaApplication* app = RiaApplication::instance();
RimProject* proj = app->project();
RimSummaryCaseMainCollection* sumCaseColl = proj->activeOilField() ? proj->activeOilField()->summaryCaseMainCollection() : nullptr;
if (!sumCaseColl) return false;
RicSummaryCaseRestartDialogResult result = RicSummaryCaseRestartDialog::openDialog(fileName, false);
if (result.ok)
{
RimSummaryCase* sumCase = sumCaseColl->createAndAddSummaryCaseFromFileName(fileName, result.option == RicSummaryCaseRestartDialog::READ_ALL);
sumCaseColl->updateAllRequiredEditors();
RiuMainPlotWindow* mainPlotWindow = app->getOrCreateAndShowMainPlotWindow();
if (mainPlotWindow)
{
mainPlotWindow->selectAsCurrentItem(sumCase);
mainPlotWindow->updateSummaryPlotToolBar();
}
app->addToRecentFiles(fileName);
}
return true;
}

View File

@ -29,9 +29,6 @@ class RicImportSummaryCaseFeature : public caf::CmdFeature
{ {
CAF_CMD_HEADER_INIT; CAF_CMD_HEADER_INIT;
public:
static bool createAndAddSummaryCaseFromFile(const QString& fileName);
protected: protected:
// Overrides // Overrides
virtual bool isCommandEnabled() override; virtual bool isCommandEnabled() override;

View File

@ -72,15 +72,9 @@ void RicImportSummaryCasesFeature::onActionTriggered(bool isChecked)
QStringList fileNames = result.files; QStringList fileNames = result.files;
if (fileNames.isEmpty()) return; if (fileNames.isEmpty()) return;
RimProject* proj = app->project(); std::vector<RicSummaryCaseFileInfo> fileInfos = getFilesToImportWithDialog(fileNames, true);
RimSummaryCaseMainCollection* sumCaseColl = proj->activeOilField() ? proj->activeOilField()->summaryCaseMainCollection() : nullptr;
if (!sumCaseColl) return;
RicSummaryCaseRestartDialogResult savedDialogResult; createAndAddSummaryCaseFromFileInfo(fileInfos);
for (auto f : fileNames)
{
RicImportSummaryCasesFeature::createAndAddSummaryCaseFromFile(f, &savedDialogResult);
}
std::vector<RimCase*> cases; std::vector<RimCase*> cases;
app->project()->allCases(cases); app->project()->allCases(cases);
@ -103,33 +97,84 @@ void RicImportSummaryCasesFeature::setupActionLook(QAction* actionToSetup)
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
bool RicImportSummaryCasesFeature::createAndAddSummaryCaseFromFile(const QString& fileName, RicSummaryCaseRestartDialogResult *savedDialogResult) std::vector<RicSummaryCaseFileInfo> RicImportSummaryCasesFeature::getFilesToImportWithDialog(const QStringList& initialFiles,
bool enableApplyToAllField)
{
std::set<RicSummaryCaseFileInfo> filesToImport;
RicSummaryCaseRestartDialogResult lastResult;
for (const QString& file : initialFiles)
{
RicSummaryCaseRestartDialogResult result;
if (lastResult.applyToAll) result = lastResult;
else result = RicSummaryCaseRestartDialog::openDialog(file, enableApplyToAllField);
if (result.ok)
{
if(result.files.size() > 0) RiaApplication::instance()->addToRecentFiles(result.files.front());
for (const QString& file : result.files)
{
RicSummaryCaseFileInfo fi(file, result.option == RicSummaryCaseRestartDialog::READ_ALL);
if (filesToImport.count(fi) == 0)
{
filesToImport.insert(fi);
}
}
}
lastResult = result;
}
return std::vector<RicSummaryCaseFileInfo>(filesToImport.begin(), filesToImport.end());
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RicImportSummaryCasesFeature::createAndAddSummaryCaseFromFileInfo(const std::vector<RicSummaryCaseFileInfo>& fileInfos)
{
RiaApplication* app = RiaApplication::instance();
RimProject* proj = app->project();
RimSummaryCaseMainCollection* sumCaseColl = proj->activeOilField() ? proj->activeOilField()->summaryCaseMainCollection() : nullptr;
if (!sumCaseColl) return false;
for (const auto& fi : fileInfos)
{
createAndAddSummaryCaseFromFile(fi.fileName, fi.includeRestartFiles);
}
return true;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RicImportSummaryCasesFeature::createAndAddSummaryCaseFromFileWithDialog(const QString& fileName)
{
QStringList fileNames({ fileName });
std::vector<RicSummaryCaseFileInfo> fileInfos = getFilesToImportWithDialog(fileNames, false);
bool res = createAndAddSummaryCaseFromFileInfo(fileInfos);
RiaApplication::instance()->addToRecentFiles(fileName);
return res;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RicImportSummaryCasesFeature::createAndAddSummaryCaseFromFile(const QString& fileName, bool includeRestartFiles)
{ {
RiaApplication* app = RiaApplication::instance(); RiaApplication* app = RiaApplication::instance();
RimProject* proj = app->project(); RimProject* proj = app->project();
RimSummaryCaseMainCollection* sumCaseColl = proj->activeOilField() ? proj->activeOilField()->summaryCaseMainCollection() : nullptr; RimSummaryCaseMainCollection* sumCaseColl = proj->activeOilField() ? proj->activeOilField()->summaryCaseMainCollection() : nullptr;
if (!sumCaseColl) return false; if (!sumCaseColl) return false;
RicSummaryCaseRestartDialogResult result; RimSummaryCase* sumCase = sumCaseColl->createAndAddSummaryCaseFromFileName(fileName, includeRestartFiles);
if (savedDialogResult->applyToAll) result = *savedDialogResult; sumCaseColl->updateAllRequiredEditors();
else result = RicSummaryCaseRestartDialog::openDialog(fileName, true);
if (result.ok) RiuMainPlotWindow* mainPlotWindow = app->getOrCreateAndShowMainPlotWindow();
if (mainPlotWindow)
{ {
RimSummaryCase* sumCase = sumCaseColl->createAndAddSummaryCaseFromFileName(fileName, result.option == RicSummaryCaseRestartDialog::READ_ALL); mainPlotWindow->selectAsCurrentItem(sumCase);
sumCaseColl->updateAllRequiredEditors();
RiuMainPlotWindow* mainPlotWindow = app->getOrCreateAndShowMainPlotWindow(); mainPlotWindow->updateSummaryPlotToolBar();
if (mainPlotWindow)
{
mainPlotWindow->selectAsCurrentItem(sumCase);
mainPlotWindow->updateSummaryPlotToolBar();
}
app->addToRecentFiles(fileName);
*savedDialogResult = result;
} }
return true; return true;
} }

View File

@ -24,6 +24,23 @@
class RicSummaryCaseRestartDialogResult; class RicSummaryCaseRestartDialogResult;
//==================================================================================================
///
//==================================================================================================
class RicSummaryCaseFileInfo
{
public:
RicSummaryCaseFileInfo(const QString _fileName, bool _includeRestartFiles) :
fileName(_fileName), includeRestartFiles(_includeRestartFiles) {}
QString fileName;
bool includeRestartFiles;
bool operator<(const RicSummaryCaseFileInfo& other) const { return fileName < other.fileName; }
bool operator==(const RicSummaryCaseFileInfo& other) const { return fileName == other.fileName; }
};
//================================================================================================== //==================================================================================================
/// ///
//================================================================================================== //==================================================================================================
@ -34,7 +51,14 @@ class RicImportSummaryCasesFeature : public caf::CmdFeature
public: public:
RicImportSummaryCasesFeature() : m_pathFilter("*"), m_fileNameFilter("*") { } RicImportSummaryCasesFeature() : m_pathFilter("*"), m_fileNameFilter("*") { }
static bool createAndAddSummaryCaseFromFile(const QString& fileName, RicSummaryCaseRestartDialogResult *lastResult); static std::vector<RicSummaryCaseFileInfo> getFilesToImportWithDialog(const QStringList& initialFiles,
bool enableApplyToAllField);
static bool createAndAddSummaryCaseFromFileInfo(const std::vector<RicSummaryCaseFileInfo>& fileInfos);
static bool createAndAddSummaryCaseFromFileWithDialog(const QString& fileName);
private:
static bool createAndAddSummaryCaseFromFile(const QString& fileName, bool includeRestartFiles);
protected: protected:
// Overrides // Overrides

View File

@ -57,6 +57,15 @@
#define DEFAULT_DIALOG_WIDTH 550 #define DEFAULT_DIALOG_WIDTH 550
#define DEFAULT_DIALOG_INIT_HEIGHT 150 #define DEFAULT_DIALOG_INIT_HEIGHT 150
//--------------------------------------------------------------------------------------------------
/// Internal variables
//--------------------------------------------------------------------------------------------------
static QString SEPARATOR = "/";
//--------------------------------------------------------------------------------------------------
/// Internal functions
//--------------------------------------------------------------------------------------------------
static QString toInternalSeparator(const QString& path);
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
@ -130,27 +139,40 @@ RicSummaryCaseRestartDialogResult RicSummaryCaseRestartDialog::openDialog(const
{ {
RicSummaryCaseRestartDialog dialog(parent); RicSummaryCaseRestartDialog dialog(parent);
std::vector<RifRestartFileInfo> fileInfos = dialog.getRestartFiles(summaryHeaderFile);
for (const auto& fileInfo : fileInfos)
{
dialog.appendToFileList(fileInfo);
}
// If no restart files are found, do not show dialog
if (fileInfos.empty())
{
return RicSummaryCaseRestartDialogResult(true, READ_SINGLE, QStringList({ summaryHeaderFile }), false);
}
dialog.setWindowTitle("Summary Case Restart Files"); dialog.setWindowTitle("Summary Case Restart Files");
dialog.m_readAllRadioButton->setChecked(true); dialog.m_readAllRadioButton->setChecked(true);
dialog.m_currentFile->setText(summaryHeaderFile); dialog.m_currentFile->setText(summaryHeaderFile);
dialog.m_applyToAllCheckBox->setVisible(showApplyToAllWidget); dialog.m_applyToAllCheckBox->setVisible(showApplyToAllWidget);
std::vector<RifRestartFileInfo> files = dialog.getRestartFiles(summaryHeaderFile);
for (const auto& file : files)
{
dialog.appendToFileList(file);
}
// If no restart files are found, do not show dialog
if (files.empty())
{
return RicSummaryCaseRestartDialogResult(true, READ_ALL, false);
}
dialog.resize(DEFAULT_DIALOG_WIDTH, DEFAULT_DIALOG_INIT_HEIGHT); dialog.resize(DEFAULT_DIALOG_WIDTH, DEFAULT_DIALOG_INIT_HEIGHT);
dialog.exec(); dialog.exec();
return RicSummaryCaseRestartDialogResult(dialog.result() == QDialog::Accepted, dialog.selectedOption(), dialog.applyToAllSelected());
if (dialog.result() != QDialog::Accepted)
{
return RicSummaryCaseRestartDialogResult(false, READ_SINGLE, QStringList(), false);
}
QStringList files({ toInternalSeparator(summaryHeaderFile) });
if (dialog.selectedOption() == SEPARATE_CASES)
{
for (const auto& fileInfo : fileInfos)
{
files.push_back(toInternalSeparator(fileInfo.fileName));
}
}
return RicSummaryCaseRestartDialogResult(true, dialog.selectedOption(), files, dialog.applyToAllSelected());
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -159,9 +181,9 @@ RicSummaryCaseRestartDialogResult RicSummaryCaseRestartDialog::openDialog(const
RicSummaryCaseRestartDialog::ReadOptions RicSummaryCaseRestartDialog::selectedOption() const RicSummaryCaseRestartDialog::ReadOptions RicSummaryCaseRestartDialog::selectedOption() const
{ {
return return
m_notReadRadionButton->isChecked() ? NOT_READ : m_readAllRadioButton->isChecked() ? READ_ALL :
m_separateCasesRadionButton->isChecked() ? SEPARATE_CASES : m_separateCasesRadionButton->isChecked() ? SEPARATE_CASES :
READ_ALL; READ_SINGLE;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -217,3 +239,25 @@ void RicSummaryCaseRestartDialog::slotDialogCancelClicked()
{ {
reject(); reject();
} }
//--------------------------------------------------------------------------------------------------
/// Internal functions
//--------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString toInternalSeparator(const QString& path)
{
QString currNativeSep = QDir::separator();
if (currNativeSep == "/")
{
// On Linux like system -> Do not convert separators
return path;
}
// On other systems (i.e. Windows) -> Convert to internal separator (/)
QString output = path;
return output.replace(QString("\\"), SEPARATOR);
}

View File

@ -46,7 +46,7 @@ class RicSummaryCaseRestartDialog : public QDialog
Q_OBJECT Q_OBJECT
public: public:
enum ReadOptions { READ_ALL, NOT_READ, SEPARATE_CASES }; enum ReadOptions { READ_SINGLE, READ_ALL, SEPARATE_CASES };
RicSummaryCaseRestartDialog(QWidget* parent); RicSummaryCaseRestartDialog(QWidget* parent);
~RicSummaryCaseRestartDialog(); ~RicSummaryCaseRestartDialog();
@ -91,11 +91,13 @@ public:
RicSummaryCaseRestartDialogResult(bool _ok, RicSummaryCaseRestartDialogResult(bool _ok,
RicSummaryCaseRestartDialog::ReadOptions _option, RicSummaryCaseRestartDialog::ReadOptions _option,
QStringList _files,
bool _applyToAll) : bool _applyToAll) :
ok(_ok), option(_option), applyToAll(_applyToAll) { ok(_ok), option(_option), files(_files), applyToAll(_applyToAll) {
} }
bool ok; bool ok;
RicSummaryCaseRestartDialog::ReadOptions option; RicSummaryCaseRestartDialog::ReadOptions option;
bool applyToAll; QStringList files;
bool applyToAll;
}; };

View File

@ -39,17 +39,10 @@ CAF_PDM_SOURCE_INIT(RimFileSummaryCase,"FileSummaryCase");
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RimFileSummaryCase::RimFileSummaryCase() : m_includeRestartFiles(false) RimFileSummaryCase::RimFileSummaryCase()
{ {
CAF_PDM_InitField(&m_includeRestartFiles, "IncludeRestartFiles", false, "Include Restart Files", "", "", "");
} m_includeRestartFiles.uiCapability()->setUiHidden(true);
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimFileSummaryCase::RimFileSummaryCase(bool includeRestartFiles)
{
m_includeRestartFiles = includeRestartFiles;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -119,3 +112,11 @@ RifSummaryReaderInterface* RimFileSummaryCase::summaryReader()
{ {
return m_summaryFileReader.p(); return m_summaryFileReader.p();
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimFileSummaryCase::setIncludeRestartFiles(bool includeRestartFiles)
{
m_includeRestartFiles = includeRestartFiles;
}

View File

@ -20,7 +20,7 @@
#include "RimSummaryCase.h" #include "RimSummaryCase.h"
#include "cvfObject.h" #include "cvfObject.h"
#include "cafPdmField.h"
class RifReaderEclipseSummary; class RifReaderEclipseSummary;
@ -34,7 +34,6 @@ class RimFileSummaryCase: public RimSummaryCase
CAF_PDM_HEADER_INIT; CAF_PDM_HEADER_INIT;
public: public:
RimFileSummaryCase(); RimFileSummaryCase();
RimFileSummaryCase(bool includeRestartFiles);
virtual ~RimFileSummaryCase(); virtual ~RimFileSummaryCase();
virtual QString summaryHeaderFilename() const override; virtual QString summaryHeaderFilename() const override;
@ -44,9 +43,11 @@ public:
virtual void createSummaryReaderInterface() override; virtual void createSummaryReaderInterface() override;
virtual RifSummaryReaderInterface* summaryReader() override; virtual RifSummaryReaderInterface* summaryReader() override;
void setIncludeRestartFiles(bool includeRestartFiles);
static RifReaderEclipseSummary* findRelatedFilesAndCreateReader(const QString& headerFileName, bool includeRestartFiles); static RifReaderEclipseSummary* findRelatedFilesAndCreateReader(const QString& headerFileName, bool includeRestartFiles);
private: private:
cvf::ref<RifReaderEclipseSummary> m_summaryFileReader; cvf::ref<RifReaderEclipseSummary> m_summaryFileReader;
bool m_includeRestartFiles; caf::PdmField<bool> m_includeRestartFiles;
}; };

View File

@ -284,9 +284,10 @@ RimSummaryCase* RimSummaryCaseMainCollection::createAndAddSummaryCaseFromEclipse
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RimSummaryCase* RimSummaryCaseMainCollection::createAndAddSummaryCaseFromFileName(const QString& fileName, bool includeRestartFiles) RimSummaryCase* RimSummaryCaseMainCollection::createAndAddSummaryCaseFromFileName(const QString& fileName, bool includeRestartFiles)
{ {
RimFileSummaryCase* newSumCase = new RimFileSummaryCase(includeRestartFiles); RimFileSummaryCase* newSumCase = new RimFileSummaryCase();
this->m_cases.push_back(newSumCase); this->m_cases.push_back(newSumCase);
newSumCase->setIncludeRestartFiles(includeRestartFiles);
newSumCase->setSummaryHeaderFileName(fileName); newSumCase->setSummaryHeaderFileName(fileName);
newSumCase->createSummaryReaderInterface(); newSumCase->createSummaryReaderInterface();
newSumCase->updateOptionSensitivity(); newSumCase->updateOptionSensitivity();