mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#3424 TreeSelectionEditor for injector / producer selection.
This commit is contained in:
parent
150204d0ec
commit
a9d37027ea
@ -42,6 +42,7 @@
|
|||||||
#include "RimWellLogExtractionCurve.h"
|
#include "RimWellLogExtractionCurve.h"
|
||||||
|
|
||||||
#include "cafPdmUiListEditor.h"
|
#include "cafPdmUiListEditor.h"
|
||||||
|
#include "cafPdmUiTreeSelectionEditor.h"
|
||||||
#include "cafUtils.h"
|
#include "cafUtils.h"
|
||||||
|
|
||||||
#include <QList>
|
#include <QList>
|
||||||
@ -87,10 +88,10 @@ RimEclipseResultDefinition::RimEclipseResultDefinition()
|
|||||||
CAF_PDM_InitFieldNoDefault(&m_selectedTracers_OBSOLETE, "SelectedTracers", "Tracers", "", "", "");
|
CAF_PDM_InitFieldNoDefault(&m_selectedTracers_OBSOLETE, "SelectedTracers", "Tracers", "", "", "");
|
||||||
m_selectedTracers_OBSOLETE.uiCapability()->setUiHidden(true);
|
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);
|
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);
|
m_selectedProducerTracers.uiCapability()->setUiHidden(true);
|
||||||
|
|
||||||
|
|
||||||
@ -121,27 +122,22 @@ RimEclipseResultDefinition::RimEclipseResultDefinition()
|
|||||||
m_flowSolutionUiField.xmlCapability()->setIOWritable(false);
|
m_flowSolutionUiField.xmlCapability()->setIOWritable(false);
|
||||||
m_flowSolutionUiField.uiCapability()->setUiHidden(true); // For now since there are only one to choose from
|
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", "", "", "");
|
CAF_PDM_InitFieldNoDefault(&m_selectedInjectorTracersUiField, "MSelectedInjectorTracers", "Injector Tracers", "", "", "");
|
||||||
m_selectedInjectorTracersUiField.xmlCapability()->setIOReadable(false);
|
m_selectedInjectorTracersUiField.xmlCapability()->setIOReadable(false);
|
||||||
m_selectedInjectorTracersUiField.xmlCapability()->setIOWritable(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);
|
m_selectedInjectorTracersUiField.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::HIDDEN);
|
||||||
|
|
||||||
CAF_PDM_InitField(&m_selectAllProducerTracers, "MSelectAllProducerTracers", false, "Producers, All ", "", "", "");
|
|
||||||
|
|
||||||
CAF_PDM_InitFieldNoDefault(&m_selectedProducerTracersUiField, "MSelectedProducerTracers", "Producer Tracers", "", "", "");
|
CAF_PDM_InitFieldNoDefault(&m_selectedProducerTracersUiField, "MSelectedProducerTracers", "Producer Tracers", "", "", "");
|
||||||
m_selectedProducerTracersUiField.xmlCapability()->setIOReadable(false);
|
m_selectedProducerTracersUiField.xmlCapability()->setIOReadable(false);
|
||||||
m_selectedProducerTracersUiField.xmlCapability()->setIOWritable(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);
|
m_selectedProducerTracersUiField.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::HIDDEN);
|
||||||
|
|
||||||
CAF_PDM_InitFieldNoDefault(&m_selectedSouringTracersUiField, "MSelectedSouringTracers", "Tracers", "", "", "");
|
CAF_PDM_InitFieldNoDefault(&m_selectedSouringTracersUiField, "MSelectedSouringTracers", "Tracers", "", "", "");
|
||||||
m_selectedSouringTracersUiField.xmlCapability()->setIOReadable(false);
|
m_selectedSouringTracersUiField.xmlCapability()->setIOReadable(false);
|
||||||
m_selectedSouringTracersUiField.xmlCapability()->setIOWritable(false);
|
m_selectedSouringTracersUiField.xmlCapability()->setIOWritable(false);
|
||||||
m_selectedSouringTracersUiField.uiCapability()->setUiEditorTypeName(caf::PdmUiListEditor::uiEditorTypeName());
|
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();
|
loadDataAndUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (&m_selectAllInjectorTracers == changedField)
|
if (&m_flowTracerSelectionMode == changedField)
|
||||||
{
|
{
|
||||||
toggleAllTracersSelection(&m_selectAllInjectorTracers);
|
loadDataAndUpdate();
|
||||||
}
|
|
||||||
if (&m_selectAllProducerTracers == changedField)
|
|
||||||
{
|
|
||||||
toggleAllTracersSelection(&m_selectAllProducerTracers);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( &m_selectedInjectorTracersUiField == changedField )
|
|
||||||
|
if (&m_selectedInjectorTracersUiField == changedField )
|
||||||
{
|
{
|
||||||
changedTracerSelectionField(true);
|
changedTracerSelectionField(true);
|
||||||
m_selectAllInjectorTracers = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (&m_selectedProducerTracersUiField == changedField)
|
if (&m_selectedProducerTracersUiField == changedField)
|
||||||
{
|
{
|
||||||
changedTracerSelectionField(false);
|
changedTracerSelectionField(false);
|
||||||
m_selectAllProducerTracers = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -295,53 +286,9 @@ void RimEclipseResultDefinition::fieldChangedByUi(const caf::PdmFieldHandle* cha
|
|||||||
loadDataAndUpdate();
|
loadDataAndUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Fix this to deal with the injector producer fields
|
|
||||||
if (&m_selectedTracersUiFieldFilter == changedField)
|
|
||||||
{
|
|
||||||
updateSelectedTracersFromFilter();
|
|
||||||
}
|
|
||||||
|
|
||||||
updateAnyFieldHasChanged();
|
updateAnyFieldHasChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
|
||||||
///
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
|
||||||
void RimEclipseResultDefinition::updateSelectedTracersFromFilter()
|
|
||||||
{
|
|
||||||
auto visibleTracerNames = tracerNamesMatchingFilter();
|
|
||||||
|
|
||||||
{
|
|
||||||
std::vector<QString> 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<QString> 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<QString>& selectedTracersUi = injector ? m_selectedInjectorTracersUiField.v()
|
std::vector<QString>& selectedTracersUi = injector ? m_selectedInjectorTracersUiField.v()
|
||||||
: m_selectedProducerTracersUiField.v();
|
: m_selectedProducerTracersUiField.v();
|
||||||
|
|
||||||
if (m_selectedTracersUiFieldFilter().isEmpty())
|
selectedTracers = selectedTracersUi;
|
||||||
{
|
|
||||||
selectedTracers = selectedTracersUi;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
auto filteredTracerNames = tracerNamesMatchingFilter();
|
|
||||||
|
|
||||||
// Keep selected strings not part of currently visible selection items
|
|
||||||
std::vector<QString> 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
loadDataAndUpdate();
|
loadDataAndUpdate();
|
||||||
}
|
}
|
||||||
@ -797,7 +720,7 @@ QList<caf::PdmOptionItemInfo> RimEclipseResultDefinition::calcOptionsForSelected
|
|||||||
RimFlowDiagSolution* flowSol = m_flowSolutionUiField();
|
RimFlowDiagSolution* flowSol = m_flowSolutionUiField();
|
||||||
if (flowSol)
|
if (flowSol)
|
||||||
{
|
{
|
||||||
std::vector<QString> tracerNames = tracerNamesMatchingFilter();
|
std::vector<QString> tracerNames = allTracerNames();
|
||||||
std::list<QString> sortedTracers;
|
std::list<QString> sortedTracers;
|
||||||
|
|
||||||
for (const QString& tracerName : tracerNames)
|
for (const QString& tracerName : tracerNames)
|
||||||
@ -1445,14 +1368,11 @@ void RimEclipseResultDefinition::defineUiOrdering(QString uiConfigName, caf::Pdm
|
|||||||
{
|
{
|
||||||
caf::PdmUiGroup* selectionGroup = uiOrdering.addNewGroup("Tracer Selection");
|
caf::PdmUiGroup* selectionGroup = uiOrdering.addNewGroup("Tracer Selection");
|
||||||
selectionGroup->setEnableFrame(false);
|
selectionGroup->setEnableFrame(false);
|
||||||
selectionGroup->add(&m_selectedTracersUiFieldFilter);
|
|
||||||
caf::PdmUiGroup* injectorGroup = selectionGroup->addNewGroup("Injectors");
|
caf::PdmUiGroup* injectorGroup = selectionGroup->addNewGroup("Injectors");
|
||||||
injectorGroup->setEnableFrame(false);
|
// injectorGroup->setEnableFrame(false);
|
||||||
injectorGroup->add(&m_selectAllInjectorTracers);
|
|
||||||
injectorGroup->add(&m_selectedInjectorTracersUiField);
|
injectorGroup->add(&m_selectedInjectorTracersUiField);
|
||||||
caf::PdmUiGroup* producerGroup = selectionGroup->addNewGroup("Producers", false);
|
caf::PdmUiGroup* producerGroup = selectionGroup->addNewGroup("Producers", false);
|
||||||
producerGroup->setEnableFrame(false);
|
// producerGroup->setEnableFrame(false);
|
||||||
producerGroup->add(&m_selectAllProducerTracers);
|
|
||||||
producerGroup->add(&m_selectedProducerTracersUiField);
|
producerGroup->add(&m_selectedProducerTracersUiField);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1471,10 +1391,7 @@ void RimEclipseResultDefinition::defineUiOrdering(QString uiConfigName, caf::Pdm
|
|||||||
|
|
||||||
if (m_resultTypeUiField() == RiaDefines::FLOW_DIAGNOSTICS)
|
if (m_resultTypeUiField() == RiaDefines::FLOW_DIAGNOSTICS)
|
||||||
{
|
{
|
||||||
if (injectorTracersSelected() != NONE_SELECTED || producerTracersSelected() != NONE_SELECTED)
|
uiOrdering.add(&m_resultVariableUiField);
|
||||||
{
|
|
||||||
uiOrdering.add(&m_resultVariableUiField);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1528,58 +1445,17 @@ void RimEclipseResultDefinition::removePerCellFaceOptionItems(QList<caf::PdmOpti
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
std::vector<QString> RimEclipseResultDefinition::tracerNamesMatchingFilter() const
|
std::vector<QString> RimEclipseResultDefinition::allTracerNames() const
|
||||||
{
|
{
|
||||||
std::vector<QString> matchingNames;
|
std::vector<QString> tracerNames;
|
||||||
|
|
||||||
RimFlowDiagSolution* flowSol = m_flowSolutionUiField();
|
RimFlowDiagSolution* flowSol = m_flowSolutionUiField();
|
||||||
if (flowSol)
|
if (flowSol)
|
||||||
{
|
{
|
||||||
std::vector<QString> tracerNames = flowSol->tracerNames();
|
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return matchingNames;
|
return tracerNames;
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
|
||||||
///
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
|
||||||
void RimEclipseResultDefinition::toggleAllTracersSelection(const caf::PdmField<bool>* changedField)
|
|
||||||
{
|
|
||||||
bool injector = &m_selectAllInjectorTracers == changedField;
|
|
||||||
std::vector<QString> tracerNames;
|
|
||||||
if (changedField->v())
|
|
||||||
{
|
|
||||||
QList<caf::PdmOptionItemInfo> options = calcOptionsForSelectedTracerField(injector);
|
|
||||||
|
|
||||||
for (const caf::PdmOptionItemInfo& itemInfo : options)
|
|
||||||
{
|
|
||||||
tracerNames.push_back(itemInfo.value().toString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (injector)
|
|
||||||
{
|
|
||||||
setSelectedInjectorTracers(tracerNames);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
setSelectedProducerTracers(tracerNames);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -1593,11 +1469,11 @@ RimEclipseResultDefinition::FlowTracerSelectionNumbers RimEclipseResultDefinitio
|
|||||||
}
|
}
|
||||||
else if (m_flowTracerSelectionMode == FLOW_TR_BY_SELECTION)
|
else if (m_flowTracerSelectionMode == FLOW_TR_BY_SELECTION)
|
||||||
{
|
{
|
||||||
if (m_selectedInjectorTracers().size() == 1)
|
if (m_selectedInjectorTracers().size() == (size_t) 1)
|
||||||
{
|
{
|
||||||
return ONE_SELECTED;
|
return ONE_SELECTED;
|
||||||
}
|
}
|
||||||
else if (m_selectedInjectorTracers().size() > 1)
|
else if (m_selectedInjectorTracers().size() > (size_t) 1)
|
||||||
{
|
{
|
||||||
return MULTIPLE_SELECTED;
|
return MULTIPLE_SELECTED;
|
||||||
}
|
}
|
||||||
@ -1616,11 +1492,11 @@ RimEclipseResultDefinition::FlowTracerSelectionNumbers RimEclipseResultDefinitio
|
|||||||
}
|
}
|
||||||
else if (m_flowTracerSelectionMode == FLOW_TR_BY_SELECTION)
|
else if (m_flowTracerSelectionMode == FLOW_TR_BY_SELECTION)
|
||||||
{
|
{
|
||||||
if (m_selectedProducerTracers().size() == 1)
|
if (m_selectedProducerTracers().size() == (size_t) 1)
|
||||||
{
|
{
|
||||||
return ONE_SELECTED;
|
return ONE_SELECTED;
|
||||||
}
|
}
|
||||||
else if (m_selectedProducerTracers().size() > 1)
|
else if (m_selectedProducerTracers().size() > (size_t) 1)
|
||||||
{
|
{
|
||||||
return MULTIPLE_SELECTED;
|
return MULTIPLE_SELECTED;
|
||||||
}
|
}
|
||||||
|
@ -127,8 +127,6 @@ protected:
|
|||||||
caf::PdmField<QString> m_resultVariable;
|
caf::PdmField<QString> m_resultVariable;
|
||||||
|
|
||||||
caf::PdmPtrField<RimFlowDiagSolution*> m_flowSolution;
|
caf::PdmPtrField<RimFlowDiagSolution*> m_flowSolution;
|
||||||
caf::PdmField<bool> m_selectAllInjectorTracers;
|
|
||||||
caf::PdmField<bool> m_selectAllProducerTracers;
|
|
||||||
caf::PdmField<std::vector<QString> > m_selectedInjectorTracers;
|
caf::PdmField<std::vector<QString> > m_selectedInjectorTracers;
|
||||||
caf::PdmField<std::vector<QString> > m_selectedProducerTracers;
|
caf::PdmField<std::vector<QString> > m_selectedProducerTracers;
|
||||||
caf::PdmField<std::vector<QString> > m_selectedSouringTracers;
|
caf::PdmField<std::vector<QString> > m_selectedSouringTracers;
|
||||||
@ -147,7 +145,6 @@ protected:
|
|||||||
caf::PdmPtrField<RimFlowDiagSolution*> m_flowSolutionUiField;
|
caf::PdmPtrField<RimFlowDiagSolution*> m_flowSolutionUiField;
|
||||||
caf::PdmField< RigFlowDiagResultAddress::PhaseSelectionEnum > m_phaseSelection;
|
caf::PdmField< RigFlowDiagResultAddress::PhaseSelectionEnum > m_phaseSelection;
|
||||||
|
|
||||||
caf::PdmField<QString> m_selectedTracersUiFieldFilter;
|
|
||||||
caf::PdmField<std::vector<QString> > m_selectedInjectorTracersUiField;
|
caf::PdmField<std::vector<QString> > m_selectedInjectorTracersUiField;
|
||||||
caf::PdmField<std::vector<QString> > m_selectedProducerTracersUiField;
|
caf::PdmField<std::vector<QString> > m_selectedProducerTracersUiField;
|
||||||
|
|
||||||
@ -168,13 +165,11 @@ private:
|
|||||||
caf::PdmOptionItemInfo calcOptionForTimeOfFlightField();
|
caf::PdmOptionItemInfo calcOptionForTimeOfFlightField();
|
||||||
caf::PdmOptionItemInfo calcOptionForMaxFractionTracerField();
|
caf::PdmOptionItemInfo calcOptionForMaxFractionTracerField();
|
||||||
|
|
||||||
void updateSelectedTracersFromFilter();
|
|
||||||
void changedTracerSelectionField(bool injector);
|
void changedTracerSelectionField(bool injector);
|
||||||
QStringList getResultNamesForCurrentUiResultType();
|
QStringList getResultNamesForCurrentUiResultType();
|
||||||
static void removePerCellFaceOptionItems(QList<caf::PdmOptionItemInfo>& optionItems);
|
static void removePerCellFaceOptionItems(QList<caf::PdmOptionItemInfo>& optionItems);
|
||||||
|
|
||||||
std::vector<QString> tracerNamesMatchingFilter() const;
|
std::vector<QString> allTracerNames() const;
|
||||||
void toggleAllTracersSelection(const caf::PdmField<bool>* changedField);
|
|
||||||
|
|
||||||
FlowTracerSelectionNumbers injectorTracersSelected() const;
|
FlowTracerSelectionNumbers injectorTracersSelected() const;
|
||||||
FlowTracerSelectionNumbers producerTracersSelected() const;
|
FlowTracerSelectionNumbers producerTracersSelected() const;
|
||||||
|
Loading…
Reference in New Issue
Block a user