diff options
Diffstat (limited to 'muse2/awl')
-rw-r--r-- | muse2/awl/floatentry.cpp | 106 | ||||
-rw-r--r-- | muse2/awl/floatentry.h | 9 |
2 files changed, 103 insertions, 12 deletions
diff --git a/muse2/awl/floatentry.cpp b/muse2/awl/floatentry.cpp index 9b4b3e99..37b35152 100644 --- a/muse2/awl/floatentry.cpp +++ b/muse2/awl/floatentry.cpp @@ -26,6 +26,7 @@ #include <QLineEdit> #include <QMouseEvent> +#include <QContextMenuEvent> #include <QTimer> #define TIMER1 400 @@ -53,12 +54,43 @@ FloatEntry::FloatEntry(QWidget* parent) timer = new QTimer(this); connect(timer, SIGNAL(timeout()), SLOT(repeat())); _value = 0.0f; - connect(this, SIGNAL(returnPressed()), SLOT(endEdit())); + //connect(this, SIGNAL(returnPressed()), SLOT(endEdit())); + connect(this, SIGNAL(editingFinished()), SLOT(endEdit())); setCursor(QCursor(Qt::ArrowCursor)); updateValue(); } //--------------------------------------------------------- +// calcIncrement() +//--------------------------------------------------------- + +double FloatEntry::calcIncrement() const +{ + double dif; + if(_maxValue - _minValue > 0) + dif = _maxValue - _minValue; + else + dif = _minValue - _maxValue; + + if(dif <= 10.0) + return 0.1; + else + if(dif <= 100.0) + return 1.0; + else + return 10.0; +} + +//--------------------------------------------------------- +// contextMenuEvent +//--------------------------------------------------------- + +void FloatEntry::contextMenuEvent(QContextMenuEvent * e) +{ + e->accept(); +} + +//--------------------------------------------------------- // setString //--------------------------------------------------------- @@ -114,11 +146,16 @@ void FloatEntry::valueChange() void FloatEntry::incValue(double) { - if (_value + 1.0 < _maxValue) { - _value = _value + 1.0; - updateValue(); - valueChange(); - } + if(_value >= _maxValue) + return; + double inc = calcIncrement(); + if(_value + inc >= _maxValue) + //setValue(_maxValue); + _value = _maxValue; + else + //setValue(_value + inc); + _value += inc; + valueChange(); } //--------------------------------------------------------- @@ -127,11 +164,16 @@ void FloatEntry::incValue(double) void FloatEntry::decValue(double) { - if (_value - 1.0 > _minValue) { - _value = _value - 1.0; - updateValue(); - valueChange(); - } + if(_value <= _minValue) + return; + double inc = calcIncrement(); + if(_value - inc <= _minValue) + //setValue(_minValue); + _value = _minValue; + else + //setValue(_value - inc); + _value -= inc; + valueChange(); } //--------------------------------------------------------- @@ -188,8 +230,8 @@ void FloatEntry::mousePressEvent(QMouseEvent* event) void FloatEntry::wheelEvent(QWheelEvent* event) { + event->accept(); int delta = event->delta(); - if (delta < 0) decValue(-1.0); else if (delta > 0) @@ -322,5 +364,45 @@ double FloatEntry::value() const rv = _value; return rv; } + +//--------------------------------------------------------- +// minLogValue +//--------------------------------------------------------- + +//double FloatEntry::minValue() const { +// return _log ? pow(10.0, _minValue*0.05f) : _minValue; +//} + +//--------------------------------------------------------- +// setMinLogValue +//--------------------------------------------------------- + +void FloatEntry::setMinLogValue(double val) { + if (_log) { + if (val == 0.0f) _minValue = -100; + else _minValue = fast_log10(val) * 20.0f; + } + else _minValue = val; +} + +//--------------------------------------------------------- +// maxLogValue +//--------------------------------------------------------- + +//double FloatEntry::maxValue() const { +// return _log ? pow(10.0, _maxValue*0.05f) : _maxValue; +//} + +//--------------------------------------------------------- +// setMaxLogValue +//--------------------------------------------------------- + +void FloatEntry::setMaxLogValue(double val) { + if (_log) { + _maxValue = fast_log10(val) * 20.0f; + } + else _maxValue = val; +} + } diff --git a/muse2/awl/floatentry.h b/muse2/awl/floatentry.h index 53d53bff..7d31498f 100644 --- a/muse2/awl/floatentry.h +++ b/muse2/awl/floatentry.h @@ -58,6 +58,8 @@ class FloatEntry : public QLineEdit { int _precision; bool _log; + double calcIncrement() const; + virtual void wheelEvent(QWheelEvent*); virtual void mousePressEvent(QMouseEvent*); virtual void mouseMoveEvent(QMouseEvent*); @@ -67,6 +69,7 @@ class FloatEntry : public QLineEdit { virtual bool setString(double); virtual void incValue(double); virtual void decValue(double); + void contextMenuEvent(QContextMenuEvent*); void updateValue(); @@ -96,11 +99,17 @@ class FloatEntry : public QLineEdit { double minValue() const { return _minValue; } double maxValue() const { return _maxValue; } void setMinValue(double v) { _minValue = v; } + void setMinLogValue(double v); void setMaxValue(double v) { _maxValue = v; } + void setMaxLogValue(double v); void setRange(double a, double b) { _minValue = a; _maxValue = b; } + void setLogRange(double a, double b) { + setMinLogValue(a); + setMaxLogValue(b); + } int precision() const { return _precision; } void setPrecision(int val); QString specialText() const { return _specialText; } |