knob without def ctors.

This commit is contained in:
Johannes Lorenz
2014-04-09 12:31:53 +02:00
parent 3d0ce057d6
commit d08857bba8
4 changed files with 107 additions and 35 deletions

View File

@@ -38,7 +38,7 @@ class EXPORT TempoSyncKnob : public knob
{
Q_OBJECT
public:
TempoSyncKnob( int knobNum, QWidget* parent = NULL, const QString& name = QString() );
TempoSyncKnob( knobTypes knobNum, QWidget* parent = NULL, const QString& name = QString() );
virtual ~TempoSyncKnob();
const QString & syncDescription();

View File

@@ -46,6 +46,8 @@ enum knobTypes
class EXPORT knob : public QWidget, public FloatModelView
{
Q_OBJECT
Q_ENUMS( knobTypes )
Q_PROPERTY(float innerRadius READ innerRadius WRITE setInnerRadius)
Q_PROPERTY(float outerRadius READ outerRadius WRITE setOuterRadius)
@@ -57,11 +59,18 @@ class EXPORT knob : public QWidget, public FloatModelView
// Unfortunately, the gradient syntax doesn't create our gradient
// correctly so we need to do this:
Q_PROPERTY(QColor outerColor READ outerColor WRITE setOuterColor)
Q_PROPERTY(QColor lineColor READ lineColor WRITE setlineColor)
Q_PROPERTY(QColor arcColor READ arcColor WRITE setarcColor)
mapPropertyFromModel(bool,isVolumeKnob,setVolumeKnob,m_volumeKnob);
mapPropertyFromModel(float,volumeRatio,setVolumeRatio,m_volumeRatio);
Q_PROPERTY(knobTypes knobNum READ knobNum WRITE setknobNum)
void init( const QString & _name ); //!< to be called by ctors
public:
knob( int _knob_num, QWidget * _parent = NULL, const QString & _name = QString() );
knob( knobTypes _knob_num, QWidget * _parent = NULL, const QString & _name = QString() );
knob( QWidget * _parent = NULL, const QString & _name = QString() ); //!< default ctor
virtual ~knob();
// TODO: remove
@@ -82,6 +91,9 @@ public:
float outerRadius() const;
void setOuterRadius( float _r );
knobTypes knobNum() const;
void setknobNum( knobTypes _k );
QPointF centerPoint() const;
float centerPointX() const;
void setCenterPointX( float _c );
@@ -93,6 +105,10 @@ public:
QColor outerColor() const;
void setOuterColor( const QColor & _c );
QColor lineColor() const;
void setlineColor( const QColor & _c );
QColor arcColor() const;
void setarcColor( const QColor & _c );
signals:
@@ -146,7 +162,6 @@ private:
static textFloat * s_textFloat;
int m_knobNum;
QString m_label;
QPixmap * m_knobPixmap;
@@ -167,7 +182,11 @@ private:
float m_innerRadius;
float m_outerRadius;
float m_lineWidth;
QColor * m_outerColor;
QColor m_outerColor;
QColor m_lineColor; //!< unused yet
QColor m_arcColor; //!< unused yet
knobTypes m_knobNum;
} ;

View File

@@ -55,17 +55,37 @@ textFloat * knob::s_textFloat = NULL;
knob::knob( int _knob_num, QWidget * _parent, const QString & _name ) :
QWidget( _parent ),
FloatModelView( new FloatModel( 0, 0, 0, 1, NULL, _name, true ), this ),
m_knobNum( _knob_num ),
m_label( "" ),
m_knobPixmap( NULL ),
m_volumeKnob( false ),
m_volumeRatio( 100.0, 0.0, 1000000.0 ),
m_buttonPressed( false ),
m_angle( -10 ),
m_outerColor( NULL )
//! @todo: in C++11, we can use delegating ctors
#define DEFAULT_KNOB_INITIALIZER_LIST \
QWidget( _parent ), \
FloatModelView( new FloatModel( 0, 0, 0, 1, NULL, _name, true ), this ), \
m_label( "" ), \
m_knobPixmap( NULL ), \
m_volumeKnob( false ), \
m_volumeRatio( 100.0, 0.0, 1000000.0 ), \
m_buttonPressed( false ), \
m_angle( -10 )
knob::knob( knobTypes _knob_num, QWidget * _parent, const QString & _name ) :
DEFAULT_KNOB_INITIALIZER_LIST,
m_knobNum( _knob_num )
{
init( _name );
}
knob::knob( QWidget * _parent, const QString & _name ) :
DEFAULT_KNOB_INITIALIZER_LIST,
m_knobNum( knobBright_26 )
{
init( _name );
}
#undef DEFAULT_KNOB_INITIALIZER_LIST
void knob::init( const QString & _name )
{
if( s_textFloat == NULL )
{
@@ -162,6 +182,23 @@ void knob::setOuterRadius( float _r )
knobTypes knob::knobNum() const
{
return m_knobNum;
}
void knob::setknobNum( knobTypes _k )
{
m_knobNum = _k;
}
QPointF knob::centerPoint() const
{
return m_centerPoint;
@@ -213,28 +250,42 @@ void knob::setLineWidth( float _w )
QColor knob::outerColor() const
{
if( m_outerColor )
{
return *m_outerColor;
}
else
{
return QColor();
}
return m_outerColor;
}
void knob::setOuterColor( const QColor & _c )
{
if( m_outerColor )
{
*m_outerColor = _c;
}
else
{
m_outerColor = new QColor( _c );
}
m_outerColor = _c;
}
QColor knob::lineColor() const
{
return m_lineColor;
}
void knob::setlineColor( const QColor & _c )
{
m_lineColor = _c;
}
QColor knob::arcColor() const
{
return m_arcColor;
}
void knob::setarcColor( const QColor & _c )
{
m_arcColor = _c;
}
@@ -290,11 +341,11 @@ void knob::drawKnob( QPainter * _p )
p.setRenderHint( QPainter::Antialiasing );
// Perhaps this can move to setOuterRadius()
if( m_outerColor )
if( m_outerColor.isValid() )
{
QRadialGradient gradient( centerPoint(), outerRadius() );
gradient.setColorAt(0.4, _p->pen().brush().color() );
gradient.setColorAt(1, *m_outerColor );
gradient.setColorAt( 0.4, _p->pen().brush().color() );
gradient.setColorAt( 1, m_outerColor );
p.setPen( QPen( gradient, lineWidth(),
Qt::SolidLine, Qt::RoundCap ) );
@@ -380,6 +431,8 @@ void knob::drawKnob( QPainter * _p )
p.drawLine( calculateLine( mid, radius-2, 2 ) );
break;
}
case knobStyled:
break;
}
p.drawArc( mid.x() - arcRectSize/2, 1, arcRectSize, arcRectSize, (90-centerAngle)*16, -16*(m_angle-centerAngle) );

View File

@@ -36,7 +36,7 @@
TempoSyncKnob::TempoSyncKnob( int _knob_num, QWidget * _parent,
TempoSyncKnob::TempoSyncKnob( knobTypes _knob_num, QWidget * _parent,
const QString & _name ) :
knob( _knob_num, _parent, _name ),
m_tempoSyncIcon( embed::getIconPixmap( "tempo_sync" ) ),