From 66da83ef92b7ea6d0656eb66c5a9c6b4e57efaa0 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 21 Feb 2019 13:30:13 +0100 Subject: [PATCH] fixes 0003605: Scrolling on length inputs with Building Euro unit system has max value --- src/Gui/InputField.cpp | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/Gui/InputField.cpp b/src/Gui/InputField.cpp index c2e932fb9c..2df0ffde51 100644 --- a/src/Gui/InputField.cpp +++ b/src/Gui/InputField.cpp @@ -76,6 +76,7 @@ InputField::InputField(QWidget * parent) SaveSize(5) { setValidator(new InputValidator(this)); + setFocusPolicy(Qt::WheelFocus); iconLabel = new QLabel(this); iconLabel->setCursor(Qt::ArrowCursor); QPixmap pixmap = getValidationIcon(":/icons/button_valid.svg", QSize(sizeHint().height(),sizeHint().height())); @@ -655,18 +656,24 @@ void InputField::keyPressEvent(QKeyEvent *event) case Qt::Key_Up: { double val = actUnitValue + StepSize; - Base::Quantity quant = actQuantity; - quant.setValue(val); - this->setText(quant.getUserString()); + if (val > Maximum) + val = Maximum; + double dFactor; + QString unitStr; + actQuantity.getUserString(dFactor, unitStr); + this->setText(QString::fromUtf8("%L1 %2").arg(val).arg(unitStr)); event->accept(); } break; case Qt::Key_Down: { double val = actUnitValue - StepSize; - Base::Quantity quant = actQuantity; - quant.setValue(val); - this->setText(quant.getUserString()); + if (val < Minimum) + val = Minimum; + double dFactor; + QString unitStr; + actQuantity.getUserString(dFactor, unitStr); + this->setText(QString::fromUtf8("%L1 %2").arg(val).arg(unitStr)); event->accept(); } break; @@ -683,16 +690,19 @@ void InputField::wheelEvent (QWheelEvent * event) return; } + double factor = event->modifiers() & Qt::ControlModifier ? 10 : 1; double step = event->delta() > 0 ? StepSize : -StepSize; - double val = actUnitValue + step; + double val = actUnitValue + factor * step; if (val > Maximum) val = Maximum; else if (val < Minimum) val = Minimum; - Base::Quantity quant = actQuantity; - quant.setValue(val); - this->setText(quant.getUserString()); + double dFactor; + QString unitStr; + actQuantity.getUserString(dFactor, unitStr); + + this->setText(QString::fromUtf8("%L1 %2").arg(val).arg(unitStr)); selectNumber(); event->accept(); }