From f2d2420fc7a2a35cd020ebb2f8e7b22d81b7dd55 Mon Sep 17 00:00:00 2001 From: Paul Giblock Date: Mon, 26 May 2008 08:12:35 +0000 Subject: [PATCH] More controller-connection stuff git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@1024 0778d3d1-df1d-0410-868b-ea421aaaa00d --- include/controller_connection.h | 4 --- src/core/controller.cpp | 16 ++++++++++-- src/core/controller_connection.cpp | 33 ++++++++++++------------ src/gui/controller_connection_dialog.cpp | 2 -- 4 files changed, 31 insertions(+), 24 deletions(-) diff --git a/include/controller_connection.h b/include/controller_connection.h index 50bb5853c..8afbcf381 100644 --- a/include/controller_connection.h +++ b/include/controller_connection.h @@ -84,10 +84,6 @@ protected: static controllerConnectionVector s_connections; - static controller * dummyController(); - static controller * s_dummyController; - - signals: // The value changed while the mixer isn't running (i.e: MIDI CC) void valueChanged( void ); diff --git a/src/core/controller.cpp b/src/core/controller.cpp index ee0e46c85..dbe6099ee 100644 --- a/src/core/controller.cpp +++ b/src/core/controller.cpp @@ -130,12 +130,24 @@ void controller::resetFrameCounter( void ) controller * controller::create( ControllerTypes _ct, model * _parent ) { + static controller * dummy = NULL; controller * c = NULL; switch( _ct ) { - case LfoController: c = new lfoController( _parent ); break; - default: break; + case DummyController: + if( dummy ) + c = dummy; + else + c = new controller( DummyController, NULL ); + break; + + case LfoController: + c = new lfoController( _parent ); + break; + + default: + break; } return( c ); diff --git a/src/core/controller_connection.cpp b/src/core/controller_connection.cpp index aebc96ef3..e983703f5 100644 --- a/src/core/controller_connection.cpp +++ b/src/core/controller_connection.cpp @@ -37,21 +37,27 @@ controllerConnectionVector controllerConnection::s_connections; -controller * controllerConnection::s_dummyController = NULL; controllerConnection::controllerConnection( controller * _controller ) : m_controllerId( -1 ) { - setController( _controller ); + if( _controller != NULL ) + { + setController( _controller ); + } + else + { + m_controller = controller::create( controller::DummyController, NULL ); + } s_connections.append( this ); } controllerConnection::controllerConnection( int _controllerId ) : - m_controller( dummyController() ), + m_controller( controller::create( controller::DummyController, NULL ) ), m_controllerId( _controllerId ) { s_connections.append( this ); @@ -85,6 +91,13 @@ void controllerConnection::setController( controller * _controller ) +/* + * A connection may not be finalized. This means, the connection should exist, + * but the controller does not yet exist. This happens when loading. Even + * loading connections last won't help, since there can be connections BETWEEN + * controllers. So, we remember the controller-ID and use a dummyController + * instead. Once the song is loaded, finalizeConnections() connects to the proper controllers + */ void controllerConnection::finalizeConnections( void ) { for( int i = 0; i < s_connections.size(); ++i ) @@ -114,30 +127,18 @@ void controllerConnection::loadSettings( const QDomElement & _this ) if( _this.attribute( "id" ).toInt() >= 0 ) { m_controllerId = _this.attribute( "id" ).toInt(); - m_controller = dummyController(); } else { qWarning( "controller index invalid\n" ); m_controllerId = -1; - m_controller = dummyController(); } + m_controller = controller::create( controller::DummyController, NULL ); } -controller * controllerConnection::dummyController() -{ - if( s_dummyController == NULL ) - { - s_dummyController = new controller( controller::DummyController, NULL ); - } - return s_dummyController; -} - - - QString controllerConnection::nodeName( void ) const { return( "connection" ); diff --git a/src/gui/controller_connection_dialog.cpp b/src/gui/controller_connection_dialog.cpp index ba903cdc2..f16c0f4b3 100644 --- a/src/gui/controller_connection_dialog.cpp +++ b/src/gui/controller_connection_dialog.cpp @@ -100,8 +100,6 @@ controllerConnectionDialog::controllerConnectionDialog( QWidget * _parent btn_layout->addStretch(); btn_layout->addSpacing( 10 ); btn_layout->addWidget( select_btn ); -/* btn_layout->addSpacing( 10 ); - btn_layout->addWidget( ports_btn );*/ btn_layout->addSpacing( 10 ); btn_layout->addWidget( cancel_btn ); btn_layout->addSpacing( 10 );