Merge pull request #4826 from OPM/fix-keyboard-events-stepping

#4825 Summary Plot Stepping : Key events are not routed correctly
This commit is contained in:
Magne Sjaastad 2019-10-04 14:20:11 +02:00 committed by GitHub
commit 3d3ad421dd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 196 additions and 128 deletions

View File

@ -269,6 +269,14 @@ std::vector<RimEnsembleCurveSet*> RimEnsembleCurveSetCollection::curveSetsForSou
return steppingCurveSets;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimSummaryPlotSourceStepping* RimEnsembleCurveSetCollection::sourceSteppingObject() const
{
return m_ySourceStepping();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -65,6 +65,7 @@ public:
void setCurveSetForSourceStepping( RimEnsembleCurveSet* curve );
RimEnsembleCurveSet* curveSetForSourceStepping() const;
std::vector<RimEnsembleCurveSet*> curveSetsForSourceStepping() const;
RimSummaryPlotSourceStepping* sourceSteppingObject() const;
private:
caf::PdmFieldHandle* objectToggleField() override;

View File

@ -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 );
}

View File

@ -30,4 +30,6 @@ class RimSummaryCrossPlot : public RimSummaryPlot
public:
RimSummaryCrossPlot();
virtual RimSummaryPlotSourceStepping* sourceSteppingObjectForKeyEventHandling() const override;
};

View File

@ -338,72 +338,6 @@ std::vector<caf::PdmFieldHandle*> 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;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -67,13 +67,14 @@ public:
std::vector<caf::PdmFieldHandle*> 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;

View File

@ -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 <QDateTime>
#include <QDebug>
#include <QEvent>
#include <QKeyEvent>
#include <QRectF>
#include <QString>
#include "RiaColorTables.h"
#include "RiaSummaryCurveDefinition.h"
#include <QDebug>
#include "cafSelectionManager.h"
#include <limits>
#include <set>
@ -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<RimGridTimeHistoryCurve*> RimSummaryPlot::gridTimeHistoryCurves() const
{
@ -1538,7 +1546,7 @@ std::set<RimPlotAxisPropertiesInterface*> 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::PdmObjectHandle*>(
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<caf::PdmFieldHandle*> RimSummaryPlot::fieldsToShowInToolbar()
{
std::vector<caf::PdmFieldHandle*> 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;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -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<RimGridTimeHistoryCurve*> 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<caf::PdmFieldHandle*> fieldsToShowInToolbar();
public:
// Rim2dPlotInterface overrides
void updateAxisScaling() override;

View File

@ -607,15 +607,17 @@ std::set<RifEclipseSummaryAddress> RimSummaryPlotSourceStepping::adressesForSour
{
std::set<RifEclipseSummaryAddress> 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<RifEclipseSummaryAddress> RimSummaryPlotSourceStepping::addressesForCur
{
std::set<RifEclipseSummaryAddress> 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<RifEclipseSummaryAddress> 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;
}

View File

@ -556,31 +556,7 @@ void RiuPlotMainWindow::updateSummaryPlotToolBar( bool forceUpdateUi )
RimSummaryPlot* summaryPlot = dynamic_cast<RimSummaryPlot*>( m_activePlotViewWindow.p() );
if ( summaryPlot )
{
std::vector<caf::PdmFieldHandle*> toolBarFields;
RimEnsembleCurveSetCollection* ensembleCurveSetColl = nullptr;
caf::PdmObjectHandle* selectedObj = dynamic_cast<caf::PdmObjectHandle*>(
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<caf::PdmFieldHandle*> toolBarFields = summaryPlot->fieldsToShowInToolbar();
if ( !m_summaryPlotToolBarEditor->isEditorDataValid( toolBarFields ) )
{

View File

@ -169,10 +169,9 @@ void RiuSummaryQwtPlot::keyPressEvent( QKeyEvent* keyEvent )
{
RimSummaryPlot* summaryPlot = dynamic_cast<RimSummaryPlot*>( ownerPlotDefinition() );
if ( summaryPlot && summaryPlot->summaryCurveCollection() )
if ( summaryPlot )
{
RimSummaryCurveCollection* curveColl = summaryPlot->summaryCurveCollection();
curveColl->handleKeyPressEvent( keyEvent );
summaryPlot->handleKeyPressEvent( keyEvent );
}
}