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

View File

@ -21,7 +21,7 @@
#include "RiaApplication.h"
#include "RiaPreferences.h"
#include "RicSummaryCaseRestartDialog.h"
#include "RicImportSummaryCasesFeature.h"
#include "RimGridSummaryCase.h"
#include "RimMainPlotCollection.h"
@ -61,15 +61,11 @@ void RicImportSummaryCaseFeature::onActionTriggered(bool isChecked)
// Remember the path to next time
app->setLastUsedDialogDirectory("INPUT_FILES", QFileInfo(fileNames.last()).absolutePath());
RimProject* proj = app->project();
if (fileNames.isEmpty()) return;
RimSummaryCaseMainCollection* sumCaseColl = proj->activeOilField() ? proj->activeOilField()->summaryCaseMainCollection() : nullptr;
if (!sumCaseColl) return;
std::vector<RicSummaryCaseFileInfo> fileInfos = RicImportSummaryCasesFeature::getFilesToImportWithDialog(fileNames, true);
for (auto f : fileNames)
{
RicImportSummaryCaseFeature::createAndAddSummaryCaseFromFile(f);
}
RicImportSummaryCasesFeature::createAndAddSummaryCaseFromFileInfo(fileInfos);
std::vector<RimCase*> cases;
app->project()->allCases(cases);
@ -88,34 +84,3 @@ void RicImportSummaryCaseFeature::setupActionLook(QAction* actionToSetup)
actionToSetup->setIcon(QIcon(":/SummaryCase48x48.png"));
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;
public:
static bool createAndAddSummaryCaseFromFile(const QString& fileName);
protected:
// Overrides
virtual bool isCommandEnabled() override;

View File

@ -72,15 +72,9 @@ void RicImportSummaryCasesFeature::onActionTriggered(bool isChecked)
QStringList fileNames = result.files;
if (fileNames.isEmpty()) return;
RimProject* proj = app->project();
RimSummaryCaseMainCollection* sumCaseColl = proj->activeOilField() ? proj->activeOilField()->summaryCaseMainCollection() : nullptr;
if (!sumCaseColl) return;
std::vector<RicSummaryCaseFileInfo> fileInfos = getFilesToImportWithDialog(fileNames, true);
RicSummaryCaseRestartDialogResult savedDialogResult;
for (auto f : fileNames)
{
RicImportSummaryCasesFeature::createAndAddSummaryCaseFromFile(f, &savedDialogResult);
}
createAndAddSummaryCaseFromFileInfo(fileInfos);
std::vector<RimCase*> 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();
RimProject* proj = app->project();
RimSummaryCaseMainCollection* sumCaseColl = proj->activeOilField() ? proj->activeOilField()->summaryCaseMainCollection() : nullptr;
if (!sumCaseColl) return false;
RicSummaryCaseRestartDialogResult result;
if (savedDialogResult->applyToAll) result = *savedDialogResult;
else result = RicSummaryCaseRestartDialog::openDialog(fileName, true);
RimSummaryCase* sumCase = sumCaseColl->createAndAddSummaryCaseFromFileName(fileName, includeRestartFiles);
sumCaseColl->updateAllRequiredEditors();
if (result.ok)
RiuMainPlotWindow* mainPlotWindow = app->getOrCreateAndShowMainPlotWindow();
if (mainPlotWindow)
{
RimSummaryCase* sumCase = sumCaseColl->createAndAddSummaryCaseFromFileName(fileName, result.option == RicSummaryCaseRestartDialog::READ_ALL);
sumCaseColl->updateAllRequiredEditors();
mainPlotWindow->selectAsCurrentItem(sumCase);
RiuMainPlotWindow* mainPlotWindow = app->getOrCreateAndShowMainPlotWindow();
if (mainPlotWindow)
{
mainPlotWindow->selectAsCurrentItem(sumCase);
mainPlotWindow->updateSummaryPlotToolBar();
}
app->addToRecentFiles(fileName);
*savedDialogResult = result;
mainPlotWindow->updateSummaryPlotToolBar();
}
return true;
}

View File

@ -24,6 +24,23 @@
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:
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:
// Overrides

View File

@ -57,6 +57,15 @@
#define DEFAULT_DIALOG_WIDTH 550
#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);
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.m_readAllRadioButton->setChecked(true);
dialog.m_currentFile->setText(summaryHeaderFile);
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.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
{
return
m_notReadRadionButton->isChecked() ? NOT_READ :
m_readAllRadioButton->isChecked() ? READ_ALL :
m_separateCasesRadionButton->isChecked() ? SEPARATE_CASES :
READ_ALL;
READ_SINGLE;
}
//--------------------------------------------------------------------------------------------------
@ -217,3 +239,25 @@ void RicSummaryCaseRestartDialog::slotDialogCancelClicked()
{
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
public:
enum ReadOptions { READ_ALL, NOT_READ, SEPARATE_CASES };
enum ReadOptions { READ_SINGLE, READ_ALL, SEPARATE_CASES };
RicSummaryCaseRestartDialog(QWidget* parent);
~RicSummaryCaseRestartDialog();
@ -91,11 +91,13 @@ public:
RicSummaryCaseRestartDialogResult(bool _ok,
RicSummaryCaseRestartDialog::ReadOptions _option,
QStringList _files,
bool _applyToAll) :
ok(_ok), option(_option), applyToAll(_applyToAll) {
ok(_ok), option(_option), files(_files), applyToAll(_applyToAll) {
}
bool ok;
RicSummaryCaseRestartDialog::ReadOptions option;
bool applyToAll;
bool ok;
RicSummaryCaseRestartDialog::ReadOptions option;
QStringList files;
bool applyToAll;
};

View File

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

View File

@ -20,7 +20,7 @@
#include "RimSummaryCase.h"
#include "cvfObject.h"
#include "cafPdmField.h"
class RifReaderEclipseSummary;
@ -34,7 +34,6 @@ class RimFileSummaryCase: public RimSummaryCase
CAF_PDM_HEADER_INIT;
public:
RimFileSummaryCase();
RimFileSummaryCase(bool includeRestartFiles);
virtual ~RimFileSummaryCase();
virtual QString summaryHeaderFilename() const override;
@ -44,9 +43,11 @@ public:
virtual void createSummaryReaderInterface() override;
virtual RifSummaryReaderInterface* summaryReader() override;
void setIncludeRestartFiles(bool includeRestartFiles);
static RifReaderEclipseSummary* findRelatedFilesAndCreateReader(const QString& headerFileName, bool includeRestartFiles);
private:
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)
{
RimFileSummaryCase* newSumCase = new RimFileSummaryCase(includeRestartFiles);
RimFileSummaryCase* newSumCase = new RimFileSummaryCase();
this->m_cases.push_back(newSumCase);
newSumCase->setIncludeRestartFiles(includeRestartFiles);
newSumCase->setSummaryHeaderFileName(fileName);
newSumCase->createSummaryReaderInterface();
newSumCase->updateOptionSensitivity();