mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#1327 Added filter field used to limit available items in the selection list
This commit is contained in:
parent
7a89aee0bb
commit
c536b7a8fe
@ -105,6 +105,8 @@ RimEclipseResultDefinition::RimEclipseResultDefinition()
|
|||||||
m_selectedTracersUiField.xmlCapability()->setIOReadable(false);
|
m_selectedTracersUiField.xmlCapability()->setIOReadable(false);
|
||||||
m_selectedTracersUiField.xmlCapability()->setIOWritable(false);
|
m_selectedTracersUiField.xmlCapability()->setIOWritable(false);
|
||||||
m_selectedTracersUiField.uiCapability()->setUiEditorTypeName(caf::PdmUiListEditor::uiEditorTypeName());
|
m_selectedTracersUiField.uiCapability()->setUiEditorTypeName(caf::PdmUiListEditor::uiEditorTypeName());
|
||||||
|
|
||||||
|
CAF_PDM_InitFieldNoDefault(&m_selectedTracersUiFieldFilter, "SelectedTracersFilter", "Filter", "", "", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -202,10 +204,56 @@ void RimEclipseResultDefinition::fieldChangedByUi(const caf::PdmFieldHandle* cha
|
|||||||
if ( &m_selectedTracersUiField == changedField )
|
if ( &m_selectedTracersUiField == changedField )
|
||||||
{
|
{
|
||||||
m_flowSolution = m_flowSolutionUiField();
|
m_flowSolution = m_flowSolutionUiField();
|
||||||
m_selectedTracers = m_selectedTracersUiField();
|
|
||||||
|
if (m_selectedTracersUiFieldFilter().isEmpty())
|
||||||
|
{
|
||||||
|
m_selectedTracers = m_selectedTracersUiField();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
auto filteredTracerNames = tracerNamesMatchingFilter();
|
||||||
|
|
||||||
|
// Keep selected strings not part of currently visible selection items
|
||||||
|
std::vector<QString> newSelection;
|
||||||
|
for (auto selectedTracer : m_selectedTracers())
|
||||||
|
{
|
||||||
|
if (std::find(begin(filteredTracerNames), end(filteredTracerNames), selectedTracer) == end(filteredTracerNames))
|
||||||
|
{
|
||||||
|
newSelection.push_back(selectedTracer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto selectedTracerUi : m_selectedTracersUiField())
|
||||||
|
{
|
||||||
|
newSelection.push_back(selectedTracerUi);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_selectedTracers = newSelection;
|
||||||
|
}
|
||||||
|
|
||||||
loadDataAndUpdate();
|
loadDataAndUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (&m_selectedTracersUiFieldFilter == changedField)
|
||||||
|
{
|
||||||
|
auto visibleTracerNames = tracerNamesMatchingFilter();
|
||||||
|
|
||||||
|
std::vector<QString> subSelection;
|
||||||
|
|
||||||
|
// Remove hidden items from selection
|
||||||
|
for (auto selectedTracer : m_selectedTracers())
|
||||||
|
{
|
||||||
|
if (std::find(begin(visibleTracerNames), end(visibleTracerNames), selectedTracer) != end(visibleTracerNames))
|
||||||
|
{
|
||||||
|
subSelection.push_back(selectedTracer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_selectedTracersUiField = subSelection;
|
||||||
|
|
||||||
|
updateConnectedEditors();
|
||||||
|
}
|
||||||
|
|
||||||
updateAnyFieldHasChanged();
|
updateAnyFieldHasChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -347,6 +395,19 @@ void RimEclipseResultDefinition::loadDataAndUpdate()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool isStringMatch(const QString& filterString, const QString& value)
|
||||||
|
{
|
||||||
|
if (filterString.isEmpty()) return true;
|
||||||
|
if (filterString.trimmed() == "*")
|
||||||
|
{
|
||||||
|
if (!value.isEmpty()) return true;
|
||||||
|
else return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
QRegExp searcher(filterString, Qt::CaseInsensitive, QRegExp::WildcardUnix);
|
||||||
|
return searcher.exactMatch(value);
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -356,7 +417,6 @@ QList<caf::PdmOptionItemInfo> RimEclipseResultDefinition::calculateValueOptions(
|
|||||||
|
|
||||||
if ( fieldNeedingOptions == &m_resultTypeUiField )
|
if ( fieldNeedingOptions == &m_resultTypeUiField )
|
||||||
{
|
{
|
||||||
|
|
||||||
bool hasFlowDiagFluxes = false;
|
bool hasFlowDiagFluxes = false;
|
||||||
RimEclipseResultCase* eclResCase = dynamic_cast<RimEclipseResultCase*>(m_eclipseCase.p());
|
RimEclipseResultCase* eclResCase = dynamic_cast<RimEclipseResultCase*>(m_eclipseCase.p());
|
||||||
if ( eclResCase && eclResCase->eclipseCaseData() )
|
if ( eclResCase && eclResCase->eclipseCaseData() )
|
||||||
@ -389,7 +449,7 @@ QList<caf::PdmOptionItemInfo> RimEclipseResultDefinition::calculateValueOptions(
|
|||||||
{
|
{
|
||||||
if ( fieldNeedingOptions == &m_resultVariableUiField )
|
if ( fieldNeedingOptions == &m_resultVariableUiField )
|
||||||
{
|
{
|
||||||
options = calcOptionsForVariableUiFieldStandard();
|
options = calcOptionsForVariableUiFieldStandard();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -419,7 +479,7 @@ QList<caf::PdmOptionItemInfo> RimEclipseResultDefinition::calculateValueOptions(
|
|||||||
RimFlowDiagSolution* flowSol = m_flowSolutionUiField();
|
RimFlowDiagSolution* flowSol = m_flowSolutionUiField();
|
||||||
if (flowSol)
|
if (flowSol)
|
||||||
{
|
{
|
||||||
std::vector<QString> tracerNames = flowSol->tracerNames();
|
std::vector<QString> tracerNames = tracerNamesMatchingFilter();
|
||||||
std::map<QString, QString> prefixedTracerNamesMap;
|
std::map<QString, QString> prefixedTracerNamesMap;
|
||||||
for ( const QString& tracerName : tracerNames )
|
for ( const QString& tracerName : tracerNames )
|
||||||
{
|
{
|
||||||
@ -935,6 +995,7 @@ void RimEclipseResultDefinition::defineUiOrdering(QString uiConfigName, caf::Pdm
|
|||||||
|
|
||||||
if (m_flowTracerSelectionMode == FLOW_TR_BY_SELECTION)
|
if (m_flowTracerSelectionMode == FLOW_TR_BY_SELECTION)
|
||||||
{
|
{
|
||||||
|
uiOrdering.add(&m_selectedTracersUiFieldFilter);
|
||||||
uiOrdering.add(&m_selectedTracersUiField);
|
uiOrdering.add(&m_selectedTracersUiField);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -973,3 +1034,33 @@ void RimEclipseResultDefinition::removePerCellFaceOptionItems(QList<caf::PdmOpti
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
std::vector<QString> RimEclipseResultDefinition::tracerNamesMatchingFilter() const
|
||||||
|
{
|
||||||
|
std::vector<QString> matchingNames;
|
||||||
|
|
||||||
|
RimFlowDiagSolution* flowSol = m_flowSolutionUiField();
|
||||||
|
if (flowSol)
|
||||||
|
{
|
||||||
|
std::vector<QString> tracerNames = flowSol->tracerNames();
|
||||||
|
if (m_selectedTracersUiFieldFilter().isEmpty())
|
||||||
|
{
|
||||||
|
matchingNames = tracerNames;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (const QString& tracerName : tracerNames)
|
||||||
|
{
|
||||||
|
if (isStringMatch(m_selectedTracersUiFieldFilter, tracerName))
|
||||||
|
{
|
||||||
|
matchingNames.push_back(tracerName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return matchingNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -122,6 +122,8 @@ protected:
|
|||||||
|
|
||||||
caf::PdmField< caf::AppEnum< FlowTracerSelectionType > > m_flowTracerSelectionMode;
|
caf::PdmField< caf::AppEnum< FlowTracerSelectionType > > m_flowTracerSelectionMode;
|
||||||
caf::PdmPtrField<RimFlowDiagSolution*> m_flowSolutionUiField;
|
caf::PdmPtrField<RimFlowDiagSolution*> m_flowSolutionUiField;
|
||||||
|
|
||||||
|
caf::PdmField<QString> m_selectedTracersUiFieldFilter;
|
||||||
caf::PdmField<std::vector<QString> > m_selectedTracersUiField;
|
caf::PdmField<std::vector<QString> > m_selectedTracersUiField;
|
||||||
|
|
||||||
|
|
||||||
@ -136,5 +138,7 @@ private:
|
|||||||
QList<caf::PdmOptionItemInfo> calcOptionsForVariableUiFieldStandard();
|
QList<caf::PdmOptionItemInfo> calcOptionsForVariableUiFieldStandard();
|
||||||
QStringList getResultNamesForCurrentUiResultType();
|
QStringList getResultNamesForCurrentUiResultType();
|
||||||
static void removePerCellFaceOptionItems(QList<caf::PdmOptionItemInfo>& optionItems);
|
static void removePerCellFaceOptionItems(QList<caf::PdmOptionItemInfo>& optionItems);
|
||||||
|
|
||||||
|
std::vector<QString> tracerNamesMatchingFilter() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user