X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_DoubleSpinBox.cpp;h=851a74834d659b00d26f77acbe345396c217c0d6;hb=29dfb8a802f61cacf5f57fb79c62badee00ebcdf;hp=e436875bf5da34f40345db76ed51fc80857548c2;hpb=bddbc598492a5dfa976d115200097724d7c6505e;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_DoubleSpinBox.cpp b/src/ModuleBase/ModuleBase_DoubleSpinBox.cpp index e436875bf..851a74834 100644 --- a/src/ModuleBase/ModuleBase_DoubleSpinBox.cpp +++ b/src/ModuleBase/ModuleBase_DoubleSpinBox.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include @@ -58,7 +59,7 @@ const double PSEUDO_ZERO = 1.e-20; ModuleBase_DoubleSpinBox::ModuleBase_DoubleSpinBox(QWidget* theParent, int thePrecision) : QDoubleSpinBox(theParent), myCleared(false), - myIsModified(false) + myIsEmitKeyPressEvent(false) { // VSR 01/07/2010: Disable thousands separator for spin box // (to avoid inconsistency of double-2-string and string-2-double conversion) @@ -76,9 +77,6 @@ ModuleBase_DoubleSpinBox::ModuleBase_DoubleSpinBox(QWidget* theParent, int thePr connect(lineEdit(), SIGNAL(textChanged( const QString& )), this, SLOT(onTextChanged( const QString& ))); - - connect(this, SIGNAL(valueChanged(const QString&)), this, SLOT(onValueChanged(const QString&))); - connect(this, SIGNAL(editingFinished()), this, SLOT(onEditingFinished())); } /*! @@ -200,29 +198,46 @@ QString ModuleBase_DoubleSpinBox::removeTrailingZeroes(const QString& src) const return res; } -#include -void ModuleBase_DoubleSpinBox::keyPressEvent(QKeyEvent *theEvent) +void ModuleBase_DoubleSpinBox::keyPressEvent(QKeyEvent* theEvent) { - myProcessedEvent = 0; - - bool anIsModified = myIsModified; + bool isEmitKeyRelease = false; + switch (theEvent->key()) { + case Qt::Key_Enter: + case Qt::Key_Return: { + // do not react to the Enter key, the property panel processes it + if (!myIsEmitKeyPressEvent) + return; + else + isEmitKeyRelease = true; + } + break; + default: + break; + } QDoubleSpinBox::keyPressEvent(theEvent); + if (isEmitKeyRelease) + emit enterPressed(); +} + +void ModuleBase_DoubleSpinBox::keyReleaseEvent(QKeyEvent* theEvent) +{ switch (theEvent->key()) { case Qt::Key_Enter: case Qt::Key_Return: { - if (anIsModified) - myProcessedEvent = theEvent; - /*qDebug("ModuleBase_DoubleSpinBox::keyPressEvent"); - if (anIsModified) // we should not perform this event outside - theEvent->setAccepted(true); - else - theEvent->setAccepted(false);*/ + // the enter has already been processed when key is pressed, + // key release should not be processed in operation manager + if (myIsEmitKeyPressEvent) { + theEvent->accept(); + emit enterReleased(); + return; + } } break; default: break; } + QDoubleSpinBox::keyReleaseEvent(theEvent); } /*! @@ -335,20 +350,12 @@ QValidator::State ModuleBase_DoubleSpinBox::validate(QString& str, int& pos) con void ModuleBase_DoubleSpinBox::onTextChanged(const QString& ) { myCleared = false; - myIsModified = true; } -void ModuleBase_DoubleSpinBox::onValueChanged(const QString& theValue) +bool ModuleBase_DoubleSpinBox::enableKeyPressEvent(const bool& theEnable) { - myIsModified = true; -} + bool aPreviousValue = myIsEmitKeyPressEvent; + myIsEmitKeyPressEvent = theEnable; -void ModuleBase_DoubleSpinBox::onEditingFinished() -{ - myIsModified = false; -} - -bool ModuleBase_DoubleSpinBox::isEventProcessed(QKeyEvent* theEvent) -{ - return myProcessedEvent && myProcessedEvent == theEvent; + return aPreviousValue; }