2015-08-25 12:40:55 +02:00
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2015- Statoil ASA
// Copyright (C) 2015- Ceetron Solutions AS
//
// 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.
//
/////////////////////////////////////////////////////////////////////////////////
2015-10-13 10:24:11 +02:00
#include "RimViewController.h"
2015-08-25 12:40:55 +02:00
#include "RiaApplication.h"
2015-09-23 13:48:25 +02:00
#include "RigCaseData.h"
#include "RigCaseToCaseCellMapper.h"
#include "RigFemPartCollection.h"
#include "RigGeoMechCaseData.h"
2015-08-25 12:40:55 +02:00
#include "RimCase.h"
2015-08-27 13:44:27 +02:00
#include "RimCellRangeFilterCollection.h"
2015-09-23 13:48:25 +02:00
#include "RimEclipseCase.h"
#include "RimEclipseCellColors.h"
2015-08-27 15:45:22 +02:00
#include "RimEclipsePropertyFilterCollection.h"
#include "RimEclipseView.h"
2015-09-23 13:48:25 +02:00
#include "RimGeoMechCase.h"
#include "RimGeoMechCellColors.h"
2015-08-28 08:01:40 +02:00
#include "RimGeoMechPropertyFilterCollection.h"
#include "RimGeoMechView.h"
2015-08-25 12:40:55 +02:00
#include "RimProject.h"
#include "RimView.h"
2015-09-07 14:29:46 +02:00
#include "RimViewLinker.h"
2015-09-15 10:45:39 +02:00
#include "RimViewLinkerCollection.h"
2015-08-25 12:40:55 +02:00
2015-08-27 13:44:27 +02:00
#include "RiuViewer.h"
2015-08-25 12:40:55 +02:00
#include "cafPdmUiTreeOrdering.h"
2015-10-20 17:39:36 +02:00
#include "RigCaseToCaseRangeFilterMapper.h"
2015-08-25 12:40:55 +02:00
2015-10-21 12:45:35 +02:00
#include <QMessageBox>
2015-09-24 11:29:01 +02:00
CAF_PDM_SOURCE_INIT ( RimViewController , "ViewController" );
2015-08-25 12:40:55 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-09-24 11:29:01 +02:00
RimViewController :: RimViewController ( void )
2015-08-25 12:40:55 +02:00
{
2015-09-15 10:45:39 +02:00
CAF_PDM_InitObject ( "View Link" , "" , "" , "" );
2015-09-15 09:47:59 +02:00
2015-09-25 11:26:37 +02:00
CAF_PDM_InitField ( & m_isActive , "Active" , true , "Active" , "" , "" , "" );
m_isActive . uiCapability () -> setUiHidden ( true );
2015-08-25 12:40:55 +02:00
2015-09-11 14:16:13 +02:00
QString defaultName = "View Config: Empty view" ;
2015-09-25 09:39:42 +02:00
CAF_PDM_InitField ( & m_name , "Name" , defaultName , "Managed View Name" , "" , "" , "" );
m_name . uiCapability () -> setUiHidden ( true );
2015-08-28 11:48:16 +02:00
2015-09-11 14:16:13 +02:00
CAF_PDM_InitFieldNoDefault ( & m_managedView , "ManagedView" , "Linked View" , "" , "" , "" );
2015-09-02 13:44:56 +02:00
m_managedView . uiCapability () -> setUiChildrenHidden ( true );
2015-08-25 12:40:55 +02:00
2015-09-25 09:39:42 +02:00
CAF_PDM_InitField ( & m_syncCamera , "SyncCamera" , true , "Camera" , "" , "" , "" );
CAF_PDM_InitField ( & m_syncTimeStep , "SyncTimeStep" , true , "Time Step" , "" , "" , "" );
CAF_PDM_InitField ( & m_syncCellResult , "SyncCellResult" , false , "Cell Result" , "" , "" , "" );
2015-09-11 15:20:42 +02:00
2015-09-21 18:53:08 +02:00
CAF_PDM_InitField ( & m_syncVisibleCells , "SyncVisibleCells" , false , "Visible Cells" , "" , "" , "" );
2015-09-15 14:30:52 +02:00
//syncVisibleCells.uiCapability()->setUiHidden(true); // For now
2015-09-14 09:50:26 +02:00
2015-09-25 09:39:42 +02:00
CAF_PDM_InitField ( & m_syncRangeFilters , "SyncRangeFilters" , true , "Range Filters" , "" , "" , "" );
CAF_PDM_InitField ( & m_syncPropertyFilters , "SyncPropertyFilters" , true , "Property Filters" , "" , "" , "" );
2015-08-25 12:40:55 +02:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-09-24 11:29:01 +02:00
RimViewController ::~ RimViewController ( void )
2015-08-25 12:40:55 +02:00
{
2015-09-13 21:26:09 +02:00
this -> removeOverrides ();
2015-08-25 12:40:55 +02:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-09-24 11:29:01 +02:00
QList < caf :: PdmOptionItemInfo > RimViewController :: calculateValueOptions ( const caf :: PdmFieldHandle * fieldNeedingOptions , bool * useOptionsOnly )
2015-08-25 12:40:55 +02:00
{
QList < caf :: PdmOptionItemInfo > optionList ;
2015-09-02 13:44:56 +02:00
if ( fieldNeedingOptions == & m_managedView )
2015-08-25 12:40:55 +02:00
{
2015-08-30 13:30:46 +02:00
RimProject * proj = RiaApplication :: instance () -> project ();
2015-08-25 12:40:55 +02:00
std :: vector < RimView *> views ;
2015-09-07 13:33:27 +02:00
proj -> allNotLinkedViews ( views );
2015-08-30 13:30:46 +02:00
2015-09-07 13:33:27 +02:00
// Add currently linked view to list
if ( this -> managedView ())
{
views . push_back ( this -> managedView ());
}
2015-09-07 14:29:46 +02:00
RimViewLinker * linkedViews = NULL ;
2015-09-07 13:33:27 +02:00
this -> firstAnchestorOrThisOfType ( linkedViews );
2015-08-25 12:40:55 +02:00
for ( size_t i = 0 ; i < views . size (); i ++ )
{
2015-09-24 11:29:01 +02:00
if ( views [ i ] != linkedViews -> masterView ())
2015-08-30 13:30:46 +02:00
{
2015-09-07 13:33:27 +02:00
RimCase * rimCase = NULL ;
views [ i ] -> firstAnchestorOrThisOfType ( rimCase );
QIcon icon ;
if ( rimCase )
{
icon = rimCase -> uiCapability () -> uiIcon ();
}
2015-09-07 14:29:46 +02:00
optionList . push_back ( caf :: PdmOptionItemInfo ( RimViewLinker :: displayNameForView ( views [ i ]),
2015-09-07 13:33:27 +02:00
QVariant :: fromValue ( caf :: PdmPointer < caf :: PdmObjectHandle > ( views [ i ])),
false ,
icon ));
2015-08-30 13:30:46 +02:00
}
2015-08-25 12:40:55 +02:00
}
if ( optionList . size () > 0 )
{
optionList . push_front ( caf :: PdmOptionItemInfo ( "None" , QVariant :: fromValue ( caf :: PdmPointer < caf :: PdmObjectHandle > ( NULL ))));
}
}
return optionList ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-09-24 11:29:01 +02:00
void RimViewController :: defineUiTreeOrdering ( caf :: PdmUiTreeOrdering & uiTreeOrdering , QString uiConfigName /*= ""*/ )
2015-08-25 12:40:55 +02:00
{
uiTreeOrdering . setForgetRemainingFields ( true );
}
2015-08-27 13:44:27 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-09-24 11:29:01 +02:00
void RimViewController :: fieldChangedByUi ( const caf :: PdmFieldHandle * changedField , const QVariant & oldValue , const QVariant & newValue )
2015-08-27 13:44:27 +02:00
{
2015-09-25 11:26:37 +02:00
if ( changedField == & m_isActive )
2015-09-15 09:47:59 +02:00
{
2015-10-21 12:45:35 +02:00
if ( ! m_isActive )
{
applyRangeFilterCollectionByUserChoice ();
}
2015-09-24 17:40:45 +02:00
updateOverrides ();
2015-10-20 11:13:31 +02:00
updateResultColorsControl ();
updateCameraLink ();
2015-09-25 11:26:37 +02:00
updateDisplayNameAndIcon ();
2015-10-20 11:13:31 +02:00
updateTimeStepLink ();
2015-09-15 09:47:59 +02:00
}
2015-09-25 11:26:37 +02:00
else if ( changedField == & m_syncCamera )
2015-08-27 13:44:27 +02:00
{
2015-09-25 11:26:37 +02:00
updateCameraLink ();
2015-08-27 13:44:27 +02:00
}
2015-09-25 11:26:37 +02:00
else if ( changedField == & m_syncTimeStep )
2015-08-27 14:57:04 +02:00
{
2015-09-25 11:26:37 +02:00
updateTimeStepLink ();
2015-08-27 14:57:04 +02:00
}
2015-09-25 09:39:42 +02:00
else if ( changedField == & m_syncCellResult )
2015-09-01 17:14:22 +02:00
{
2015-09-25 11:26:37 +02:00
updateResultColorsControl ();
if ( managedEclipseView ())
2015-09-23 13:48:25 +02:00
{
2015-09-25 11:26:37 +02:00
managedEclipseView () -> cellResult () -> updateIconState ();
2015-09-23 13:48:25 +02:00
}
2015-09-25 11:26:37 +02:00
else if ( managedGeoView ())
2015-09-23 13:48:25 +02:00
{
2015-09-25 11:26:37 +02:00
managedGeoView () -> cellResult () -> updateIconState ();
2015-09-23 13:48:25 +02:00
}
2015-09-01 17:14:22 +02:00
}
2015-09-25 09:39:42 +02:00
else if ( changedField == & m_syncRangeFilters )
2015-08-27 13:44:27 +02:00
{
2015-10-21 12:45:35 +02:00
if ( ! m_syncRangeFilters )
{
applyRangeFilterCollectionByUserChoice ();
}
2015-10-20 11:13:31 +02:00
updateOverrides ();
2015-08-27 13:44:27 +02:00
}
2015-09-25 09:39:42 +02:00
else if ( changedField == & m_syncPropertyFilters )
2015-08-27 15:45:22 +02:00
{
2015-09-24 17:40:45 +02:00
updateOverrides ();
2015-08-27 15:45:22 +02:00
}
2015-09-02 13:44:56 +02:00
else if ( changedField == & m_managedView )
2015-08-27 13:44:27 +02:00
{
PdmObjectHandle * prevValue = oldValue . value < caf :: PdmPointer < PdmObjectHandle > > (). rawPtr ();
2015-09-25 14:48:16 +02:00
RimView * previousManagedView = dynamic_cast < RimView *> ( prevValue );
RimViewController :: removeOverrides ( previousManagedView );
2015-08-28 11:48:16 +02:00
2015-09-25 14:48:16 +02:00
setManagedView ( m_managedView ());
2015-09-02 08:13:17 +02:00
2015-09-25 09:39:42 +02:00
m_name . uiCapability () -> updateConnectedEditors ();
2015-08-27 13:44:27 +02:00
}
2015-09-21 18:53:08 +02:00
else if ( & m_syncVisibleCells == changedField )
2015-09-11 15:20:42 +02:00
{
updateOptionSensitivity ();
2015-09-24 17:40:45 +02:00
updateOverrides ();
2015-09-11 15:20:42 +02:00
}
2015-08-27 13:44:27 +02:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-09-24 11:29:01 +02:00
void RimViewController :: initAfterRead ()
2015-08-28 08:01:40 +02:00
{
2015-10-20 11:13:31 +02:00
updateOptionSensitivity ();
2015-09-24 17:40:45 +02:00
updateOverrides ();
2015-09-07 12:14:50 +02:00
updateDisplayNameAndIcon ();
2015-08-28 08:01:40 +02:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-09-24 11:29:01 +02:00
RimEclipseView * RimViewController :: managedEclipseView ()
2015-08-28 08:01:40 +02:00
{
2015-09-02 13:44:56 +02:00
RimView * rimView = m_managedView ;
2015-08-28 08:01:40 +02:00
return dynamic_cast < RimEclipseView *> ( rimView );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-09-24 11:29:01 +02:00
RimGeoMechView * RimViewController :: managedGeoView ()
2015-08-28 08:01:40 +02:00
{
2015-09-02 13:44:56 +02:00
RimView * rimView = m_managedView ;
2015-08-28 08:01:40 +02:00
return dynamic_cast < RimGeoMechView *> ( rimView );
}
2015-08-28 08:06:35 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-09-24 17:40:45 +02:00
void RimViewController :: updateOverrides ()
2015-08-27 13:44:27 +02:00
{
2015-09-24 17:40:45 +02:00
RimViewLinker * viewLinker = ownerViewLinker ();
2015-09-24 11:29:01 +02:00
RimView * masterView = viewLinker -> masterView ();
2015-09-24 17:40:45 +02:00
2015-09-02 17:18:02 +02:00
CVF_ASSERT ( masterView );
2015-09-02 13:44:56 +02:00
if ( m_managedView )
2015-08-27 13:44:27 +02:00
{
2015-09-11 15:20:42 +02:00
RimEclipseView * manEclView = managedEclipseView ();
RimGeoMechView * manGeoView = managedGeoView ();
2015-09-25 09:39:42 +02:00
if ( isVisibleCellsOveridden ())
2015-08-27 13:44:27 +02:00
{
2015-09-11 15:20:42 +02:00
if ( manEclView ) manEclView -> setOverridePropertyFilterCollection ( NULL );
if ( manGeoView ) manGeoView -> setOverridePropertyFilterCollection ( NULL );
2015-09-24 17:40:45 +02:00
m_managedView -> scheduleGeometryRegen ( OVERRIDDEN_CELL_VISIBILITY );
2015-09-25 14:48:16 +02:00
m_managedView -> scheduleCreateDisplayModelAndRedraw ();
2015-08-27 13:44:27 +02:00
}
else
{
2015-09-11 15:20:42 +02:00
RimEclipseView * masterEclipseView = dynamic_cast < RimEclipseView *> ( masterView );
if ( masterEclipseView )
2015-08-27 15:45:22 +02:00
{
2015-09-11 15:20:42 +02:00
if ( manEclView )
2015-08-27 15:45:22 +02:00
{
2015-09-25 14:48:16 +02:00
if ( isPropertyFilterOveridden ())
2015-09-11 15:20:42 +02:00
{
manEclView -> setOverridePropertyFilterCollection ( masterEclipseView -> propertyFilterCollection ());
}
else
{
manEclView -> setOverridePropertyFilterCollection ( NULL );
}
2015-08-27 15:45:22 +02:00
}
}
2015-08-27 22:54:37 +02:00
2015-09-11 15:20:42 +02:00
RimGeoMechView * masterGeoView = dynamic_cast < RimGeoMechView *> ( masterView );
if ( masterGeoView )
2015-08-27 22:54:37 +02:00
{
2015-09-11 15:20:42 +02:00
if ( manGeoView )
2015-08-27 22:54:37 +02:00
{
2015-09-25 14:48:16 +02:00
if ( isPropertyFilterOveridden ())
2015-09-11 15:20:42 +02:00
{
manGeoView -> setOverridePropertyFilterCollection ( masterGeoView -> propertyFilterCollection ());
}
else
{
manGeoView -> setOverridePropertyFilterCollection ( NULL );
}
2015-08-27 22:54:37 +02:00
}
}
}
2015-10-20 11:13:31 +02:00
this -> updateRangeFilterOverrides ( NULL );
2015-09-25 14:48:16 +02:00
if ( manGeoView )
{
manGeoView -> updateIconStateForFilterCollections ();
}
if ( manEclView )
{
manEclView -> updateIconStateForFilterCollections ();
}
2015-08-28 08:01:40 +02:00
}
2015-08-27 22:54:37 +02:00
}
2015-09-24 17:40:45 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewController :: removeOverrides ()
{
2015-09-25 14:48:16 +02:00
removeOverrides ( m_managedView );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewController :: removeOverrides ( RimView * view )
{
if ( view )
2015-09-24 17:40:45 +02:00
{
2015-09-25 14:48:16 +02:00
RimEclipseView * manEclView = dynamic_cast < RimEclipseView *> ( view );
RimGeoMechView * manGeoView = dynamic_cast < RimGeoMechView *> ( view );
2015-09-24 17:40:45 +02:00
if ( manEclView ) manEclView -> setOverridePropertyFilterCollection ( NULL );
if ( manGeoView ) manGeoView -> setOverridePropertyFilterCollection ( NULL );
2015-10-20 11:13:31 +02:00
view -> setOverrideRangeFilterCollection ( NULL );
2015-09-24 17:40:45 +02:00
}
}
2015-08-28 11:48:16 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-09-24 11:29:01 +02:00
void RimViewController :: updateOptionSensitivity ()
2015-08-28 11:48:16 +02:00
{
2015-09-07 14:29:46 +02:00
RimViewLinker * linkedViews = NULL ;
2015-09-02 08:13:17 +02:00
firstAnchestorOrThisOfType ( linkedViews );
CVF_ASSERT ( linkedViews );
2015-08-28 11:48:16 +02:00
2015-09-24 11:29:01 +02:00
RimView * mainView = linkedViews -> masterView ();
2015-09-02 17:18:02 +02:00
CVF_ASSERT ( mainView );
2015-09-02 08:13:17 +02:00
RimEclipseView * eclipseMasterView = dynamic_cast < RimEclipseView *> ( mainView );
RimGeoMechView * geoMasterView = dynamic_cast < RimGeoMechView *> ( mainView );
2015-08-28 11:48:16 +02:00
2015-09-21 18:53:08 +02:00
bool isMasterAndDependentViewDifferentType = false ;
2015-09-02 08:13:17 +02:00
if ( eclipseMasterView && ! managedEclipseView ())
{
2015-09-21 18:53:08 +02:00
isMasterAndDependentViewDifferentType = true ;
2015-09-02 08:13:17 +02:00
}
if ( geoMasterView && ! managedGeoView ())
{
2015-09-21 18:53:08 +02:00
isMasterAndDependentViewDifferentType = true ;
2015-09-02 08:13:17 +02:00
}
2015-08-28 11:48:16 +02:00
2015-09-21 18:53:08 +02:00
if ( isMasterAndDependentViewDifferentType )
2015-09-02 08:13:17 +02:00
{
2015-09-25 09:39:42 +02:00
this -> m_syncCellResult . uiCapability () -> setUiReadOnly ( true );
this -> m_syncCellResult = false ;
this -> m_syncPropertyFilters . uiCapability () -> setUiReadOnly ( true );
this -> m_syncPropertyFilters = false ;
2015-09-02 08:13:17 +02:00
}
else
{
2015-09-25 09:39:42 +02:00
this -> m_syncCellResult . uiCapability () -> setUiReadOnly ( false );
this -> m_syncPropertyFilters . uiCapability () -> setUiReadOnly ( false );
2015-09-02 08:13:17 +02:00
}
2015-09-21 18:53:08 +02:00
2015-10-19 12:10:18 +02:00
if ( isRangeFilterControlPossible ())
{
this -> m_syncRangeFilters . uiCapability () -> setUiReadOnly ( false );
}
else
{
this -> m_syncRangeFilters . uiCapability () -> setUiReadOnly ( true );
this -> m_syncRangeFilters = false ;
}
2015-09-24 17:40:45 +02:00
m_syncVisibleCells . uiCapability () -> setUiReadOnly ( ! this -> isMasterAndDepViewDifferentType ());
2015-08-28 11:48:16 +02:00
}
2015-09-02 13:44:56 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-09-24 11:29:01 +02:00
RimView * RimViewController :: managedView ()
2015-09-02 13:44:56 +02:00
{
return m_managedView ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-09-24 11:29:01 +02:00
void RimViewController :: setManagedView ( RimView * view )
2015-09-02 13:44:56 +02:00
{
m_managedView = view ;
2015-10-20 11:13:31 +02:00
2015-09-25 14:48:16 +02:00
updateOptionSensitivity ();
2015-10-20 11:13:31 +02:00
updateOverrides ();
updateResultColorsControl ();
updateCameraLink ();
2015-09-25 14:48:16 +02:00
updateDisplayNameAndIcon ();
2015-10-20 11:13:31 +02:00
updateTimeStepLink ();
2015-09-02 13:44:56 +02:00
}
2015-09-07 13:50:10 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-09-24 11:29:01 +02:00
void RimViewController :: defineUiOrdering ( QString uiConfigName , caf :: PdmUiOrdering & uiOrdering )
2015-09-07 13:50:10 +02:00
{
2015-09-21 18:53:08 +02:00
updateOptionSensitivity ();
2015-09-07 13:50:10 +02:00
uiOrdering . add ( & m_managedView );
2015-09-11 14:16:13 +02:00
caf :: PdmUiGroup * scriptGroup = uiOrdering . addNewGroup ( "Link Options" );
2015-09-07 13:50:10 +02:00
2015-09-25 09:39:42 +02:00
scriptGroup -> add ( & m_syncCamera );
scriptGroup -> add ( & m_syncTimeStep );
scriptGroup -> add ( & m_syncCellResult );
2015-09-11 14:16:13 +02:00
caf :: PdmUiGroup * visibleCells = uiOrdering . addNewGroup ( "Link Cell Filters" );
2015-09-21 18:53:08 +02:00
visibleCells -> add ( & m_syncVisibleCells );
2015-09-25 09:39:42 +02:00
visibleCells -> add ( & m_syncRangeFilters );
visibleCells -> add ( & m_syncPropertyFilters );
2015-09-07 13:50:10 +02:00
}
2015-09-13 21:26:09 +02:00
2015-09-15 09:47:59 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-09-24 11:29:01 +02:00
void RimViewController :: updateDisplayNameAndIcon ()
2015-09-15 09:47:59 +02:00
{
2015-09-25 09:39:42 +02:00
RimViewLinker :: findNameAndIconFromView ( & m_name . v (), & m_originalIcon , managedView ());
2015-09-25 11:26:37 +02:00
RimViewLinker :: applyIconEnabledState ( this , m_originalIcon , ! m_isActive ());
2015-09-15 09:47:59 +02:00
}
2015-09-15 10:45:39 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-09-25 11:26:37 +02:00
void RimViewController :: updateCameraLink ()
2015-09-15 10:45:39 +02:00
{
2015-09-25 11:26:37 +02:00
if ( ! this -> isCameraLinked ()) return ;
2015-09-25 14:48:16 +02:00
if ( m_managedView )
{
RimViewLinker * viewLinker = this -> ownerViewLinker ();
viewLinker -> updateScaleZ ( viewLinker -> masterView (), viewLinker -> masterView () -> scaleZ ());
viewLinker -> updateCamera ( viewLinker -> masterView ());
}
2015-09-15 10:45:39 +02:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-09-25 11:26:37 +02:00
void RimViewController :: updateTimeStepLink ()
2015-09-15 10:45:39 +02:00
{
2015-09-25 11:26:37 +02:00
if ( ! this -> isTimeStepLinked ()) return ;
2015-09-15 10:45:39 +02:00
if ( m_managedView )
{
2015-09-25 14:48:16 +02:00
RimViewLinker * viewLinker = this -> ownerViewLinker ();
viewLinker -> updateTimeStep ( viewLinker -> masterView (), viewLinker -> masterView () -> currentTimeStep ());
2015-09-15 10:45:39 +02:00
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-09-25 11:26:37 +02:00
void RimViewController :: updateResultColorsControl ()
2015-09-15 10:45:39 +02:00
{
2015-09-25 11:26:37 +02:00
if ( ! this -> isResultColorControlled ()) return ;
2015-09-23 12:50:06 +02:00
RimViewLinker * viewLinker = ownerViewLinker ();
viewLinker -> updateCellResult ();
2015-09-15 10:45:39 +02:00
}
2015-09-14 16:14:44 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-09-24 11:29:01 +02:00
RimViewLinker * RimViewController :: ownerViewLinker ()
2015-09-14 16:14:44 +02:00
{
RimViewLinker * viewLinker = NULL ;
this -> firstAnchestorOrThisOfType ( viewLinker );
return viewLinker ;
}
2015-09-15 09:15:15 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-09-24 11:29:01 +02:00
const RigCaseToCaseCellMapper * RimViewController :: cellMapper ()
2015-09-15 09:15:15 +02:00
{
RimEclipseView * masterEclipseView = dynamic_cast < RimEclipseView *> ( masterView ());
RimEclipseView * dependEclipseView = managedEclipseView ();
RimGeoMechView * masterGeomechView = dynamic_cast < RimGeoMechView *> ( masterView ());
RimGeoMechView * dependGeomechView = managedGeoView ();
RigMainGrid * masterEclGrid = NULL ;
RigMainGrid * dependEclGrid = NULL ;
RigFemPart * masterFemPart = NULL ;
RigFemPart * dependFemPart = NULL ;
if ( masterEclipseView && masterEclipseView -> eclipseCase () -> reservoirData ())
{
masterEclGrid = masterEclipseView -> eclipseCase () -> reservoirData () -> mainGrid ();
}
if ( dependEclipseView && dependEclipseView -> eclipseCase () -> reservoirData ())
{
dependEclGrid = dependEclipseView -> eclipseCase () -> reservoirData () -> mainGrid ();
}
if ( masterGeomechView && masterGeomechView -> geoMechCase () -> geoMechData ()
&& masterGeomechView -> geoMechCase () -> geoMechData () -> femParts () -> partCount ())
{
masterFemPart = masterGeomechView -> geoMechCase () -> geoMechData () -> femParts () -> part ( 0 );
}
if ( dependGeomechView && dependGeomechView -> geoMechCase () -> geoMechData ()
&& dependGeomechView -> geoMechCase () -> geoMechData () -> femParts () -> partCount ())
{
dependFemPart = dependGeomechView -> geoMechCase () -> geoMechData () -> femParts () -> part ( 0 );
}
// If we have the correct mapping already, return it.
if ( m_caseToCaseCellMapper . notNull ())
{
if ( masterEclGrid == m_caseToCaseCellMapper -> masterGrid ()
&& dependEclGrid == m_caseToCaseCellMapper -> dependentGrid ()
&& masterFemPart == m_caseToCaseCellMapper -> masterFemPart ()
&& dependFemPart == m_caseToCaseCellMapper -> dependentFemPart ())
{
return m_caseToCaseCellMapper . p ();
}
else
{
m_caseToCaseCellMapper = NULL ;
}
}
// Create the mapping if needed
if ( m_caseToCaseCellMapper . isNull ())
{
if ( masterEclGrid && dependFemPart )
{
m_caseToCaseCellMapper = new RigCaseToCaseCellMapper ( masterEclGrid , dependFemPart );
}
else if ( masterEclGrid && dependEclGrid )
{
m_caseToCaseCellMapper = new RigCaseToCaseCellMapper ( masterEclGrid , dependEclGrid );
}
else if ( masterFemPart && dependFemPart )
{
m_caseToCaseCellMapper = new RigCaseToCaseCellMapper ( masterFemPart , dependFemPart );
}
else if ( masterFemPart && dependEclGrid )
{
m_caseToCaseCellMapper = new RigCaseToCaseCellMapper ( masterFemPart , dependEclGrid );
}
}
return m_caseToCaseCellMapper . p ();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-09-24 11:29:01 +02:00
RimView * RimViewController :: masterView ()
2015-09-15 09:15:15 +02:00
{
2015-09-24 11:29:01 +02:00
return ownerViewLinker () -> masterView ();
2015-09-15 09:15:15 +02:00
}
2015-09-21 18:53:08 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-09-24 17:40:45 +02:00
bool RimViewController :: isMasterAndDepViewDifferentType ()
2015-09-21 18:53:08 +02:00
{
RimEclipseView * eclipseMasterView = dynamic_cast < RimEclipseView *> ( masterView ());
RimGeoMechView * geoMasterView = dynamic_cast < RimGeoMechView *> ( masterView ());
bool isMasterAndDependentViewDifferentType = false ;
if ( eclipseMasterView && ! managedEclipseView ())
{
isMasterAndDependentViewDifferentType = true ;
}
if ( geoMasterView && ! managedGeoView ())
{
isMasterAndDependentViewDifferentType = true ;
}
return isMasterAndDependentViewDifferentType ;
}
2015-09-25 14:48:16 +02:00
2015-09-25 09:39:42 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewController :: scheduleCreateDisplayModelAndRedrawForDependentView ()
{
2015-09-25 11:26:37 +02:00
if ( ! this -> isActive ()) return ;
2015-09-25 09:39:42 +02:00
if ( this -> isVisibleCellsOveridden ()
2015-10-19 12:10:18 +02:00
|| this -> isRangeFiltersControlled ()
2015-09-25 11:26:37 +02:00
|| this -> isPropertyFilterOveridden ()
|| this -> isResultColorControlled ()
2015-09-25 09:39:42 +02:00
)
{
if ( this -> managedView ())
{
this -> managedView () -> scheduleCreateDisplayModelAndRedraw ();
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewController :: scheduleGeometryRegenForDepViews ( RivCellSetEnum geometryType )
{
2015-09-25 11:26:37 +02:00
if ( ! this -> isActive ()) return ;
2015-09-25 09:39:42 +02:00
2015-09-25 11:26:37 +02:00
if ( this -> isVisibleCellsOveridden ()
2015-10-19 12:10:18 +02:00
|| this -> isRangeFiltersControlled ()
2015-09-25 11:26:37 +02:00
|| this -> isPropertyFilterOveridden ()
|| this -> isResultColorControlled ()
2015-09-25 09:39:42 +02:00
)
{
if ( this -> managedView ())
{
2015-09-25 11:26:37 +02:00
if ( this -> isVisibleCellsOveridden ())
{
2015-09-25 09:39:42 +02:00
this -> managedView () -> scheduleGeometryRegen ( OVERRIDDEN_CELL_VISIBILITY );
}
2015-09-25 11:26:37 +02:00
this -> managedView () -> scheduleGeometryRegen ( geometryType );
2015-09-25 09:39:42 +02:00
}
}
}
2015-09-25 11:26:37 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimViewController :: isActive ()
{
return ownerViewLinker () -> isActive () && this -> m_isActive ();
}
2015-09-25 09:39:42 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimViewController :: isCameraLinked ()
{
2015-09-25 11:26:37 +02:00
if ( ownerViewLinker () -> isActive () && this -> m_isActive ())
2015-09-25 09:39:42 +02:00
{
return m_syncCamera ;
}
else
{
return false ;
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimViewController :: isTimeStepLinked ()
{
2015-09-25 11:26:37 +02:00
if ( ownerViewLinker () -> isActive () && this -> m_isActive ())
2015-09-25 09:39:42 +02:00
{
return m_syncTimeStep ;
}
else
{
return false ;
}
}
2015-09-21 18:53:08 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-09-25 09:39:42 +02:00
bool RimViewController :: isResultColorControlled ()
{
2015-09-25 11:26:37 +02:00
if ( ownerViewLinker () -> isActive () && this -> m_isActive ())
2015-09-25 09:39:42 +02:00
{
return m_syncCellResult ;
}
else
{
return false ;
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimViewController :: isVisibleCellsOveridden ()
2015-09-21 18:53:08 +02:00
{
2015-09-24 17:40:45 +02:00
if ( isMasterAndDepViewDifferentType ())
2015-09-21 18:53:08 +02:00
{
2015-09-25 11:26:37 +02:00
if ( ownerViewLinker () -> isActive () && this -> m_isActive ())
2015-09-24 17:40:45 +02:00
{
return m_syncVisibleCells ();
}
else
{
return false ;
}
2015-09-21 18:53:08 +02:00
}
else
{
return false ;
}
}
2015-10-19 12:10:18 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimViewController :: isRangeFilterControlPossible ()
{
2015-10-20 17:39:36 +02:00
return true ; //!isMasterAndDepViewDifferentType();
2015-10-19 12:10:18 +02:00
}
2015-09-25 09:39:42 +02:00
2015-09-24 17:40:45 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-10-19 12:10:18 +02:00
bool RimViewController :: isRangeFiltersControlled ()
2015-09-24 17:40:45 +02:00
{
2015-10-19 12:10:18 +02:00
if ( ! isRangeFilterControlPossible ()) return false ;
2015-09-25 11:26:37 +02:00
if ( ownerViewLinker () -> isActive () && this -> m_isActive ())
2015-09-24 17:40:45 +02:00
{
2015-09-25 09:39:42 +02:00
return m_syncRangeFilters ;
}
else
{
return false ;
2015-09-24 17:40:45 +02:00
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-09-25 09:39:42 +02:00
bool RimViewController :: isPropertyFilterOveridden ()
2015-09-24 17:40:45 +02:00
{
2015-09-25 11:26:37 +02:00
if ( ownerViewLinker () -> isActive () && this -> m_isActive ())
2015-09-24 17:40:45 +02:00
{
2015-09-25 09:39:42 +02:00
return m_syncPropertyFilters ;
}
else
{
return false ;
2015-09-24 17:40:45 +02:00
}
}
2015-10-19 12:10:18 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-10-20 11:13:31 +02:00
void RimViewController :: updateRangeFilterOverrides ( RimCellRangeFilter * changedRangeFilter )
2015-10-19 12:10:18 +02:00
{
2015-10-20 11:13:31 +02:00
if ( ! isRangeFiltersControlled ())
2015-10-19 12:10:18 +02:00
{
2015-10-20 11:13:31 +02:00
managedView () -> setOverrideRangeFilterCollection ( NULL );
2015-10-19 12:10:18 +02:00
return ;
}
2015-10-20 17:39:36 +02:00
if ( true ) //changedRangeFilter == NULL)
{
// Copy the rangeFilterCollection
2015-10-19 12:10:18 +02:00
2015-10-20 17:39:36 +02:00
RimCellRangeFilterCollection * sourceFilterCollection = masterView () -> rangeFilterCollection ();
QString xmlRangeFilterCollCopy = sourceFilterCollection -> writeObjectToXmlString ();
PdmObjectHandle * objectCopy = PdmXmlObjectHandle :: readUnknownObjectFromXmlString ( xmlRangeFilterCollCopy , caf :: PdmDefaultObjectFactory :: instance ());
RimCellRangeFilterCollection * overrideRangeFilterColl = dynamic_cast < RimCellRangeFilterCollection *> ( objectCopy );
2015-10-19 12:10:18 +02:00
2015-10-20 17:39:36 +02:00
// Convert the range filter to fit in the managed view
RimEclipseView * eclipseMasterView = dynamic_cast < RimEclipseView *> ( masterView ());
RimGeoMechView * geoMasterView = dynamic_cast < RimGeoMechView *> ( masterView ());
RimEclipseView * depEclView = managedEclipseView ();
RimGeoMechView * depGeomView = managedGeoView ();
2015-10-19 12:10:18 +02:00
2015-10-20 17:39:36 +02:00
if ( eclipseMasterView && depGeomView )
{
for ( size_t rfIdx = 0 ; rfIdx < sourceFilterCollection -> rangeFilters (). size (); ++ rfIdx )
{
RimCellRangeFilter * srcRFilter = sourceFilterCollection -> rangeFilters [ rfIdx ];
RimCellRangeFilter * dstRFilter = overrideRangeFilterColl -> rangeFilters [ rfIdx ];
RigMainGrid * srcEclGrid = eclipseMasterView -> eclipseCase () -> reservoirData () -> mainGrid ();
RigFemPart * dstFemPart = depGeomView -> geoMechCase () -> geoMechData () -> femParts () -> part ( 0 );
RigCaseToCaseRangeFilterMapper :: convertRangeFilterEclToFem ( srcRFilter , srcEclGrid ,
dstRFilter , dstFemPart );
}
}
else if ( geoMasterView && depEclView )
{
for ( size_t rfIdx = 0 ; rfIdx < sourceFilterCollection -> rangeFilters (). size (); ++ rfIdx )
{
RimCellRangeFilter * srcRFilter = sourceFilterCollection -> rangeFilters [ rfIdx ];
RimCellRangeFilter * dstRFilter = overrideRangeFilterColl -> rangeFilters [ rfIdx ];
RigFemPart * srcFemPart = geoMasterView -> geoMechCase () -> geoMechData () -> femParts () -> part ( 0 );
RigMainGrid * dstEclGrid = depEclView -> eclipseCase () -> reservoirData () -> mainGrid ();
RigCaseToCaseRangeFilterMapper :: convertRangeFilterFemToEcl ( srcRFilter , srcFemPart ,
dstRFilter , dstEclGrid );
}
}
2015-10-19 12:10:18 +02:00
2015-10-20 17:39:36 +02:00
managedView () -> setOverrideRangeFilterCollection ( overrideRangeFilterColl );
}
else
{
// RigCaseToCaseRangeFilterMapper::convertRangeFilterEclToFem( changedRangeFilter, eclipseMasterView, overrideRangeFilterColl->rangeFilters()[rfIdx], depGeomView)
}
2015-10-19 12:10:18 +02:00
}
2015-10-21 12:45:35 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewController :: applyRangeFilterCollectionByUserChoice ()
{
if ( ! m_managedView -> overrideRangeFilterCollection ())
{
return ;
}
bool restoreOriginal = askUserToRestoreOriginalRangeFilterCollection ( m_managedView -> name );
if ( restoreOriginal )
{
m_managedView -> setOverrideRangeFilterCollection ( NULL );
}
else
{
m_managedView -> replaceRangeFilterCollectionWithOverride ();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimViewController :: askUserToRestoreOriginalRangeFilterCollection ( const QString & viewName )
{
RimView * activeView = RiaApplication :: instance () -> activeReservoirView ();
QMessageBox msgBox ( activeView -> viewer () -> layoutWidget ());
msgBox . setIcon ( QMessageBox :: Question );
QString questionText ;
questionText = QString ( "The linked view named \" %1 \" is about to be unlinked. The range filters can either restore the original or keep the current range filters based on the master view." ). arg ( viewName );
msgBox . setText ( questionText );
msgBox . setInformativeText ( "Do you want to restore the original range filters?" );
msgBox . setStandardButtons ( QMessageBox :: Yes | QMessageBox :: No );
int ret = msgBox . exec ();
if ( ret == QMessageBox :: Yes )
{
return true ;
}
else
{
return false ;
}
}