mirror of
https://github.com/jankae/LibreVNA.git
synced 2026-04-21 06:13:41 +00:00
SIUnitEdit changeable with scroll wheel
This commit is contained in:
parent
978842a2ff
commit
3a88e10875
1 changed files with 25 additions and 0 deletions
|
|
@ -6,6 +6,7 @@
|
|||
#include <QKeyEvent>
|
||||
#include <QDebug>
|
||||
#include <QTimer>
|
||||
#include <cmath>
|
||||
|
||||
SIUnitEdit::SIUnitEdit(QString unit, QString prefixes, int precision, QWidget *parent)
|
||||
: QLineEdit(parent)
|
||||
|
|
@ -88,6 +89,30 @@ bool SIUnitEdit::eventFilter(QObject *, QEvent *event)
|
|||
// online found clumsy way to select all text when clicked!?!
|
||||
// just selectAll() alone does _not_ work!
|
||||
QTimer::singleShot(0, this, &SIUnitEdit::continueEditing);
|
||||
} else if(event->type() == QEvent::Wheel) {
|
||||
if(_value == 0.0) {
|
||||
// can't figure out step size with zero value
|
||||
return false;
|
||||
}
|
||||
auto wheel = static_cast<QWheelEvent*>(event);
|
||||
// most mousewheel have 15 degree increments, the reported delta is in 1/8th degree -> 120
|
||||
auto increment = wheel->angleDelta().y() / 120.0;
|
||||
// round toward bigger step in case of special higher resolution mousewheel
|
||||
unsigned int steps = abs(increment > 0 ? ceil(increment) : floor(increment));
|
||||
int sign = increment > 0 ? 1 : -1;
|
||||
// figure out step increment
|
||||
auto newVal = _value;
|
||||
while(steps > 0) {
|
||||
// do update in multiple steps because the step size could change inbetween
|
||||
constexpr int nthDigit = 3;
|
||||
auto step_size = pow(10, floor(log10(abs(newVal))) - nthDigit + 1);
|
||||
newVal += step_size * sign;
|
||||
steps--;
|
||||
}
|
||||
setValue(newVal);
|
||||
continueEditing();
|
||||
setFocus();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue