From d08857bba8cb13671ba55f1a23123a8a26891404 Mon Sep 17 00:00:00 2001 From: Johannes Lorenz Date: Wed, 9 Apr 2014 12:31:53 +0200 Subject: [PATCH] knob without def ctors. --- include/TempoSyncKnob.h | 2 +- include/knob.h | 25 +++++- src/gui/widgets/knob.cpp | 113 ++++++++++++++++++++-------- src/gui/widgets/tempo_sync_knob.cpp | 2 +- 4 files changed, 107 insertions(+), 35 deletions(-) diff --git a/include/TempoSyncKnob.h b/include/TempoSyncKnob.h index 964d77cf4..0f6a9063c 100644 --- a/include/TempoSyncKnob.h +++ b/include/TempoSyncKnob.h @@ -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(); diff --git a/include/knob.h b/include/knob.h index 81141220d..6b738911f 100644 --- a/include/knob.h +++ b/include/knob.h @@ -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; } ; diff --git a/src/gui/widgets/knob.cpp b/src/gui/widgets/knob.cpp index fc33abea3..8d8637eae 100644 --- a/src/gui/widgets/knob.cpp +++ b/src/gui/widgets/knob.cpp @@ -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) ); diff --git a/src/gui/widgets/tempo_sync_knob.cpp b/src/gui/widgets/tempo_sync_knob.cpp index 4e178ee67..331fea908 100644 --- a/src/gui/widgets/tempo_sync_knob.cpp +++ b/src/gui/widgets/tempo_sync_knob.cpp @@ -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" ) ),