#2170 Summary Cross Plot : Add keyboard modifiers to source stepping

This commit is contained in:
Magne Sjaastad 2017-12-04 08:26:23 +01:00
parent 04a80864b1
commit c0109361ef
7 changed files with 269 additions and 18 deletions

View File

@ -35,6 +35,8 @@
#include "cafPdmUiTreeViewEditor.h" #include "cafPdmUiTreeViewEditor.h"
#include <QKeyEvent>
CAF_PDM_SOURCE_INIT(RimSummaryCurveCollection, "RimSummaryCurveCollection"); CAF_PDM_SOURCE_INIT(RimSummaryCurveCollection, "RimSummaryCurveCollection");
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -319,6 +321,72 @@ QString RimSummaryCurveCollection::compileAutoPlotTitle() const
return title; 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();
}
}
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -30,6 +30,7 @@ class QwtPlotCurve;
class RimSummaryCase; class RimSummaryCase;
class RimSummaryCurve; class RimSummaryCurve;
class RimSummaryPlotSourceStepping; class RimSummaryPlotSourceStepping;
class QKeyEvent;
//================================================================================================== //==================================================================================================
/// ///
@ -66,6 +67,8 @@ public:
QString compileAutoPlotTitle() const; QString compileAutoPlotTitle() const;
void handleKeyPressEvent(QKeyEvent* keyEvent);
private: private:
caf::PdmFieldHandle* objectToggleField(); caf::PdmFieldHandle* objectToggleField();
virtual void defineObjectEditorAttribute(QString uiConfigName, virtual void defineObjectEditorAttribute(QString uiConfigName,

View File

@ -33,6 +33,7 @@
#include "RimSummaryPlot.h" #include "RimSummaryPlot.h"
#include "RiuMainPlotWindow.h" #include "RiuMainPlotWindow.h"
#include "cafPdmUiComboBoxEditor.h" #include "cafPdmUiComboBoxEditor.h"
#include "cafPdmUiItem.h" #include "cafPdmUiItem.h"
#include "cafPdmUiListEditor.h" #include "cafPdmUiListEditor.h"
@ -69,6 +70,107 @@ void RimSummaryPlotSourceStepping::setSourceSteppingType(SourceSteppingType sour
m_sourceSteppingType = sourceSteppingType; 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) if (analyzer.wellGroupNames().size() == 1)
{ {
return &m_wellName; return &m_wellGroupName;
} }
if (analyzer.regionNumbers().size() == 1) if (analyzer.regionNumbers().size() == 1)
@ -750,6 +852,51 @@ RiaSummaryCurveAnalyzer* RimSummaryPlotSourceStepping::analyzerForReader(RifSumm
return &m_curveAnalyzerForReader.second; return &m_curveAnalyzerForReader.second;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryPlotSourceStepping::modifyCurrentIndex(caf::PdmValueField* valueField, int indexOffset)
{
if (valueField)
{
bool useOptionsOnly = true;
QList<caf::PdmOptionItemInfo> 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) if (myAttr)
{ {
myAttr->showPreviousAndNextButtons = true; 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)";
}
} }
} }

View File

@ -53,6 +53,15 @@ public:
void setSourceSteppingType(SourceSteppingType sourceSteppingType); void setSourceSteppingType(SourceSteppingType sourceSteppingType);
void applyNextCase();
void applyPrevCase();
void applyNextQuantity();
void applyPrevQuantity();
void applyNextOtherIdentifier();
void applyPrevOtherIdentifier();
void applyNextIdentifier(); void applyNextIdentifier();
void applyPreviousIdentifier(); void applyPreviousIdentifier();
@ -85,6 +94,8 @@ private:
RiaSummaryCurveAnalyzer* analyzerForReader(RifSummaryReaderInterface* reader); RiaSummaryCurveAnalyzer* analyzerForReader(RifSummaryReaderInterface* reader);
void modifyCurrentIndex(caf::PdmValueField* valueField, int indexOffset);
private: private:
caf::PdmPtrField<RimSummaryCase*> m_summaryCase; caf::PdmPtrField<RimSummaryCase*> m_summaryCase;
caf::PdmField<QString> m_wellName; caf::PdmField<QString> m_wellName;

View File

@ -23,6 +23,7 @@
#include "RimContextCommandBuilder.h" #include "RimContextCommandBuilder.h"
#include "RimProject.h" #include "RimProject.h"
#include "RimSummaryCurve.h" #include "RimSummaryCurve.h"
#include "RimSummaryCurveCollection.h"
#include "RimSummaryPlot.h" #include "RimSummaryPlot.h"
#include "RiuMainPlotWindow.h" #include "RiuMainPlotWindow.h"
@ -186,24 +187,10 @@ void RiuSummaryQwtPlot::contextMenuEvent(QContextMenuEvent* event)
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RiuSummaryQwtPlot::keyPressEvent(QKeyEvent* keyEvent) void RiuSummaryQwtPlot::keyPressEvent(QKeyEvent* keyEvent)
{ {
if (keyEvent->key() == Qt::Key_PageUp) if (m_plotDefinition && m_plotDefinition->summaryCurveCollection())
{ {
if (m_plotDefinition) RimSummaryCurveCollection* curveColl = m_plotDefinition->summaryCurveCollection();
{ curveColl->handleKeyPressEvent(keyEvent);
m_plotDefinition->applyPreviousIdentifier();
}
keyEvent->accept();
}
if (keyEvent->key() == Qt::Key_PageDown)
{
if (m_plotDefinition)
{
m_plotDefinition->applyNextIdentifier();
}
keyEvent->accept();
} }
} }

View File

@ -144,6 +144,17 @@ void PdmUiComboBoxEditor::configureAndUpdateUi(const QString& uiConfigName)
{ {
m_nextItemButton->setIcon(QApplication::style()->standardIcon(QStyle::SP_ArrowDown)); 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 else
{ {

View File

@ -65,6 +65,9 @@ public:
public: public:
bool adjustWidthToContents; bool adjustWidthToContents;
bool showPreviousAndNextButtons; bool showPreviousAndNextButtons;
QString nextButtonText;
QString prevButtonText;
}; };