ResInsight/ApplicationLibCode/UserInterface/RiuAdvancedSnapshotExportWidget.cpp
Kristian Bendiksen b5666c333a Refactor connection between cases and views.
Eclipse grid views and contour maps are not longer a child of the case.
The views are not separate collections (one for grid and one for contour maps)
on root level.
2024-04-15 16:10:43 +02:00

258 lines
9.7 KiB
C++

/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2016 Statoil ASA
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#include "RiuAdvancedSnapshotExportWidget.h"
#include "RiaApplication.h"
#include "ExportCommands/RicAdvancedSnapshotExportFeature.h"
#include "Rim3dView.h"
#include "RimAdvancedSnapshotExportDefinition.h"
#include "RimCase.h"
#include "RimEclipseCellColors.h"
#include "RimEclipseView.h"
#include "RimProject.h"
#include "RiuFileDialogTools.h"
#include "RiuTools.h"
#include "cafCmdFeatureManager.h"
#include "cafPdmUiTableView.h"
#include "cafSelectionManager.h"
#include <QAbstractItemView>
#include <QBoxLayout>
#include <QDialogButtonBox>
#include <QHeaderView>
#include <QLabel>
#include <QLineEdit>
#include <QMenu>
#include <QPushButton>
#include <QTableView>
#include <QToolButton>
#include <QWidget>
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RiuAdvancedSnapshotExportWidget::RiuAdvancedSnapshotExportWidget( QWidget* parent, RimProject* project )
: QDialog( parent, RiuTools::defaultDialogFlags() )
, m_rimProject( project )
{
setWindowTitle( "Advanced Snapshot Export" );
int nWidth = 1000;
int nHeight = 300;
resize( nWidth, nHeight );
QVBoxLayout* dialogLayout = new QVBoxLayout;
setLayout( dialogLayout );
m_pdmTableView = new caf::PdmUiTableView( this );
m_pdmTableView->tableView()->setSelectionMode( QAbstractItemView::ExtendedSelection );
m_pdmTableView->tableView()->setContextMenuPolicy( Qt::CustomContextMenu );
m_pdmTableView->enableHeaderText( false );
connect( m_pdmTableView->tableView(), SIGNAL( customContextMenuRequested( QPoint ) ), SLOT( customMenuRequested( QPoint ) ) );
m_pdmTableView->setChildArrayField( &( project->multiSnapshotDefinitions() ) );
QHeaderView* verticalHeader = m_pdmTableView->tableView()->verticalHeader();
verticalHeader->setSectionResizeMode( QHeaderView::Interactive );
m_pdmTableView->tableView()->resizeColumnsToContents();
// Set active child array to be able to use generic delete
caf::SelectionManager::instance()->setActiveChildArrayFieldHandle( &( project->multiSnapshotDefinitions() ) );
dialogLayout->addWidget( m_pdmTableView );
// Export folder
{
QHBoxLayout* layout = new QHBoxLayout;
layout->addWidget( new QLabel( "Export folder" ) );
m_exportFolderLineEdit = new QLineEdit;
QToolButton* button = new QToolButton;
button->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Preferred ) );
button->setText( QLatin1String( "..." ) );
layout->addWidget( m_exportFolderLineEdit );
layout->addWidget( button );
connect( button, SIGNAL( clicked() ), this, SLOT( folderSelectionClicked() ) );
dialogLayout->addLayout( layout );
}
// Buttons
QDialogButtonBox* buttonBox = new QDialogButtonBox( QDialogButtonBox::Close );
connect( buttonBox, SIGNAL( accepted() ), this, SLOT( accept() ) );
connect( buttonBox, SIGNAL( rejected() ), this, SLOT( reject() ) );
QPushButton* exportButton = new QPushButton( tr( "Export" ) );
exportButton->setDefault( true );
buttonBox->addButton( exportButton, QDialogButtonBox::ActionRole );
connect( exportButton, SIGNAL( clicked() ), this, SLOT( exportSnapshots() ) );
dialogLayout->addWidget( buttonBox );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RiuAdvancedSnapshotExportWidget::~RiuAdvancedSnapshotExportWidget()
{
m_pdmTableView->setChildArrayField( nullptr );
caf::SelectionManager::instance()->setActiveChildArrayFieldHandle( nullptr );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuAdvancedSnapshotExportWidget::addSnapshotItemFromActiveView()
{
if ( !m_rimProject ) return;
Rim3dView* activeView = RiaApplication::instance()->activeReservoirView();
if ( activeView )
{
RimAdvancedSnapshotExportDefinition* multiSnapshot = new RimAdvancedSnapshotExportDefinition();
multiSnapshot->view = activeView;
RimEclipseView* eclipseView = dynamic_cast<RimEclipseView*>( activeView );
if ( eclipseView )
{
multiSnapshot->eclipseResultType = eclipseView->cellResult()->resultType();
multiSnapshot->setSelectedEclipseResults( eclipseView->cellResult()->resultVariable() );
}
multiSnapshot->timeStepStart = activeView->currentTimeStep();
multiSnapshot->timeStepEnd = activeView->currentTimeStep();
auto sourceCase = activeView->ownerCase();
if ( sourceCase )
{
multiSnapshot->additionalCases().push_back( sourceCase );
}
m_rimProject->multiSnapshotDefinitions.push_back( multiSnapshot );
m_rimProject->multiSnapshotDefinitions.uiCapability()->updateConnectedEditors();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuAdvancedSnapshotExportWidget::addEmptySnapshotItems( size_t itemCount )
{
if ( !m_rimProject ) return;
for ( size_t i = 0; i < itemCount; i++ )
{
RimAdvancedSnapshotExportDefinition* multiSnapshot = new RimAdvancedSnapshotExportDefinition();
multiSnapshot->isActive = false;
m_rimProject->multiSnapshotDefinitions.push_back( multiSnapshot );
}
m_rimProject->multiSnapshotDefinitions.uiCapability()->updateConnectedEditors();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuAdvancedSnapshotExportWidget::setExportFolder( const QString& folder )
{
m_exportFolderLineEdit->setText( folder );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RiuAdvancedSnapshotExportWidget::exportFolder() const
{
return m_exportFolderLineEdit->text();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuAdvancedSnapshotExportWidget::customMenuRequested( QPoint pos )
{
QMenu menu;
QAction* newRowAction = new QAction( "New row", this );
connect( newRowAction, SIGNAL( triggered() ), SLOT( addSnapshotItem() ) );
menu.addAction( newRowAction );
QAction* clearAllRows = new QAction( "Clear", this );
connect( clearAllRows, SIGNAL( triggered() ), SLOT( deleteAllSnapshotItems() ) );
menu.addAction( clearAllRows );
// Qt doc: QAbstractScrollArea and its subclasses that map the context menu event to coordinates of the viewport().
QPoint globalPos = m_pdmTableView->tableView()->viewport()->mapToGlobal( pos );
menu.exec( globalPos );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuAdvancedSnapshotExportWidget::deleteAllSnapshotItems()
{
if ( !m_rimProject ) return;
m_rimProject->multiSnapshotDefinitions.deleteChildren();
m_rimProject->multiSnapshotDefinitions.uiCapability()->updateConnectedEditors();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuAdvancedSnapshotExportWidget::exportSnapshots()
{
RicAdvancedSnapshotExportFeature::exportMultipleSnapshots( m_exportFolderLineEdit->text(), m_rimProject );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuAdvancedSnapshotExportWidget::folderSelectionClicked()
{
QString defaultPath = m_exportFolderLineEdit->text();
QString directoryPath = RiuFileDialogTools::getExistingDirectory( m_exportFolderLineEdit, tr( "Get existing directory" ), defaultPath );
if ( !directoryPath.isEmpty() )
{
m_exportFolderLineEdit->setText( directoryPath );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuAdvancedSnapshotExportWidget::addSnapshotItem()
{
addSnapshotItemFromActiveView();
}