#7965 Add check box for choosing grouping by iteration.

This commit is contained in:
Kristian Bendiksen 2021-09-21 22:27:36 +02:00
parent 7ca424f6df
commit c6f04a6ad6
11 changed files with 124 additions and 45 deletions

View File

@ -55,14 +55,21 @@ bool RicImportEnsembleFractureStatisticsFeature::isCommandEnabled()
//--------------------------------------------------------------------------------------------------
void RicImportEnsembleFractureStatisticsFeature::onActionTriggered( bool isChecked )
{
RiaGuiApplication* app = RiaGuiApplication::instance();
QString pathCacheName = "INPUT_FILES";
QStringList fileNames = runRecursiveFileSearchDialog( "Import StimPlan Fractures", pathCacheName );
RiaGuiApplication* app = RiaGuiApplication::instance();
QString pathCacheName = "INPUT_FILES";
auto [fileNames, groupByIteration] = runRecursiveFileSearchDialog( "Import StimPlan Fractures", pathCacheName );
std::vector<QStringList> groupedByEnsemble = RiaEnsembleNameTools::groupFilesByEnsemble( fileNames );
for ( const QStringList& groupedFileNames : groupedByEnsemble )
if ( groupByIteration )
{
importSingleEnsembleFractureStatistics( groupedFileNames );
std::vector<QStringList> groupedByEnsemble = RiaEnsembleNameTools::groupFilesByEnsemble( fileNames );
for ( const QStringList& groupedFileNames : groupedByEnsemble )
{
importSingleEnsembleFractureStatistics( groupedFileNames );
}
}
else
{
importSingleEnsembleFractureStatistics( fileNames );
}
}
@ -117,8 +124,9 @@ void RicImportEnsembleFractureStatisticsFeature::setupActionLook( QAction* actio
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QStringList RicImportEnsembleFractureStatisticsFeature::runRecursiveFileSearchDialog( const QString& dialogTitle,
const QString& pathCacheName )
std::pair<QStringList, bool>
RicImportEnsembleFractureStatisticsFeature::runRecursiveFileSearchDialog( const QString& dialogTitle,
const QString& pathCacheName )
{
RiaApplication* app = RiaApplication::instance();
QString defaultDir = app->lastUsedDialogDirectory( pathCacheName );
@ -135,10 +143,10 @@ QStringList RicImportEnsembleFractureStatisticsFeature::runRecursiveFileSearchDi
m_pathFilter = result.pathFilter;
m_fileNameFilter = result.fileNameFilter;
if ( !result.ok ) return QStringList();
if ( !result.ok ) return std::make_pair( QStringList(), false );
// Remember the path to next time
app->setLastUsedDialogDirectory( pathCacheName, QFileInfo( result.rootDir ).absoluteFilePath() );
return result.files;
return std::make_pair( result.files, result.groupByIteration );
}

View File

@ -32,7 +32,8 @@ class RicImportEnsembleFractureStatisticsFeature : public caf::CmdFeature
public:
RicImportEnsembleFractureStatisticsFeature() {}
static QStringList runRecursiveFileSearchDialog( const QString& dialogTitle, const QString& pathCacheName );
static std::pair<QStringList, bool> runRecursiveFileSearchDialog( const QString& dialogTitle,
const QString& pathCacheName );
protected:
static void importSingleEnsembleFractureStatistics( const QStringList& fileNames );

View File

@ -52,6 +52,7 @@
#include <QFileInfo>
#include <QInputDialog>
#include <QRegularExpression>
#include <QStringList>
#include <set>
@ -70,16 +71,24 @@ bool RicImportEnsembleFeature::isCommandEnabled()
//--------------------------------------------------------------------------------------------------
void RicImportEnsembleFeature::onActionTriggered( bool isChecked )
{
QString pathCacheName = "ENSEMBLE_FILES";
QStringList fileNames =
RicImportSummaryCasesFeature::runRecursiveSummaryCaseFileSearchDialog( "Import Ensemble", pathCacheName );
QString pathCacheName = "ENSEMBLE_FILES";
auto [fileNames, groupByIteration] =
RicImportSummaryCasesFeature::runRecursiveSummaryCaseFileSearchDialogWithGrouping( "Import Ensemble",
pathCacheName );
if ( fileNames.isEmpty() ) return;
std::vector<QStringList> groupedByEnsemble = RiaEnsembleNameTools::groupFilesByEnsemble( fileNames );
for ( const QStringList& groupedFileNames : groupedByEnsemble )
if ( groupByIteration )
{
importSingleEnsemble( groupedFileNames );
std::vector<QStringList> groupedByEnsemble = RiaEnsembleNameTools::groupFilesByEnsemble( fileNames );
for ( const QStringList& groupedFileNames : groupedByEnsemble )
{
importSingleEnsemble( groupedFileNames );
}
}
else
{
importSingleEnsemble( fileNames );
}
}

View File

@ -62,11 +62,14 @@ bool RicImportEnsembleSurfaceFeature::isCommandEnabled()
//--------------------------------------------------------------------------------------------------
void RicImportEnsembleSurfaceFeature::onActionTriggered( bool isChecked )
{
RiaApplication* app = RiaApplication::instance();
QString pathCacheName = "ENSEMBLE_SURFACE_FILES";
QStringList fileNames = runRecursiveFileSearchDialog( "Import Ensemble Surface", pathCacheName );
RiaApplication* app = RiaApplication::instance();
QString pathCacheName = "ENSEMBLE_SURFACE_FILES";
auto [fileNames, groupByIteration] = runRecursiveFileSearchDialog( "Import Ensemble Surface", pathCacheName );
importEnsembleSurfaceFromFiles( fileNames );
if ( groupByIteration )
importEnsembleSurfaceFromFiles( fileNames );
else
importSingleEnsembleSurfaceFromFiles( fileNames );
}
//--------------------------------------------------------------------------------------------------
@ -182,8 +185,8 @@ void RicImportEnsembleSurfaceFeature::setupActionLook( QAction* actionToSetup )
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QStringList RicImportEnsembleSurfaceFeature::runRecursiveFileSearchDialog( const QString& dialogTitle,
const QString& pathCacheName )
std::pair<QStringList, bool> RicImportEnsembleSurfaceFeature::runRecursiveFileSearchDialog( const QString& dialogTitle,
const QString& pathCacheName )
{
RiaApplication* app = RiaApplication::instance();
QString defaultDir = app->lastUsedDialogDirectory( pathCacheName );
@ -201,10 +204,10 @@ QStringList RicImportEnsembleSurfaceFeature::runRecursiveFileSearchDialog( const
m_pathFilter = result.pathFilter;
m_fileNameFilter = result.fileNameFilter;
if ( !result.ok ) return QStringList();
if ( !result.ok ) return std::pair( QStringList(), false );
// Remember the path to next time
app->setLastUsedDialogDirectory( pathCacheName, QFileInfo( result.rootDir ).absoluteFilePath() );
return result.files;
return std::pair( result.files, result.groupByIteration );
}

View File

@ -40,7 +40,7 @@ protected:
void onActionTriggered( bool isChecked ) override;
void setupActionLook( QAction* actionToSetup ) override;
QStringList runRecursiveFileSearchDialog( const QString& dialogTitle, const QString& pathCacheName );
std::pair<QStringList, bool> runRecursiveFileSearchDialog( const QString& dialogTitle, const QString& pathCacheName );
static void importSingleEnsembleSurfaceFromFiles( const QStringList& fileNames );

View File

@ -58,12 +58,15 @@ bool RicImportEnsembleWellLogsFeature::isCommandEnabled()
//--------------------------------------------------------------------------------------------------
void RicImportEnsembleWellLogsFeature::onActionTriggered( bool isChecked )
{
RiaApplication* app = RiaApplication::instance();
QString pathCacheName = "ENSEMBLE_WELL_LOGS_FILES";
QStringList fileNames = runRecursiveFileSearchDialog( "Import Ensemble Well Logs", pathCacheName );
RiaApplication* app = RiaApplication::instance();
QString pathCacheName = "ENSEMBLE_WELL_LOGS_FILES";
auto [fileNames, groupByIteration] = runRecursiveFileSearchDialog( "Import Ensemble Well Logs", pathCacheName );
if ( fileNames.isEmpty() ) return;
createEnsembleWellLogsFromFiles( fileNames );
if ( groupByIteration )
createEnsembleWellLogsFromFiles( fileNames );
else
createSingleEnsembleWellLogsFromFiles( fileNames );
}
//--------------------------------------------------------------------------------------------------
@ -130,8 +133,8 @@ void RicImportEnsembleWellLogsFeature::setupActionLook( QAction* actionToSetup )
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QStringList RicImportEnsembleWellLogsFeature::runRecursiveFileSearchDialog( const QString& dialogTitle,
const QString& pathCacheName )
std::pair<QStringList, bool> RicImportEnsembleWellLogsFeature::runRecursiveFileSearchDialog( const QString& dialogTitle,
const QString& pathCacheName )
{
RiaApplication* app = RiaApplication::instance();
QString defaultDir = app->lastUsedDialogDirectory( pathCacheName );
@ -149,10 +152,10 @@ QStringList RicImportEnsembleWellLogsFeature::runRecursiveFileSearchDialog( cons
m_pathFilter = result.pathFilter;
m_fileNameFilter = result.fileNameFilter;
if ( !result.ok ) return QStringList();
if ( !result.ok ) return std::make_pair( QStringList(), false );
// Remember the path to next time
app->setLastUsedDialogDirectory( pathCacheName, QFileInfo( result.rootDir ).absoluteFilePath() );
return result.files;
return std::make_pair( result.files, result.groupByIteration );
}

View File

@ -43,7 +43,7 @@ protected:
void onActionTriggered( bool isChecked ) override;
void setupActionLook( QAction* actionToSetup ) override;
QStringList runRecursiveFileSearchDialog( const QString& dialogTitle, const QString& pathCacheName );
std::pair<QStringList, bool> runRecursiveFileSearchDialog( const QString& dialogTitle, const QString& pathCacheName );
private:
QString m_pathFilter;

View File

@ -251,8 +251,9 @@ void RicImportSummaryCasesFeature::addCasesToGroupIfRelevant( const std::vector<
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QStringList RicImportSummaryCasesFeature::runRecursiveSummaryCaseFileSearchDialog( const QString& dialogTitle,
const QString& pathCacheName )
std::pair<QStringList, bool>
RicImportSummaryCasesFeature::runRecursiveSummaryCaseFileSearchDialogWithGrouping( const QString& dialogTitle,
const QString& pathCacheName )
{
RiaApplication* app = RiaApplication::instance();
QString defaultDir = app->lastUsedDialogDirectory( pathCacheName );
@ -269,10 +270,20 @@ QStringList RicImportSummaryCasesFeature::runRecursiveSummaryCaseFileSearchDialo
m_pathFilter = result.pathFilter;
m_fileNameFilter = result.fileNameFilter;
if ( !result.ok ) return QStringList();
if ( !result.ok ) return std::make_pair( QStringList(), false );
// Remember the path to next time
app->setLastUsedDialogDirectory( pathCacheName, QFileInfo( result.rootDir ).absoluteFilePath() );
return result.files;
return std::make_pair( result.files, result.groupByIteration );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QStringList RicImportSummaryCasesFeature::runRecursiveSummaryCaseFileSearchDialog( const QString& dialogTitle,
const QString& pathCacheName )
{
std::pair<QStringList, bool> result = runRecursiveSummaryCaseFileSearchDialogWithGrouping( dialogTitle, pathCacheName );
return result.first;
}

View File

@ -48,6 +48,9 @@ public:
static QStringList runRecursiveSummaryCaseFileSearchDialog( const QString& dialogTitle, const QString& pathCacheName );
static std::pair<QStringList, bool>
runRecursiveSummaryCaseFileSearchDialogWithGrouping( const QString& dialogTitle, const QString& pathCacheName );
protected:
// Overrides
bool isCommandEnabled() override;

View File

@ -18,6 +18,7 @@
#include "RicRecursiveFileSearchDialog.h"
#include "RiaEnsembleNameTools.h"
#include "RiaFilePathTools.h"
#include "RiaGuiApplication.h"
#include "RiaStringListSerializer.h"
@ -132,7 +133,8 @@ RicRecursiveFileSearchDialogResult RicRecursiveFileSearchDialog::runRecursiveSea
dialog.m_foundFiles,
dialog.rootDirWithEndSeparator(),
dialog.pathFilterWithoutStartSeparator(),
dialog.fileNameFilter() );
dialog.fileNameFilter(),
dialog.groupByIteration() );
}
//--------------------------------------------------------------------------------------------------
@ -147,6 +149,9 @@ RicRecursiveFileSearchDialog::RicRecursiveFileSearchDialog( QWidget* parent )
m_useRealizationStarCheckBox = new QCheckBox( "Use 'realization-*' in filter" );
connect( m_useRealizationStarCheckBox, SIGNAL( clicked() ), this, SLOT( slotUseRealizationStarClicked() ) );
m_groupByIterationCheckBox = new QCheckBox( "Group by iteration" );
m_groupByIterationCheckBox->setChecked( true );
m_pathFilterLabel = new QLabel();
m_pathFilterField = new QComboBox();
m_fileFilterLabel = new QLabel();
@ -225,9 +230,10 @@ RicRecursiveFileSearchDialog::RicRecursiveFileSearchDialog( QWidget* parent )
inputGridLayout->addWidget( m_fileFilterLabel, 1, 0 );
inputGridLayout->addWidget( m_fileFilterField, 1, 1, 1, 2 );
inputGridLayout->addWidget( m_useRealizationStarCheckBox, 2, 1 );
inputGridLayout->addWidget( m_effectiveFilterLabel, 3, 0 );
inputGridLayout->addWidget( m_effectiveFilterContentLabel, 3, 1 );
inputGridLayout->addWidget( m_findOrCancelButton, 3, 2, 1, 2 );
inputGridLayout->addWidget( m_groupByIterationCheckBox, 3, 1 );
inputGridLayout->addWidget( m_effectiveFilterLabel, 4, 0 );
inputGridLayout->addWidget( m_effectiveFilterContentLabel, 4, 1 );
inputGridLayout->addWidget( m_findOrCancelButton, 4, 2, 1, 2 );
inputGroup->setLayout( inputGridLayout );
@ -369,9 +375,30 @@ void RicRecursiveFileSearchDialog::updateFileListWidget()
{
m_fileListWidget->clear();
if ( m_groupByIterationCheckBox->isChecked() )
{
std::vector<QStringList> groupedByEnsemble = RiaEnsembleNameTools::groupFilesByEnsemble( m_foundFiles );
for ( const QStringList& groupedFileNames : groupedByEnsemble )
{
QString iterationName = RiaEnsembleNameTools::findSuitableEnsembleName( groupedFileNames );
QListWidgetItem* item = new QListWidgetItem( QDir::toNativeSeparators( iterationName ), m_fileListWidget );
addToFileListWidget( groupedFileNames );
}
}
else
{
addToFileListWidget( m_foundFiles );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicRecursiveFileSearchDialog::addToFileListWidget( const QStringList& fileNames )
{
int rootSearchPathLength = rootDirWithEndSeparator().size();
for ( const auto& fileName : m_foundFiles )
for ( const auto& fileName : fileNames )
{
QString itemText = fileName;
itemText.remove( 0, rootSearchPathLength );
@ -855,6 +882,14 @@ void RicRecursiveFileSearchDialog::slotUseRealizationStarClicked()
updateEffectiveFilter();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RicRecursiveFileSearchDialog::groupByIteration() const
{
return m_groupByIterationCheckBox->isChecked();
}
//--------------------------------------------------------------------------------------------------
/// Internal functions
//--------------------------------------------------------------------------------------------------

View File

@ -70,6 +70,7 @@ private:
QStringList fileExtensions() const;
QString extensionFromFileNameFilter() const;
bool groupByIteration() const;
void setOkButtonEnabled( bool enabled );
void warningIfInvalidCharacters();
@ -78,6 +79,7 @@ private:
void updateFileListWidget();
void clearFileList();
void addToFileListWidget( const QStringList& fileNames );
// File search methods
@ -112,6 +114,7 @@ private:
QComboBox* m_pathFilterField;
QPushButton* m_browseButton;
QCheckBox* m_useRealizationStarCheckBox;
QCheckBox* m_groupByIterationCheckBox;
QLabel* m_fileFilterLabel;
QComboBox* m_fileFilterField;
@ -147,12 +150,14 @@ public:
const QStringList& files,
const QString& rootDir,
const QString& pathFilter,
const QString& fileNameFilter )
const QString& fileNameFilter,
bool groupByIteration )
: ok( ok )
, files( files )
, rootDir( rootDir )
, pathFilter( pathFilter )
, fileNameFilter( fileNameFilter )
, groupByIteration( groupByIteration )
{
}
@ -161,4 +166,5 @@ public:
QString rootDir;
QString pathFilter;
QString fileNameFilter;
bool groupByIteration;
};