diff --git a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp index 764aaa8e18..17005951d2 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp @@ -42,6 +42,7 @@ #include "RimWellLogExtractionCurve.h" #include "cafPdmUiListEditor.h" +#include "cafPdmUiTreeSelectionEditor.h" #include "cafUtils.h" #include @@ -87,10 +88,10 @@ RimEclipseResultDefinition::RimEclipseResultDefinition() CAF_PDM_InitFieldNoDefault(&m_selectedTracers_OBSOLETE, "SelectedTracers", "Tracers", "", "", ""); m_selectedTracers_OBSOLETE.uiCapability()->setUiHidden(true); - CAF_PDM_InitFieldNoDefault(&m_selectedInjectorTracers, "SelectedInjectorTracers", "Tracers", "", "", ""); + CAF_PDM_InitFieldNoDefault(&m_selectedInjectorTracers, "SelectedInjectorTracers", "Injector Tracers", "", "", ""); m_selectedInjectorTracers.uiCapability()->setUiHidden(true); - CAF_PDM_InitFieldNoDefault(&m_selectedProducerTracers, "SelectedProducerTracers", "Tracers", "", "", ""); + CAF_PDM_InitFieldNoDefault(&m_selectedProducerTracers, "SelectedProducerTracers", "Producer Tracers", "", "", ""); m_selectedProducerTracers.uiCapability()->setUiHidden(true); @@ -121,27 +122,22 @@ RimEclipseResultDefinition::RimEclipseResultDefinition() m_flowSolutionUiField.xmlCapability()->setIOWritable(false); m_flowSolutionUiField.uiCapability()->setUiHidden(true); // For now since there are only one to choose from - CAF_PDM_InitField(&m_selectAllInjectorTracers, "MSelectAllInjectorTracers", false, "Injectors, All ", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_selectedInjectorTracersUiField, "MSelectedInjectorTracers", "Injector Tracers", "", "", ""); m_selectedInjectorTracersUiField.xmlCapability()->setIOReadable(false); m_selectedInjectorTracersUiField.xmlCapability()->setIOWritable(false); - m_selectedInjectorTracersUiField.uiCapability()->setUiEditorTypeName(caf::PdmUiListEditor::uiEditorTypeName()); + m_selectedInjectorTracersUiField.uiCapability()->setUiEditorTypeName(caf::PdmUiTreeSelectionEditor::uiEditorTypeName()); m_selectedInjectorTracersUiField.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::HIDDEN); - CAF_PDM_InitField(&m_selectAllProducerTracers, "MSelectAllProducerTracers", false, "Producers, All ", "", "", ""); - CAF_PDM_InitFieldNoDefault(&m_selectedProducerTracersUiField, "MSelectedProducerTracers", "Producer Tracers", "", "", ""); m_selectedProducerTracersUiField.xmlCapability()->setIOReadable(false); m_selectedProducerTracersUiField.xmlCapability()->setIOWritable(false); - m_selectedProducerTracersUiField.uiCapability()->setUiEditorTypeName(caf::PdmUiListEditor::uiEditorTypeName()); + m_selectedProducerTracersUiField.uiCapability()->setUiEditorTypeName(caf::PdmUiTreeSelectionEditor::uiEditorTypeName()); m_selectedProducerTracersUiField.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::HIDDEN); CAF_PDM_InitFieldNoDefault(&m_selectedSouringTracersUiField, "MSelectedSouringTracers", "Tracers", "", "", ""); m_selectedSouringTracersUiField.xmlCapability()->setIOReadable(false); m_selectedSouringTracersUiField.xmlCapability()->setIOWritable(false); m_selectedSouringTracersUiField.uiCapability()->setUiEditorTypeName(caf::PdmUiListEditor::uiEditorTypeName()); - - CAF_PDM_InitFieldNoDefault(&m_selectedTracersUiFieldFilter, "SelectedTracersFilter", "Filter", "", "", ""); } //-------------------------------------------------------------------------------------------------- @@ -253,25 +249,20 @@ void RimEclipseResultDefinition::fieldChangedByUi(const caf::PdmFieldHandle* cha loadDataAndUpdate(); } - if (&m_selectAllInjectorTracers == changedField) + if (&m_flowTracerSelectionMode == changedField) { - toggleAllTracersSelection(&m_selectAllInjectorTracers); - } - if (&m_selectAllProducerTracers == changedField) - { - toggleAllTracersSelection(&m_selectAllProducerTracers); + loadDataAndUpdate(); } - if ( &m_selectedInjectorTracersUiField == changedField ) + + if (&m_selectedInjectorTracersUiField == changedField ) { changedTracerSelectionField(true); - m_selectAllInjectorTracers = false; } if (&m_selectedProducerTracersUiField == changedField) { changedTracerSelectionField(false); - m_selectAllProducerTracers = false; } @@ -295,53 +286,9 @@ void RimEclipseResultDefinition::fieldChangedByUi(const caf::PdmFieldHandle* cha loadDataAndUpdate(); } - // TODO: Fix this to deal with the injector producer fields - if (&m_selectedTracersUiFieldFilter == changedField) - { - updateSelectedTracersFromFilter(); - } - updateAnyFieldHasChanged(); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimEclipseResultDefinition::updateSelectedTracersFromFilter() -{ - auto visibleTracerNames = tracerNamesMatchingFilter(); - - { - std::vector subSelection; - // Remove hidden items from selection in injector tracers - for (auto selectedTracer : m_selectedInjectorTracers()) - { - if (std::find(begin(visibleTracerNames), end(visibleTracerNames), selectedTracer) != end(visibleTracerNames)) - { - subSelection.push_back(selectedTracer); - } - } - - m_selectedInjectorTracersUiField = subSelection; - } - - { - std::vector subSelection; - // Remove hidden items from selection in producer tracers - for (auto selectedTracer : m_selectedProducerTracers()) - { - if (std::find(begin(visibleTracerNames), end(visibleTracerNames), selectedTracer) != end(visibleTracerNames)) - { - subSelection.push_back(selectedTracer); - } - } - - m_selectedProducerTracersUiField = subSelection; - } - - updateConnectedEditors(); -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -354,31 +301,7 @@ void RimEclipseResultDefinition::changedTracerSelectionField(bool injector) std::vector& selectedTracersUi = injector ? m_selectedInjectorTracersUiField.v() : m_selectedProducerTracersUiField.v(); - if (m_selectedTracersUiFieldFilter().isEmpty()) - { - selectedTracers = selectedTracersUi; - } - else - { - auto filteredTracerNames = tracerNamesMatchingFilter(); - - // Keep selected strings not part of currently visible selection items - std::vector newSelection; - for (auto selectedTracer : selectedTracers) - { - if (std::find(begin(filteredTracerNames), end(filteredTracerNames), selectedTracer) == end(filteredTracerNames)) - { - newSelection.push_back(selectedTracer); - } - } - - for (auto selectedTracerUi : selectedTracersUi) - { - newSelection.push_back(selectedTracerUi); - } - - selectedTracers = newSelection; - } + selectedTracers = selectedTracersUi; loadDataAndUpdate(); } @@ -797,7 +720,7 @@ QList RimEclipseResultDefinition::calcOptionsForSelected RimFlowDiagSolution* flowSol = m_flowSolutionUiField(); if (flowSol) { - std::vector tracerNames = tracerNamesMatchingFilter(); + std::vector tracerNames = allTracerNames(); std::list sortedTracers; for (const QString& tracerName : tracerNames) @@ -1445,14 +1368,11 @@ void RimEclipseResultDefinition::defineUiOrdering(QString uiConfigName, caf::Pdm { caf::PdmUiGroup* selectionGroup = uiOrdering.addNewGroup("Tracer Selection"); selectionGroup->setEnableFrame(false); - selectionGroup->add(&m_selectedTracersUiFieldFilter); caf::PdmUiGroup* injectorGroup = selectionGroup->addNewGroup("Injectors"); - injectorGroup->setEnableFrame(false); - injectorGroup->add(&m_selectAllInjectorTracers); +// injectorGroup->setEnableFrame(false); injectorGroup->add(&m_selectedInjectorTracersUiField); caf::PdmUiGroup* producerGroup = selectionGroup->addNewGroup("Producers", false); - producerGroup->setEnableFrame(false); - producerGroup->add(&m_selectAllProducerTracers); +// producerGroup->setEnableFrame(false); producerGroup->add(&m_selectedProducerTracersUiField); } @@ -1471,10 +1391,7 @@ void RimEclipseResultDefinition::defineUiOrdering(QString uiConfigName, caf::Pdm if (m_resultTypeUiField() == RiaDefines::FLOW_DIAGNOSTICS) { - if (injectorTracersSelected() != NONE_SELECTED || producerTracersSelected() != NONE_SELECTED) - { - uiOrdering.add(&m_resultVariableUiField); - } + uiOrdering.add(&m_resultVariableUiField); } else { @@ -1528,58 +1445,17 @@ void RimEclipseResultDefinition::removePerCellFaceOptionItems(QList RimEclipseResultDefinition::tracerNamesMatchingFilter() const +std::vector RimEclipseResultDefinition::allTracerNames() const { - std::vector matchingNames; + std::vector tracerNames; RimFlowDiagSolution* flowSol = m_flowSolutionUiField(); if (flowSol) { - std::vector tracerNames = flowSol->tracerNames(); - if (m_selectedTracersUiFieldFilter().isEmpty()) - { - matchingNames = tracerNames; - } - else - { - for (const QString& tracerName : tracerNames) - { - if (caf::Utils::isStringMatch(m_selectedTracersUiFieldFilter, tracerName)) - { - matchingNames.push_back(tracerName); - } - } - } + tracerNames = flowSol->tracerNames(); } - return matchingNames; -} - - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimEclipseResultDefinition::toggleAllTracersSelection(const caf::PdmField* changedField) -{ - bool injector = &m_selectAllInjectorTracers == changedField; - std::vector tracerNames; - if (changedField->v()) - { - QList options = calcOptionsForSelectedTracerField(injector); - - for (const caf::PdmOptionItemInfo& itemInfo : options) - { - tracerNames.push_back(itemInfo.value().toString()); - } - } - if (injector) - { - setSelectedInjectorTracers(tracerNames); - } - else - { - setSelectedProducerTracers(tracerNames); - } + return tracerNames; } //-------------------------------------------------------------------------------------------------- @@ -1593,11 +1469,11 @@ RimEclipseResultDefinition::FlowTracerSelectionNumbers RimEclipseResultDefinitio } else if (m_flowTracerSelectionMode == FLOW_TR_BY_SELECTION) { - if (m_selectedInjectorTracers().size() == 1) + if (m_selectedInjectorTracers().size() == (size_t) 1) { return ONE_SELECTED; } - else if (m_selectedInjectorTracers().size() > 1) + else if (m_selectedInjectorTracers().size() > (size_t) 1) { return MULTIPLE_SELECTED; } @@ -1616,11 +1492,11 @@ RimEclipseResultDefinition::FlowTracerSelectionNumbers RimEclipseResultDefinitio } else if (m_flowTracerSelectionMode == FLOW_TR_BY_SELECTION) { - if (m_selectedProducerTracers().size() == 1) + if (m_selectedProducerTracers().size() == (size_t) 1) { return ONE_SELECTED; } - else if (m_selectedProducerTracers().size() > 1) + else if (m_selectedProducerTracers().size() > (size_t) 1) { return MULTIPLE_SELECTED; } diff --git a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.h b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.h index 43185a2917..b823dbcf31 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.h +++ b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.h @@ -127,8 +127,6 @@ protected: caf::PdmField m_resultVariable; caf::PdmPtrField m_flowSolution; - caf::PdmField m_selectAllInjectorTracers; - caf::PdmField m_selectAllProducerTracers; caf::PdmField > m_selectedInjectorTracers; caf::PdmField > m_selectedProducerTracers; caf::PdmField > m_selectedSouringTracers; @@ -147,7 +145,6 @@ protected: caf::PdmPtrField m_flowSolutionUiField; caf::PdmField< RigFlowDiagResultAddress::PhaseSelectionEnum > m_phaseSelection; - caf::PdmField m_selectedTracersUiFieldFilter; caf::PdmField > m_selectedInjectorTracersUiField; caf::PdmField > m_selectedProducerTracersUiField; @@ -168,14 +165,12 @@ private: caf::PdmOptionItemInfo calcOptionForTimeOfFlightField(); caf::PdmOptionItemInfo calcOptionForMaxFractionTracerField(); - void updateSelectedTracersFromFilter(); void changedTracerSelectionField(bool injector); QStringList getResultNamesForCurrentUiResultType(); static void removePerCellFaceOptionItems(QList& optionItems); - std::vector tracerNamesMatchingFilter() const; - void toggleAllTracersSelection(const caf::PdmField* changedField); - + std::vector allTracerNames() const; + FlowTracerSelectionNumbers injectorTracersSelected() const; FlowTracerSelectionNumbers producerTracersSelected() const; };