Clear line edit when content do not match

This commit is contained in:
Magne Sjaastad 2019-10-24 10:04:42 +02:00
parent 1935451242
commit 580d826922
3 changed files with 92 additions and 73 deletions

View File

@ -1432,6 +1432,8 @@ void RimSummaryPlot::onLoadDataAndUpdate()
if ( m_qwtPlot ) m_qwtPlot->updateLegend();
this->updateAxes();
m_textCurveSetEditor->updateTextFilter();
}
//--------------------------------------------------------------------------------------------------

View File

@ -125,6 +125,82 @@ QString RimSummaryPlotFilterTextCurveSetEditor::curveFilterFieldKeyword()
return "CurveFilterText";
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryPlotFilterTextCurveSetEditor::updateTextFilter()
{
RimSummaryPlot* parentPlot;
this->firstAncestorOrThisOfType( parentPlot );
std::set<SummarySource*> sourcesFromExistingCurves;
std::set<RifEclipseSummaryAddress> addressesInUse;
std::vector<RigGridCellResultAddress> gridaddressesInUse;
if ( parentPlot )
{
std::vector<RimEnsembleCurveSet*> ensembleCurveSets = parentPlot->ensembleCurveSetCollection()->curveSets();
for ( auto ensCurvSet : ensembleCurveSets )
{
sourcesFromExistingCurves.insert( ensCurvSet->summaryCaseCollection() );
addressesInUse.insert( ensCurvSet->summaryAddress() );
}
std::vector<RimSummaryCurve*> sumCurves = parentPlot->summaryCurveCollection()->curves();
for ( auto sumCurve : sumCurves )
{
sourcesFromExistingCurves.insert( sumCurve->summaryCaseY() );
addressesInUse.insert( sumCurve->summaryAddressY() );
}
std::vector<RimGridTimeHistoryCurve*> gridTimeHistoryCurves = parentPlot->gridTimeHistoryCurves();
for ( auto grCurve : gridTimeHistoryCurves )
{
RimEclipseCase* eclCase = dynamic_cast<RimEclipseCase*>( grCurve->gridCase() );
if ( eclCase )
{
sourcesFromExistingCurves.insert( eclCase );
gridaddressesInUse.push_back( grCurve->resultAddress() );
}
}
}
std::vector<caf::PdmPointer<SummarySource>> usedSources( sourcesFromExistingCurves.begin(),
sourcesFromExistingCurves.end() );
if ( !usedSources.empty() )
{
m_selectedSources.clear();
m_selectedSources.setValue( usedSources );
}
// Check if existing filter text matches all the curves
// Todo: possibly check grid time history curves also
QStringList allCurveAddressFilters = curveFilterTextWithoutOutdatedLabel().split( QRegExp( "\\s+" ),
QString::SkipEmptyParts );
std::vector<bool> accumulatedUsedFilters( allCurveAddressFilters.size(), false );
std::vector<bool> usedFilters;
std::set<RifEclipseSummaryAddress> filteredAddressesFromSource;
RicSummaryPlotFeatureImpl::filteredSummaryAdressesFromCase( allCurveAddressFilters,
addressesInUse,
&filteredAddressesFromSource,
&usedFilters );
if ( filteredAddressesFromSource != addressesInUse )
{
// m_curveFilterText = FILTER_TEXT_OUTDATED_TEXT + curveFilterTextWithoutOutdatedLabel();
m_curveFilterText = "";
}
else
{
m_curveFilterText = curveFilterTextWithoutOutdatedLabel();
}
m_curveFilterText.uiCapability()->updateConnectedEditors();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -325,77 +401,13 @@ void RimSummaryPlotFilterTextCurveSetEditor::fieldChangedByUi( const caf::PdmFie
//--------------------------------------------------------------------------------------------------
void RimSummaryPlotFilterTextCurveSetEditor::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering )
{
uiOrdering.add( &m_curveFilterText );
uiOrdering.add( &m_selectedSources );
uiOrdering.skipRemainingFields();
if ( !m_isFieldRecentlyChangedFromGui )
{
// Sync gui from existing curves
RimSummaryPlot* parentPlot;
this->firstAncestorOrThisOfType( parentPlot );
std::set<SummarySource*> sourcesFromExistingCurves;
std::set<RifEclipseSummaryAddress> addressesInUse;
std::vector<RigGridCellResultAddress> gridaddressesInUse;
if ( parentPlot )
{
std::vector<RimEnsembleCurveSet*> ensembleCurveSets = parentPlot->ensembleCurveSetCollection()->curveSets();
for ( auto ensCurvSet : ensembleCurveSets )
{
sourcesFromExistingCurves.insert( ensCurvSet->summaryCaseCollection() );
addressesInUse.insert( ensCurvSet->summaryAddress() );
}
std::vector<RimSummaryCurve*> sumCurves = parentPlot->summaryCurveCollection()->curves();
for ( auto sumCurve : sumCurves )
{
sourcesFromExistingCurves.insert( sumCurve->summaryCaseY() );
addressesInUse.insert( sumCurve->summaryAddressY() );
}
std::vector<RimGridTimeHistoryCurve*> gridTimeHistoryCurves = parentPlot->gridTimeHistoryCurves();
for ( auto grCurve : gridTimeHistoryCurves )
{
RimEclipseCase* eclCase = dynamic_cast<RimEclipseCase*>( grCurve->gridCase() );
if ( eclCase )
{
sourcesFromExistingCurves.insert( eclCase );
gridaddressesInUse.push_back( grCurve->resultAddress() );
}
}
}
std::vector<caf::PdmPointer<SummarySource>> usedSources( sourcesFromExistingCurves.begin(),
sourcesFromExistingCurves.end() );
if ( !usedSources.empty() )
{
m_selectedSources.clear();
m_selectedSources.setValue( usedSources );
}
// Check if existing filtertext matches all the curves
// Todo: possibly check grid time history curves also
QStringList allCurveAddressFilters = curveFilterTextWithoutOutdatedLabel().split( QRegExp( "\\s+" ),
QString::SkipEmptyParts );
std::vector<bool> accumulatedUsedFilters( allCurveAddressFilters.size(), false );
std::vector<bool> usedFilters;
std::set<RifEclipseSummaryAddress> filteredAddressesFromSource;
RicSummaryPlotFeatureImpl::filteredSummaryAdressesFromCase( allCurveAddressFilters,
addressesInUse,
&filteredAddressesFromSource,
&usedFilters );
if ( filteredAddressesFromSource != addressesInUse )
{
m_curveFilterText = FILTER_TEXT_OUTDATED_TEXT + curveFilterTextWithoutOutdatedLabel();
}
else
{
m_curveFilterText = curveFilterTextWithoutOutdatedLabel();
}
m_curveFilterText.uiCapability()->updateConnectedEditors();
updateTextFilter();
}
m_isFieldRecentlyChangedFromGui = false;
@ -416,15 +428,19 @@ void RimSummaryPlotFilterTextCurveSetEditor::defineEditorAttribute( const caf::P
QString uiConfigName,
caf::PdmUiEditorAttribute* attribute )
{
if ( field == &m_curveFilterText && uiConfigName == caf::PdmUiToolBarEditor::uiEditorConfigName() )
if ( field == &m_curveFilterText )
{
// Special config for toolbar
auto attr = dynamic_cast<caf::PdmUiLineEditorAttribute*>( attribute );
if ( attr )
{
attr->maximumWidth = 150;
if ( uiConfigName == caf::PdmUiToolBarEditor::uiEditorConfigName() )
{
// Special config for toolbar
attr->maximumWidth = 150;
}
attr->selectAllOnFocusEvent = true;
attr->placeholderText = "Click to define filter";
}
}
}

View File

@ -34,6 +34,7 @@ public:
std::vector<caf::PdmFieldHandle*> fieldsToShowInToolbar();
static QString curveFilterFieldKeyword();
void updateTextFilter();
protected:
QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions,