From b5c9a367857d85168439a99f8ba8aa712cd43518 Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Mon, 25 Feb 2008 23:28:55 +0000 Subject: [PATCH] splitted tempoSyncKnob into tempoSyncKnobModel and tempoSyncKnob git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/branches/lmms-mv@719 0778d3d1-df1d-0410-868b-ea421aaaa00d --- ChangeLog | 20 + include/effect.h | 3 +- include/envelope_and_lfo_parameters.h | 3 +- include/instrument_functions.h | 3 +- include/tempo_sync_knob.h | 95 +++-- src/core/effect.cpp | 2 +- src/core/envelope_and_lfo_parameters.cpp | 2 +- src/core/instrument_functions.cpp | 2 +- src/widgets/envelope_and_lfo_view.cpp | 2 +- src/widgets/tempo_sync_knob.cpp | 464 +++++++++++++---------- 10 files changed, 357 insertions(+), 239 deletions(-) diff --git a/ChangeLog b/ChangeLog index ebc283cc1..0691ec5e4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,25 @@ 2008-02-25 Tobias Doerffel + * plugins/ladspa_browser/ladspa_browser.cpp: + * plugins/ladspa_browser/ladspa_browser.h: + incorporated recent API-changes + + * include/effect.h: + * include/instrument_functions.h: + * include/envelope_and_lfo_parameters.h: + * include/tempo_sync_knob.h: + * src/widgets/envelope_and_lfo_view.cpp: + * src/widgets/tempo_sync_knob.cpp: + * src/core/envelope_and_lfo_parameters.cpp: + * src/core/effect.cpp: + * src/core/instrument_functions.cpp: + splitted tempoSyncKnob into tempoSyncKnobModel and tempoSyncKnob + + * include/meter_dialog.h: + * src/core/meter_dialog.cpp: + splitted into meterModel and meterDialog + + * plugins/flp_import/flp_import.cpp: * include/instrument_track.h: * include/piano.h: * src/tracks/instrument_track.cpp: diff --git a/include/effect.h b/include/effect.h index 65d0120bb..7993ce3c0 100644 --- a/include/effect.h +++ b/include/effect.h @@ -37,6 +37,7 @@ #include "engine.h" #include "mixer.h" #include "automatable_model.h" +#include "tempo_sync_knob.h" class effectChain; @@ -185,7 +186,7 @@ private: boolModel m_enabledModel; floatModel m_wetDryModel; floatModel m_gateModel; - floatModel m_autoQuitModel; + tempoSyncKnobModel m_autoQuitModel; friend class effectView; diff --git a/include/envelope_and_lfo_parameters.h b/include/envelope_and_lfo_parameters.h index fe6f6ba25..358768965 100644 --- a/include/envelope_and_lfo_parameters.h +++ b/include/envelope_and_lfo_parameters.h @@ -31,6 +31,7 @@ #include "journalling_object.h" #include "automatable_model.h" #include "sample_buffer.h" +#include "tempo_sync_knob.h" #include "types.h" @@ -117,7 +118,7 @@ private: floatModel m_lfoPredelayModel; floatModel m_lfoAttackModel; - floatModel m_lfoSpeedModel; + tempoSyncKnobModel m_lfoSpeedModel; floatModel m_lfoAmountModel; intModel m_lfoWaveModel; diff --git a/include/instrument_functions.h b/include/instrument_functions.h index 70a3a22d7..edd753a08 100644 --- a/include/instrument_functions.h +++ b/include/instrument_functions.h @@ -29,6 +29,7 @@ #include "journalling_object.h" #include "types.h" #include "automatable_model.h" +#include "tempo_sync_knob.h" #include "combobox.h" @@ -125,7 +126,7 @@ private: boolModel m_arpEnabledModel; comboBoxModel m_arpModel; floatModel m_arpRangeModel; - floatModel m_arpTimeModel; + tempoSyncKnobModel m_arpTimeModel; floatModel m_arpGateModel; intModel m_arpDirectionModel; comboBoxModel m_arpModeModel; diff --git a/include/tempo_sync_knob.h b/include/tempo_sync_knob.h index af56eb5af..5739bd286 100644 --- a/include/tempo_sync_knob.h +++ b/include/tempo_sync_knob.h @@ -1,7 +1,7 @@ /* * tempo_sync_knob.h - adds bpm to ms conversion for knob class * - * Copyright (c) 2005-2007 Danny McRae + * Copyright (c) 2005-2008 Danny McRae * * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net * @@ -29,38 +29,41 @@ #include #include "knob.h" +#include "meter_dialog.h" class QAction; class meterDialog; -class tempoSyncKnob : public knob + +class tempoSyncKnobModel : public knobModel { Q_OBJECT public: enum tempoSyncMode { - NO_SYNC, - DOUBLE_WHOLE_NOTE, - WHOLE_NOTE, - HALF_NOTE, - QUARTER_NOTE, - EIGHTH_NOTE, - SIXTEENTH_NOTE, - THIRTYSECOND_NOTE, - CUSTOM + SyncNone, + SyncDoubleWholeNote, + SyncWholeNote, + SyncHalfNote, + SyncQuarterNote, + SyncEighthNote, + SyncSixteenthNote, + SyncThirtysecondNote, + SyncCustom } ; - tempoSyncKnob( int _knob_num, QWidget * _parent, const QString & _name, - float _scale = 1.0f ); - virtual ~tempoSyncKnob(); + tempoSyncKnobModel( const float _val, const float _min, + const float _max, const float _step, + const float _scale, ::model * _parent ); + virtual ~tempoSyncKnobModel(); - virtual void FASTCALL saveSettings( QDomDocument & _doc, + virtual void saveSettings( QDomDocument & _doc, QDomElement & _this, const QString & _name ); - virtual void FASTCALL loadSettings( const QDomElement & _this, + virtual void loadSettings( const QDomElement & _this, const QString & _name ); tempoSyncMode getSyncMode( void ); @@ -69,24 +72,62 @@ public: float getScale( void ); void setScale( float _new_scale ); +signals: + void syncModeChanged( tempoSyncMode _new_mode ); + void scaleChanged( float _new_scale ); + + +public slots: + void setTempoSync( int _note_type ); + void setTempoSync( QAction * _item ); + + +protected slots: + void calculateTempoSyncTime( bpm_t _bpm ); + void updateCustom( void ); + + +private: + tempoSyncMode m_tempoSyncMode; + tempoSyncMode m_tempoLastSyncMode; + float m_scale; + + meterModel m_custom; + + + friend class tempoSyncKnob; + +} ; + + + +class tempoSyncKnob : public knob +{ + Q_OBJECT +public: + tempoSyncKnob( int _knob_num, QWidget * _parent, + const QString & _name ); + virtual ~tempoSyncKnob(); + const QString & getSyncDescription( void ); void setSyncDescription( const QString & _new_description ); const QPixmap & getSyncIcon( void ); void setSyncIcon( const QPixmap & _new_pix ); + tempoSyncKnobModel * model( void ) + { + return( castModel() ); + } + + virtual void modelChanged( void ); + + signals: - void syncModeChanged( tempoSyncMode _new_mode ); - void scaleChanged( float _new_scale ); void syncDescriptionChanged( const QString & _new_description ); void syncIconChanged( void ); -public slots: - void setTempoSync( int _note_type ); - void setTempoSync( QAction * _item ); - - protected: virtual void mouseMoveEvent( QMouseEvent * _me ); virtual void contextMenuEvent( QContextMenuEvent * _me ); @@ -94,20 +135,18 @@ protected: protected slots: - void calculateTempoSyncTime( bpm_t _bpm ); - void updateCustom( void ); + void updateDescAndIcon( void ); void showCustom( void ); + private: - tempoSyncMode m_tempoSyncMode; - float m_scale; QPixmap m_tempoSyncIcon; QString m_tempoSyncDescription; - tempoSyncMode m_tempoLastSyncMode; QPointer m_custom; } ; + #endif diff --git a/src/core/effect.cpp b/src/core/effect.cpp index 12d67cb3d..ddbb7f2d8 100644 --- a/src/core/effect.cpp +++ b/src/core/effect.cpp @@ -46,7 +46,7 @@ effect::effect( const plugin::descriptor * _desc, m_enabledModel( TRUE, this ), m_wetDryModel( 1.0f, 0.0f, 1.0f, 0.01f, this ), m_gateModel( 0.0f, 0.0f, 1.0f, 0.01f, this ), - m_autoQuitModel( 1.0f, 1.0f, 8000.0f, 100.0f, this ) + m_autoQuitModel( 1.0f, 1.0f, 8000.0f, 100.0f, 1.0f, this ) { } diff --git a/src/core/envelope_and_lfo_parameters.cpp b/src/core/envelope_and_lfo_parameters.cpp index eaddca887..326b05420 100644 --- a/src/core/envelope_and_lfo_parameters.cpp +++ b/src/core/envelope_and_lfo_parameters.cpp @@ -66,7 +66,7 @@ envelopeAndLFOParameters::envelopeAndLFOParameters( m_rEnv( NULL ), m_lfoPredelayModel( 0.0, 0.0, 1.0, 0.001, this ), m_lfoAttackModel( 0.0, 0.0, 1.0, 0.001, this ), - m_lfoSpeedModel( 0.1, 0.01, 1.0, 0.0001, this ), + m_lfoSpeedModel( 0.1, 0.01, 1.0, 0.0001, 20000.0, this ), m_lfoAmountModel( 0.0, -1.0, 1.0, 0.005, this ), m_lfoWaveModel( SineWave, 0, NumLfoShapes, 1, this ), m_x100Model( FALSE, this ), diff --git a/src/core/instrument_functions.cpp b/src/core/instrument_functions.cpp index f2369766e..f0eaae2e4 100644 --- a/src/core/instrument_functions.cpp +++ b/src/core/instrument_functions.cpp @@ -289,7 +289,7 @@ arpeggiator::arpeggiator( instrumentTrack * _instrument_track ) : m_arpEnabledModel( FALSE ), m_arpModel( this ), m_arpRangeModel( 1.0f, 1.0f, 9.0f, 1.0f, this ), - m_arpTimeModel( 100.0f, 25.0f, 2000.0f, 1.0f, this ), + m_arpTimeModel( 100.0f, 25.0f, 2000.0f, 1.0f, 1.0, this ), m_arpGateModel( 100.0f, 1.0f, 200.0f, 1.0f, this ), m_arpDirectionModel( 0, 0, 0, intModel::defaultRelStep(), this ), m_arpModeModel( this ) diff --git a/src/widgets/envelope_and_lfo_view.cpp b/src/widgets/envelope_and_lfo_view.cpp index f5db2d292..751d57a59 100644 --- a/src/widgets/envelope_and_lfo_view.cpp +++ b/src/widgets/envelope_and_lfo_view.cpp @@ -208,7 +208,7 @@ envelopeAndLFOView::envelopeAndLFOView( QWidget * _parent ) : m_lfoSpeedKnob = new tempoSyncKnob( knobBright_26, this, - tr( "LFO-speed" ), 20000.0 ); + tr( "LFO-speed" ) ); m_lfoSpeedKnob->setLabel( tr( "SPD" ) ); m_lfoSpeedKnob->move( LFO_SPEED_KNOB_X, LFO_KNOB_Y ); m_lfoSpeedKnob->setHintText( tr( "LFO-speed:" ) + " ", "" ); diff --git a/src/widgets/tempo_sync_knob.cpp b/src/widgets/tempo_sync_knob.cpp index fe71b1472..b8d0ca9b5 100644 --- a/src/widgets/tempo_sync_knob.cpp +++ b/src/widgets/tempo_sync_knob.cpp @@ -40,21 +40,183 @@ #include "song.h" -tempoSyncKnob::tempoSyncKnob( int _knob_num, QWidget * _parent, - const QString & _name, - float _scale ) : - knob( _knob_num, _parent, _name ), - m_tempoSyncMode( NO_SYNC ), +tempoSyncKnobModel::tempoSyncKnobModel( const float _val, const float _min, + const float _max, const float _step, + const float _scale, ::model * _parent ) : + knobModel( _val, _min, _max, _step, _parent ), + m_tempoSyncMode( SyncNone ), + m_tempoLastSyncMode( SyncNone ), m_scale( _scale ), - m_tempoSyncIcon( embed::getIconPixmap( "tempo_sync" ) ), - m_tempoSyncDescription( tr( "Tempo Sync" ) ), - m_tempoLastSyncMode( NO_SYNC ) + m_custom( _parent, NULL ) { connect( engine::getSong(), SIGNAL( tempoChanged( bpm_t ) ), this, SLOT( calculateTempoSyncTime( bpm_t ) ) ); - m_custom = new meterDialog( engine::getMainWindow()->workspace(), - NULL ); - m_custom->hide(); +} + + + + +tempoSyncKnobModel::~tempoSyncKnobModel() +{ +} + + + + +void tempoSyncKnobModel::setTempoSync( QAction * _item ) +{ + setTempoSync( _item->data().toInt() ); +} + + + + +void tempoSyncKnobModel::setTempoSync( int _note_type ) +{ + setSyncMode( ( tempoSyncMode ) _note_type ); + engine::getSong()->setModified(); +} + + + + +void tempoSyncKnobModel::calculateTempoSyncTime( bpm_t _bpm ) +{ + float conversionFactor = 1.0; + + if( m_tempoSyncMode ) + { + switch( m_tempoSyncMode ) + { + case SyncCustom: + conversionFactor = + static_cast( m_custom.getDenominator() ) / + static_cast( m_custom.getNumerator() ); + break; + case SyncDoubleWholeNote: + conversionFactor = 0.125; + break; + case SyncWholeNote: + conversionFactor = 0.25; + break; + case SyncHalfNote: + conversionFactor = 0.5; + break; + case SyncQuarterNote: + conversionFactor = 1.0; + break; + case SyncEighthNote: + conversionFactor = 2.0; + break; + case SyncSixteenthNote: + conversionFactor = 4.0; + break; + case SyncThirtysecondNote: + conversionFactor = 8.0; + break; + default: ; + } + bool journalling = testAndSetJournalling( FALSE ); + setValue( 60000.0 / ( _bpm * conversionFactor * m_scale ) ); + setJournalling( journalling ); + } + + if( m_tempoSyncMode != m_tempoLastSyncMode ) + { + emit syncModeChanged( m_tempoSyncMode ); + m_tempoLastSyncMode = m_tempoSyncMode; + } +} + + + + +void tempoSyncKnobModel::saveSettings( QDomDocument & _doc, QDomElement & _this, + const QString & _name ) +{ + _this.setAttribute( "syncmode", ( int ) getSyncMode() ); + m_custom.saveSettings( _doc, _this, _name ); + knobModel::saveSettings( _doc, _this, _name ); +} + + + + +void tempoSyncKnobModel::loadSettings( const QDomElement & _this, + const QString & _name ) +{ + setSyncMode( ( tempoSyncMode ) _this.attribute( "syncmode" ).toInt() ); + m_custom.loadSettings( _this, _name ); + knobModel::loadSettings( _this, _name ); +} + + + + +tempoSyncKnobModel::tempoSyncMode tempoSyncKnobModel::getSyncMode( void ) +{ + return( m_tempoSyncMode ); +} + + + + +void tempoSyncKnobModel::setSyncMode( tempoSyncMode _new_mode ) +{ + if( m_tempoSyncMode != _new_mode ) + { + m_tempoSyncMode = _new_mode; + if( _new_mode == SyncCustom ) + { + connect( &m_custom, SIGNAL( numeratorChanged() ), + this, SLOT( updateCustom() ) ); + connect( &m_custom, SIGNAL( denominatorChanged() ), + this, SLOT( updateCustom() ) ); + } + } + calculateTempoSyncTime( engine::getSong()->getTempo() ); +} + + + + +float tempoSyncKnobModel::getScale( void ) +{ + return( m_scale ); +} + + + + +void tempoSyncKnobModel::setScale( float _new_scale ) +{ + m_scale = _new_scale; + calculateTempoSyncTime( engine::getSong()->getTempo() ); + emit scaleChanged( _new_scale ); +} + + + + +void tempoSyncKnobModel::updateCustom( void ) +{ + setSyncMode( SyncCustom ); +} + + + + + + +tempoSyncKnob::tempoSyncKnob( int _knob_num, QWidget * _parent, + const QString & _name ) : + knob( _knob_num, _parent, _name ), + m_tempoSyncIcon( embed::getIconPixmap( "tempo_sync" ) ), + m_tempoSyncDescription( tr( "Tempo Sync" ) ) +{ + m_custom = new meterDialog( engine::getMainWindow()->workspace() ); + engine::getMainWindow()->workspace()->addSubWindow( m_custom ); + m_custom->parentWidget()->hide(); m_custom->setWindowTitle( "Meter" ); } @@ -65,13 +227,25 @@ tempoSyncKnob::~tempoSyncKnob() { if( m_custom ) { - m_custom->deleteLater(); +// m_custom->deleteLater(); + delete m_custom->parentWidget(); } } +void tempoSyncKnob::modelChanged( void ) +{ + m_custom->setModel( &model()->m_custom ); + connect( model(), SIGNAL( syncModeChanged( tempoSyncMode ) ), + this, SLOT( updateDescAndIcon() ) ); + updateDescAndIcon(); +} + + + + void tempoSyncKnob::contextMenuEvent( QContextMenuEvent * ) { captionMenu contextMenu( accessibleName() ); @@ -94,7 +268,7 @@ void tempoSyncKnob::contextMenuEvent( QContextMenuEvent * ) contextMenu.addSeparator(); float limit = 60000.0f / ( engine::getSong()->getTempo() * - m_scale ); + model()->m_scale ); QMenu * syncMenu = contextMenu.addMenu( m_tempoSyncIcon, m_tempoSyncDescription ); @@ -102,52 +276,53 @@ void tempoSyncKnob::contextMenuEvent( QContextMenuEvent * ) { connect( syncMenu, SIGNAL( triggered( QAction * ) ), - this, SLOT( setTempoSync( QAction * ) ) ); + model(), SLOT( setTempoSync( QAction * ) ) ); syncMenu->addAction( embed::getIconPixmap( "note_none" ), - tr( "No Sync" ) )->setData( (int) NO_SYNC ); + tr( "No Sync" ) )->setData( (int) tempoSyncKnobModel::SyncNone ); if( limit / 0.125f <= model()->maxValue() ) { syncMenu->addAction( embed::getIconPixmap( "note_double_whole" ), tr( "Eight beats" ) )->setData( - (int) DOUBLE_WHOLE_NOTE ); + (int) tempoSyncKnobModel::SyncDoubleWholeNote ); } if( limit / 0.25f <= model()->maxValue() ) { syncMenu->addAction( embed::getIconPixmap( "note_whole" ), tr( "Whole note" ) )->setData( - (int) WHOLE_NOTE ); + (int) tempoSyncKnobModel::SyncWholeNote ); } if( limit / 0.5f <= model()->maxValue() ) { syncMenu->addAction( embed::getIconPixmap( "note_half" ), tr( "Half note" ) )->setData( - (int) HALF_NOTE ); + (int) tempoSyncKnobModel::SyncHalfNote ); } if( limit <= model()->maxValue() ) { syncMenu->addAction( embed::getIconPixmap( "note_quarter" ), tr( "Quarter note" ) )->setData( - (int) QUARTER_NOTE ); + (int) tempoSyncKnobModel::SyncQuarterNote ); } if( limit / 2.0f <= model()->maxValue() ) { syncMenu->addAction( embed::getIconPixmap( "note_eighth" ), tr( "8th note" ) )->setData( - (int) EIGHTH_NOTE ); + (int) tempoSyncKnobModel::SyncEighthNote ); } if( limit / 4.0f <= model()->maxValue() ) { syncMenu->addAction( embed::getIconPixmap( "note_sixteenth" ), tr( "16th note" ) )->setData( - (int) SIXTEENTH_NOTE ); + (int) tempoSyncKnobModel::SyncSixteenthNote ); } syncMenu->addAction( embed::getIconPixmap( "note_thirtysecond" ), tr( "32nd note" ) )->setData( - (int) THIRTYSECOND_NOTE ); + (int) tempoSyncKnobModel::SyncThirtysecondNote ); syncMenu->addAction( embed::getIconPixmap( "dont_know" ), tr( "Custom..." ), this, SLOT( showCustom( void ) ) - )->setData( (int) CUSTOM ); + )->setData( + (int) tempoSyncKnobModel::SyncCustom ); contextMenu.addSeparator(); } @@ -172,9 +347,8 @@ void tempoSyncKnob::contextMenuEvent( QContextMenuEvent * ) void tempoSyncKnob::mouseMoveEvent( QMouseEvent * _me ) { - m_tempoSyncMode = NO_SYNC; - calculateTempoSyncTime( engine::getSong()->getTempo() ); knob::mouseMoveEvent( _me ); + model()->setSyncMode( tempoSyncKnobModel::SyncNone ); } @@ -183,222 +357,112 @@ void tempoSyncKnob::mouseMoveEvent( QMouseEvent * _me ) void tempoSyncKnob::wheelEvent( QWheelEvent * _we ) { knob::wheelEvent( _we ); - m_tempoSyncMode = NO_SYNC; - calculateTempoSyncTime( engine::getSong()->getTempo() ); + model()->setSyncMode( tempoSyncKnobModel::SyncNone ); } -void tempoSyncKnob::setTempoSync( QAction * _item ) +void tempoSyncKnob::updateDescAndIcon( void ) { - setTempoSync( _item->data().toInt() ); -} - - - - -void tempoSyncKnob::setTempoSync( int _note_type ) -{ - setSyncMode( ( tempoSyncMode ) _note_type ); - engine::getSong()->setModified(); -} - - - - -void tempoSyncKnob::calculateTempoSyncTime( bpm_t _bpm ) -{ - float conversionFactor = 1.0; - - if( m_tempoSyncMode ) + if( model()->m_tempoSyncMode ) { - switch( m_tempoSyncMode ) + switch( model()->m_tempoSyncMode ) { - case CUSTOM: + case tempoSyncKnobModel::SyncCustom: m_tempoSyncDescription = tr( "Custom " ) + "(" + - QString::number( m_custom->getNumerator() ) + + QString::number( model()->m_custom.getNumerator() ) + "/" + - QString::number( m_custom->getDenominator() ) + + QString::number( model()->m_custom.getDenominator() ) + ")"; - conversionFactor = - static_cast( m_custom->getDenominator() ) / - static_cast( m_custom->getNumerator() ); break; - case DOUBLE_WHOLE_NOTE: + case tempoSyncKnobModel::SyncDoubleWholeNote: m_tempoSyncDescription = tr( "Synced to Eight Beats" ); - conversionFactor = 0.125; break; - case WHOLE_NOTE: + case tempoSyncKnobModel::SyncWholeNote: m_tempoSyncDescription = tr( "Synced to Whole Note" ); - conversionFactor = 0.25; break; - case HALF_NOTE: + case tempoSyncKnobModel::SyncHalfNote: m_tempoSyncDescription = tr( "Synced to Half Note" ); - conversionFactor = 0.5; break; - case QUARTER_NOTE: + case tempoSyncKnobModel::SyncQuarterNote: m_tempoSyncDescription = tr( "Synced to Quarter Note" ); - conversionFactor = 1.0; break; - case EIGHTH_NOTE: + case tempoSyncKnobModel::SyncEighthNote: m_tempoSyncDescription = tr( "Synced to 8th Note" ); - conversionFactor = 2.0; break; - case SIXTEENTH_NOTE: + case tempoSyncKnobModel::SyncSixteenthNote: m_tempoSyncDescription = tr( "Synced to 16th Note" ); - conversionFactor = 4.0; break; - case THIRTYSECOND_NOTE: + case tempoSyncKnobModel::SyncThirtysecondNote: m_tempoSyncDescription = tr( "Synced to 32nd Note" ); - conversionFactor = 8.0; break; default: ; } - bool journalling = model()->testAndSetJournalling( FALSE ); - model()->setValue( 60000.0 / - ( _bpm * conversionFactor * m_scale ) ); - model()->setJournalling( journalling ); } else { m_tempoSyncDescription = tr( "Tempo Sync" ); } - - if( m_tempoSyncMode != m_tempoLastSyncMode ) + if( model()->m_tempoSyncMode != tempoSyncKnobModel::SyncCustom ) { - switch( m_tempoSyncMode ) - { - case NO_SYNC: - m_tempoSyncIcon = embed::getIconPixmap( - "tempo_sync" ); - break; - case CUSTOM: - m_tempoSyncIcon = embed::getIconPixmap( - "dont_know" ); - break; - case DOUBLE_WHOLE_NOTE: - m_tempoSyncIcon = embed::getIconPixmap( - "note_double_whole" ); - break; - case WHOLE_NOTE: - m_tempoSyncIcon = embed::getIconPixmap( - "note_whole" ); - break; - case HALF_NOTE: - m_tempoSyncIcon = embed::getIconPixmap( - "note_half" ); - break; - case QUARTER_NOTE: - m_tempoSyncIcon = embed::getIconPixmap( - "note_quarter" ); - break; - case EIGHTH_NOTE: - m_tempoSyncIcon = embed::getIconPixmap( - "note_eighth" ); - break; - case SIXTEENTH_NOTE: - m_tempoSyncIcon = embed::getIconPixmap( - "note_sixteenth" ); - break; - case THIRTYSECOND_NOTE: - m_tempoSyncIcon = embed::getIconPixmap( - "note_thirtysecond" ); - break; - default: - printf( "tempoSyncKnob::calculateTempoSyncTime" - ": invalid tempoSyncMode" ); - break; - } - - emit syncModeChanged( m_tempoSyncMode ); - emit syncDescriptionChanged( m_tempoSyncDescription ); - emit syncIconChanged(); - - m_tempoLastSyncMode = m_tempoSyncMode; + m_custom->parentWidget()->hide(); } -} - - - -void tempoSyncKnob::saveSettings( QDomDocument & _doc, QDomElement & _this, - const QString & _name ) -{ - _this.setAttribute( "syncmode", ( int ) getSyncMode() ); - model()->saveSettings( _doc, _this, _name ); - m_custom->saveSettings( _doc, _this, _name ); -} - - - - -void tempoSyncKnob::loadSettings( const QDomElement & _this, - const QString & _name ) -{ - setSyncMode( ( tempoSyncMode ) _this.attribute( - "syncmode" ).toInt() ); - model()->loadSettings( _this, _name ); - m_custom->loadSettings( _this, _name ); -} - - - - -tempoSyncKnob::tempoSyncMode tempoSyncKnob::getSyncMode( void ) -{ - return( m_tempoSyncMode ); -} - - - - -void tempoSyncKnob::setSyncMode( tempoSyncMode _new_mode ) -{ - if( m_tempoSyncMode != _new_mode ) + switch( model()->m_tempoSyncMode ) { - m_tempoSyncMode = _new_mode; - if( _new_mode == CUSTOM ) - { - connect( m_custom, SIGNAL( numeratorChanged() ), - this, SLOT( updateCustom() ) ); - connect( m_custom, SIGNAL( denominatorChanged() ), - this, SLOT( updateCustom() ) ); - } - else - { - m_custom->hide(); - disconnect( m_custom, 0, - this, SLOT( updateCustom() ) ); - } + case tempoSyncKnobModel::SyncNone: + m_tempoSyncIcon = embed::getIconPixmap( + "tempo_sync" ); + break; + case tempoSyncKnobModel::SyncCustom: + m_tempoSyncIcon = embed::getIconPixmap( + "dont_know" ); + break; + case tempoSyncKnobModel::SyncDoubleWholeNote: + m_tempoSyncIcon = embed::getIconPixmap( + "note_double_whole" ); + break; + case tempoSyncKnobModel::SyncWholeNote: + m_tempoSyncIcon = embed::getIconPixmap( + "note_whole" ); + break; + case tempoSyncKnobModel::SyncHalfNote: + m_tempoSyncIcon = embed::getIconPixmap( + "note_half" ); + break; + case tempoSyncKnobModel::SyncQuarterNote: + m_tempoSyncIcon = embed::getIconPixmap( + "note_quarter" ); + break; + case tempoSyncKnobModel::SyncEighthNote: + m_tempoSyncIcon = embed::getIconPixmap( + "note_eighth" ); + break; + case tempoSyncKnobModel::SyncSixteenthNote: + m_tempoSyncIcon = embed::getIconPixmap( + "note_sixteenth" ); + break; + case tempoSyncKnobModel::SyncThirtysecondNote: + m_tempoSyncIcon = embed::getIconPixmap( + "note_thirtysecond" ); + break; + default: + printf( "tempoSyncKnob::calculateTempoSyncTime" + ": invalid tempoSyncMode" ); + break; } - calculateTempoSyncTime( engine::getSong()->getTempo() ); -} - - - -float tempoSyncKnob::getScale( void ) -{ - return( m_scale ); -} - - - - -void tempoSyncKnob::setScale( float _new_scale ) -{ - m_scale = _new_scale; - calculateTempoSyncTime( engine::getSong()->getTempo() ); - emit scaleChanged( _new_scale ); + emit syncDescriptionChanged( m_tempoSyncDescription ); + emit syncIconChanged(); } @@ -438,18 +502,10 @@ void tempoSyncKnob::setSyncIcon( const QPixmap & _new_icon ) -void tempoSyncKnob::updateCustom( void ) -{ - setSyncMode( CUSTOM ); -} - - - - void tempoSyncKnob::showCustom( void ) { - m_custom->show(); - setTempoSync( CUSTOM ); + m_custom->parentWidget()->show(); + model()->setTempoSync( tempoSyncKnobModel::SyncCustom ); }