From 9e7dd7d4eaf22225c18c3344f2c0c0202e53d323 Mon Sep 17 00:00:00 2001 From: Gaute Lindkvist Date: Thu, 21 Jun 2018 14:51:42 +0200 Subject: [PATCH] #3076 Stop key press event in time step interval causing filtered dialog to close. --- .../ProjectDataModel/RimTimeStepFilter.cpp | 10 +++++ .../cafUserInterface/cafPdmUiLineEditor.cpp | 39 ++++++++++++++++++- .../cafUserInterface/cafPdmUiLineEditor.h | 17 +++++++- 3 files changed, 62 insertions(+), 4 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/RimTimeStepFilter.cpp b/ApplicationCode/ProjectDataModel/RimTimeStepFilter.cpp index ff508b6e92..3d6529564d 100644 --- a/ApplicationCode/ProjectDataModel/RimTimeStepFilter.cpp +++ b/ApplicationCode/ProjectDataModel/RimTimeStepFilter.cpp @@ -26,6 +26,7 @@ #include "RimReservoirCellResultsStorage.h" #include "RimTools.h" +#include "cafPdmUiLineEditor.h" #include "cafPdmUiListEditor.h" #include "cafPdmUiPushButtonEditor.h" @@ -67,6 +68,7 @@ RimTimeStepFilter::RimTimeStepFilter() CAF_PDM_InitField(&m_lastTimeStep, "LastTimeStep", 0, "Last Time Step", "", "", ""); CAF_PDM_InitField(&m_interval, "Interval", 1, "Interval", "", "", ""); + m_interval.uiCapability()->setUiEditorTypeName(caf::PdmUiLineEditor::uiEditorTypeName()); CAF_PDM_InitField(&m_timeStepNamesFromFile, "TimeStepsFromFile", std::vector(), "TimeSteps From File", "", "", ""); CAF_PDM_InitField(&m_dateFormat, "DateFormat", QString("yyyy-MM-dd"), "Date Format", "", "", ""); @@ -259,6 +261,14 @@ void RimTimeStepFilter::defineEditorAttribute(const caf::PdmFieldHandle* field, attrib->m_buttonText = "Reload Case"; } } + else if (field == &m_interval) + { + caf::PdmUiLineEditorAttribute* attrib = dynamic_cast(attribute); + if (attrib) + { + attrib->avoidSendingEnterEventToParentWidget = true; + } + } } //-------------------------------------------------------------------------------------------------- diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.cpp b/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.cpp index ecad77a3c1..72a04d689f 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.cpp +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.cpp @@ -46,9 +46,9 @@ #include "cafSelectionManager.h" #include +#include #include #include -#include #include #include #include @@ -195,6 +195,8 @@ void PdmUiLineEditor::configureAndUpdateUi(const QString& uiConfigName) { m_lineEdit->setValidator(new QIntValidator(leab.minValue, leab.maxValue, this)); } + + m_lineEdit->setAvoidSendingEnterEventToParentWidget(leab.avoidSendingEnterEventToParentWidget); } { @@ -259,7 +261,7 @@ void PdmUiLineEditor::configureAndUpdateUi(const QString& uiConfigName) //-------------------------------------------------------------------------------------------------- QWidget* PdmUiLineEditor::createEditorWidget(QWidget * parent) { - m_lineEdit = new QLineEdit(parent); + m_lineEdit = new PdmUiLineEdit(parent); connect(m_lineEdit, SIGNAL(editingFinished()), this, SLOT(slotEditingFinished())); @@ -319,4 +321,37 @@ bool PdmUiLineEditor::isMultipleFieldsWithSameKeywordSelected(PdmFieldHandle* ed } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +PdmUiLineEdit::PdmUiLineEdit(QWidget* parent) + : QLineEdit(parent), m_avoidSendingEnterEvent(false) +{ +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void PdmUiLineEdit::setAvoidSendingEnterEventToParentWidget(bool avoidSendingEnterEvent) +{ + m_avoidSendingEnterEvent = avoidSendingEnterEvent; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void PdmUiLineEdit::keyPressEvent(QKeyEvent * event) +{ + QLineEdit::keyPressEvent(event); + if (m_avoidSendingEnterEvent) + { + if (event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return) + { + // accept enter/return events so they won't + // be ever propagated to the parent dialog.. + event->accept(); + } + } +} + } // end namespace caf diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.h b/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.h index 25a8782f98..9d6b54b272 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.h +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.h @@ -58,12 +58,14 @@ class PdmUiLineEditorAttribute : public PdmUiEditorAttribute public: PdmUiLineEditorAttribute() { + avoidSendingEnterEventToParentWidget = false; useRangeValidator = false; minValue = 0; maxValue = 0; } public: + bool avoidSendingEnterEventToParentWidget; bool useRangeValidator; int minValue; int maxValue; @@ -97,6 +99,17 @@ public: QString m_displayString; }; +class PdmUiLineEdit : public QLineEdit +{ + Q_OBJECT +public: + PdmUiLineEdit(QWidget* parent); + void setAvoidSendingEnterEventToParentWidget(bool avoidSendingEnter); +protected: + void keyPressEvent(QKeyEvent* event); +private: + bool m_avoidSendingEnterEvent; +}; //-------------------------------------------------------------------------------------------------- /// @@ -122,8 +135,8 @@ private: bool isMultipleFieldsWithSameKeywordSelected(PdmFieldHandle* editorField) const; private: - QPointer m_lineEdit; - QPointer m_label; + QPointer m_lineEdit; + QPointer m_label; };