diff --git a/include/AutomatableSlider.h b/include/AutomatableSlider.h index 1cd1405b1..7627ddd95 100644 --- a/include/AutomatableSlider.h +++ b/include/AutomatableSlider.h @@ -1,5 +1,5 @@ /* - * AutomatableSlider.h - class automatableSlider, a QSlider with automation + * AutomatableSlider.h - class AutomatableSlider, a QSlider with automation * * Copyright (c) 2006-2008 Javier Serrano Polo * diff --git a/include/Fader.h b/include/Fader.h index efbc4ebf1..f8048e98c 100644 --- a/include/Fader.h +++ b/include/Fader.h @@ -64,6 +64,7 @@ public: Q_PROPERTY( QColor peakGreen READ peakGreen WRITE setPeakGreen ) Q_PROPERTY( QColor peakRed READ peakRed WRITE setPeakRed ) Fader( FloatModel * _model, const QString & _name, QWidget * _parent ); + Fader( FloatModel * _model, const QString & _name, QWidget * _parent, QPixmap * back, QPixmap * leds, QPixmap * knob ); virtual ~Fader(); void setPeak_L( float fPeak ); @@ -76,6 +77,11 @@ public: QColor peakRed() const; void setPeakGreen( const QColor & c ); void setPeakRed( const QColor & c ); + + void setDisplayConversion( bool b ) + { + m_displayConversion = b; + } private: virtual void contextMenuEvent( QContextMenuEvent * _me ); @@ -112,6 +118,12 @@ private: static QPixmap * s_back; static QPixmap * s_leds; static QPixmap * s_knob; + + QPixmap * m_back; + QPixmap * m_leds; + QPixmap * m_knob; + + bool m_displayConversion; int m_moveStartPoint; float m_startValue; diff --git a/include/lmms_math.h b/include/lmms_math.h index 157ab70b7..016e1a49f 100644 --- a/include/lmms_math.h +++ b/include/lmms_math.h @@ -140,6 +140,7 @@ static inline float fastRandf( float range ) { static const float fast_rand_ratio = 1.0f / FAST_RAND_MAX; return fast_rand() * range * fast_rand_ratio; +} //! @brief Takes advantage of fmal() function if present in hardware static inline long double fastFmal( long double a, long double b, long double c ) diff --git a/plugins/delay/delaycontrolsdialog.cpp b/plugins/delay/delaycontrolsdialog.cpp index adb5f3420..80aeba068 100644 --- a/plugins/delay/delaycontrolsdialog.cpp +++ b/plugins/delay/delaycontrolsdialog.cpp @@ -46,7 +46,7 @@ DelayControlsDialog::DelayControlsDialog( DelayControls *controls ) : sampleDelayKnob->setLabel( tr( "Delay" ) ); sampleDelayKnob->setHintText( tr( "Delay Time" ) + " ", " s" ); - knob * feedbackKnob = new knob( knobBright_26, this ); + Knob * feedbackKnob = new Knob( knobBright_26, this ); feedbackKnob->move( 63,10 ); feedbackKnob->setVolumeKnob( true) ; feedbackKnob->setModel( &controls->m_feedbackModel); diff --git a/src/gui/widgets/AutomatableSlider.cpp b/src/gui/widgets/AutomatableSlider.cpp index 6a3d10640..c6a36c939 100644 --- a/src/gui/widgets/AutomatableSlider.cpp +++ b/src/gui/widgets/AutomatableSlider.cpp @@ -1,5 +1,5 @@ /* - * AutomatableSlider.cpp - implementation of class automatableSlider + * AutomatableSlider.cpp - implementation of class AutomatableSlider * * Copyright (c) 2006-2007 Javier Serrano Polo * Copyright (c) 2007-2009 Tobias Doerffel diff --git a/src/gui/widgets/Fader.cpp b/src/gui/widgets/Fader.cpp index 3015d976f..7f1352a57 100644 --- a/src/gui/widgets/Fader.cpp +++ b/src/gui/widgets/Fader.cpp @@ -74,6 +74,7 @@ Fader::Fader( FloatModel * _model, const QString & _name, QWidget * _parent ) : m_persistentPeak_R( 0.0 ), m_fMinPeak( 0.01f ), m_fMaxPeak( 1.1 ), + m_displayConversion( true ), m_moveStartPoint( -1 ), m_startValue( 0 ), m_peakGreen( 0, 0, 0 ), @@ -95,7 +96,11 @@ Fader::Fader( FloatModel * _model, const QString & _name, QWidget * _parent ) : { s_knob = new QPixmap( embed::getIconPixmap( "fader_knob" ) ); } - + + m_back = s_back; + m_leds = s_leds; + m_knob = s_knob; + setWindowTitle( _name ); setAttribute( Qt::WA_OpaquePaintEvent, false ); setMinimumSize( 23, 116 ); @@ -105,6 +110,39 @@ Fader::Fader( FloatModel * _model, const QString & _name, QWidget * _parent ) : } +Fader::Fader( FloatModel * model, const QString & name, QWidget * parent, QPixmap * back, QPixmap * leds, QPixmap * knob ) : + QWidget( parent ), + FloatModelView( model, this ), + m_model( model ), + m_fPeakValue_L( 0.0 ), + m_fPeakValue_R( 0.0 ), + m_persistentPeak_L( 0.0 ), + m_persistentPeak_R( 0.0 ), + m_fMinPeak( 0.01f ), + m_fMaxPeak( 1.1 ), + m_displayConversion( false ), + m_moveStartPoint( -1 ), + m_startValue( 0 ), + m_peakGreen( 0, 0, 0 ), + m_peakRed( 0, 0, 0 ) +{ + if( s_textFloat == NULL ) + { + s_textFloat = new TextFloat; + } + + m_back = back; + m_leds = leds; + m_knob = knob; + + setWindowTitle( name ); + setAttribute( Qt::WA_OpaquePaintEvent, false ); + setMinimumSize( m_back->width(), m_back->height() ); + setMaximumSize( m_back->width(), m_back->height() ); + resize( m_back->width(), m_back->height() ); + setModel( model ); +} + Fader::~Fader() { @@ -172,19 +210,33 @@ void Fader::mousePressEvent( QMouseEvent* mouseEvent ) void Fader::mouseDoubleClickEvent( QMouseEvent* mouseEvent ) { bool ok; + float newValue; // TODO: dbV handling - int newValue = QInputDialog::getInt( this, windowTitle(), - tr( "Please enter a new value between %1 and %2:" ). - arg( model()->minValue()*100 ). - arg( model()->maxValue()*100 ), - model()->value()*100, - model()->minValue()*100, - model()->maxValue()*100, 1, &ok ); + if( m_displayConversion ) + { + newValue = QInputDialog::getDouble( this, windowTitle(), + tr( "Please enter a new value between %1 and %2:" ). + arg( model()->minValue() * 100 ). + arg( model()->maxValue() * 100 ), + model()->value() * 100, + model()->minValue() * 100, + model()->maxValue() * 100, 4, &ok ) * 0.01f; + } + else + { + newValue = QInputDialog::getDouble( this, windowTitle(), + tr( "Please enter a new value between %1 and %2:" ). + arg( model()->minValue() ). + arg( model()->maxValue() ), + model()->value(), + model()->minValue(), + model()->maxValue(), 4, &ok ); + } if( ok ) { - model()->setValue( newValue / 100.0f ); + model()->setValue( newValue ); } } @@ -265,25 +317,24 @@ void Fader::setPeak_R( float fPeak ) // update tooltip showing value and adjust position while changing fader value void Fader::updateTextFloat() { - if( ConfigManager::inst()->value( "app", "displaydbv" ).toInt() ) + if( ConfigManager::inst()->value( "app", "displaydbv" ).toInt() && m_displayConversion ) { s_textFloat->setText( QString("Volume: %1 dBV"). arg( 20.0 * log10( model()->value() ), 3, 'f', 2 ) ); } else { - s_textFloat->setText( QString("Volume: %1 %").arg( m_model->value() * 100 ) ); + s_textFloat->setText( QString("Volume: %1 %").arg( m_displayConversion ? m_model->value() * 100 : m_model->value() ) ); } - s_textFloat->moveGlobal( this, QPoint( width() - ( *s_knob ).width() - 5, knobPosY() - 46 ) ); + s_textFloat->moveGlobal( this, QPoint( width() - ( *m_knob ).width() - 5, knobPosY() - 46 ) ); } inline int Fader::calculateDisplayPeak( float fPeak ) { - int peak = (int)( 116 - ( fPeak / ( m_fMaxPeak - m_fMinPeak ) ) * 116.0 ); + int peak = (int)( m_back->height() - ( fPeak / ( m_fMaxPeak - m_fMinPeak ) ) * m_back->height() ); - if ( peak > 116 ) return 116; - else return peak; + return qMin( peak, m_back->height() ); } void Fader::paintEvent( QPaintEvent * ev) @@ -291,7 +342,7 @@ void Fader::paintEvent( QPaintEvent * ev) QPainter painter(this); // background - painter.drawPixmap( ev->rect(), *s_back, ev->rect() ); + painter.drawPixmap( ev->rect(), *m_back, ev->rect() ); // peak leds @@ -299,28 +350,28 @@ void Fader::paintEvent( QPaintEvent * ev) int peak_L = calculateDisplayPeak( m_fPeakValue_L - m_fMinPeak ); int persistentPeak_L = qMax( 3, calculateDisplayPeak( m_persistentPeak_L - m_fMinPeak ) ); - painter.drawPixmap( QRect( 0, peak_L, 11, 116 - peak_L ), *s_leds, QRect( 0, peak_L, 11, 116 - peak_L ) ); + painter.drawPixmap( QRect( 0, peak_L, 11, 116 - peak_L ), *m_leds, QRect( 0, peak_L, 11, 116 - peak_L ) ); if( m_persistentPeak_L > 0.05 ) { painter.fillRect( QRect( 2, persistentPeak_L, 7, 1 ), ( m_persistentPeak_L < 1.0 ) - ? peakGreen() + ? peakGreen() : peakRed() ); } int peak_R = calculateDisplayPeak( m_fPeakValue_R - m_fMinPeak ); int persistentPeak_R = qMax( 3, calculateDisplayPeak( m_persistentPeak_R - m_fMinPeak ) ); - painter.drawPixmap( QRect( 11, peak_R, 11, 116 - peak_R ), *s_leds, QRect( 11, peak_R, 11, 116 - peak_R ) ); + painter.drawPixmap( QRect( 11, peak_R, 11, 116 - peak_R ), *m_leds, QRect( 11, peak_R, 11, 116 - peak_R ) ); if( m_persistentPeak_R > 0.05 ) { painter.fillRect( QRect( 14, persistentPeak_R, 7, 1 ), ( m_persistentPeak_R < 1.0 ) - ? peakGreen() + ? peakGreen() : peakRed() ); } // knob - painter.drawPixmap( 0, knobPosY() - ( *s_knob ).height(), *s_knob ); + painter.drawPixmap( 0, knobPosY() - ( *m_knob ).height(), *s_knob ); } @@ -333,12 +384,12 @@ QColor Fader::peakRed() const { return m_peakRed; } - + void Fader::setPeakGreen( const QColor & c ) { m_peakGreen = c; } - + void Fader::setPeakRed( const QColor & c ) { m_peakRed = c;