From 4541e1abd77e9311e7d90e6b8caab08d6d2b3eca Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Wed, 30 Jul 2008 22:56:09 +0000 Subject: [PATCH] added simple-serializing mode which makes tracks not save their TCOs - used for improved save and restore of presets (closes #2025902) git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@1417 0778d3d1-df1d-0410-868b-ea421aaaa00d --- ChangeLog | 63 +++++++++++++++++++++++++++++++++ include/track.h | 5 +++ src/core/track.cpp | 28 ++++++++++++++- src/gui/file_browser.cpp | 22 +++++------- src/tracks/instrument_track.cpp | 5 ++- 5 files changed, 106 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8fd683ea0..0b6c6e5e0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,68 @@ 2008-07-30 Tobias Doerffel + * include/track.h: + * src/core/track.cpp: + * src/gui/file_browser.cpp: + * src/tracks/instrument_track.cpp: + added simple-serializing mode which makes tracks not save their TCOs - + used for improved save and restore of presets (closes #2025902) + + * src/gui/widgets/effect_view.cpp: + do not cast model to effect for only calling displayName() + + * src/gui/widgets/effect_rack_view.cpp: + - initialize bool-map with correct size - fixes crashes under various + circumstances + - do not cast model of effectView as the effect might not exist + anymore + + * data/presets/TripleOscillator/Steel.cs.xml: + * data/presets/TripleOscillator/SawLead.cs.xml: + * data/presets/TripleOscillator/Bass.cs.xml: + * data/presets/TripleOscillator/E-Organ.cs.xml: + * data/presets/TripleOscillator/FM-Wood-Arp.cs.xml: + * data/presets/TripleOscillator/Harmonium.cs.xml: + * data/presets/TripleOscillator/NostalgicFeelings.cs.xml: + * data/presets/TripleOscillator/Moog.cs.xml: + * data/presets/TripleOscillator/SawLead2.cs.xml: + * data/presets/TripleOscillator/HardClipping.cs.xml: + * data/presets/TripleOscillator/RaveBass.cs.xml: + * data/presets/TripleOscillator/EvilHardcore.cs.xml: + * data/presets/TripleOscillator/Distorted-FM-Bass_2.cs.xml: + * data/presets/TripleOscillator/ShortBass.cs.xml: + * data/presets/TripleOscillator/Crystallo.cs.xml: + * data/presets/TripleOscillator/Fear.cs.xml: + * data/presets/TripleOscillator/HorrorBass.cs.xml: + * data/presets/TripleOscillator/Default.cs.xml: + * data/presets/TripleOscillator/SoftStrings.cs.xml: + * data/presets/TripleOscillator/RaveBass_2.cs.xml: + * data/presets/TripleOscillator/Warmth.cs.xml: + * data/presets/TripleOscillator/Beam.cs.xml: + * data/presets/TripleOscillator/SquareLead2.cs.xml: + * data/presets/TripleOscillator/Weird.cs.xml: + * data/presets/TripleOscillator/LFO-party.cs.xml: + * data/presets/TripleOscillator/Nice.cs.xml: + * data/presets/TripleOscillator/ChurchOrgan_2.cs.xml: + * data/presets/TripleOscillator/SoftBass.cs.xml: + * data/presets/TripleOscillator/Stranger.cs.xml: + * data/presets/TripleOscillator/TB303-Arpeggio.cs.xml: + * data/presets/TripleOscillator/E-Piano.cs.xml: + * data/presets/TripleOscillator/PluckArpeggio.cs.xml: + * data/presets/TripleOscillator/WarmStack.cs.xml: + * data/presets/TripleOscillator/Square.cs.xml: + * data/presets/TripleOscillator/MyComputer.cs.xml: + * data/presets/TripleOscillator/Simple-Acid-Bass.cs.xml: + * data/presets/TripleOscillator/MoogArpeggio.cs.xml: + * data/presets/TripleOscillator/Jupiter.cs.xml: + * data/presets/TripleOscillator/AnalogTimes2.cs.xml: + * data/presets/TripleOscillator/SquareLead.cs.xml: + * data/presets/TripleOscillator/TB303.cs.xml: + * data/presets/TripleOscillator/Detuned-Synced-FM-Bass.cs.xml: + * data/presets/TripleOscillator/ChurchOrgan.cs.xml: + * data/presets/TripleOscillator/SquareArp.cs.xml: + * data/presets/TripleOscillator/OldComputerGames.cs.xml: + removed old raw presets, tuned others and added a few new ones + * plugins/stk/mallets/mallets.cpp: detect incomplete Stk-installation in model rather than view for not crashing when playing without opening the GUI before diff --git a/include/track.h b/include/track.h index fb3647444..8bc357492 100644 --- a/include/track.h +++ b/include/track.h @@ -381,6 +381,10 @@ public: virtual void saveSettings( QDomDocument & _doc, QDomElement & _this ); virtual void loadSettings( const QDomElement & _this ); + void setSimpleSerializing( void ) + { + m_simpleSerializingMode = TRUE; + } // -- for usage by trackContentObject only --------------- trackContentObject * addTCO( trackContentObject * _tco ); @@ -449,6 +453,7 @@ private: boolModel m_soloModel; bool m_mutedBeforeSolo; + bool m_simpleSerializingMode; tcoVector m_trackContentObjects; diff --git a/src/core/track.cpp b/src/core/track.cpp index de3759729..01f904a49 100644 --- a/src/core/track.cpp +++ b/src/core/track.cpp @@ -1551,6 +1551,7 @@ track::track( TrackTypes _type, trackContainer * _tc ) : /*!< For controlling track muting */ m_soloModel( FALSE, this, tr( "Solo" ) ), /*!< For controlling track soloing */ + m_simpleSerializingMode( FALSE ), m_trackContentObjects() /*!< The track content objects (segments) */ { m_trackContainer->addTrack( this ); @@ -1661,7 +1662,10 @@ void track::clone( void ) */ void track::saveSettings( QDomDocument & _doc, QDomElement & _this ) { - _this.setTagName( "track" ); + if( !m_simpleSerializingMode ) + { + _this.setTagName( "track" ); + } _this.setAttribute( "type", type() ); _this.setAttribute( "name", name() ); _this.setAttribute( "muted", isMuted() ); @@ -1674,6 +1678,12 @@ void track::saveSettings( QDomDocument & _doc, QDomElement & _this ) _this.appendChild( ts_de ); saveTrackSpecificSettings( _doc, ts_de ); + if( m_simpleSerializingMode ) + { + m_simpleSerializingMode = FALSE; + return; + } + // now save settings of all TCO's for( tcoVector::const_iterator it = m_trackContentObjects.begin(); it != m_trackContentObjects.end(); ++it ) @@ -1710,6 +1720,22 @@ void track::loadSettings( const QDomElement & _this ) setMuted( _this.attribute( "muted" ).toInt() ); + if( m_simpleSerializingMode ) + { + QDomNode node = _this.firstChild(); + while( !node.isNull() ) + { + if( node.isElement() && node.nodeName() == nodeName() ) + { + loadTrackSpecificSettings( node.toElement() ); + break; + } + node = node.nextSibling(); + } + m_simpleSerializingMode = FALSE; + return; + } + while( !m_trackContentObjects.empty() ) { delete m_trackContentObjects.front(); diff --git a/src/gui/file_browser.cpp b/src/gui/file_browser.cpp index 70d250322..5d1720999 100644 --- a/src/gui/file_browser.cpp +++ b/src/gui/file_browser.cpp @@ -251,10 +251,8 @@ void listView::activateListItem( QTreeWidgetItem * _item, int _column ) engine::getBBTrackContainer() ) ); if( it != NULL ) { - it->loadTrackSpecificSettings( mmp.content(). - firstChild(). - toElement() ); - //it->toggledInstrumentTrackButton( TRUE ); + it->setSimpleSerializing(); + it->loadSettings( mmp.content().toElement() ); } engine::getMixer()->unlock(); } @@ -312,9 +310,9 @@ void listView::sendToActiveInstrumentTrack( void ) multimediaProject mmp( m_contextMenuItem->fullName() ); removeMidiPortNode( mmp ); - itw->model()->loadTrackSpecificSettings( - mmp.content().firstChild(). - toElement() ); + itw->model()->setSimpleSerializing(); + itw->model()->loadSettings( + mmp.content().toElement() ); } engine::getMixer()->unlock(); break; @@ -351,13 +349,11 @@ void listView::openInNewInstrumentTrack( trackContainer * _tc ) multimediaProject mmp( m_contextMenuItem->fullName() ); removeMidiPortNode( mmp ); track * t = track::create( track::InstrumentTrack, _tc ); - instrumentTrack * ct = dynamic_cast( t ); - if( ct != NULL ) + instrumentTrack * it = dynamic_cast( t ); + if( it != NULL ) { - ct->loadTrackSpecificSettings( mmp.content(). - firstChild(). - toElement() ); - //ct->toggledInstrumentTrackButton( TRUE ); + it->setSimpleSerializing(); + it->loadSettings( mmp.content().toElement() ); } } engine::getMixer()->unlock(); diff --git a/src/tracks/instrument_track.cpp b/src/tracks/instrument_track.cpp index 023479fcf..9f34fb51b 100644 --- a/src/tracks/instrument_track.cpp +++ b/src/tracks/instrument_track.cpp @@ -1236,9 +1236,8 @@ void instrumentTrackWindow::saveSettingsBtnClicked( void ) { multimediaProject mmp( multimediaProject::InstrumentTrackSettings ); - QDomElement _this = mmp.createElement( m_track->nodeName() ); - m_track->saveTrackSpecificSettings( mmp, _this ); - mmp.content().appendChild( _this ); + m_track->setSimpleSerializing(); + m_track->saveSettings( mmp, mmp.content() ); QString f = sfd.selectedFiles()[0]; mmp.writeFile( f ); }