From c2dbbd7fe0777e33c36b512ff6807fd2e28d8d18 Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Tue, 1 Apr 2008 22:31:10 +0000 Subject: [PATCH] added dummyTrackContainer with dummyInstrumentTrack in order to have a default-model for cached inactive instrument-track-windows - fixes regular crashes git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@863 0778d3d1-df1d-0410-868b-ea421aaaa00d --- ChangeLog | 34 +++++++++++++++++++++++++ include/engine.h | 5 ++++ include/instrument_track.h | 3 +++ include/preset_preview_play_handle.h | 2 +- src/core/engine.cpp | 16 +++++++++--- src/core/preset_preview_play_handle.cpp | 2 +- src/core/track_container.cpp | 22 +++++++++++++--- src/tracks/instrument_track.cpp | 17 ++++++++++++- 8 files changed, 90 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 34796adb86..f9bdc8f257 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,39 @@ 2008-04-01 Tobias Doerffel + * plugins/ladspa_effect/Makefile.am: + * plugins/patman/Makefile.am: + * plugins/lb302/Makefile.am: + * plugins/organic/Makefile.am: + * plugins/bass_booster/Makefile.am: + * plugins/bit_invader/Makefile.am: + * plugins/vst_effect/Makefile.am: + * plugins/vibed/Makefile.am: + * plugins/triple_oscillator/Makefile.am: + * plugins/live_tool/Makefile.am: + * plugins/live_tool/live_tool.cpp: + * plugins/singerbot/Makefile.am: + * plugins/audio_file_processor/Makefile.am: + * plugins/stk/mallets/Makefile.am: + * plugins/stereo_enhancer/Makefile.am: + * plugins/vestige/Makefile.am: + * plugins/sf2_player/Makefile.am: + * plugins/ladspa_browser/Makefile.am: + * plugins/kicker/Makefile.am: + * plugins/polyb302/Makefile.am: + * plugins/flp_import/flp_import.cpp: + corrected paths / includes + + * include/engine.h: + * include/instrument_track.h: + * include/preset_preview_play_handle.h: + * src/tracks/instrument_track.cpp: + * src/core/preset_preview_play_handle.cpp: + * src/core/track_container.cpp: + * src/core/engine.cpp: + added dummyTrackContainer with dummyInstrumentTrack in order to have a + default-model for cached inactive instrument-track-windows - fixes + regular crashes + * include/engine.h: * include/bb_track_container.h: * include/track_container_view.h: diff --git a/include/engine.h b/include/engine.h index a223f48e45..e8c89de86d 100644 --- a/include/engine.h +++ b/include/engine.h @@ -126,6 +126,11 @@ public: return( s_ladspaManager ); } + static dummyTrackContainer * getDummyTrackContainer( void ) + { + return( s_dummyTC ); + } + static float framesPerTact64th( void ) { return( s_framesPerTact64th ); diff --git a/include/instrument_track.h b/include/instrument_track.h index 49f710c32d..0374ada808 100644 --- a/include/instrument_track.h +++ b/include/instrument_track.h @@ -223,6 +223,9 @@ public: void freeInstrumentTrackWindow( void ); + static void cleanupWindowPool( void ); + + private slots: void toggledInstrumentTrackButton( bool _on ); void activityIndicatorPressed( void ); diff --git a/include/preset_preview_play_handle.h b/include/preset_preview_play_handle.h index 89ac73cb61..a922c2867a 100644 --- a/include/preset_preview_play_handle.h +++ b/include/preset_preview_play_handle.h @@ -46,7 +46,7 @@ public: virtual bool isFromTrack( const track * _track ) const; static void init( void ); - static void cleanUp( void ); + static void cleanup( void ); static constNotePlayHandleVector nphsOfInstrumentTrack( const instrumentTrack * _ct ); diff --git a/src/core/engine.cpp b/src/core/engine.cpp index b8bab9b50f..05cff0eebd 100644 --- a/src/core/engine.cpp +++ b/src/core/engine.cpp @@ -58,6 +58,7 @@ pianoRoll * engine::s_pianoRoll = NULL; projectNotes * engine::s_projectNotes = NULL; projectJournal * engine::s_projectJournal = NULL; ladspa2LMMS * engine::s_ladspaManager = NULL; +dummyTrackContainer * engine::s_dummyTC = NULL; QMap engine::s_sampleExtensions; @@ -97,6 +98,7 @@ void engine::init( const bool _has_gui ) } presetPreviewPlayHandle::init(); + s_dummyTC = new dummyTrackContainer; s_mixer->startProcessing(); } @@ -121,15 +123,21 @@ void engine::destroy( void ) delete s_fxMixerView; s_fxMixerView = NULL; - delete s_fxMixer; - s_fxMixer = NULL; + + presetPreviewPlayHandle::cleanup(); + instrumentTrackView::cleanupWindowPool(); + + delete s_song; + delete s_bbTrackContainer; + delete s_dummyTC; delete s_ladspaManager; - presetPreviewPlayHandle::cleanUp(); - delete s_mixer; s_mixer = NULL; + delete s_fxMixer; + s_fxMixer = NULL; + //delete configManager::inst(); delete s_projectJournal; s_projectJournal = NULL; diff --git a/src/core/preset_preview_play_handle.cpp b/src/core/preset_preview_play_handle.cpp index b226e89bb3..fd49786b21 100644 --- a/src/core/preset_preview_play_handle.cpp +++ b/src/core/preset_preview_play_handle.cpp @@ -196,7 +196,7 @@ void presetPreviewPlayHandle::init( void ) -void presetPreviewPlayHandle::cleanUp( void ) +void presetPreviewPlayHandle::cleanup( void ) { delete s_previewTC; s_previewTC = NULL; diff --git a/src/core/track_container.cpp b/src/core/track_container.cpp index 04c44f31ac..77d0255781 100644 --- a/src/core/track_container.cpp +++ b/src/core/track_container.cpp @@ -24,13 +24,11 @@ */ -#include "track_container.h" - - #include #include - +#include "track_container.h" +#include "instrument_track.h" #include "engine.h" #include "song.h" @@ -203,5 +201,21 @@ void trackContainer::setMutedOfAllTracks( bool _muted ) + + +dummyTrackContainer::dummyTrackContainer( void ) : + trackContainer(), + m_dummyInstrumentTrack( NULL ) +{ + setJournalling( FALSE ); + m_dummyInstrumentTrack = dynamic_cast( + track::create( track::InstrumentTrack, + this ) ); + m_dummyInstrumentTrack->setJournalling( FALSE ); +} + + + + #include "track_container.moc" diff --git a/src/tracks/instrument_track.cpp b/src/tracks/instrument_track.cpp index a69dfbca22..7e69c24a0c 100644 --- a/src/tracks/instrument_track.cpp +++ b/src/tracks/instrument_track.cpp @@ -921,6 +921,10 @@ void instrumentTrackView::freeInstrumentTrackWindow( void ) { if( s_windows.count() < INSTRUMENT_WINDOW_CACHE_SIZE ) { + m_window->setModel( + engine::getDummyTrackContainer()-> + dummyInstrumentTrack() ); + m_window->parentWidget()->hide(); s_windows.enqueue( m_window ); } else @@ -935,6 +939,17 @@ void instrumentTrackView::freeInstrumentTrackWindow( void ) +void instrumentTrackView::cleanupWindowPool( void ) +{ + while( s_windows.count() ) + { + delete s_windows.dequeue(); + } +} + + + + instrumentTrackWindow * instrumentTrackView::getInstrumentTrackWindow( void ) { if( m_window != NULL ) @@ -1179,7 +1194,7 @@ instrumentTrackWindow::~instrumentTrackWindow() void instrumentTrackWindow::modelChanged( void ) { - m_track = m_itv->model(); + m_track = castModel(); m_instrumentNameLE->setText( m_track->name() );