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; } | 
