diff --git a/ChangeLog b/ChangeLog index 14d775fc3..05ba00e71 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,28 @@ +2008-04-04 Paul Giblock + + * include/knob.h: + * src/gui/widgets/knob.cpp: + Add friendlyUpdates slot and override doConnections + + * include/song_editor.h: + Add button for managing controller to songEditor + + * include/mv_base.h: + * include/core/mv_base.cpp: + Make doConnections virtual + + * include/combobox.h: + Fixed tabs + + * src/core/mixer.cpp: + Couldn't easily convert from void* to int on a 64bit machine. Instead, we + now use a union. We should change any enqueueing code to use the union as + well + + * data/themes/add_controller.png: + * data/themes/controller.png: + Some new images for controllers + 2008-04-04 Tobias Doerffel * src/core/mixer.cpp: diff --git a/data/themes/default/add_controller.png b/data/themes/default/add_controller.png new file mode 100644 index 000000000..7b7ec506d Binary files /dev/null and b/data/themes/default/add_controller.png differ diff --git a/data/themes/default/controller.png b/data/themes/default/controller.png new file mode 100644 index 000000000..40b890d8d Binary files /dev/null and b/data/themes/default/controller.png differ diff --git a/include/combobox.h b/include/combobox.h index 1c68b4aa5..1e124d65b 100644 --- a/include/combobox.h +++ b/include/combobox.h @@ -97,25 +97,25 @@ public: comboBox( QWidget * _parent, const QString & _name = QString::null ); virtual ~comboBox(); - comboBoxModel * model( void ) - { - return( castModel() ); - } + comboBoxModel * model( void ) + { + return( castModel() ); + } - const comboBoxModel * model( void ) const - { - return( castModel() ); - } + const comboBoxModel * model( void ) const + { + return( castModel() ); + } - virtual void modelChanged( void ) - { - if( model() != NULL ) - { - connect( model(), SIGNAL( itemPixmapRemoved( QPixmap * ) ), - this, SLOT( deletePixmap( QPixmap * ) ) ); - } - } + virtual void modelChanged( void ) + { + if( model() != NULL ) + { + QWidget::connect( model(), SIGNAL( itemPixmapRemoved( QPixmap * ) ), + this, SLOT( deletePixmap( QPixmap * ) ) ); + } + } protected: diff --git a/include/knob.h b/include/knob.h index af51263ab..0b279f449 100644 --- a/include/knob.h +++ b/include/knob.h @@ -70,6 +70,7 @@ public slots: void connectToMidiDevice( void ); void connectToController( void ); void displayHelp( void ); + void friendlyUpdate( void ); signals: @@ -114,6 +115,10 @@ private: model()->step() ) ); } + virtual void doConnections( void ); + + + void valueChange( void ); void buttonReleased( void ); diff --git a/include/mv_base.h b/include/mv_base.h index 58a620149..28e9db411 100644 --- a/include/mv_base.h +++ b/include/mv_base.h @@ -71,6 +71,7 @@ signals: class modelView { + public: modelView( model * _model ); virtual ~modelView() @@ -98,7 +99,7 @@ protected: { } - void doConnections( void ); + virtual void doConnections( void ); private: diff --git a/include/song_editor.h b/include/song_editor.h index 8eedf3a4d..309b30daf 100644 --- a/include/song_editor.h +++ b/include/song_editor.h @@ -96,6 +96,7 @@ private: toolButton * m_addBBTrackButton; toolButton * m_addSampleTrackButton; + toolButton * m_addControllerButton; toolButton * m_drawModeButton; toolButton * m_editModeButton; diff --git a/src/core/mixer.cpp b/src/core/mixer.cpp index 84ed579e8..8c0ce5da6 100644 --- a/src/core/mixer.cpp +++ b/src/core/mixer.cpp @@ -95,7 +95,15 @@ public: { } JobTypes type; - void * job; + + union + { + playHandle * playHandleJob; + audioPort * audioPortJob; + int effectChannelJob; + void * job; + }; + volatile bool done; } ; @@ -159,11 +167,11 @@ private: switch( it->type ) { case PlayHandle: - ( (playHandle *) it->job )->play(); + it->playHandleJob->play(); break; case AudioPortEffects: { - audioPort * a = (audioPort *) it->job; + audioPort * a = it->audioPortJob; bool me = a->processEffects(); if( a->m_bufferUsage != audioPort::NoUsage || me ) { @@ -174,8 +182,8 @@ private: } break; case EffectChannel: - engine::getFxMixer()->processChannel( - (fx_ch_t) (int) it->job ); + engine::getFxMixer()->processChannel( + (fx_ch_t) it->effectChannelJob ); default: break; } diff --git a/src/core/mv_base.cpp b/src/core/mv_base.cpp index 10026acb9..a4451741a 100644 --- a/src/core/mv_base.cpp +++ b/src/core/mv_base.cpp @@ -72,14 +72,14 @@ void modelView::doConnections( void ) { QWidget * w = dynamic_cast( this ); QObject::connect( m_model, SIGNAL( dataChanged() ), - w, SLOT( update() ), Qt::QueuedConnection ); + w, SLOT( update() ), + Qt::QueuedConnection ); + QObject::connect( m_model, SIGNAL( propertiesChanged() ), w, SLOT( update() ), Qt::QueuedConnection ); } } - - #include "mv_base.moc" diff --git a/src/gui/song_editor.cpp b/src/gui/song_editor.cpp index 5ac71683b..78e366820 100644 --- a/src/gui/song_editor.cpp +++ b/src/gui/song_editor.cpp @@ -257,6 +257,12 @@ songEditor::songEditor( song * _song ) : m_s, SLOT( addSampleTrack() ), m_toolBar ); + m_addControllerButton = new toolButton( embed::getIconPixmap( + "add_controller" ), + tr( "Add controller" ), + m_s, SLOT( addSampleTrack() ), + m_toolBar ); + m_drawModeButton = new toolButton( embed::getIconPixmap( "edit_draw" ), tr( "Draw mode" ), @@ -322,6 +328,7 @@ songEditor::songEditor( song * _song ) : tb_layout->addSpacing( 10 ); tb_layout->addWidget( m_addBBTrackButton ); tb_layout->addWidget( m_addSampleTrackButton ); + tb_layout->addWidget( m_addControllerButton ); tb_layout->addSpacing( 10 ); tb_layout->addWidget( m_drawModeButton ); tb_layout->addWidget( m_editModeButton ); diff --git a/src/gui/widgets/knob.cpp b/src/gui/widgets/knob.cpp index dcf5d113d..229e926e5 100644 --- a/src/gui/widgets/knob.cpp +++ b/src/gui/widgets/knob.cpp @@ -287,8 +287,9 @@ void knob::contextMenuEvent( QContextMenuEvent * ) SLOT( openInAutomationEditor() ) ); contextMenu.addSeparator(); } - contextMenu.addAction( tr( "Connect to controller..." ), this, - SLOT( connectToController() ) ); + contextMenu.addAction( embed::getIconPixmap( "controller" ), + tr( "Connect to controller..." ), this, + SLOT( connectToController() ) ); contextMenu.addSeparator(); contextMenu.addAction( embed::getIconPixmap( "help" ), tr( "&Help" ), this, SLOT( displayHelp() ) ); @@ -586,6 +587,30 @@ void knob::connectToController( void ) } +void knob::friendlyUpdate( void ) +{ + if( model()->getController() == NULL || controller::runningFrames() % (256*4) == 0 ) + { + update(); + } +} + + +void knob::doConnections( void ) +{ + if( model() != NULL ) + { + QObject::connect( model(), SIGNAL( dataChanged() ), + this, SLOT( friendlyUpdate() ), + Qt::QueuedConnection ); + + QObject::connect( model(), SIGNAL( propertiesChanged() ), + this, SLOT( update() ), Qt::QueuedConnection ); + } +} + + + void knob::displayHelp( void ) { QWhatsThis::showText( mapToGlobal( rect().bottomRight() ),