From 2998ad3bed52e478b4d20cfacf75082ac9924e53 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 4 Oct 2019 13:20:15 +0200 Subject: [PATCH] #4825 Summary Plot Stepping : Key events are not routed correctly --- .../Summary/RimEnsembleCurveSetCollection.cpp | 8 ++ .../Summary/RimEnsembleCurveSetCollection.h | 1 + .../Summary/RimSummaryCrossPlot.cpp | 11 ++ .../Summary/RimSummaryCrossPlot.h | 2 + .../Summary/RimSummaryCurveCollection.cpp | 88 +++--------- .../Summary/RimSummaryCurveCollection.h | 5 +- .../Summary/RimSummaryPlot.cpp | 130 ++++++++++++++++-- .../ProjectDataModel/Summary/RimSummaryPlot.h | 9 +- .../Summary/RimSummaryPlotSourceStepping.cpp | 39 +++--- .../UserInterface/RiuPlotMainWindow.cpp | 26 +--- .../UserInterface/RiuSummaryQwtPlot.cpp | 5 +- 11 files changed, 196 insertions(+), 128 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/Summary/RimEnsembleCurveSetCollection.cpp b/ApplicationCode/ProjectDataModel/Summary/RimEnsembleCurveSetCollection.cpp index aec7b85b6c..2ac409b57f 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimEnsembleCurveSetCollection.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimEnsembleCurveSetCollection.cpp @@ -269,6 +269,14 @@ std::vector RimEnsembleCurveSetCollection::curveSetsForSou return steppingCurveSets; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimSummaryPlotSourceStepping* RimEnsembleCurveSetCollection::sourceSteppingObject() const +{ + return m_ySourceStepping(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Summary/RimEnsembleCurveSetCollection.h b/ApplicationCode/ProjectDataModel/Summary/RimEnsembleCurveSetCollection.h index 46156681f2..344f08aafc 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimEnsembleCurveSetCollection.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimEnsembleCurveSetCollection.h @@ -65,6 +65,7 @@ public: void setCurveSetForSourceStepping( RimEnsembleCurveSet* curve ); RimEnsembleCurveSet* curveSetForSourceStepping() const; std::vector curveSetsForSourceStepping() const; + RimSummaryPlotSourceStepping* sourceSteppingObject() const; private: caf::PdmFieldHandle* objectToggleField() override; diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCrossPlot.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCrossPlot.cpp index 496d92068a..f7414397fa 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCrossPlot.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCrossPlot.cpp @@ -18,6 +18,9 @@ #include "RimSummaryCrossPlot.h" +#include "RimSummaryCurveCollection.h" +#include "RimSummaryPlotSourceStepping.h" + CAF_PDM_SOURCE_INIT( RimSummaryCrossPlot, "SummaryCrossPlot" ); //-------------------------------------------------------------------------------------------------- @@ -29,3 +32,11 @@ RimSummaryCrossPlot::RimSummaryCrossPlot() setAsCrossPlot(); } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimSummaryPlotSourceStepping* RimSummaryCrossPlot::sourceSteppingObjectForKeyEventHandling() const +{ + return summaryCurveCollection()->sourceSteppingObject( RimSummaryPlotSourceStepping::UNION_X_Y_AXIS ); +} diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCrossPlot.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCrossPlot.h index 3f1f456538..1697bd824e 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCrossPlot.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCrossPlot.h @@ -30,4 +30,6 @@ class RimSummaryCrossPlot : public RimSummaryPlot public: RimSummaryCrossPlot(); + + virtual RimSummaryPlotSourceStepping* sourceSteppingObjectForKeyEventHandling() const override; }; diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp index d294e97b4b..e3ea88a78e 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp @@ -338,72 +338,6 @@ std::vector RimSummaryCurveCollection::fieldsToShowInToolb return m_ySourceStepping()->fieldsToShowInToolbar(); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimSummaryCurveCollection::handleKeyPressEvent( QKeyEvent* keyEvent ) -{ - if ( !keyEvent ) return; - - RimSummaryPlotSourceStepping* sourceStepping = nullptr; - { - RimSummaryCrossPlot* summaryCrossPlot = nullptr; - this->firstAncestorOrThisOfType( summaryCrossPlot ); - - if ( summaryCrossPlot ) - { - sourceStepping = m_unionSourceStepping(); - } - else - { - sourceStepping = m_ySourceStepping(); - } - } - - if ( keyEvent->key() == Qt::Key_PageUp ) - { - if ( keyEvent->modifiers() & Qt::ShiftModifier ) - { - sourceStepping->applyPrevCase(); - - keyEvent->accept(); - } - else if ( keyEvent->modifiers() & Qt::ControlModifier ) - { - sourceStepping->applyPrevOtherIdentifier(); - - keyEvent->accept(); - } - else - { - sourceStepping->applyPrevQuantity(); - - keyEvent->accept(); - } - } - else if ( keyEvent->key() == Qt::Key_PageDown ) - { - if ( keyEvent->modifiers() & Qt::ShiftModifier ) - { - sourceStepping->applyNextCase(); - - keyEvent->accept(); - } - else if ( keyEvent->modifiers() & Qt::ControlModifier ) - { - sourceStepping->applyNextOtherIdentifier(); - - keyEvent->accept(); - } - else - { - sourceStepping->applyNextQuantity(); - - keyEvent->accept(); - } - } -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -440,6 +374,28 @@ RimSummaryCurve* RimSummaryCurveCollection::curveForSourceStepping() const return m_curveForSourceStepping; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimSummaryPlotSourceStepping* RimSummaryCurveCollection::sourceSteppingObject( + RimSummaryPlotSourceStepping::SourceSteppingType sourceSteppingType ) const +{ + if ( sourceSteppingType == RimSummaryPlotSourceStepping::X_AXIS ) + { + return m_xSourceStepping(); + } + else if ( sourceSteppingType == RimSummaryPlotSourceStepping::Y_AXIS ) + { + return m_ySourceStepping(); + } + if ( sourceSteppingType == RimSummaryPlotSourceStepping::UNION_X_Y_AXIS ) + { + return m_unionSourceStepping(); + } + + return nullptr; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h index bbca9b8d06..24eb26be40 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h @@ -67,13 +67,14 @@ public: std::vector fieldsToShowInToolbar(); - void handleKeyPressEvent( QKeyEvent* keyEvent ); - void setCurveAsTopZWithinCategory( RimSummaryCurve* curve ); void setCurveForSourceStepping( RimSummaryCurve* curve ); RimSummaryCurve* curveForSourceStepping() const; + RimSummaryPlotSourceStepping* + sourceSteppingObject( RimSummaryPlotSourceStepping::SourceSteppingType sourceSteppingType ) const; + private: caf::PdmFieldHandle* objectToggleField() override; void defineObjectEditorAttribute( QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp index 8828406510..a964d06549 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp @@ -19,8 +19,10 @@ #include "RimSummaryPlot.h" #include "RiaApplication.h" +#include "RiaColorTables.h" #include "RiaFieldHandleTools.h" #include "RiaSummaryCurveAnalyzer.h" +#include "RiaSummaryCurveDefinition.h" #include "RiaTimeHistoryCurveResampler.h" #include "SummaryPlotCommands/RicSummaryCurveCreator.h" @@ -39,9 +41,9 @@ #include "RimSummaryCurveFilter.h" #include "RimSummaryCurvesCalculator.h" #include "RimSummaryPlotCollection.h" +#include "RimSummaryPlotFilterTextCurveSetEditor.h" #include "RimSummaryPlotNameHelper.h" #include "RimSummaryTimeAxisProperties.h" -#include "RimSummaryPlotFilterTextCurveSetEditor.h" #include "RiuPlotMainWindowTools.h" #include "RiuSummaryQwtPlot.h" @@ -59,12 +61,13 @@ #include "qwt_scale_engine.h" #include +#include +#include +#include #include #include -#include "RiaColorTables.h" -#include "RiaSummaryCurveDefinition.h" -#include +#include "cafSelectionManager.h" #include #include @@ -199,7 +202,12 @@ RimSummaryPlot::RimSummaryPlot() CAF_PDM_InitFieldNoDefault( &m_plotTemplate, "PlotTemplate", "Template", "", "", "" ); - CAF_PDM_InitFieldNoDefault( &m_textCurveSetEditor, "SummaryPlotFilterTextCurveSetEditor", "Text Filter Curve Creator", "", "", "" ); + CAF_PDM_InitFieldNoDefault( &m_textCurveSetEditor, + "SummaryPlotFilterTextCurveSetEditor", + "Text Filter Curve Creator", + "", + "", + "" ); m_textCurveSetEditor.uiCapability()->setUiTreeHidden( true ); m_textCurveSetEditor = new RimSummaryPlotFilterTextCurveSetEditor; @@ -1194,9 +1202,9 @@ void RimSummaryPlot::addGridTimeHistoryCurve( RimGridTimeHistoryCurve* curve ) } //-------------------------------------------------------------------------------------------------- -/// +/// //-------------------------------------------------------------------------------------------------- -void RimSummaryPlot::addGridTimeHistoryCurveNoUpdate(RimGridTimeHistoryCurve* curve) +void RimSummaryPlot::addGridTimeHistoryCurveNoUpdate( RimGridTimeHistoryCurve* curve ) { CVF_ASSERT( curve ); @@ -1208,7 +1216,7 @@ void RimSummaryPlot::addGridTimeHistoryCurveNoUpdate(RimGridTimeHistoryCurve* cu } //-------------------------------------------------------------------------------------------------- -/// +/// //-------------------------------------------------------------------------------------------------- std::vector RimSummaryPlot::gridTimeHistoryCurves() const { @@ -1538,7 +1546,7 @@ std::set RimSummaryPlot::allPlotAxes() const } //-------------------------------------------------------------------------------------------------- -/// +/// //-------------------------------------------------------------------------------------------------- void RimSummaryPlot::deleteAllGridTimeHistoryCurves() { @@ -1598,13 +1606,13 @@ void RimSummaryPlot::setAsCrossPlot() //-------------------------------------------------------------------------------------------------- void RimSummaryPlot::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) { - caf::PdmUiGroup* mainOptions = uiOrdering.addNewGroup("General Plot Options"); + caf::PdmUiGroup* mainOptions = uiOrdering.addNewGroup( "General Plot Options" ); mainOptions->add( &m_showPlotTitle ); if ( m_showPlotTitle ) { - mainOptions->add(&m_useAutoPlotTitle); - mainOptions->add(&m_userDefinedPlotTitle); + mainOptions->add( &m_useAutoPlotTitle ); + mainOptions->add( &m_userDefinedPlotTitle ); } m_userDefinedPlotTitle.uiCapability()->setUiReadOnly( m_useAutoPlotTitle ); @@ -1929,6 +1937,104 @@ RimPlotTemplateFileItem* RimSummaryPlot::plotTemplate() const return m_plotTemplate(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryPlot::handleKeyPressEvent( QKeyEvent* keyEvent ) +{ + if ( !keyEvent ) return; + + RimSummaryPlotSourceStepping* sourceStepping = sourceSteppingObjectForKeyEventHandling(); + if ( !sourceStepping ) return; + + if ( keyEvent->key() == Qt::Key_PageUp ) + { + if ( keyEvent->modifiers() & Qt::ShiftModifier ) + { + sourceStepping->applyPrevCase(); + + keyEvent->accept(); + } + else if ( keyEvent->modifiers() & Qt::ControlModifier ) + { + sourceStepping->applyPrevOtherIdentifier(); + + keyEvent->accept(); + } + else + { + sourceStepping->applyPrevQuantity(); + + keyEvent->accept(); + } + } + else if ( keyEvent->key() == Qt::Key_PageDown ) + { + if ( keyEvent->modifiers() & Qt::ShiftModifier ) + { + sourceStepping->applyNextCase(); + + keyEvent->accept(); + } + else if ( keyEvent->modifiers() & Qt::ControlModifier ) + { + sourceStepping->applyNextOtherIdentifier(); + + keyEvent->accept(); + } + else + { + sourceStepping->applyNextQuantity(); + + keyEvent->accept(); + } + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimSummaryPlotSourceStepping* RimSummaryPlot::sourceSteppingObjectForKeyEventHandling() const +{ + caf::PdmObjectHandle* selectedObj = dynamic_cast( + caf::SelectionManager::instance()->selectedItem() ); + if ( selectedObj ) + { + RimEnsembleCurveSetCollection* ensembleCurveSetColl = nullptr; + selectedObj->firstAncestorOrThisOfType( ensembleCurveSetColl ); + + if ( ensembleCurveSetColl ) + { + return ensembleCurveSetCollection()->sourceSteppingObject(); + } + } + + return summaryCurveCollection()->sourceSteppingObject( RimSummaryPlotSourceStepping::Y_AXIS ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RimSummaryPlot::fieldsToShowInToolbar() +{ + std::vector toolBarFields; + + auto sourceObject = sourceSteppingObjectForKeyEventHandling(); + + if ( sourceObject ) + { + toolBarFields = sourceObject->fieldsToShowInToolbar(); + } + + if ( toolBarFields.empty() ) + { + // Show ensemble stepping if no fields are available from summary stepping + toolBarFields = ensembleCurveSetCollection()->fieldsToShowInToolbar(); + } + + return toolBarFields; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.h index aa3350b05b..4719483d35 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.h @@ -53,10 +53,13 @@ class RiuSummaryQwtPlot; class RimSummaryPlotNameHelper; class RimPlotTemplateFileItem; class RimSummaryPlotFilterTextCurveSetEditor; +class RimSummaryPlotSourceStepping; class QwtInterval; class QwtPlotCurve; +class QKeyEvent; + //================================================================================================== /// /// @@ -89,7 +92,7 @@ public: void addGridTimeHistoryCurve( RimGridTimeHistoryCurve* curve ); void addGridTimeHistoryCurveNoUpdate( RimGridTimeHistoryCurve* curve ); - + std::vector gridTimeHistoryCurves() const; void addAsciiDataCruve( RimAsciiDataCurve* curve ); @@ -156,6 +159,10 @@ public: void setPlotTemplate( RimPlotTemplateFileItem* plotTemplate ); RimPlotTemplateFileItem* plotTemplate() const; + void handleKeyPressEvent( QKeyEvent* keyEvent ); + virtual RimSummaryPlotSourceStepping* sourceSteppingObjectForKeyEventHandling() const; + virtual std::vector fieldsToShowInToolbar(); + public: // Rim2dPlotInterface overrides void updateAxisScaling() override; diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp index 22d0e31d3c..42006636df 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp @@ -607,15 +607,17 @@ std::set RimSummaryPlotSourceStepping::adressesForSour { std::set addressSet; - RimEnsembleCurveSetCollection* ensembleCollection = nullptr; - this->firstAncestorOrThisOfType( ensembleCollection ); - if ( ensembleCollection ) { - auto curveSets = ensembleCollection->curveSetsForSourceStepping(); - for ( const RimEnsembleCurveSet* curveSet : curveSets ) + RimEnsembleCurveSetCollection* ensembleCollection = nullptr; + this->firstAncestorOrThisOfType( ensembleCollection ); + if ( ensembleCollection ) { - auto addresses = curveSet->summaryCaseCollection()->ensembleSummaryAddresses(); - addressSet.insert( addresses.begin(), addresses.end() ); + auto curveSets = ensembleCollection->curveSetsForSourceStepping(); + for ( const RimEnsembleCurveSet* curveSet : curveSets ) + { + auto addresses = curveSet->summaryCaseCollection()->ensembleSummaryAddresses(); + addressSet.insert( addresses.begin(), addresses.end() ); + } } } @@ -649,9 +651,19 @@ std::set RimSummaryPlotSourceStepping::addressesForCur { std::set addresses; + RimEnsembleCurveSetCollection* ensembleCollection = nullptr; + this->firstAncestorOrThisOfType( ensembleCollection ); + if ( ensembleCollection ) + { + auto curveSets = ensembleCollection->curveSetsForSourceStepping(); + for ( const RimEnsembleCurveSet* curveSet : curveSets ) + { + addresses.insert( curveSet->summaryAddress() ); + } + } + RimSummaryCurveCollection* curveCollection = nullptr; this->firstAncestorOrThisOfType( curveCollection ); - if ( curveCollection ) { auto curves = curveCollection->curvesForSourceStepping( m_sourceSteppingType ); @@ -669,17 +681,6 @@ std::set RimSummaryPlotSourceStepping::addressesForCur } } - RimEnsembleCurveSetCollection* ensembleCollection = nullptr; - this->firstAncestorOrThisOfType( ensembleCollection ); - if ( ensembleCollection ) - { - auto curveSets = ensembleCollection->curveSetsForSourceStepping(); - for ( const RimEnsembleCurveSet* curveSet : curveSets ) - { - addresses.insert( curveSet->summaryAddress() ); - } - } - return addresses; } diff --git a/ApplicationCode/UserInterface/RiuPlotMainWindow.cpp b/ApplicationCode/UserInterface/RiuPlotMainWindow.cpp index 5980c6ab5a..476d97f173 100644 --- a/ApplicationCode/UserInterface/RiuPlotMainWindow.cpp +++ b/ApplicationCode/UserInterface/RiuPlotMainWindow.cpp @@ -556,31 +556,7 @@ void RiuPlotMainWindow::updateSummaryPlotToolBar( bool forceUpdateUi ) RimSummaryPlot* summaryPlot = dynamic_cast( m_activePlotViewWindow.p() ); if ( summaryPlot ) { - std::vector toolBarFields; - - RimEnsembleCurveSetCollection* ensembleCurveSetColl = nullptr; - - caf::PdmObjectHandle* selectedObj = dynamic_cast( - caf::SelectionManager::instance()->selectedItem() ); - if ( selectedObj ) - { - selectedObj->firstAncestorOrThisOfType( ensembleCurveSetColl ); - } - - if ( ensembleCurveSetColl ) - { - toolBarFields = ensembleCurveSetColl->fieldsToShowInToolbar(); - } - else - { - toolBarFields = summaryPlot->summaryCurveCollection()->fieldsToShowInToolbar(); - - if ( toolBarFields.empty() ) - { - // Show ensemble stepping if no fields are available from summary stepping - toolBarFields = summaryPlot->ensembleCurveSetCollection()->fieldsToShowInToolbar(); - } - } + std::vector toolBarFields = summaryPlot->fieldsToShowInToolbar(); if ( !m_summaryPlotToolBarEditor->isEditorDataValid( toolBarFields ) ) { diff --git a/ApplicationCode/UserInterface/RiuSummaryQwtPlot.cpp b/ApplicationCode/UserInterface/RiuSummaryQwtPlot.cpp index 6bb4ad641f..3b66965919 100644 --- a/ApplicationCode/UserInterface/RiuSummaryQwtPlot.cpp +++ b/ApplicationCode/UserInterface/RiuSummaryQwtPlot.cpp @@ -169,10 +169,9 @@ void RiuSummaryQwtPlot::keyPressEvent( QKeyEvent* keyEvent ) { RimSummaryPlot* summaryPlot = dynamic_cast( ownerPlotDefinition() ); - if ( summaryPlot && summaryPlot->summaryCurveCollection() ) + if ( summaryPlot ) { - RimSummaryCurveCollection* curveColl = summaryPlot->summaryCurveCollection(); - curveColl->handleKeyPressEvent( keyEvent ); + summaryPlot->handleKeyPressEvent( keyEvent ); } }