2017-10-11 12:48:35 -05:00
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2017 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 "RiuSummaryCurveDefSelection.h"
# include "RiaApplication.h"
2018-11-21 05:31:42 -06:00
# include "RiaStdStringTools.h"
2017-10-11 12:48:35 -05:00
# include "RiaSummaryCurveDefinition.h"
2018-08-14 04:01:19 -05:00
# include "RiaCurveSetDefinition.h"
2017-10-11 12:48:35 -05:00
# include "RifEclipseSummaryAddress.h"
# include "RifSummaryReaderInterface.h"
2017-10-18 01:20:21 -05:00
# include "RimCalculatedSummaryCase.h"
2017-10-11 12:48:35 -05:00
# include "RimObservedData.h"
# include "RimObservedDataCollection.h"
# include "RimOilField.h"
# include "RimProject.h"
2017-10-23 07:42:38 -05:00
# include "RimSummaryCalculation.h"
# include "RimSummaryCalculationCollection.h"
2017-10-11 12:48:35 -05:00
# include "RimSummaryCase.h"
# include "RimSummaryCaseCollection.h"
# include "RimSummaryCaseMainCollection.h"
2017-10-18 01:20:21 -05:00
# include "RiuSummaryCurveDefinitionKeywords.h"
2017-10-24 11:33:16 -05:00
# include "RiuSummaryVectorDescriptionMap.h"
2017-10-18 01:20:21 -05:00
2017-10-11 12:48:35 -05:00
# include "cafPdmUiTreeSelectionEditor.h"
2018-05-10 14:29:55 -05:00
//#include "cafPdmObject.h"
# include "cafPdmPointer.h"
2017-10-11 12:48:35 -05:00
# include <algorithm>
CAF_PDM_SOURCE_INIT ( RiuSummaryCurveDefSelection , " RicSummaryAddressSelection " ) ;
2017-10-24 03:05:11 -05:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
class SummaryIdentifierAndField
{
public :
SummaryIdentifierAndField ( ) :
m_summaryIdentifier ( ( RifEclipseSummaryAddress : : SummaryIdentifierType ) 0 ) ,
m_pdmField ( nullptr )
{ }
SummaryIdentifierAndField ( RifEclipseSummaryAddress : : SummaryIdentifierType summaryIdentifier ) :
m_summaryIdentifier ( summaryIdentifier ) ,
m_pdmField ( new caf : : PdmField < std : : vector < QString > > ( ) )
{ }
virtual ~ SummaryIdentifierAndField ( ) { delete m_pdmField ; }
RifEclipseSummaryAddress : : SummaryIdentifierType summaryIdentifier ( ) const { return m_summaryIdentifier ; }
caf : : PdmField < std : : vector < QString > > * pdmField ( ) { return m_pdmField ; }
private :
RifEclipseSummaryAddress : : SummaryIdentifierType m_summaryIdentifier ;
caf : : PdmField < std : : vector < QString > > * m_pdmField ;
} ;
2017-10-11 12:48:35 -05:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RiuSummaryCurveDefSelection : : RiuSummaryCurveDefSelection ( ) : m_identifierFieldsMap (
{
{ RifEclipseSummaryAddress : : SUMMARY_FIELD , {
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_VECTOR_NAME ) }
} } ,
{ RifEclipseSummaryAddress : : SUMMARY_AQUIFER , {
2017-12-12 08:09:52 -06:00
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_AQUIFER_NUMBER ) } ,
2017-10-11 12:48:35 -05:00
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_VECTOR_NAME ) }
} } ,
{ RifEclipseSummaryAddress : : SUMMARY_NETWORK , {
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_VECTOR_NAME ) }
} } ,
{ RifEclipseSummaryAddress : : SUMMARY_MISC , {
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_VECTOR_NAME ) }
} } ,
{ RifEclipseSummaryAddress : : SUMMARY_REGION , {
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_REGION_NUMBER ) } ,
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_VECTOR_NAME ) }
} } ,
{ RifEclipseSummaryAddress : : SUMMARY_REGION_2_REGION , {
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_REGION_2_REGION ) } ,
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_VECTOR_NAME ) }
} } ,
{ RifEclipseSummaryAddress : : SUMMARY_WELL_GROUP , {
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_WELL_GROUP_NAME ) } ,
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_VECTOR_NAME ) }
} } ,
{ RifEclipseSummaryAddress : : SUMMARY_WELL , {
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_WELL_NAME ) } ,
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_VECTOR_NAME ) }
} } ,
{ RifEclipseSummaryAddress : : SUMMARY_WELL_COMPLETION , {
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_WELL_NAME ) } ,
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_CELL_IJK ) } ,
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_VECTOR_NAME ) }
} } ,
{ RifEclipseSummaryAddress : : SUMMARY_WELL_COMPLETION_LGR , {
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_LGR_NAME ) } ,
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_WELL_NAME ) } ,
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_CELL_IJK ) } ,
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_VECTOR_NAME ) }
} } ,
{ RifEclipseSummaryAddress : : SUMMARY_WELL_LGR , {
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_LGR_NAME ) } ,
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_WELL_NAME ) } ,
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_VECTOR_NAME ) }
} } ,
{ RifEclipseSummaryAddress : : SUMMARY_WELL_SEGMENT , {
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_WELL_NAME ) } ,
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_SEGMENT_NUMBER ) } ,
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_VECTOR_NAME ) }
} } ,
{ RifEclipseSummaryAddress : : SUMMARY_BLOCK , {
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_CELL_IJK ) } ,
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_VECTOR_NAME ) }
} } ,
{ RifEclipseSummaryAddress : : SUMMARY_BLOCK_LGR , {
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_LGR_NAME ) } ,
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_CELL_IJK ) } ,
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_VECTOR_NAME ) }
2017-10-17 07:34:02 -05:00
} } ,
{ RifEclipseSummaryAddress : : SUMMARY_CALCULATED , {
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_VECTOR_NAME ) }
2017-11-22 13:34:18 -06:00
} } ,
{ RifEclipseSummaryAddress : : SUMMARY_IMPORTED , {
{ new SummaryIdentifierAndField ( RifEclipseSummaryAddress : : INPUT_VECTOR_NAME ) }
} } ,
2017-10-11 12:48:35 -05:00
} )
{
2018-05-10 14:29:55 -05:00
CAF_PDM_InitFieldNoDefault ( & m_selectedSources , " SummaryCases " , " Cases " , " " , " " , " " ) ;
m_selectedSources . uiCapability ( ) - > setAutoAddingOptionFromValue ( false ) ;
2017-10-26 00:44:12 -05:00
2017-10-11 12:48:35 -05:00
CAF_PDM_InitFieldNoDefault ( & m_currentSummaryCategory , " CurrentSummaryCategory " , " Current Summary Category " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( & m_selectedSummaryCategories , " SelectedSummaryCategories " , " Summary Categories " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_FIELD ] [ 0 ] - > pdmField ( ) , " FieldVectors " , " Field vectors " , " " , " " , " " ) ;
2017-12-12 08:09:52 -06:00
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_AQUIFER ] [ 0 ] - > pdmField ( ) , " Aquifers " , " Aquifers " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_AQUIFER ] [ 1 ] - > pdmField ( ) , " AquiferVectors " , " Aquifer Vectors " , " " , " " , " " ) ;
2017-10-11 12:48:35 -05:00
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_NETWORK ] [ 0 ] - > pdmField ( ) , " NetworkVectors " , " Network Vectors " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_MISC ] [ 0 ] - > pdmField ( ) , " MiscVectors " , " Misc Vectors " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_REGION ] [ 0 ] - > pdmField ( ) , " Regions " , " Regions " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_REGION ] [ 1 ] - > pdmField ( ) , " RegionsVectors " , " Regions Vectors " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_REGION_2_REGION ] [ 0 ] - > pdmField ( ) , " Region2RegionRegions " , " Regions " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_REGION_2_REGION ] [ 1 ] - > pdmField ( ) , " Region2RegionVectors " , " Region2s Vectors " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_GROUP ] [ 0 ] - > pdmField ( ) , " WellGroupWellGroupNames " , " Well groups " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_GROUP ] [ 1 ] - > pdmField ( ) , " WellGroupVectors " , " Well Group Vectors " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL ] [ 0 ] - > pdmField ( ) , " WellWellName " , " Wells " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL ] [ 1 ] - > pdmField ( ) , " WellVectors " , " Well Vectors " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_COMPLETION ] [ 0 ] - > pdmField ( ) , " WellCompletionWellName " , " Wells " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_COMPLETION ] [ 1 ] - > pdmField ( ) , " WellCompletionIjk " , " Cell IJK " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_COMPLETION ] [ 2 ] - > pdmField ( ) , " WellCompletionVectors " , " Well Completion Vectors " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_COMPLETION_LGR ] [ 0 ] - > pdmField ( ) , " WellCompletionLgrLgrName " , " LGR Names " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_COMPLETION_LGR ] [ 1 ] - > pdmField ( ) , " WellCompletionLgrWellName " , " Wells " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_COMPLETION_LGR ] [ 2 ] - > pdmField ( ) , " WellCompletionLgrIjk " , " Cell IJK " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_COMPLETION_LGR ] [ 3 ] - > pdmField ( ) , " WellCompletionLgrVectors " , " Well Completion Vectors " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_LGR ] [ 0 ] - > pdmField ( ) , " WellLgrLgrName " , " LGR Names " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_LGR ] [ 1 ] - > pdmField ( ) , " WellLgrWellName " , " Wells " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_LGR ] [ 2 ] - > pdmField ( ) , " WellLgrVectors " , " Vectors " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_SEGMENT ] [ 0 ] - > pdmField ( ) , " WellSegmentWellName " , " Wells " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_SEGMENT ] [ 1 ] - > pdmField ( ) , " WellSegmentNumber " , " Segments " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_SEGMENT ] [ 2 ] - > pdmField ( ) , " WellSegmentVectors " , " Vectors " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_BLOCK ] [ 0 ] - > pdmField ( ) , " BlockIjk " , " Cell IJK " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_BLOCK ] [ 1 ] - > pdmField ( ) , " BlockVectors " , " Block Vectors " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_BLOCK_LGR ] [ 0 ] - > pdmField ( ) , " BlockLgrLgrName " , " LGR Names " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_BLOCK_LGR ] [ 1 ] - > pdmField ( ) , " BlockLgrIjk " , " Cell IJK " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_BLOCK_LGR ] [ 2 ] - > pdmField ( ) , " BlockLgrVectors " , " Block Vectors " , " " , " " , " " ) ;
2017-11-30 06:44:18 -06:00
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_CALCULATED ] [ 0 ] - > pdmField ( ) , " CalculatedVectors " , " Calculated Vectors " , " " , " " , " " ) ;
2017-10-11 12:48:35 -05:00
2017-11-22 13:34:18 -06:00
CAF_PDM_InitFieldNoDefault ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_IMPORTED ] [ 0 ] - > pdmField ( ) , " ImportedVectors " , " Imported vectors " , " " , " " , " " ) ;
2017-10-11 12:48:35 -05:00
for ( const auto & itemTypes : m_identifierFieldsMap )
{
for ( const auto & itemInputType : itemTypes . second )
{
itemInputType - > pdmField ( ) - > uiCapability ( ) - > setUiEditorTypeName ( caf : : PdmUiTreeSelectionEditor : : uiEditorTypeName ( ) ) ;
itemInputType - > pdmField ( ) - > uiCapability ( ) - > setUiLabelPosition ( itemTypes . second . size ( ) > 2 ?
caf : : PdmUiItemInfo : : TOP : caf : : PdmUiItemInfo : : HIDDEN ) ;
itemInputType - > pdmField ( ) - > uiCapability ( ) - > setAutoAddingOptionFromValue ( false ) ;
}
itemTypes . second . back ( ) - > pdmField ( ) - > uiCapability ( ) - > setUiLabelPosition ( caf : : PdmUiItemInfo : : HIDDEN ) ;
}
2018-05-10 14:29:55 -05:00
m_selectedSources . uiCapability ( ) - > setUiLabelPosition ( caf : : PdmUiItemInfo : : HIDDEN ) ;
m_selectedSources . uiCapability ( ) - > setUiEditorTypeName ( caf : : PdmUiTreeSelectionEditor : : uiEditorTypeName ( ) ) ;
m_selectedSources . uiCapability ( ) - > setUiLabelPosition ( caf : : PdmUiItemInfo : : HIDDEN ) ;
2017-10-11 12:48:35 -05:00
m_selectedSummaryCategories . uiCapability ( ) - > setUiEditorTypeName ( caf : : PdmUiTreeSelectionEditor : : uiEditorTypeName ( ) ) ;
m_selectedSummaryCategories . uiCapability ( ) - > setUiLabelPosition ( caf : : PdmUiItemInfo : : HIDDEN ) ;
m_currentSummaryCategory . uiCapability ( ) - > setUiHidden ( true ) ;
2017-10-23 04:41:16 -05:00
m_multiSelectionMode = false ;
2018-05-11 06:24:46 -05:00
m_hideEnsembles = false ;
m_hideSummaryCases = false ;
2018-09-11 06:09:34 -05:00
m_prevCurveCount = 0 ;
m_prevCurveSetCount = 0 ;
2017-10-11 12:48:35 -05:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RiuSummaryCurveDefSelection : : ~ RiuSummaryCurveDefSelection ( )
{
for ( const auto & identifierAndFieldList : m_identifierFieldsMap )
{
for ( const auto & identifierAndField : identifierAndFieldList . second )
{
delete identifierAndField - > pdmField ( ) ;
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2018-05-15 06:56:25 -05:00
std : : vector < RiaSummaryCurveDefinition > RiuSummaryCurveDefSelection : : allCurveDefinitionsFromSelection ( ) const
2017-10-11 12:48:35 -05:00
{
2018-05-10 14:29:55 -05:00
std : : vector < RiaSummaryCurveDefinition > curveDefVector ;
2017-10-11 12:48:35 -05:00
{
2018-05-15 06:56:25 -05:00
std : : set < RiaSummaryCurveDefinition > curveDefinitions ;
2017-10-11 12:48:35 -05:00
std : : set < RifEclipseSummaryAddress > selectedAddressesFromUi = buildAddressListFromSelections ( ) ;
2018-05-10 14:29:55 -05:00
for ( SummarySource * currSource : selectedSummarySources ( ) )
2017-10-11 12:48:35 -05:00
{
2018-05-10 14:29:55 -05:00
RimSummaryCaseCollection * ensemble = dynamic_cast < RimSummaryCaseCollection * > ( currSource ) ;
2018-06-25 08:14:47 -05:00
RimSummaryCase * sumCase = dynamic_cast < RimSummaryCase * > ( currSource ) ;
std : : set < RifEclipseSummaryAddress > addressesFromSource ;
std : : vector < RimSummaryCase * > casesFromSource ;
2018-05-10 14:29:55 -05:00
// Build case list
if ( ensemble )
{
2018-09-24 06:59:55 -05:00
auto addresses = ensemble - > ensembleSummaryAddresses ( ) ;
2018-06-25 08:14:47 -05:00
addressesFromSource . insert ( addresses . begin ( ) , addresses . end ( ) ) ;
auto ensembleCases = ensemble - > allSummaryCases ( ) ;
casesFromSource . insert ( casesFromSource . end ( ) , ensembleCases . begin ( ) , ensembleCases . end ( ) ) ;
2018-05-10 14:29:55 -05:00
}
else
2017-10-11 12:48:35 -05:00
{
2018-06-25 08:14:47 -05:00
RifSummaryReaderInterface * reader = sumCase ? sumCase - > summaryReader ( ) : nullptr ;
if ( reader )
2018-05-10 14:29:55 -05:00
{
2018-06-25 08:14:47 -05:00
addressesFromSource . insert ( reader - > allResultAddresses ( ) . begin ( ) , reader - > allResultAddresses ( ) . end ( ) ) ;
casesFromSource . push_back ( sumCase ) ;
2018-05-10 14:29:55 -05:00
}
}
2017-10-11 12:48:35 -05:00
2018-06-25 08:14:47 -05:00
for ( auto caseFromSource : casesFromSource )
2018-05-10 14:29:55 -05:00
{
2018-06-25 08:14:47 -05:00
for ( const auto & addressFromSource : addressesFromSource )
2017-10-11 12:48:35 -05:00
{
2018-06-25 08:14:47 -05:00
if ( selectedAddressesFromUi . count ( addressFromSource ) > 0 )
2017-10-11 12:48:35 -05:00
{
2018-06-25 08:14:47 -05:00
curveDefinitions . insert ( RiaSummaryCurveDefinition ( caseFromSource , addressFromSource , ensemble ) ) ;
2017-10-11 12:48:35 -05:00
}
}
}
}
2018-05-15 06:56:25 -05:00
std : : copy ( curveDefinitions . begin ( ) , curveDefinitions . end ( ) , std : : back_inserter ( curveDefVector ) ) ;
2017-10-11 12:48:35 -05:00
}
2018-05-10 14:29:55 -05:00
return curveDefVector ;
2017-10-11 12:48:35 -05:00
}
2018-08-14 04:01:19 -05:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std : : vector < RiaCurveSetDefinition > RiuSummaryCurveDefSelection : : allCurveSetDefinitionsFromSelections ( ) const
{
std : : vector < RiaCurveSetDefinition > curveSetDefVector ;
std : : set < RiaCurveSetDefinition > curveSetDefinitions ;
std : : set < RifEclipseSummaryAddress > selectedAddressesFromUi = buildAddressListFromSelections ( ) ;
for ( SummarySource * currSource : selectedSummarySources ( ) )
{
RimSummaryCaseCollection * ensemble = dynamic_cast < RimSummaryCaseCollection * > ( currSource ) ;
if ( ! ensemble ) continue ;
std : : set < RifEclipseSummaryAddress > addressesFromSource ;
// Build case list
2018-09-24 06:59:55 -05:00
auto addresses = ensemble - > ensembleSummaryAddresses ( ) ;
2018-08-14 04:01:19 -05:00
addressesFromSource . insert ( addresses . begin ( ) , addresses . end ( ) ) ;
for ( const auto & addressFromSource : addressesFromSource )
{
if ( selectedAddressesFromUi . count ( addressFromSource ) > 0 )
{
curveSetDefinitions . insert ( RiaCurveSetDefinition ( ensemble , addressFromSource ) ) ;
}
}
}
std : : copy ( curveSetDefinitions . begin ( ) , curveSetDefinitions . end ( ) , std : : back_inserter ( curveSetDefVector ) ) ;
return curveSetDefVector ;
}
2017-10-23 04:41:16 -05:00
//--------------------------------------------------------------------------------------------------
2018-05-15 06:56:25 -05:00
/// One CurveDefinition pr ensemble curve set
//--------------------------------------------------------------------------------------------------
std : : vector < RiaSummaryCurveDefinition > RiuSummaryCurveDefSelection : : selection ( ) const
{
std : : vector < RiaSummaryCurveDefinition > curveDefSelection ;
std : : set < RifEclipseSummaryAddress > selectedAddressesFromUi = buildAddressListFromSelections ( ) ;
for ( SummarySource * currSource : selectedSummarySources ( ) )
{
RimSummaryCaseCollection * ensemble = dynamic_cast < RimSummaryCaseCollection * > ( currSource ) ;
RimSummaryCase * sourceCase = dynamic_cast < RimSummaryCase * > ( currSource ) ;
2018-06-25 08:14:47 -05:00
2018-05-15 06:56:25 -05:00
if ( ensemble )
{
2018-09-24 06:59:55 -05:00
std : : set < RifEclipseSummaryAddress > addressUnion = ensemble - > ensembleSummaryAddresses ( ) ;
2018-05-15 06:56:25 -05:00
for ( const auto & addr : selectedAddressesFromUi )
{
if ( addressUnion . count ( addr ) )
{
curveDefSelection . push_back ( RiaSummaryCurveDefinition ( nullptr , addr , ensemble ) ) ;
}
}
}
else
{
if ( ! ( sourceCase & & sourceCase - > summaryReader ( ) ) ) continue ;
2018-06-25 08:14:47 -05:00
const std : : set < RifEclipseSummaryAddress > & readerAddresses = sourceCase - > summaryReader ( ) - > allResultAddresses ( ) ;
for ( const auto & addr : selectedAddressesFromUi )
2018-05-15 06:56:25 -05:00
{
2018-06-25 08:14:47 -05:00
if ( readerAddresses . count ( addr ) )
2018-05-15 06:56:25 -05:00
{
curveDefSelection . push_back ( RiaSummaryCurveDefinition ( sourceCase , addr , nullptr ) ) ;
}
}
}
}
return curveDefSelection ;
}
//--------------------------------------------------------------------------------------------------
2017-10-23 04:41:16 -05:00
///
//--------------------------------------------------------------------------------------------------
void RiuSummaryCurveDefSelection : : setMultiSelectionMode ( bool multiSelectionMode )
{
m_multiSelectionMode = multiSelectionMode ;
}
2018-05-11 06:24:46 -05:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuSummaryCurveDefSelection : : hideEnsembles ( bool hide )
{
m_hideEnsembles = hide ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuSummaryCurveDefSelection : : hideSummaryCases ( bool hide )
{
m_hideSummaryCases = hide ;
}
2017-10-23 04:41:16 -05:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuSummaryCurveDefSelection : : setFieldChangedHandler ( const std : : function < void ( ) > & handlerFunc )
{
m_toggleChangedHandler = handlerFunc ;
}
2017-12-04 07:36:17 -06:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2018-05-28 06:26:56 -05:00
void RiuSummaryCurveDefSelection : : setDefaultSelection ( const std : : vector < SummarySource * > & defaultSources )
2017-12-04 07:36:17 -06:00
{
RimProject * proj = RiaApplication : : instance ( ) - > project ( ) ;
auto allSumCases = proj - > allSummaryCases ( ) ;
2018-05-29 02:01:02 -05:00
auto allSumGroups = proj - > summaryGroups ( ) ;
2018-07-05 01:22:19 -05:00
if ( allSumCases . size ( ) > 0 )
2017-12-04 07:36:17 -06:00
{
2019-01-14 00:08:00 -06:00
RifEclipseSummaryAddress defaultAddress = RifEclipseSummaryAddress : : fieldAddress ( " FOPT " ) ;
2017-12-04 07:36:17 -06:00
2018-05-28 06:26:56 -05:00
std : : vector < SummarySource * > selectTheseSources = defaultSources ;
if ( selectTheseSources . empty ( ) ) selectTheseSources . push_back ( allSumCases [ 0 ] ) ;
2018-04-06 01:16:14 -05:00
2018-05-07 02:45:50 -05:00
std : : vector < RiaSummaryCurveDefinition > curveDefs ;
2018-05-28 06:26:56 -05:00
for ( SummarySource * s : selectTheseSources )
2018-05-07 02:45:50 -05:00
{
2018-05-28 06:26:56 -05:00
RimSummaryCase * sumCase = dynamic_cast < RimSummaryCase * > ( s ) ;
RimSummaryCaseCollection * ensemble = dynamic_cast < RimSummaryCaseCollection * > ( s ) ;
RiaSummaryCurveDefinition curveDef ( sumCase , defaultAddress , ensemble ) ;
2018-05-07 02:45:50 -05:00
curveDefs . push_back ( curveDef ) ;
}
2018-04-06 01:16:14 -05:00
2017-12-04 07:36:17 -06:00
setSelectedCurveDefinitions ( curveDefs ) ;
}
}
2017-10-11 12:48:35 -05:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuSummaryCurveDefSelection : : setSelectedCurveDefinitions ( const std : : vector < RiaSummaryCurveDefinition > & curveDefinitions )
{
resetAllFields ( ) ;
2018-05-10 14:29:55 -05:00
for ( const auto & curveDef : curveDefinitions )
2017-10-11 12:48:35 -05:00
{
2018-05-15 04:32:26 -05:00
if ( ! ( curveDef . summaryCase ( ) | | curveDef . isEnsembleCurve ( ) ) ) continue ;
2018-05-10 14:29:55 -05:00
RimSummaryCase * summaryCase = curveDef . summaryCase ( ) ;
2017-10-13 06:44:18 -05:00
2018-05-10 14:29:55 -05:00
RifEclipseSummaryAddress summaryAddress = curveDef . summaryAddress ( ) ;
2017-11-22 02:15:48 -06:00
if ( summaryAddress . category ( ) = = RifEclipseSummaryAddress : : SUMMARY_INVALID )
{
2018-05-10 14:29:55 -05:00
// If we have an invalid address, set the default address to Field
2018-05-28 04:20:20 -05:00
summaryAddress = RifEclipseSummaryAddress : : fieldAddress ( summaryAddress . quantityName ( ) ) ;
2017-11-22 02:15:48 -06:00
}
2017-10-11 12:48:35 -05:00
2018-06-08 01:43:00 -05:00
// Ignore ensemble statistics curves
if ( summaryAddress . category ( ) = = RifEclipseSummaryAddress : : SUMMARY_ENSEMBLE_STATISTICS ) continue ;
2017-10-11 12:48:35 -05:00
// Select summary category if not already selected
auto & selectedCategories = m_selectedSummaryCategories ( ) ;
2017-11-22 02:15:48 -06:00
2017-10-11 12:48:35 -05:00
if ( std : : find ( selectedCategories . begin ( ) , selectedCategories . end ( ) ,
summaryAddress . category ( ) ) = = selectedCategories . end ( ) )
{
m_selectedSummaryCategories . v ( ) . push_back ( summaryAddress . category ( ) ) ;
}
// Select case if not already selected
2018-05-15 04:32:26 -05:00
SummarySource * summSource = curveDef . isEnsembleCurve ( ) ? static_cast < SummarySource * > ( curveDef . ensemble ( ) ) : summaryCase ;
if ( std : : find ( m_selectedSources . begin ( ) , m_selectedSources . end ( ) , summSource ) = = m_selectedSources . end ( ) )
2017-10-11 12:48:35 -05:00
{
2017-10-18 01:20:21 -05:00
if ( summaryCase ! = calculatedSummaryCase ( ) )
{
2018-05-15 04:32:26 -05:00
m_selectedSources . push_back ( summSource ) ;
2017-10-18 01:20:21 -05:00
}
2017-10-11 12:48:35 -05:00
}
2017-10-12 14:51:45 -05:00
bool isObservedDataCase = isObservedData ( summaryCase ) ;
2017-10-11 12:48:35 -05:00
auto identifierAndFieldList = m_identifierFieldsMap [ summaryAddress . category ( ) ] ;
for ( const auto & identifierAndField : identifierAndFieldList )
{
2017-10-12 14:51:45 -05:00
bool isVectorField = identifierAndField - > summaryIdentifier ( ) = = RifEclipseSummaryAddress : : INPUT_VECTOR_NAME ;
QString avalue = QString : : fromStdString ( summaryAddress . uiText ( identifierAndField - > summaryIdentifier ( ) ) ) ;
if ( isVectorField & & isObservedDataCase )
{
avalue = avalue + QString ( OBSERVED_DATA_AVALUE_POSTFIX ) ;
}
2017-10-11 12:48:35 -05:00
const auto & currentSelectionVector = identifierAndField - > pdmField ( ) - > v ( ) ;
2017-10-12 14:51:45 -05:00
if ( std : : find ( currentSelectionVector . begin ( ) , currentSelectionVector . end ( ) , avalue ) = = currentSelectionVector . end ( ) )
2017-10-11 12:48:35 -05:00
{
std : : vector < QString > newSelectionVector ( currentSelectionVector . begin ( ) , currentSelectionVector . end ( ) ) ;
2017-10-12 14:51:45 -05:00
newSelectionVector . push_back ( avalue ) ;
2017-10-11 12:48:35 -05:00
( * identifierAndField - > pdmField ( ) ) = newSelectionVector ;
}
}
}
}
2017-10-17 07:34:02 -05:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std : : set < RifEclipseSummaryAddress > RiuSummaryCurveDefSelection : : findPossibleSummaryAddressesFromCalculated ( )
{
std : : set < RifEclipseSummaryAddress > addressSet ;
if ( m_currentSummaryCategory = = RifEclipseSummaryAddress : : SUMMARY_CALCULATED )
{
2017-10-18 01:20:21 -05:00
RimSummaryCase * calcSumCase = calculatedSummaryCase ( ) ;
2017-10-17 07:34:02 -05:00
2018-06-25 08:14:47 -05:00
const std : : set < RifEclipseSummaryAddress > allAddresses = calcSumCase - > summaryReader ( ) - > allResultAddresses ( ) ;
2017-10-18 01:20:21 -05:00
for ( const auto & adr : allAddresses )
{
addressSet . insert ( adr ) ;
}
2017-10-17 07:34:02 -05:00
}
return addressSet ;
}
2017-10-11 12:48:35 -05:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuSummaryCurveDefSelection : : fieldChangedByUi ( const caf : : PdmFieldHandle * changedField , const QVariant & oldValue , const QVariant & newValue )
{
2018-05-29 07:42:00 -05:00
if ( changedField ! = & m_selectedSources & & changedField ! = & m_selectedSummaryCategories & &
changedField ! = & m_currentSummaryCategory )
{
RifEclipseSummaryAddress : : SummaryVarCategory currentCategory = m_currentSummaryCategory ( ) ;
if ( currentCategory ! = RifEclipseSummaryAddress : : SUMMARY_INVALID )
{
// When a summary vector is selected, make sure the summary category for the summary vector is in the selection
// Note that we use the size of the variant to avoid this operation when an item in unchecked
if ( newValue . toList ( ) . size ( ) > oldValue . toList ( ) . size ( ) )
{
if ( std : : find ( m_selectedSummaryCategories . v ( ) . begin ( ) , m_selectedSummaryCategories . v ( ) . end ( ) , currentCategory ) = =
m_selectedSummaryCategories . v ( ) . end ( ) )
{
m_selectedSummaryCategories . v ( ) . push_back ( currentCategory ) ;
}
}
}
}
2018-09-11 06:09:34 -05:00
size_t curveCount = allCurveDefinitionsFromSelection ( ) . size ( ) ;
size_t curveSetCount = allCurveSetDefinitionsFromSelections ( ) . size ( ) ;
2019-01-16 06:51:13 -06:00
if ( m_toggleChangedHandler ! = nullptr )
2017-10-23 04:41:16 -05:00
{
2019-01-16 06:51:13 -06:00
// Do nothing if the curve count and curve set count is identical
if ( ( curveCount ! = m_prevCurveCount | | curveSetCount ! = m_prevCurveSetCount ) )
{
m_toggleChangedHandler ( ) ;
2018-09-11 06:09:34 -05:00
2019-01-16 06:51:13 -06:00
m_prevCurveCount = curveCount ;
m_prevCurveSetCount = curveSetCount ;
}
2017-10-23 04:41:16 -05:00
}
2017-10-11 12:48:35 -05:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QList < caf : : PdmOptionItemInfo > RiuSummaryCurveDefSelection : : calculateValueOptions ( const caf : : PdmFieldHandle * fieldNeedingOptions , bool * useOptionsOnly )
{
QList < caf : : PdmOptionItemInfo > options ;
2018-05-10 14:29:55 -05:00
if ( fieldNeedingOptions = = & m_selectedSources )
2017-10-11 12:48:35 -05:00
{
RimProject * proj = RiaApplication : : instance ( ) - > project ( ) ;
std : : vector < RimOilField * > oilFields ;
proj - > allOilFields ( oilFields ) ;
for ( RimOilField * oilField : oilFields )
{
RimSummaryCaseMainCollection * sumCaseMainColl = oilField - > summaryCaseMainCollection ( ) ;
if ( sumCaseMainColl )
{
2018-05-11 06:24:46 -05:00
if ( ! m_hideSummaryCases )
2018-05-10 14:29:55 -05:00
{
2018-05-11 06:24:46 -05:00
// Top level cases
for ( const auto & sumCase : sumCaseMainColl - > topLevelSummaryCases ( ) )
2018-05-10 14:29:55 -05:00
{
2018-05-11 06:24:46 -05:00
options . push_back ( caf : : PdmOptionItemInfo ( sumCase - > caseName ( ) , sumCase ) ) ;
2018-05-10 14:29:55 -05:00
}
}
2018-05-11 06:24:46 -05:00
// Ensembles
if ( ! m_hideEnsembles )
2017-10-11 12:48:35 -05:00
{
2018-05-11 06:24:46 -05:00
bool ensembleHeaderCreated = false ;
for ( const auto & sumCaseColl : sumCaseMainColl - > summaryCaseCollections ( ) )
{
if ( ! sumCaseColl - > isEnsemble ( ) ) continue ;
2018-05-10 14:29:55 -05:00
2018-05-11 06:24:46 -05:00
if ( ! ensembleHeaderCreated )
{
options . push_back ( caf : : PdmOptionItemInfo : : createHeader ( " Ensembles " , true ) ) ;
ensembleHeaderCreated = true ;
}
2017-10-11 12:48:35 -05:00
2018-05-11 06:24:46 -05:00
auto optionItem = caf : : PdmOptionItemInfo ( sumCaseColl - > name ( ) , sumCaseColl ) ;
2017-10-11 12:48:35 -05:00
optionItem . setLevel ( 1 ) ;
options . push_back ( optionItem ) ;
}
}
2018-05-11 06:24:46 -05:00
if ( ! m_hideSummaryCases )
2017-10-11 12:48:35 -05:00
{
2018-05-11 06:24:46 -05:00
// Grouped cases
for ( const auto & sumCaseColl : sumCaseMainColl - > summaryCaseCollections ( ) )
{
if ( sumCaseColl - > isEnsemble ( ) ) continue ;
2017-10-11 12:48:35 -05:00
2018-05-11 06:24:46 -05:00
options . push_back ( caf : : PdmOptionItemInfo : : createHeader ( sumCaseColl - > name ( ) , true ) ) ;
for ( const auto & sumCase : sumCaseColl - > allSummaryCases ( ) )
{
auto optionItem = caf : : PdmOptionItemInfo ( sumCase - > caseName ( ) , sumCase ) ;
optionItem . setLevel ( 1 ) ;
options . push_back ( optionItem ) ;
}
}
// Observed data
auto observedDataColl = oilField - > observedDataCollection ( ) ;
if ( observedDataColl - > allObservedData ( ) . size ( ) > 0 )
2017-10-11 12:48:35 -05:00
{
2018-05-11 06:24:46 -05:00
options . push_back ( caf : : PdmOptionItemInfo : : createHeader ( " Observed Data " , true ) ) ;
for ( const auto & obsData : observedDataColl - > allObservedData ( ) )
{
auto optionItem = caf : : PdmOptionItemInfo ( obsData - > caseName ( ) , obsData ) ;
optionItem . setLevel ( 1 ) ;
options . push_back ( optionItem ) ;
}
2017-10-11 12:48:35 -05:00
}
}
}
}
}
else if ( fieldNeedingOptions = = & m_selectedSummaryCategories )
{
for ( size_t i = 0 ; i < caf : : AppEnum < RifEclipseSummaryAddress : : SummaryVarCategory > : : size ( ) ; + + i )
{
2018-06-08 01:43:00 -05:00
if ( caf : : AppEnum < RifEclipseSummaryAddress : : SummaryVarCategory > : : fromIndex ( i ) = = RifEclipseSummaryAddress : : SUMMARY_ENSEMBLE_STATISTICS ) continue ;
2017-10-11 12:48:35 -05:00
options . push_back ( caf : : PdmOptionItemInfo ( caf : : AppEnum < RifEclipseSummaryAddress : : SummaryVarCategory > : : uiTextFromIndex ( i ) ,
caf : : AppEnum < RifEclipseSummaryAddress : : SummaryVarCategory > : : fromIndex ( i ) ) ) ;
}
}
else
{
// Lookup item type input field
auto identifierAndField = lookupIdentifierAndFieldFromFieldHandle ( fieldNeedingOptions ) ;
if ( identifierAndField ! = nullptr )
{
2017-10-17 07:34:02 -05:00
enum { SUM_CASES , OBS_DATA , CALCULATED_CURVES } ;
2017-10-20 01:54:25 -05:00
const int itemCount = CALCULATED_CURVES + 1 ;
2017-10-17 07:34:02 -05:00
std : : set < RifEclipseSummaryAddress > addrUnion [ itemCount ] ;
2017-10-11 12:48:35 -05:00
addrUnion [ SUM_CASES ] = findPossibleSummaryAddressesFromSelectedCases ( identifierAndField ) ;
addrUnion [ OBS_DATA ] = findPossibleSummaryAddressesFromSelectedObservedData ( identifierAndField ) ;
2017-10-17 07:34:02 -05:00
addrUnion [ CALCULATED_CURVES ] = findPossibleSummaryAddressesFromCalculated ( ) ;
2017-10-11 12:48:35 -05:00
2017-10-24 11:33:16 -05:00
std : : set < std : : string > itemNames [ itemCount ] ;
2017-10-17 07:34:02 -05:00
for ( int i = 0 ; i < itemCount ; i + + )
2017-10-11 12:48:35 -05:00
{
for ( const auto & address : addrUnion [ i ] )
{
2018-05-23 05:26:37 -05:00
if ( address . isErrorResult ( ) ) continue ;
2017-10-24 11:33:16 -05:00
auto name = address . uiText ( identifierAndField - > summaryIdentifier ( ) ) ;
if ( name . size ( ) > 0 )
{
2017-10-11 12:48:35 -05:00
itemNames [ i ] . insert ( name ) ;
2017-10-24 11:33:16 -05:00
}
2017-10-11 12:48:35 -05:00
}
}
bool isVectorField = identifierAndField - > summaryIdentifier ( ) = = RifEclipseSummaryAddress : : INPUT_VECTOR_NAME ;
// Merge sets for all other fields than vector fields
if ( ! isVectorField )
{
itemNames [ SUM_CASES ] . insert ( itemNames [ OBS_DATA ] . begin ( ) , itemNames [ OBS_DATA ] . end ( ) ) ;
itemNames [ OBS_DATA ] . clear ( ) ;
}
2017-10-17 07:34:02 -05:00
for ( int i = 0 ; i < itemCount ; i + + )
2017-10-11 12:48:35 -05:00
{
// Create headers only for vector fields when observed data is selected
bool hasObservedData = itemNames [ OBS_DATA ] . size ( ) > 0 ;
bool groupItems = isVectorField & & hasObservedData ;
if ( groupItems )
{
2017-11-22 14:07:26 -06:00
QString headerText ;
if ( i = = SUM_CASES )
{
headerText = QString ( " Simulated Data " ) ;
}
else if ( i = = OBS_DATA )
{
headerText = QString ( " Observed Data " ) ;
}
else if ( i = = CALCULATED_CURVES )
{
headerText = QString ( " Calculated " ) ;
}
if ( ! headerText . isEmpty ( ) )
{
options . push_back ( caf : : PdmOptionItemInfo : : createHeader ( headerText , true ) ) ;
}
2017-10-11 12:48:35 -05:00
}
auto itemPostfix = ( isVectorField & & i = = OBS_DATA ) ? QString ( OBSERVED_DATA_AVALUE_POSTFIX ) : QString ( " " ) ;
2018-11-21 05:31:42 -06:00
// Sort numeric identifiers by numeric val
std : : vector < std : : string > itemNamesVector ;
{
switch ( identifierAndField - > summaryIdentifier ( ) )
{
case RifEclipseSummaryAddress : : INPUT_REGION_NUMBER :
case RifEclipseSummaryAddress : : INPUT_SEGMENT_NUMBER :
case RifEclipseSummaryAddress : : INPUT_AQUIFER_NUMBER :
{
std : : set < int > values ;
for ( const std : : string & itemName : itemNames [ i ] )
{
values . insert ( RiaStdStringTools : : toInt ( itemName ) ) ;
}
for ( int v : values )
{
itemNamesVector . push_back ( std : : to_string ( v ) ) ;
}
break ;
}
default :
itemNamesVector . insert ( itemNamesVector . end ( ) , itemNames [ i ] . begin ( ) , itemNames [ i ] . end ( ) ) ;
break ;
}
}
for ( const auto & itemName : itemNamesVector )
2017-10-11 12:48:35 -05:00
{
2017-10-24 11:33:16 -05:00
QString displayName ;
if ( isVectorField )
{
2018-08-30 04:17:37 -05:00
std : : string longVectorName = RiuSummaryVectorDescriptionMap : : instance ( ) - > vectorLongName ( itemName , true ) ;
2017-12-12 01:42:09 -06:00
displayName = QString : : fromStdString ( longVectorName ) ;
displayName + = QString ( " (%1) " ) . arg ( QString : : fromStdString ( itemName ) ) ;
2017-10-24 11:33:16 -05:00
}
else
{
2017-12-12 01:42:09 -06:00
displayName = QString : : fromStdString ( itemName ) ;
2017-10-24 11:33:16 -05:00
}
2017-12-12 01:42:09 -06:00
auto optionItem = caf : : PdmOptionItemInfo ( displayName , QString : : fromStdString ( itemName ) + itemPostfix ) ;
2017-10-11 12:48:35 -05:00
if ( groupItems )
optionItem . setLevel ( 1 ) ;
options . push_back ( optionItem ) ;
}
}
}
}
return options ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuSummaryCurveDefSelection : : defineUiOrdering ( QString uiConfigName , caf : : PdmUiOrdering & uiOrdering )
{
caf : : PdmUiGroup * sourcesGroup = uiOrdering . addNewGroupWithKeyword ( " Sources " , RiuSummaryCurveDefinitionKeywords : : sources ( ) ) ;
2018-05-10 14:29:55 -05:00
sourcesGroup - > add ( & m_selectedSources ) ;
2017-10-11 12:48:35 -05:00
caf : : PdmUiGroup * itemTypesGroup = uiOrdering . addNewGroupWithKeyword ( " Summary Types " , RiuSummaryCurveDefinitionKeywords : : summaryTypes ( ) ) ;
itemTypesGroup - > add ( & m_selectedSummaryCategories ) ;
caf : : PdmField < std : : vector < QString > > * summaryiesField = nullptr ;
RifEclipseSummaryAddress : : SummaryVarCategory sumCategory = m_currentSummaryCategory ( ) ;
2017-11-21 02:43:34 -06:00
if ( sumCategory = = RifEclipseSummaryAddress : : SUMMARY_INVALID )
{
2017-11-21 02:59:53 -06:00
sumCategory = RifEclipseSummaryAddress : : SUMMARY_FIELD ;
2017-11-21 02:43:34 -06:00
}
2017-10-11 12:48:35 -05:00
if ( sumCategory = = RifEclipseSummaryAddress : : SUMMARY_FIELD )
{
summaryiesField = m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_FIELD ] [ 0 ] - > pdmField ( ) ;
}
else if ( sumCategory = = RifEclipseSummaryAddress : : SUMMARY_AQUIFER )
{
2017-12-12 08:09:52 -06:00
{
caf : : PdmUiGroup * myGroup = uiOrdering . addNewGroup ( " Aquifers " ) ;
myGroup - > add ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_AQUIFER ] [ 0 ] - > pdmField ( ) ) ;
}
summaryiesField = m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_AQUIFER ] [ 1 ] - > pdmField ( ) ;
2017-10-11 12:48:35 -05:00
}
else if ( sumCategory = = RifEclipseSummaryAddress : : SUMMARY_NETWORK )
{
summaryiesField = m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_NETWORK ] [ 0 ] - > pdmField ( ) ;
}
else if ( sumCategory = = RifEclipseSummaryAddress : : SUMMARY_MISC )
{
summaryiesField = m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_MISC ] [ 0 ] - > pdmField ( ) ;
}
else if ( sumCategory = = RifEclipseSummaryAddress : : SUMMARY_REGION )
{
{
caf : : PdmUiGroup * myGroup = uiOrdering . addNewGroup ( " Regions " ) ;
myGroup - > add ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_REGION ] [ 0 ] - > pdmField ( ) ) ;
}
summaryiesField = m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_REGION ] [ 1 ] - > pdmField ( ) ;
}
else if ( sumCategory = = RifEclipseSummaryAddress : : SUMMARY_REGION_2_REGION )
{
{
caf : : PdmUiGroup * myGroup = uiOrdering . addNewGroup ( " Regions " ) ;
myGroup - > add ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_REGION_2_REGION ] [ 0 ] - > pdmField ( ) ) ;
}
summaryiesField = m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_REGION_2_REGION ] [ 1 ] - > pdmField ( ) ;
}
else if ( sumCategory = = RifEclipseSummaryAddress : : SUMMARY_WELL_GROUP )
{
{
caf : : PdmUiGroup * myGroup = uiOrdering . addNewGroup ( " Well Groups " ) ;
myGroup - > add ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_GROUP ] [ 0 ] - > pdmField ( ) ) ;
}
summaryiesField = m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_GROUP ] [ 1 ] - > pdmField ( ) ;
}
else if ( sumCategory = = RifEclipseSummaryAddress : : SUMMARY_WELL )
{
{
caf : : PdmUiGroup * myGroup = uiOrdering . addNewGroup ( " Wells " ) ;
myGroup - > add ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL ] [ 0 ] - > pdmField ( ) ) ;
}
summaryiesField = m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL ] [ 1 ] - > pdmField ( ) ;
}
else if ( sumCategory = = RifEclipseSummaryAddress : : SUMMARY_WELL_COMPLETION )
{
{
caf : : PdmUiGroup * myGroup = uiOrdering . addNewGroup ( " Completions " ) ;
myGroup - > add ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_COMPLETION ] [ 0 ] - > pdmField ( ) ) ;
myGroup - > add ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_COMPLETION ] [ 1 ] - > pdmField ( ) ) ;
}
summaryiesField = m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_COMPLETION ] [ 2 ] - > pdmField ( ) ;
}
else if ( sumCategory = = RifEclipseSummaryAddress : : SUMMARY_WELL_COMPLETION_LGR )
{
{
caf : : PdmUiGroup * myGroup = uiOrdering . addNewGroup ( " LGR Completions " ) ;
myGroup - > add ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_COMPLETION_LGR ] [ 0 ] - > pdmField ( ) ) ;
myGroup - > add ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_COMPLETION_LGR ] [ 1 ] - > pdmField ( ) ) ;
myGroup - > add ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_COMPLETION_LGR ] [ 2 ] - > pdmField ( ) ) ;
}
summaryiesField = m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_COMPLETION_LGR ] [ 3 ] - > pdmField ( ) ;
}
else if ( sumCategory = = RifEclipseSummaryAddress : : SUMMARY_WELL_LGR )
{
{
caf : : PdmUiGroup * myGroup = uiOrdering . addNewGroup ( " LGR Wells " ) ;
myGroup - > add ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_LGR ] [ 0 ] - > pdmField ( ) ) ;
myGroup - > add ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_LGR ] [ 1 ] - > pdmField ( ) ) ;
}
summaryiesField = m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_LGR ] [ 2 ] - > pdmField ( ) ;
}
else if ( sumCategory = = RifEclipseSummaryAddress : : SUMMARY_WELL_SEGMENT )
{
{
caf : : PdmUiGroup * myGroup = uiOrdering . addNewGroup ( " Well Segments " ) ;
myGroup - > add ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_SEGMENT ] [ 0 ] - > pdmField ( ) ) ;
myGroup - > add ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_SEGMENT ] [ 1 ] - > pdmField ( ) ) ;
}
summaryiesField = m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_WELL_SEGMENT ] [ 2 ] - > pdmField ( ) ;
}
else if ( sumCategory = = RifEclipseSummaryAddress : : SUMMARY_BLOCK )
{
{
caf : : PdmUiGroup * myGroup = uiOrdering . addNewGroup ( " Blocks " ) ;
myGroup - > add ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_BLOCK ] [ 0 ] - > pdmField ( ) ) ;
}
summaryiesField = m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_BLOCK ] [ 1 ] - > pdmField ( ) ;
}
else if ( sumCategory = = RifEclipseSummaryAddress : : SUMMARY_BLOCK_LGR )
2018-05-11 05:34:54 -05:00
{
2017-10-11 12:48:35 -05:00
{
caf : : PdmUiGroup * myGroup = uiOrdering . addNewGroup ( " LGR Blocks " ) ;
myGroup - > add ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_BLOCK_LGR ] [ 0 ] - > pdmField ( ) ) ;
myGroup - > add ( m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_BLOCK_LGR ] [ 1 ] - > pdmField ( ) ) ;
}
summaryiesField = m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_BLOCK_LGR ] [ 2 ] - > pdmField ( ) ;
}
2017-10-17 07:34:02 -05:00
else if ( sumCategory = = RifEclipseSummaryAddress : : SUMMARY_CALCULATED )
{
summaryiesField = m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_CALCULATED ] [ 0 ] - > pdmField ( ) ;
}
2017-11-22 13:34:18 -06:00
else if ( sumCategory = = RifEclipseSummaryAddress : : SUMMARY_IMPORTED )
{
summaryiesField = m_identifierFieldsMap [ RifEclipseSummaryAddress : : SUMMARY_IMPORTED ] [ 0 ] - > pdmField ( ) ;
}
2017-10-11 12:48:35 -05:00
caf : : PdmUiGroup * summariesGroup = uiOrdering . addNewGroupWithKeyword ( " Summaries " , RiuSummaryCurveDefinitionKeywords : : summaries ( ) ) ;
2017-11-21 02:43:34 -06:00
if ( summaryiesField )
{
summariesGroup - > add ( summaryiesField ) ;
}
2017-10-11 12:48:35 -05:00
uiOrdering . skipRemainingFields ( true ) ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std : : set < RifEclipseSummaryAddress > RiuSummaryCurveDefSelection : : findPossibleSummaryAddressesFromSelectedCases ( const SummaryIdentifierAndField * identifierAndField )
{
2018-06-25 08:14:47 -05:00
std : : vector < SummarySource * > sources ;
2018-05-10 14:29:55 -05:00
for ( const auto & source : m_selectedSources ( ) )
2017-10-11 12:48:35 -05:00
{
2018-05-10 14:29:55 -05:00
RimSummaryCase * sumCase = dynamic_cast < RimSummaryCase * > ( source . p ( ) ) ;
2018-05-11 05:34:54 -05:00
RimSummaryCaseCollection * ensemble = dynamic_cast < RimSummaryCaseCollection * > ( source . p ( ) ) ;
2018-05-10 14:29:55 -05:00
2018-05-11 05:34:54 -05:00
if ( sumCase )
{
2018-06-25 08:14:47 -05:00
if ( ! isObservedData ( sumCase ) ) sources . push_back ( sumCase ) ;
2018-05-11 05:34:54 -05:00
}
else if ( ensemble )
{
2018-06-25 08:14:47 -05:00
sources . push_back ( ensemble ) ;
2018-05-11 05:34:54 -05:00
}
2017-10-11 12:48:35 -05:00
}
2018-06-25 08:14:47 -05:00
return findPossibleSummaryAddresses ( sources , identifierAndField ) ;
2017-10-11 12:48:35 -05:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std : : set < RifEclipseSummaryAddress > RiuSummaryCurveDefSelection : : findPossibleSummaryAddressesFromSelectedObservedData ( const SummaryIdentifierAndField * identifierAndField )
{
2018-06-25 08:14:47 -05:00
std : : vector < SummarySource * > obsData ;
2018-05-10 14:29:55 -05:00
for ( const auto & source : m_selectedSources ( ) )
2017-10-11 12:48:35 -05:00
{
2018-05-10 14:29:55 -05:00
RimSummaryCase * sumCase = dynamic_cast < RimSummaryCase * > ( source . p ( ) ) ;
if ( sumCase & & isObservedData ( sumCase ) )
2017-10-11 12:48:35 -05:00
{
obsData . push_back ( sumCase ) ;
}
}
return findPossibleSummaryAddresses ( obsData , identifierAndField ) ;
}
//--------------------------------------------------------------------------------------------------
/// Returns the summary addresses that match the selected item type and input selections made in GUI
//--------------------------------------------------------------------------------------------------
2018-06-25 08:14:47 -05:00
std : : set < RifEclipseSummaryAddress > RiuSummaryCurveDefSelection : : findPossibleSummaryAddresses ( const std : : vector < SummarySource * > & selectedSources ,
2017-10-11 12:48:35 -05:00
const SummaryIdentifierAndField * identifierAndField )
{
std : : set < RifEclipseSummaryAddress > addrUnion ;
auto isVectorField = identifierAndField ! = nullptr & & identifierAndField - > summaryIdentifier ( ) = = RifEclipseSummaryAddress : : INPUT_VECTOR_NAME ;
auto controllingIdentifierAndField = identifierAndField ! = nullptr ? lookupControllingField ( identifierAndField ) : nullptr ;
if ( ! isVectorField & & controllingIdentifierAndField ! = nullptr & & controllingIdentifierAndField - > pdmField ( ) - > v ( ) . size ( ) = = 0 )
{
return addrUnion ;
}
2018-06-25 08:14:47 -05:00
for ( SummarySource * currSource : selectedSources )
2017-10-11 12:48:35 -05:00
{
2018-06-25 08:14:47 -05:00
std : : set < RifEclipseSummaryAddress > allAddresses ;
RimSummaryCase * currCase = dynamic_cast < RimSummaryCase * > ( currSource ) ;
RimSummaryCaseCollection * currEnsemble = dynamic_cast < RimSummaryCaseCollection * > ( currSource ) ;
if ( currCase )
{
2018-08-06 01:22:05 -05:00
RifSummaryReaderInterface * reader = currCase - > summaryReader ( ) ;
2018-06-25 08:14:47 -05:00
if ( reader ) allAddresses = reader - > allResultAddresses ( ) ;
}
else if ( currEnsemble )
2017-10-11 12:48:35 -05:00
{
2018-09-24 06:59:55 -05:00
allAddresses = currEnsemble - > ensembleSummaryAddresses ( ) ;
2018-06-25 08:14:47 -05:00
}
2017-10-11 12:48:35 -05:00
2018-06-25 08:14:47 -05:00
bool applySelections = identifierAndField = = nullptr | | ( ! isVectorField & & controllingIdentifierAndField ! = nullptr ) ;
std : : vector < SummaryIdentifierAndField * > controllingFields ;
if ( applySelections )
{
// Build selections vector
controllingFields = buildControllingFieldList ( identifierAndField ) ;
}
2017-10-11 12:48:35 -05:00
2018-06-25 08:14:47 -05:00
for ( auto & address : allAddresses )
{
if ( address . category ( ) = = m_currentSummaryCategory ( ) )
2017-10-11 12:48:35 -05:00
{
2018-06-25 08:14:47 -05:00
bool addressSelected = applySelections ? isAddressCompatibleWithControllingFieldSelection ( address , controllingFields ) : true ;
if ( addressSelected )
2017-10-11 12:48:35 -05:00
{
2018-06-25 08:14:47 -05:00
addrUnion . insert ( address ) ;
2017-10-11 12:48:35 -05:00
}
}
}
}
return addrUnion ;
}
//--------------------------------------------------------------------------------------------------
/// Build a list of relevant selections
//--------------------------------------------------------------------------------------------------
2017-10-24 03:05:11 -05:00
std : : vector < SummaryIdentifierAndField * > RiuSummaryCurveDefSelection : : buildControllingFieldList ( const SummaryIdentifierAndField * identifierAndField ) const
2017-10-11 12:48:35 -05:00
{
2017-10-24 03:05:11 -05:00
std : : vector < SummaryIdentifierAndField * > controllingFields ;
2017-10-11 12:48:35 -05:00
const auto & identifierAndFieldList = m_identifierFieldsMap . at ( m_currentSummaryCategory ( ) ) ;
for ( const auto & identifierAndFieldItem : identifierAndFieldList )
{
if ( identifierAndFieldItem = = identifierAndField )
{
break ;
}
controllingFields . push_back ( identifierAndFieldItem ) ;
}
return controllingFields ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2017-10-24 03:05:11 -05:00
SummaryIdentifierAndField * RiuSummaryCurveDefSelection : : lookupIdentifierAndFieldFromFieldHandle ( const caf : : PdmFieldHandle * pdmFieldHandle ) const
2017-10-11 12:48:35 -05:00
{
for ( const auto & itemTypes : m_identifierFieldsMap )
{
for ( const auto & itemTypeInput : itemTypes . second )
{
if ( pdmFieldHandle = = itemTypeInput - > pdmField ( ) )
{
return itemTypeInput ;
}
}
}
return nullptr ;
}
//--------------------------------------------------------------------------------------------------
/// Returns the Controlling pdm field info for the specified pdm field info.
/// Controlling means the field controlling the dependent field
2018-10-10 03:17:07 -05:00
/// If the specified pdm field info is the topmost (i.e. index is 0), nullptr is returned
2017-10-11 12:48:35 -05:00
//--------------------------------------------------------------------------------------------------
2017-10-24 03:05:11 -05:00
SummaryIdentifierAndField * RiuSummaryCurveDefSelection : : lookupControllingField ( const SummaryIdentifierAndField * dependentField ) const
2017-10-11 12:48:35 -05:00
{
for ( const auto & identifierAndFieldList : m_identifierFieldsMap )
{
int index = 0 ;
for ( const auto & iaf : identifierAndFieldList . second )
{
if ( iaf = = dependentField )
{
return index > 0 ? identifierAndFieldList . second [ index - 1 ] : nullptr ;
}
index + + ;
}
}
return nullptr ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RiuSummaryCurveDefSelection : : isAddressCompatibleWithControllingFieldSelection ( const RifEclipseSummaryAddress & address , const std : : vector < SummaryIdentifierAndField * > & identifierAndFieldList ) const
{
for ( const auto & identifierAndField : identifierAndFieldList )
{
bool match = false ;
for ( const auto & selectedText : identifierAndField - > pdmField ( ) - > v ( ) )
{
if ( QString : : compare ( QString : : fromStdString ( address . uiText ( identifierAndField - > summaryIdentifier ( ) ) ) , selectedText ) = = 0 )
{
match = true ;
break ;
}
}
if ( ! match )
{
return false ;
}
}
return true ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std : : set < RifEclipseSummaryAddress > RiuSummaryCurveDefSelection : : buildAddressListFromSelections ( ) const
{
std : : set < RifEclipseSummaryAddress > addressSet ;
for ( const auto & category : m_selectedSummaryCategories ( ) )
{
2018-06-08 01:43:00 -05:00
if ( m_identifierFieldsMap . at ( category ) . size ( ) = = 0 | |
category = = RifEclipseSummaryAddress : : SummaryVarCategory : : SUMMARY_INVALID ) continue ;
2017-10-17 07:34:02 -05:00
2017-10-12 02:27:19 -05:00
const auto & identifierAndFieldList = m_identifierFieldsMap . at ( category ) ;
std : : vector < std : : pair < RifEclipseSummaryAddress : : SummaryIdentifierType , QString > > selectionStack ;
buildAddressListForCategoryRecursively ( category , identifierAndFieldList . begin ( ) , selectionStack , addressSet ) ;
2017-10-11 12:48:35 -05:00
}
return addressSet ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuSummaryCurveDefSelection : : buildAddressListForCategoryRecursively ( RifEclipseSummaryAddress : : SummaryVarCategory category ,
std : : vector < SummaryIdentifierAndField * > : : const_iterator identifierAndFieldItr ,
std : : vector < std : : pair < RifEclipseSummaryAddress : : SummaryIdentifierType , QString > > & identifierPath ,
std : : set < RifEclipseSummaryAddress > & addressSet ) const
{
for ( const auto & identifierText : ( * identifierAndFieldItr ) - > pdmField ( ) - > v ( ) )
{
auto idText = identifierText ;
idText . remove ( OBSERVED_DATA_AVALUE_POSTFIX ) ;
identifierPath . push_back ( std : : make_pair ( ( * identifierAndFieldItr ) - > summaryIdentifier ( ) , idText ) ) ;
if ( ( * identifierAndFieldItr ) - > summaryIdentifier ( ) ! = RifEclipseSummaryAddress : : INPUT_VECTOR_NAME )
{
buildAddressListForCategoryRecursively ( category , std : : next ( identifierAndFieldItr , 1 ) , identifierPath , addressSet ) ;
}
else
{
std : : map < RifEclipseSummaryAddress : : SummaryIdentifierType , std : : string > selectedIdentifiers ;
for ( const auto & identifier : identifierPath )
{
selectedIdentifiers . insert ( std : : make_pair ( identifier . first , identifier . second . toStdString ( ) ) ) ;
}
auto address = RifEclipseSummaryAddress ( category , selectedIdentifiers ) ;
addressSet . insert ( address ) ;
}
2017-12-05 03:10:04 -06:00
if ( ! identifierPath . empty ( ) )
{
identifierPath . pop_back ( ) ;
}
2017-10-11 12:48:35 -05:00
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuSummaryCurveDefSelection : : defineEditorAttribute ( const caf : : PdmFieldHandle * field , QString uiConfigName , caf : : PdmUiEditorAttribute * attribute )
{
2017-12-15 01:24:00 -06:00
caf : : PdmUiTreeSelectionEditorAttribute * attrib = dynamic_cast < caf : : PdmUiTreeSelectionEditorAttribute * > ( attribute ) ;
if ( attrib )
2017-10-11 12:48:35 -05:00
{
2017-12-15 01:24:00 -06:00
if ( & m_selectedSummaryCategories = = field )
2017-10-11 12:48:35 -05:00
{
attrib - > fieldToReceiveCurrentItemValue = & m_currentSummaryCategory ;
attrib - > showTextFilter = false ;
attrib - > showToggleAllCheckbox = false ;
2017-12-14 09:04:03 -06:00
attrib - > setCurrentIndexWhenItemIsChecked = true ;
2017-10-11 12:48:35 -05:00
}
2017-10-13 01:54:06 -05:00
2017-12-15 01:24:00 -06:00
// All tree selection editors are set in specified selection mode
2017-10-23 04:41:16 -05:00
attrib - > singleSelectionMode = ! m_multiSelectionMode ;
2017-10-11 12:48:35 -05:00
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuSummaryCurveDefSelection : : resetAllFields ( )
{
2018-05-10 14:29:55 -05:00
m_selectedSources . clear ( ) ;
2017-10-11 12:48:35 -05:00
m_selectedSummaryCategories = std : : vector < caf : : AppEnum < RifEclipseSummaryAddress : : SummaryVarCategory > > ( ) ;
// clear all state in fields
for ( auto & identifierAndFieldList : m_identifierFieldsMap )
{
for ( auto a : identifierAndFieldList . second )
{
a - > pdmField ( ) - > v ( ) . clear ( ) ;
}
}
2019-01-16 06:51:13 -06:00
m_prevCurveCount = 0 ;
m_prevCurveSetCount = 0 ;
2017-10-11 12:48:35 -05:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2018-05-10 14:29:55 -05:00
bool RiuSummaryCurveDefSelection : : isObservedData ( const RimSummaryCase * sumCase ) const
2017-10-11 12:48:35 -05:00
{
2018-05-10 14:29:55 -05:00
return dynamic_cast < const RimObservedData * > ( sumCase ) ! = nullptr ;
2017-10-11 12:48:35 -05:00
}
2017-10-18 01:20:21 -05:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2018-05-10 14:29:55 -05:00
std : : vector < SummarySource * > RiuSummaryCurveDefSelection : : selectedSummarySources ( ) const
2017-10-18 01:20:21 -05:00
{
2018-05-10 14:29:55 -05:00
std : : vector < SummarySource * > sources ;
2017-10-18 01:20:21 -05:00
2018-05-10 14:29:55 -05:00
for ( const auto & source : m_selectedSources )
2017-10-18 01:20:21 -05:00
{
2018-05-10 14:29:55 -05:00
sources . push_back ( source ) ;
2017-10-18 01:20:21 -05:00
}
// Always add the summary case for calculated curves as this case is not displayed in UI
2018-05-10 14:29:55 -05:00
sources . push_back ( RiuSummaryCurveDefSelection : : calculatedSummaryCase ( ) ) ;
2017-10-18 01:20:21 -05:00
2018-05-10 14:29:55 -05:00
return sources ;
2017-10-18 01:20:21 -05:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimSummaryCase * RiuSummaryCurveDefSelection : : calculatedSummaryCase ( )
{
2017-10-23 07:42:38 -05:00
RimSummaryCalculationCollection * calcColl = RiaApplication : : instance ( ) - > project ( ) - > calculationCollection ( ) ;
2017-10-18 01:20:21 -05:00
return calcColl - > calculationSummaryCase ( ) ;
}