From c0109361ef5a77276d7beda3395e6b418346c375 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Mon, 4 Dec 2017 08:26:23 +0100 Subject: [PATCH] #2170 Summary Cross Plot : Add keyboard modifiers to source stepping --- .../Summary/RimSummaryCurveCollection.cpp | 68 +++++++ .../Summary/RimSummaryCurveCollection.h | 3 + .../Summary/RimSummaryPlotSourceStepping.cpp | 170 +++++++++++++++++- .../Summary/RimSummaryPlotSourceStepping.h | 11 ++ .../UserInterface/RiuSummaryQwtPlot.cpp | 21 +-- .../cafPdmUiComboBoxEditor.cpp | 11 ++ .../cafUserInterface/cafPdmUiComboBoxEditor.h | 3 + 7 files changed, 269 insertions(+), 18 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp index e9207eb2c6..d43b1b13f6 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp @@ -35,6 +35,8 @@ #include "cafPdmUiTreeViewEditor.h" +#include + CAF_PDM_SOURCE_INIT(RimSummaryCurveCollection, "RimSummaryCurveCollection"); //-------------------------------------------------------------------------------------------------- @@ -319,6 +321,72 @@ QString RimSummaryCurveCollection::compileAutoPlotTitle() const return title; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +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(); + } + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h index 87f97fd105..882bda59d2 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h @@ -30,6 +30,7 @@ class QwtPlotCurve; class RimSummaryCase; class RimSummaryCurve; class RimSummaryPlotSourceStepping; +class QKeyEvent; //================================================================================================== /// @@ -66,6 +67,8 @@ public: QString compileAutoPlotTitle() const; + void handleKeyPressEvent(QKeyEvent* keyEvent); + private: caf::PdmFieldHandle* objectToggleField(); virtual void defineObjectEditorAttribute(QString uiConfigName, diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp index 9cf57e1d29..b737a015ce 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp @@ -33,6 +33,7 @@ #include "RimSummaryPlot.h" #include "RiuMainPlotWindow.h" + #include "cafPdmUiComboBoxEditor.h" #include "cafPdmUiItem.h" #include "cafPdmUiListEditor.h" @@ -69,6 +70,107 @@ void RimSummaryPlotSourceStepping::setSourceSteppingType(SourceSteppingType sour m_sourceSteppingType = sourceSteppingType; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryPlotSourceStepping::applyNextCase() +{ + RimProject* proj = RiaApplication::instance()->project(); + + auto summaryCases = proj->allSummaryCases(); + if (summaryCases.size() < 1) + return; + + auto currentCase = std::find(summaryCases.begin(), summaryCases.end(), m_summaryCase()); + + if (currentCase != summaryCases.end()) + { + currentCase++; + if (currentCase != summaryCases.end()) + { + m_summaryCase = *currentCase; + } + } + else + { + m_summaryCase = summaryCases[0]; + } + + fieldChangedByUi(&m_summaryCase, QVariant(), QVariant()); + m_summaryCase.uiCapability()->updateConnectedEditors(); + + RimSummaryCurveCollection* curveCollection = nullptr; + this->firstAncestorOrThisOfTypeAsserted(curveCollection); + + curveCollection->updateConnectedEditors(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryPlotSourceStepping::applyPrevCase() +{ + RimProject* proj = RiaApplication::instance()->project(); + + auto summaryCases = proj->allSummaryCases(); + if (summaryCases.size() < 1) + return; + + auto currentCase = std::find(summaryCases.begin(), summaryCases.end(), m_summaryCase()); + + if (currentCase != summaryCases.end() && currentCase != summaryCases.begin()) + { + currentCase--; + m_summaryCase = *currentCase; + } + else + { + m_summaryCase = summaryCases[0]; + } + + fieldChangedByUi(&m_summaryCase, QVariant(), QVariant()); + m_summaryCase.uiCapability()->updateConnectedEditors(); + + RimSummaryCurveCollection* curveCollection = nullptr; + this->firstAncestorOrThisOfTypeAsserted(curveCollection); + + curveCollection->updateConnectedEditors(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryPlotSourceStepping::applyNextQuantity() +{ + modifyCurrentIndex(&m_quantity, 1); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryPlotSourceStepping::applyPrevQuantity() +{ + modifyCurrentIndex(&m_quantity, -1); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryPlotSourceStepping::applyNextOtherIdentifier() +{ + caf::PdmValueField* valueField = valueFieldToModify(); + modifyCurrentIndex(valueField, 1); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryPlotSourceStepping::applyPrevOtherIdentifier() +{ + caf::PdmValueField* valueField = valueFieldToModify(); + modifyCurrentIndex(valueField, -1); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -611,7 +713,7 @@ caf::PdmFieldHandle* RimSummaryPlotSourceStepping::fieldToModify() if (analyzer.wellGroupNames().size() == 1) { - return &m_wellName; + return &m_wellGroupName; } if (analyzer.regionNumbers().size() == 1) @@ -750,6 +852,51 @@ RiaSummaryCurveAnalyzer* RimSummaryPlotSourceStepping::analyzerForReader(RifSumm return &m_curveAnalyzerForReader.second; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryPlotSourceStepping::modifyCurrentIndex(caf::PdmValueField* valueField, int indexOffset) +{ + if (valueField) + { + bool useOptionsOnly = true; + + QList options = calculateValueOptions(valueField, nullptr); + if (options.isEmpty()) + { + return; + } + + auto uiVariant = valueField->uiCapability()->toUiBasedQVariant(); + + int currentIndex = -1; + for (int i = 0; i < options.size(); i++) + { + if (uiVariant == options[i].optionUiText()) + { + currentIndex = i; + } + } + + if (currentIndex == -1) + { + currentIndex = 0; + } + + int nextIndex = currentIndex + indexOffset; + if (nextIndex < options.size() && nextIndex > -1) + { + auto optionValue = options[nextIndex].value(); + + QVariant currentValue = valueField->toQVariant(); + + valueField->setFromQVariant(optionValue); + + valueField->uiCapability()->notifyFieldChanged(currentValue, optionValue); + } + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -760,5 +907,26 @@ void RimSummaryPlotSourceStepping::defineEditorAttribute(const caf::PdmFieldHand if (myAttr) { myAttr->showPreviousAndNextButtons = true; + + QString modifierText; + + if (field == &m_summaryCase) + { + modifierText = ("(Shift+"); + } + else if (field == &m_wellName || field == &m_wellGroupName || field == &m_region) + { + modifierText = ("(Ctrl+"); + } + else if (field == &m_quantity) + { + modifierText = ("("); + } + + if (!modifierText.isEmpty()) + { + myAttr->nextButtonText = "Next " + modifierText + "PgDown)"; + myAttr->prevButtonText = "Previous " + modifierText + "PgUp)"; + } } } diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.h index c8c6cbd5a3..c01a4de7e0 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.h @@ -53,6 +53,15 @@ public: void setSourceSteppingType(SourceSteppingType sourceSteppingType); + void applyNextCase(); + void applyPrevCase(); + + void applyNextQuantity(); + void applyPrevQuantity(); + + void applyNextOtherIdentifier(); + void applyPrevOtherIdentifier(); + void applyNextIdentifier(); void applyPreviousIdentifier(); @@ -85,6 +94,8 @@ private: RiaSummaryCurveAnalyzer* analyzerForReader(RifSummaryReaderInterface* reader); + void modifyCurrentIndex(caf::PdmValueField* valueField, int indexOffset); + private: caf::PdmPtrField m_summaryCase; caf::PdmField m_wellName; diff --git a/ApplicationCode/UserInterface/RiuSummaryQwtPlot.cpp b/ApplicationCode/UserInterface/RiuSummaryQwtPlot.cpp index 029f570a5d..d25812a444 100644 --- a/ApplicationCode/UserInterface/RiuSummaryQwtPlot.cpp +++ b/ApplicationCode/UserInterface/RiuSummaryQwtPlot.cpp @@ -23,6 +23,7 @@ #include "RimContextCommandBuilder.h" #include "RimProject.h" #include "RimSummaryCurve.h" +#include "RimSummaryCurveCollection.h" #include "RimSummaryPlot.h" #include "RiuMainPlotWindow.h" @@ -186,24 +187,10 @@ void RiuSummaryQwtPlot::contextMenuEvent(QContextMenuEvent* event) //-------------------------------------------------------------------------------------------------- void RiuSummaryQwtPlot::keyPressEvent(QKeyEvent* keyEvent) { - if (keyEvent->key() == Qt::Key_PageUp) + if (m_plotDefinition && m_plotDefinition->summaryCurveCollection()) { - if (m_plotDefinition) - { - m_plotDefinition->applyPreviousIdentifier(); - } - - keyEvent->accept(); - } - - if (keyEvent->key() == Qt::Key_PageDown) - { - if (m_plotDefinition) - { - m_plotDefinition->applyNextIdentifier(); - } - - keyEvent->accept(); + RimSummaryCurveCollection* curveColl = m_plotDefinition->summaryCurveCollection(); + curveColl->handleKeyPressEvent(keyEvent); } } diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.cpp b/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.cpp index 087d7a80f4..5efac2f178 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.cpp +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.cpp @@ -144,6 +144,17 @@ void PdmUiComboBoxEditor::configureAndUpdateUi(const QString& uiConfigName) { m_nextItemButton->setIcon(QApplication::style()->standardIcon(QStyle::SP_ArrowDown)); } + + // Update button texts + if (!attributes.nextButtonText.isEmpty()) + { + m_nextItemButton->setToolTip(attributes.nextButtonText); + } + + if (!attributes.prevButtonText.isEmpty()) + { + m_previousItemButton->setToolTip(attributes.prevButtonText); + } } else { diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.h b/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.h index cbf6206e72..485f16a00a 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.h +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.h @@ -65,6 +65,9 @@ public: public: bool adjustWidthToContents; bool showPreviousAndNextButtons; + + QString nextButtonText; + QString prevButtonText; };