Fader: add a way to disable the x100 display conversion so the fader widget can be used with arbitrary values
Also it can now be used with alternate pixmaps
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* AutomatableSlider.cpp - implementation of class automatableSlider
|
||||
* AutomatableSlider.cpp - implementation of class AutomatableSlider
|
||||
*
|
||||
* Copyright (c) 2006-2007 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
|
||||
* Copyright (c) 2007-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
|
||||
@@ -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<int>( 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<int>( 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;
|
||||
|
||||
Reference in New Issue
Block a user