mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-09 23:16:00 -06:00
#2555 Handle import to separate cases
This commit is contained in:
parent
8889bdf6d4
commit
2a84cb6ddf
@ -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();
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
};
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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();
|
||||
|
Loading…
Reference in New Issue
Block a user