traverso-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Traverso-commit] traverso/src commands/AudioClipExternalProcessi...


From: Remon Sijrier
Subject: [Traverso-commit] traverso/src commands/AudioClipExternalProcessi...
Date: Thu, 17 May 2007 21:38:16 +0000

CVSROOT:        /sources/traverso
Module name:    traverso
Changes by:     Remon Sijrier <r_sijrier>       07/05/17 21:38:16

Modified files:
        src/commands   : AudioClipExternalProcessing.cpp Import.cpp 
                         MoveClip.cpp RemoveClip.cpp RemoveClip.h 
                         SplitClip.cpp 
        src/core       : AudioClipManager.cpp AudioSource.cpp 
                         MonoReader.cpp Project.cpp Project.h 
                         ReadSource.cpp ReadSource.h 
                         ResourcesManager.cpp ResourcesManager.h 
                         Song.cpp Song.h Track.cpp 
        src/traverso/songcanvas: ClipsViewPort.cpp SongView.cpp 
        src/traverso/widgets: ResourcesWidget.cpp ResourcesWidget.h 

Log message:
        * A different, more streamlined approach to managing resources

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/commands/AudioClipExternalProcessing.cpp?cvsroot=traverso&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/traverso/src/commands/Import.cpp?cvsroot=traverso&r1=1.22&r2=1.23
http://cvs.savannah.gnu.org/viewcvs/traverso/src/commands/MoveClip.cpp?cvsroot=traverso&r1=1.40&r2=1.41
http://cvs.savannah.gnu.org/viewcvs/traverso/src/commands/RemoveClip.cpp?cvsroot=traverso&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/traverso/src/commands/RemoveClip.h?cvsroot=traverso&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/traverso/src/commands/SplitClip.cpp?cvsroot=traverso&r1=1.28&r2=1.29
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/AudioClipManager.cpp?cvsroot=traverso&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/AudioSource.cpp?cvsroot=traverso&r1=1.18&r2=1.19
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/MonoReader.cpp?cvsroot=traverso&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Project.cpp?cvsroot=traverso&r1=1.44&r2=1.45
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Project.h?cvsroot=traverso&r1=1.21&r2=1.22
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/ReadSource.cpp?cvsroot=traverso&r1=1.32&r2=1.33
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/ReadSource.h?cvsroot=traverso&r1=1.23&r2=1.24
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/ResourcesManager.cpp?cvsroot=traverso&r1=1.14&r2=1.15
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/ResourcesManager.h?cvsroot=traverso&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Song.cpp?cvsroot=traverso&r1=1.102&r2=1.103
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Song.h?cvsroot=traverso&r1=1.53&r2=1.54
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Track.cpp?cvsroot=traverso&r1=1.55&r2=1.56
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/songcanvas/ClipsViewPort.cpp?cvsroot=traverso&r1=1.18&r2=1.19
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/songcanvas/SongView.cpp?cvsroot=traverso&r1=1.51&r2=1.52
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/widgets/ResourcesWidget.cpp?cvsroot=traverso&r1=1.17&r2=1.18
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/widgets/ResourcesWidget.h?cvsroot=traverso&r1=1.5&r2=1.6

Patches:
Index: commands/AudioClipExternalProcessing.cpp
===================================================================
RCS file: 
/sources/traverso/traverso/src/commands/AudioClipExternalProcessing.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- commands/AudioClipExternalProcessing.cpp    10 May 2007 20:02:36 -0000      
1.4
+++ commands/AudioClipExternalProcessing.cpp    17 May 2007 21:38:14 -0000      
1.5
@@ -115,7 +115,7 @@
                
                QString dir = pm().get_project()->get_audiosources_dir();
        
-               ReadSource* source = 
resources_manager()->create_new_readsource(dir, name);
+               ReadSource* source = resources_manager()->import_source(dir, 
name);
                if (!source) {
                        printf("ResourcesManager didn't return a ReadSource, 
most likely sox didn't understand your command\n");
                        return -1;

Index: commands/Import.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/commands/Import.cpp,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -b -r1.22 -r1.23
--- commands/Import.cpp 10 May 2007 20:02:36 -0000      1.22
+++ commands/Import.cpp 17 May 2007 21:38:15 -0000      1.23
@@ -89,7 +89,7 @@
                QString dir = m_fileName.left(splitpoint - 1);
                
                if (m_fileName.isEmpty()) {
-                       PWARN("FileName is empty!");
+                       PWARN("Import:: FileName is empty!");
                        return -1;
                }
                
@@ -112,16 +112,11 @@
        QString dir = m_fileName.left(splitpoint - 1) + "/";
        m_name = m_fileName.right(length - splitpoint);
        
-       m_source = resources_manager()->get_readsource(m_fileName);
-       
-       if (! m_source ) {
-               PMESG("AudioSource not found in acm, requesting new one");
-               m_source = resources_manager()->create_new_readsource(dir, 
m_name);
+       m_source = resources_manager()->import_source(dir, m_name);
                if (! m_source) {
                        PERROR("Can't import audiofile %s", QS_C(m_fileName));
                        return -1;
                }
-       }
        
        return 1;
 }
@@ -165,8 +160,6 @@
        
        Command::process_command(m_track->add_clip(m_clip, false));
        
-       resources_manager()->undo_remove_clip_from_database(m_clip->get_id());
-       
        return 1;
 }
 
@@ -174,11 +167,7 @@
 int Import::undo_action()
 {
        PENTER;
-               
        Command::process_command(m_track->remove_clip(m_clip, false));
-       
-       resources_manager()->remove_clip_from_database(m_clip->get_id());
-       
        return 1;
 }
 

Index: commands/MoveClip.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/commands/MoveClip.cpp,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -b -r1.40 -r1.41
--- commands/MoveClip.cpp       17 May 2007 06:55:42 -0000      1.40
+++ commands/MoveClip.cpp       17 May 2007 21:38:15 -0000      1.41
@@ -233,10 +233,6 @@
                m_song->move_clip(m_originTrack, m_targetTrack, m_clip, 
m_originalTrackFirstFrame + m_posDiff);
        }
        
-       if (m_actionType == "copy") {
-               
resources_manager()->undo_remove_clip_from_database(m_clip->get_id());
-       }
-
        if (m_actionType == "anchored_left_edge_move") {
                m_clip->set_right_edge(m_oldOppositeEdge);
        }
@@ -255,9 +251,7 @@
                Command::process_command(m_targetTrack->remove_clip(m_clip, 
false));
        }
        
-       if (m_actionType == "copy") {
-               
resources_manager()->remove_clip_from_database(m_clip->get_id());
-       } else {
+       if (m_actionType != "copy") {
                m_clip->set_track_start_frame(m_originalTrackFirstFrame);
                Command::process_command(m_originTrack->add_clip(m_clip, 
false));
        }
@@ -279,7 +273,6 @@
        
        if (m_actionType == "copy") {
                Command::process_command(m_originTrack->remove_clip(m_clip, 
false));
-               
resources_manager()->remove_clip_from_database(m_clip->get_id());
        } else if (m_actionType == "move") {
                if (d->resync) {
                        
m_clip->set_track_start_frame(m_originalTrackFirstFrame);

Index: commands/RemoveClip.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/commands/RemoveClip.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- commands/RemoveClip.cpp     5 May 2007 20:43:58 -0000       1.8
+++ commands/RemoveClip.cpp     17 May 2007 21:38:15 -0000      1.9
@@ -58,10 +58,6 @@
                Command::process_command(m_track->add_clip(m_clip, false));
        }
        
-       if (m_removeFromDataBase) {
-               
resources_manager()->undo_remove_clip_from_database(m_clip->get_id());
-       }
-       
        return 1;
 }
 
@@ -77,17 +73,8 @@
                Command::process_command(m_track->remove_clip(m_clip, false));
        }
        
-       if (m_removeFromDataBase) {
-               
resources_manager()->remove_clip_from_database(m_clip->get_id());
-       }
-       
        return 1;
 }
 
-void AddRemoveClip::remove_from_database_when_removed(bool remove)
-{
-       m_removeFromDataBase = remove;
-}
-
 // eof
 

Index: commands/RemoveClip.h
===================================================================
RCS file: /sources/traverso/traverso/src/commands/RemoveClip.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- commands/RemoveClip.h       5 May 2007 20:43:58 -0000       1.4
+++ commands/RemoveClip.h       17 May 2007 21:38:15 -0000      1.5
@@ -42,8 +42,6 @@
        int do_action();
        int undo_action();
        
-       void remove_from_database_when_removed(bool remove);
-
 private :
        int m_type;
        bool m_removeFromDataBase;

Index: commands/SplitClip.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/commands/SplitClip.cpp,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -b -r1.28 -r1.29
--- commands/SplitClip.cpp      8 May 2007 22:13:40 -0000       1.28
+++ commands/SplitClip.cpp      17 May 2007 21:38:15 -0000      1.29
@@ -104,9 +104,6 @@
        
        Command::process_command(m_track->remove_clip(m_clip, false));
        
-       resources_manager()->undo_remove_clip_from_database(leftClip->get_id());
-       
resources_manager()->undo_remove_clip_from_database(rightClip->get_id());
-       
        return 1;
 }
 
@@ -119,9 +116,6 @@
        Command::process_command(m_track->remove_clip(leftClip, false));
        Command::process_command(m_track->remove_clip(rightClip, false));
        
-       resources_manager()->remove_clip_from_database(leftClip->get_id());
-       resources_manager()->remove_clip_from_database(rightClip->get_id());
-       
        return 1;
 }
 

Index: core/AudioClipManager.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/AudioClipManager.cpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- core/AudioClipManager.cpp   5 May 2007 20:43:58 -0000       1.12
+++ core/AudioClipManager.cpp   17 May 2007 21:38:15 -0000      1.13
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  
-    $Id: AudioClipManager.cpp,v 1.12 2007/05/05 20:43:58 r_sijrier Exp $
+    $Id: AudioClipManager.cpp,v 1.13 2007/05/17 21:38:15 r_sijrier Exp $
 */
  
 #include "AudioClipManager.h"
@@ -59,7 +59,7 @@
        
        m_song->get_snap_list()->mark_dirty(clip);
        update_last_frame();
-       resources_manager()->set_clip_added(clip);
+       resources_manager()->mark_clip_added(clip);
 }
 
 void AudioClipManager::remove_clip( AudioClip * clip )
@@ -71,7 +71,7 @@
        }
        m_song->get_snap_list()->mark_dirty(clip);
        update_last_frame();
-       resources_manager()->set_clip_removed(clip);
+       resources_manager()->mark_clip_removed(clip);
 }
 
 

Index: core/AudioSource.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/AudioSource.cpp,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- core/AudioSource.cpp        15 May 2007 20:06:31 -0000      1.18
+++ core/AudioSource.cpp        17 May 2007 21:38:15 -0000      1.19
@@ -17,7 +17,7 @@
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
 
-$Id: AudioSource.cpp,v 1.18 2007/05/15 20:06:31 r_sijrier Exp $
+$Id: AudioSource.cpp,v 1.19 2007/05/17 21:38:15 r_sijrier Exp $
 */
 
 
@@ -38,6 +38,7 @@
 AudioSource::AudioSource(const QString& dir, const QString& name)
        : m_dir(dir)
        , m_name(name)
+       , m_shortName(name)
        , m_wasRecording (false)
 {
        PENTERCONS;
@@ -113,6 +114,7 @@
 void AudioSource::set_name(const QString& name)
 {
        m_name = name;
+       m_shortName = name;
        m_fileName = m_dir + m_name;
 }
 

Index: core/MonoReader.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/MonoReader.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- core/MonoReader.cpp 14 May 2007 18:05:28 -0000      1.7
+++ core/MonoReader.cpp 17 May 2007 21:38:15 -0000      1.8
@@ -17,7 +17,7 @@
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
 
-$Id: MonoReader.cpp,v 1.7 2007/05/14 18:05:28 r_sijrier Exp $
+$Id: MonoReader.cpp,v 1.8 2007/05/17 21:38:15 r_sijrier Exp $
 */
 
 
@@ -373,7 +373,6 @@
 
 void MonoReader::set_audio_clip( AudioClip * clip )
 {
-       Q_ASSERT(!m_clip);
        m_clip = clip;
 }
 

Index: core/Project.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/Project.cpp,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -b -r1.44 -r1.45
--- core/Project.cpp    15 May 2007 20:06:31 -0000      1.44
+++ core/Project.cpp    17 May 2007 21:38:15 -0000      1.45
@@ -63,7 +63,7 @@
        m_rate = audiodevice().get_sample_rate();
        m_bitDepth = audiodevice().get_bit_depth();
 
-       m_asmanager = new ResourcesManager();
+       m_resourcesManager = new ResourcesManager(this);
        m_hs = new QUndoStack(pm().get_undogroup());
 
        cpointer().add_contextitem(this);
@@ -80,7 +80,6 @@
                song->disconnect_from_audiodevice();
        }
 
-       delete m_asmanager;
        delete m_hs;
 }
 
@@ -217,7 +216,7 @@
        // Load all the AudioSources for this project
        
        QDomNode asmNode = docElem.firstChildElement("ResourcesManager");
-       m_asmanager->set_state(asmNode);
+       m_resourcesManager->set_state(asmNode);
 
 
        QDomNode songsNode = docElem.firstChildElement("Songs");
@@ -310,7 +309,7 @@
 
        // Get the AudioSources Node, and append
        if (! istemplate) {
-               projectNode.appendChild(m_asmanager->get_state(doc));
+               projectNode.appendChild(m_resourcesManager->get_state(doc));
        }
 
        // Get all the Songs
@@ -774,7 +773,7 @@
 
 ResourcesManager * Project::get_audiosource_manager( ) const
 {
-       return m_asmanager;
+       return m_resourcesManager;
 }
 
 

Index: core/Project.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/Project.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -b -r1.21 -r1.22
--- core/Project.h      11 May 2007 11:16:32 -0000      1.21
+++ core/Project.h      17 May 2007 21:38:15 -0000      1.22
@@ -105,7 +105,7 @@
        Project(const QString& title);
        
        QList<Song* >   m_songs;
-       ResourcesManager*       m_asmanager;
+       ResourcesManager*       m_resourcesManager;
        ExportThread*   m_exportThread;
 
        QString         title;

Index: core/ReadSource.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/ReadSource.cpp,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -b -r1.32 -r1.33
--- core/ReadSource.cpp 11 May 2007 13:18:25 -0000      1.32
+++ core/ReadSource.cpp 17 May 2007 21:38:15 -0000      1.33
@@ -44,7 +44,6 @@
 ReadSource::ReadSource(const QDomNode node)
        : AudioSource(node)
        , m_refcount(0)
-       , m_unrefcount(0)
        , m_error(0)
        , m_clip(0)
 {
@@ -65,7 +64,6 @@
 ReadSource::ReadSource(const QString& dir, const QString& name)
        : AudioSource(dir, name)
        , m_refcount(0)
-       , m_unrefcount(0)
        , m_error(0)
        , m_clip(0)
 {
@@ -83,27 +81,27 @@
 }
 
 
-// Constructur for recorded audio.
-ReadSource::ReadSource(const QString& dir, const QString& name, int 
channelCount, int fileCount)
+// Constructor for recorded audio.
+ReadSource::ReadSource(const QString& dir, const QString& name, int 
channelCount)
        : AudioSource(dir, name)
        , m_refcount(0)
-       , m_unrefcount(0)
        , m_error(0)
        , m_clip(0)
 {
-       m_channelCount = channelCount;
-       m_fileCount = fileCount;
+       m_channelCount = m_fileCount = channelCount;
        m_silent = false;
        m_name = name  + "-" + QString::number(m_id);
        m_fileName = m_dir + m_name;
        m_length = 0;
+       m_rate = pm().get_project()->get_rate();
+       m_wasRecording = true;
+       m_shortName = m_name.left(m_name.length() - 20);
 }
 
 
 ReadSource::ReadSource()
        : AudioSource("", tr("Silence"))
        , m_refcount(0)
-       , m_unrefcount(0)
        , m_error(0)
        , m_clip(0)
 {
@@ -256,12 +254,6 @@
        return m_length;
 }
 
-void ReadSource::set_was_recording(bool wasRecording)
-{
-       m_wasRecording = wasRecording;
-       m_shortName = m_name.left(m_name.length() - 20);
-}
-
 int ReadSource::set_file(const QString & filename)
 {
        PENTER;

Index: core/ReadSource.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/ReadSource.h,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -b -r1.23 -r1.24
--- core/ReadSource.h   11 May 2007 11:16:32 -0000      1.23
+++ core/ReadSource.h   17 May 2007 21:38:15 -0000      1.24
@@ -17,7 +17,7 @@
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
 
-$Id: ReadSource.h,v 1.23 2007/05/11 11:16:32 r_sijrier Exp $
+$Id: ReadSource.h,v 1.24 2007/05/17 21:38:15 r_sijrier Exp $
 */
 
 #ifndef READSOURCE_H
@@ -35,7 +35,7 @@
 public :
        ReadSource(const QDomNode node);
        ReadSource(const QString& dir, const QString& name);
-       ReadSource(const QString& dir, const QString& name, int channelCount, 
int fileCount);
+       ReadSource(const QString& dir, const QString& name, int channelCount);
        ReadSource();  // For creating a 0-channel, silent ReadSource
        ~ReadSource();
        
@@ -53,11 +53,9 @@
 
        int init();
        int get_ref_count() const {return m_refcount;}
-       int get_unref_count() const {return m_unrefcount;}
        int get_error() const {return m_error;}
        int set_file(const QString& filename);
        void set_active(bool active);
-       void set_was_recording(bool wasRecording);
        
        void set_audio_clip(AudioClip* clip);
        Peak* get_peak(int channel);
@@ -68,14 +66,12 @@
 private:
        QList<MonoReader*> m_sources;
        int     m_refcount;
-       int     m_unrefcount;
        int     m_error;
        AudioClip* m_clip;
        int     m_usedByClips;
        bool    m_silent;
        
        int ref() { return m_refcount++;}
-       int unref(bool b) { if (b) m_unrefcount++; else m_unrefcount--; return 
m_unrefcount;}
        int add_mono_reader(int channel, int channelNumber, const QString& 
fileName);
        
        friend class MonoReader;

Index: core/ResourcesManager.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/ResourcesManager.cpp,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- core/ResourcesManager.cpp   11 May 2007 13:09:23 -0000      1.14
+++ core/ResourcesManager.cpp   17 May 2007 21:38:15 -0000      1.15
@@ -24,6 +24,8 @@
 #include "ReadSource.h"
 #include "Information.h"
 #include "AudioClip.h"
+#include "Project.h"
+#include "Song.h"
 #include "Utils.h"
 #include "AudioDevice.h"
 
@@ -36,7 +38,9 @@
  
  */
 
-ResourcesManager::ResourcesManager()
+ResourcesManager::ResourcesManager(Project* project)
+       : QObject(project)
+       , m_project(project)
 {
        PENTERCONS;
        m_silentReadSource = 0;
@@ -46,14 +50,16 @@
 ResourcesManager::~ResourcesManager()
 {
        PENTERDES;
-       foreach(ReadSource* source, m_sources) {
-               if (! source->ref()) {
-                       delete source;
+       foreach(SourceData* data, m_sources) {
+               if (! data->source->ref()) {
+                       delete data->source;
                }
+               delete data;
        }
        
-       foreach(AudioClip* clip, m_clips) {
-               delete clip;
+       foreach(ClipData* data, m_clips) {
+               delete data->clip;
+               delete data;
        }
 
 }
@@ -63,33 +69,30 @@
 {
        PENTER;
 
-       QDomElement asmNode = doc.createElement("ResourcesManager");
+       QDomElement rsmNode = doc.createElement("ResourcesManager");
        
        QDomElement audioSourcesElement = doc.createElement("AudioSources");
        
-       foreach(AudioSource* source, m_sources) {
+       foreach(SourceData* data, m_sources) {
+               AudioSource* source = (AudioSource*)data->source;
                audioSourcesElement.appendChild(source->get_state(doc));
        }
        
-       asmNode.appendChild(audioSourcesElement);
+       rsmNode.appendChild(audioSourcesElement);
        
        
        QDomElement audioClipsElement = doc.createElement("AudioClips");
        
-       QList<AudioClip*> list = m_clips.values();
-       
+       foreach(ClipData* data, m_clips) {
+               AudioClip* clip = data->clip;
        
-       for (int i=0; i<list.size(); ++i) {
-               AudioClip* clip = list.at(i);
-               
-               // Omit all clips that were deprecated:
-               if (m_deprecatedClips.contains(clip->get_id())) {
+               if (data->isCopy && data->removed) {
                        continue;
                }
                
-               // If the clip was refcounted, then it's state has been fully 
set
+               // If the clip was 'getted', then it's state has been fully set
                // and likely changed, so we can get the 'new' state from it.
-               if (m_gettedClips.contains(clip->get_id())) {
+               if (data->inUse) {
                        audioClipsElement.appendChild(clip->get_state(doc));
                } else {
                        // In case it wasn't we should use the 'old' domNode 
which 
@@ -98,9 +101,9 @@
                }
        }
        
-       asmNode.appendChild(audioClipsElement);
+       rsmNode.appendChild(audioClipsElement);
        
-       return asmNode;
+       return rsmNode;
 }
 
 
@@ -110,7 +113,9 @@
        
        while(!sourcesNode.isNull()) {
                ReadSource* source = new ReadSource(sourcesNode);
-               m_sources.insert(source->get_id(), source);
+               SourceData* data = new SourceData();
+               data->source = source;
+               m_sources.insert(source->get_id(), data);
                sourcesNode = sourcesNode.nextSibling();
                if (source->get_channel_count() == 0) {
                        m_silentReadSource = source;
@@ -122,59 +127,35 @@
        
        while(!clipsNode.isNull()) {
                AudioClip* clip = new AudioClip(clipsNode);
-               m_clips.insert(clip->get_id(), clip);
+               ClipData* data = new ClipData();
+               data->clip = clip;
+               m_clips.insert(clip->get_id(), data);
                clipsNode = clipsNode.nextSibling();
        }
        
        
-       emit sourceAdded();
+       emit stateRestored();
        
        return 1;
 }
 
 
-int ResourcesManager::remove_clip_from_database(qint64 id)
+ReadSource* ResourcesManager::import_source(const QString& dir, const QString& 
name)
 {
-       if ( ! m_clips.contains(id) ) {
-               info().critical(tr("ResourcesManager : AudioClip with id %1 not 
in database,"
-                               "unable to remove it!").arg(id));
-               return -1;
+       QString fileName = dir + name;
+       foreach(SourceData* data, m_sources) {
+               if (data->source->get_filename() == fileName) {
+                       printf("id is %lld\n", data->source->get_id());
+                       return get_readsource(data->source->get_id()); 
        }
-       
-       printf("ResourcesManager:: Scheduling AudioClip with id %lld for 
removal\n", id);
-       
-       m_deprecatedClips.insert(id, m_clips.value(id));
-       
-       return 1;
-}
-
-int ResourcesManager::undo_remove_clip_from_database(qint64 id)
-{
-       if ( ! m_clips.contains(id) ) {
-               info().critical(tr("ResourcesManager: AudioClip with id %1 not 
in database,"
-                               "unable to UNDO removal!").arg(id));
-               return -1;
        }
        
-       printf("ResourcesManager:: UNDO scheduling AudioClip with id %lld for 
removal\n", id);
-       
-       m_deprecatedClips.remove(id);
-       
-       return 1;
-}
-
-
-int ResourcesManager::get_total_sources()
-{
-       return m_sources.size();
-}
-
-
-ReadSource* ResourcesManager::create_new_readsource(const QString& dir, const 
QString& name)
-{
        ReadSource* source = new ReadSource(dir, name);
-       m_sources.insert(source->get_id(), source);
-       source->set_created_by_song( -1 );
+       SourceData* data = new SourceData();
+       data->source = source;
+       source->set_created_by_song(m_project->get_current_song()->get_id());
+       
+       m_sources.insert(source->get_id(), data);
        
        source = get_readsource(source->get_id());
        
@@ -184,6 +165,8 @@
                return 0;
        }
 
+       emit sourceAdded(source);
+
        return source;
 }
 
@@ -196,14 +179,17 @@
 {
        PENTER;
        
-       ReadSource* source = new ReadSource(dir, name, channelCount, 
channelCount);
+       ReadSource* source = new ReadSource(dir, name, channelCount);
+       SourceData* data = new SourceData();
+       data->source = source;
        
-       source->set_was_recording(true);
        source->set_original_bit_depth(audiodevice().get_bit_depth());
        source->set_created_by_song(songId);
        source->ref();
        
-       m_sources.insert(source->get_id(), source);
+       m_sources.insert(source->get_id(), data);
+       
+       emit sourceAdded(source);
        
        return source;
 }
@@ -213,7 +199,9 @@
 {
        if (!m_silentReadSource) {
                m_silentReadSource = new ReadSource();
-               m_sources.insert(m_silentReadSource->get_id(), 
m_silentReadSource);
+               SourceData* data = new SourceData();
+               data->source = m_silentReadSource;
+               m_sources.insert(m_silentReadSource->get_id(), data);
                m_silentReadSource->set_created_by_song( -1 );
        }
        
@@ -225,16 +213,17 @@
 
 ReadSource * ResourcesManager::get_readsource( qint64 id )
 {
-       ReadSource* source = m_sources.value(id);
+       SourceData* data = m_sources.value(id);
        
-       if ( ! source ) {
-               PERROR("ReadSource with id %lld is not in my list!", id);
+       if (!data) {
+               PWARN("ResourcesManager::get_readsource(): ReadSource with id 
%lld is not in my database!", id);
                return 0;
        }
        
-       // When the AudioSource is first "get", do a ref counting.
+       ReadSource* source = data->source;
+       
+       // When the AudioSource is "get", do a ref counting.
        // If the source allready was ref counted, create a deep copy
-       // and do the initialization
        if (source->ref()) {
                PWARN("Creating deep copy of ReadSource: %s", 
QS_C(source->get_name()));
                source = source->deep_copy();
@@ -246,29 +235,9 @@
                                .arg(source->get_filename()));
        }
        
-       emit stateChanged();
-       
        return source;
 }
 
-/**
- *     Mainly used for Importing audio files. If the file with \a fileName 
-       allready is in the database, a ReadSource will be returned, else 0.
-
- * @param fileName The file name of the audio source
- * @return A ReadSource if a ReadSource with the same file name is in the 
database, else 0
- */
-ReadSource* ResourcesManager::get_readsource(const QString& fileName)
-{
-       foreach(ReadSource* rs, m_sources) {
-//             PMESG("rs filename %s, filename %s", QS_C(rs->get_filename()), 
QS_C(fileName));
-               if (rs->get_filename() == fileName) {
-                       return get_readsource(rs->get_id()); 
-               }
-       }
-       
-       return 0;
-}
 
 /**
  *     Get the AudioClip with id \a id
@@ -284,18 +253,17 @@
                'deep copy' of the AudioClip with id \a id if the AudioClip was 
allready
                getted before via this function.
  */
-AudioClip* ResourcesManager::get_clip( qint64 id )
+AudioClip* ResourcesManager::get_clip(qint64 id)
 {
-       AudioClip* clip = m_clips.value(id);
+       ClipData* data = m_clips.value(id);
         
-       printf("ResourcesManager: Getting clip with id %lld\n", id);
-       if (! clip) {
+       if (!data) {
                return 0;
        }
        
-       if (m_removedClips.contains(id)) {
-               clip = m_removedClips.take(id);
-       } else if (m_gettedClips.contains(id)) {
+       AudioClip* clip = data->clip;
+       
+       if (data->inUse && !data->removed) {
                PMESG("Creating deep copy of Clip %s", QS_C(clip->get_name()));
                clip = clip->create_copy();
                
@@ -304,8 +272,11 @@
                // indicates a design error somewhere ! (most likely in 
                // AudioClip::create_copy();
                Q_ASSERT( ! m_clips.contains(clip->get_id()) );
+               ClipData* copy = new ClipData();
+               copy->clip = clip;
+               copy->isCopy = true;
                
-               m_clips.insert(clip->get_id(), clip);
+               m_clips.insert(clip->get_id(), copy);
                
                // Now that we have created a copy of the audioclip, start
                // the usual get_clip routine again to properly init the clip
@@ -313,21 +284,13 @@
                return get_clip(clip->get_id());
        }
        
-       m_gettedClips.insert(id, clip);
-       
-       ReadSource* source = get_readsource(clip->get_readsource_id());
+       ReadSource* source = get_readsource(data->clip->get_readsource_id());
        
        if (source) {
                clip->set_audio_source(source);
-       } else {
-               // sometimes the source is set later...
-               // maybe that should become the default ?
-/*             info().critical(
-                    tr("ResourcesManager: AudioClip %1 required ReadSource 
with ID %2, but I don't have it!!")
-                       
.arg(clip->get_name()).arg(clip->get_readsource_id()));*/
        }
        
-       emit stateChanged();
+       data->inUse = true;
        
        return clip;
 }
@@ -336,13 +299,18 @@
 {
        PENTER;
        AudioClip* clip = new AudioClip(name);
-       m_clips.insert(clip->get_id(), clip);
+       ClipData* data = new ClipData();
+       data->clip = clip;
+       m_clips.insert(clip->get_id(), data);
        return get_clip(clip->get_id());
 }
 
 QList<ReadSource*> ResourcesManager::get_all_audio_sources( ) const
 {
-       QList< ReadSource * > list = m_sources.values();
+       QList< ReadSource * > list;
+       foreach(SourceData* data, m_sources) {
+               list.append(data->source);
+       }
        if (m_silentReadSource) {
                list.removeAll(m_silentReadSource);
        }
@@ -351,57 +319,88 @@
 
 QList< AudioClip * > ResourcesManager::get_all_clips() const
 {
-       return m_clips.values();
+       QList<AudioClip* > list;
+       foreach(ClipData* data, m_clips) {
+               list.append(data->clip);
+       }
+       return list;
 }
 
-QList< AudioClip * > ResourcesManager::get_clips_for_source( ReadSource * 
source ) const
-{
-       QList<AudioClip*> clips;
        
-       foreach(AudioClip* clip, m_clips) {
-               if (clip->get_readsource_id() == source->get_id()) {
-                       clips.append(clip);
+void ResourcesManager::mark_clip_removed(AudioClip * clip)
+{
+       ClipData* data = m_clips.value(clip->get_id());
+       if (!data) {
+               PERROR("Clip with id %lld is not in my database!", 
clip->get_id());
+               return;
                }
+       data->removed = true;
+       
+       SourceData* sourcedata = m_sources.value(clip->get_readsource_id());
+       if (!sourcedata) {
+               PERROR("Source %lld not in database", 
clip->get_readsource_id());
        }
+       sourcedata->clipCount--;
        
-       return clips;
+       emit clipRemoved(clip);
 }
 
-void ResourcesManager::set_clip_removed(AudioClip * clip)
+void ResourcesManager::mark_clip_added(AudioClip * clip)
 {
-       ReadSource* source = m_sources.value(clip->get_readsource_id());
-       if (source) {
-               source->unref(true);
-               printf("ClipRemoved: refcount, unrefcount: %d, %d\n", 
source->get_ref_count(), source->get_unref_count());
-               if (source->get_unref_count() == 0) {
-                       emit sourceNoLongerUsed(source);
+       ClipData* clipdata = m_clips.value(clip->get_id());
+       if (!clipdata) {
+               PERROR("Clip with id %lld is not in my database!", 
clip->get_id());
+               return;
                }
-       }
-       m_removedClips.insert(clip->get_id(), clip);
-       emit clipRemoved(clip);
-}
+       clipdata->removed = false;
 
-void ResourcesManager::set_clip_added(AudioClip * clip)
-{
-       ReadSource* source = m_sources.value(clip->get_readsource_id());
-       if (source) {
-               source->unref(false);
-               printf("ClipAdded: refcount, unrefcount: %d, %d\n", 
source->get_ref_count(), source->get_unref_count());
-               emit sourceBackInUse(source);
+       SourceData* sourcedata = m_sources.value(clip->get_readsource_id());
+       if (!sourcedata) {
+               PERROR("Source %lld not in database", 
clip->get_readsource_id());
        }
-       m_removedClips.take(clip->get_id());
+       sourcedata->clipCount++;
+       
        emit clipAdded(clip);
 }
 
 
 bool ResourcesManager::is_clip_in_use(qint64 id) const
 {
-       return m_gettedClips.contains(id) && ! m_removedClips.contains(id);
+       ClipData* data = m_clips.value(id);
+       if (!data) {
+               PERROR("Clip with id %lld is not in my database!", id);
+               return false;
+       }
+       return data->inUse && !data->removed;
 }
 
+bool ResourcesManager::is_source_in_use(qint64 id) const
+{
+       SourceData* data = m_sources.value(id);
+       if (!data) {
+               PERROR("Source with id %lld is not in my database!", id);
+               return false;
+       }
+       
+       return data->clipCount > 0 ? true : false;
+}
 
 void ResourcesManager::set_source_for_clip(AudioClip * clip, ReadSource * 
source)
 {
        clip->set_audio_source(source);
 }
 
+ResourcesManager::SourceData::SourceData()
+{
+       source = 0;
+       clipCount = 0;
+}
+
+ResourcesManager::ClipData::ClipData()
+{
+       clip = 0;
+       inUse = false;
+       isCopy = false;
+       removed = false;
+}
+

Index: core/ResourcesManager.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/ResourcesManager.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- core/ResourcesManager.h     10 May 2007 20:02:36 -0000      1.8
+++ core/ResourcesManager.h     17 May 2007 21:38:15 -0000      1.9
@@ -32,13 +32,14 @@
 class AudioSource;
 class ReadSource;
 class AudioClip;
+class Project;
 
 class ResourcesManager : public QObject
 {
        Q_OBJECT
        
 public:
-       ResourcesManager();
+       ResourcesManager(Project* project);
        ~ResourcesManager();
 
        int set_state( const QDomNode& node );
@@ -49,49 +50,52 @@
                                int channelCount,
                                int songId);
        
-       ReadSource* create_new_readsource(const QString& dir, const QString& 
name);
+       ReadSource* import_source(const QString& dir, const QString& name);
        ReadSource* get_silent_readsource();
        AudioClip* new_audio_clip(const QString& name);
        AudioClip* get_clip(qint64 id);
        
-       int remove_clip_from_database(qint64 id);
-       int undo_remove_clip_from_database(qint64 id);
-       
-       void set_clip_removed(AudioClip* clip);
-       void set_clip_added(AudioClip* clip);
+       void mark_clip_removed(AudioClip* clip);
+       void mark_clip_added(AudioClip* clip);
        void set_source_for_clip(AudioClip* clip, ReadSource* source);
        
        bool is_clip_in_use(qint64) const;
+       bool is_source_in_use(qint64 id) const;
 
-       ReadSource* get_readsource(const QString& fileName);
        ReadSource* get_readsource(qint64 id);
        
        
-       int get_total_sources();
-       
        QList<ReadSource*> get_all_audio_sources() const;
        QList<AudioClip*> get_all_clips() const;
-       QList<AudioClip*> get_clips_for_source(ReadSource* source) const;
 
 
 private:
-       QHash<qint64, ReadSource* >     m_sources;
-       QHash<qint64, AudioClip* >      m_clips;
-       QHash<qint64, AudioClip* >      m_gettedClips;
-       QHash<qint64, AudioClip* >      m_removedClips;
-       QHash<qint64, AudioClip* >      m_deprecatedClips;
+       struct ClipData {
+               ClipData();
+               AudioClip* clip;
+               bool inUse;
+               bool isCopy;
+               bool removed;
+       };
+       
+       struct SourceData {
+               SourceData();
+               ReadSource* source;
+               int clipCount;
+       };
+       
+       Project* m_project;
+       QHash<qint64, SourceData* >     m_sources;
+       QHash<qint64, ClipData* >       m_clips;
        ReadSource*                     m_silentReadSource;
        
        
 signals:
-       void sourceAdded();
-       void sourceRemoved();
-       void stateChanged();
+       void stateRestored();
        void clipRemoved(AudioClip* clip);
        void clipAdded(AudioClip* clip);
-       void sourceNoLongerUsed(ReadSource* source);
-       void sourceBackInUse(ReadSource* source);
-       void newSourceCreated(ReadSource* source);
+       void sourceAdded(ReadSource* source);
+       void sourceRemoved(ReadSource* source);
 };
 
 

Index: core/Song.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/Song.cpp,v
retrieving revision 1.102
retrieving revision 1.103
diff -u -b -r1.102 -r1.103
--- core/Song.cpp       17 May 2007 19:59:29 -0000      1.102
+++ core/Song.cpp       17 May 2007 21:38:16 -0000      1.103
@@ -154,7 +154,7 @@
 
        realtimepath = false;
        scheduleForDeletion = false;
-       isSnapOn=true;
+       m_isSnapOn=true;
        changed = m_rendering = m_recording = false;
        firstVisibleFrame=workingFrame=0;
        seeking = 0;
@@ -190,6 +190,7 @@
        set_first_visible_frame(e.attribute( "firstVisibleFrame", "0" 
).toUInt());
        set_work_at(e.attribute( "workingFrame", "0").toUInt());
        set_transport_pos(e.attribute( "transportFrame", "0").toUInt());
+       set_snapping(e.attribute("snapping", "0").toInt());
        
        m_timeline->set_state(node.firstChildElement("TimeLine"));
 
@@ -228,6 +229,7 @@
        properties.setAttribute("sbx", m_sbx);
        properties.setAttribute("sby", m_sby);
        properties.setAttribute("mastergain", m_gain);
+       properties.setAttribute("snapping", m_isSnapOn);
        songNode.appendChild(properties);
 
        doc.appendChild(songNode);
@@ -609,14 +611,14 @@
 
 Command* Song::toggle_snap()
 {
-       set_snapping( ! isSnapOn );
+       set_snapping( ! m_isSnapOn );
        return 0;
 }
 
 
 void Song::set_snapping(bool snapping)
 {
-       isSnapOn = snapping;
+       m_isSnapOn = snapping;
        emit snapChanged();
 }
 

Index: core/Song.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/Song.h,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -b -r1.53 -r1.54
--- core/Song.h 17 May 2007 12:45:19 -0000      1.53
+++ core/Song.h 17 May 2007 21:38:16 -0000      1.54
@@ -128,7 +128,7 @@
        bool realtime_path() const {return realtimepath;}
        bool is_transporting() const {return m_transport;}
        bool is_changed() const {return changed;}
-       bool is_snap_on() const {return isSnapOn;}
+       bool is_snap_on() const {return m_isSnapOn;}
        bool is_recording() const {return m_recording;}
 
        void disconnect_from_audiodevice();
@@ -175,7 +175,7 @@
        int             m_sby;
        bool            m_rendering;
        bool            changed;
-       bool            isSnapOn;
+       bool            m_isSnapOn;
        bool            resumeTransport;
        bool            m_stopTransport;
        bool            realtimepath;

Index: core/Track.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/Track.cpp,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -b -r1.55 -r1.56
--- core/Track.cpp      17 May 2007 12:45:19 -0000      1.55
+++ core/Track.cpp      17 May 2007 21:38:16 -0000      1.56
@@ -316,7 +316,6 @@
        
        if (clip->init_recording(busIn) < 0) {
                PERROR("Could not create AudioClip to record to!");
-               resources_manager()->remove_clip_from_database(clip->get_id());
        } else {
                return clip;
        }

Index: traverso/songcanvas/ClipsViewPort.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/songcanvas/ClipsViewPort.cpp,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- traverso/songcanvas/ClipsViewPort.cpp       17 May 2007 13:08:33 -0000      
1.18
+++ traverso/songcanvas/ClipsViewPort.cpp       17 May 2007 21:38:16 -0000      
1.19
@@ -153,7 +153,6 @@
                        clip->set_track_start_frame(startpos);
                        startpos = clip->get_track_end_frame();
                        AddRemoveClip* arc = new AddRemoveClip(clip, 
AddRemoveClip::ADD);
-                       arc->remove_from_database_when_removed(true);
                        group->add_command(arc);
                        continue;
                }
@@ -168,7 +167,6 @@
                        // FIXME!!!!!!!!!!!!!!!!!!!!
                        clip->init_gain_envelope();
                        AddRemoveClip* arc = new AddRemoveClip(clip, 
AddRemoveClip::ADD);
-                       arc->remove_from_database_when_removed(true);
                        group->add_command(arc);
                }
        }

Index: traverso/songcanvas/SongView.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/songcanvas/SongView.cpp,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -b -r1.51 -r1.52
--- traverso/songcanvas/SongView.cpp    17 May 2007 13:08:33 -0000      1.51
+++ traverso/songcanvas/SongView.cpp    17 May 2007 21:38:16 -0000      1.52
@@ -202,7 +202,6 @@
 
 void SongView::update_scrollbars()
 {
-       printf("update_scrollbars()\n");
        int width = (m_song->get_last_frame() / scalefactor) - 
(m_clipsViewPort->width() / 4);
        
        m_hScrollBar->setRange(0, width);

Index: traverso/widgets/ResourcesWidget.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/widgets/ResourcesWidget.cpp,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -b -r1.17 -r1.18
--- traverso/widgets/ResourcesWidget.cpp        10 May 2007 20:44:20 -0000      
1.17
+++ traverso/widgets/ResourcesWidget.cpp        17 May 2007 21:38:16 -0000      
1.18
@@ -207,16 +207,16 @@
        songComboBox->setEnabled(true);
        ResourcesManager* rsmanager = m_project->get_audiosource_manager();
        
-       connect(rsmanager, SIGNAL(sourceAdded()), this, 
SLOT(update_tree_widgets()));
-       connect(rsmanager, SIGNAL(clipAdded(AudioClip*)), this, 
SLOT(clip_added(AudioClip*)));
-       connect(rsmanager, SIGNAL(clipRemoved(AudioClip*)), this, 
SLOT(clip_removed(AudioClip*)));
-       connect(rsmanager, SIGNAL(sourceNoLongerUsed(ReadSource*)), this, 
SLOT(source_nolonger_in_use(ReadSource*)));
-       connect(rsmanager, SIGNAL(sourceBackInUse(ReadSource*)), this, 
SLOT(source_back_in_use(ReadSource*)));
+       connect(rsmanager, SIGNAL(stateRestored()), this, 
SLOT(populate_tree()));
+       connect(rsmanager, SIGNAL(clipAdded(AudioClip*)), this, 
SLOT(add_clip(AudioClip*)));
+       connect(rsmanager, SIGNAL(clipRemoved(AudioClip*)), this, 
SLOT(remove_clip(AudioClip*)));
+       connect(rsmanager, SIGNAL(sourceAdded(ReadSource*)), this, 
SLOT(add_source(ReadSource*)));
+       connect(rsmanager, SIGNAL(sourceRemoved(ReadSource*)), this, 
SLOT(remove_source(ReadSource*)));
        connect(m_project, SIGNAL(songAdded(Song*)), this, 
SLOT(song_added(Song*)));
        connect(m_project, SIGNAL(songRemoved(Song*)), this, 
SLOT(song_removed(Song*)));
 }
 
-void ResourcesWidget::update_tree_widgets()
+void ResourcesWidget::populate_tree()
 {
        sourcesTreeWidget->clear();
        
@@ -225,44 +225,12 @@
        }
        
        foreach(ReadSource* rs, resources_manager()->get_all_audio_sources()) {
-               QTreeWidgetItem* item = new QTreeWidgetItem(sourcesTreeWidget);
-               m_sourceindices.insert(rs->get_id(), item);
-               QString duration = frame_to_ms(rs->get_nframes(), 44100);
-               item->setText(0, rs->get_short_name());
-               item->setText(1, duration);
-               item->setText(2, "");
-               item->setText(3, "");
-               item->setData(0, Qt::UserRole, rs->get_id());
-               item->setToolTip(0, rs->get_short_name() + "   " + duration);
-               if (!rs->get_ref_count()) {
-                       item->setForeground(0, QColor(Qt::lightGray));
-                       item->setForeground(1, QColor(Qt::lightGray));
-                       item->setForeground(2, QColor(Qt::lightGray));
-                       item->setForeground(3, QColor(Qt::lightGray));
+               add_source(rs);
                }
                
-               foreach(AudioClip* clip, 
resources_manager()->get_clips_for_source(rs)) {
-                       QTreeWidgetItem* clipitem = new QTreeWidgetItem(item);
-                       m_clipindices.insert(clip->get_id(), clipitem);
-                       clipitem->setText(0, clip->get_name());
-                       QString start = 
frame_to_ms(clip->get_source_start_frame(), clip->get_rate());
-                       QString end = frame_to_ms(clip->get_source_end_frame(), 
clip->get_rate());
-                       clipitem->setText(1, frame_to_ms(clip->get_length(), 
clip->get_rate()));
-                       clipitem->setText(2, start);
-                       clipitem->setText(3, end);
-                       clipitem->setData(0, Qt::UserRole, clip->get_id());
-                       clipitem->setToolTip(0, clip->get_name() + "   " + 
start + " - " + end);
-               
-                       if 
(resources_manager()->is_clip_in_use(clip->get_id())) {
-                               clipitem->setForeground(0, 
QColor(Qt::lightGray));
-                               clipitem->setForeground(1, 
QColor(Qt::lightGray));
-                               clipitem->setForeground(2, 
QColor(Qt::lightGray));
-                               clipitem->setForeground(3, 
QColor(Qt::lightGray));
+       foreach(AudioClip* clip, resources_manager()->get_all_clips()) {
+               add_clip(clip);
                        }
-               }
-       }
-       
-       
 
        sourcesTreeWidget->sortItems(0, Qt::AscendingOrder);
 }
@@ -281,7 +249,6 @@
 
 void ResourcesWidget::song_combo_box_index_changed(int index)
 {
-//     update_tree_widgets();
 }
 
 void ResourcesWidget::song_added(Song * song)
@@ -295,65 +262,101 @@
        songComboBox->removeItem(index);
 }
 
-void ResourcesWidget::clip_removed(AudioClip * clip)
+void ResourcesWidget::add_clip(AudioClip * clip)
 {
+       printf("clip_added: clip is %lld\n", clip->get_id());
+       
        QTreeWidgetItem* item = m_clipindices.value(clip->get_id());
-       if (!item) return;
-       for (int i=0; i<5; ++i) {
-               item->setForeground(i, QColor(Qt::lightGray));
+       
+       if (!item) {
+               QTreeWidgetItem* sourceitem = 
m_sourceindices.value(clip->get_readsource_id());
+       
+               if (! sourceitem ) return;
+       
+               QTreeWidgetItem* clipitem = new QTreeWidgetItem(sourceitem);
+               m_clipindices.insert(clip->get_id(), clipitem);
+       
+               QString start = frame_to_ms(clip->get_source_start_frame(), 
clip->get_rate());
+               QString end = frame_to_ms(clip->get_source_end_frame(), 
clip->get_rate());
+               
+               clipitem->setText(0, clip->get_name());
+               clipitem->setText(1, frame_to_ms(clip->get_length(), 
clip->get_rate()));
+               clipitem->setText(2, start);
+               clipitem->setText(3, end);
+               clipitem->setData(0, Qt::UserRole, clip->get_id());
+               clipitem->setToolTip(0, clip->get_name() + "   " + start + " - 
" + end);
+               
+               item = clipitem;
        }
+       
+       update_clip_state(clip);
 }
 
-void ResourcesWidget::clip_added(AudioClip * clip)
+void ResourcesWidget::remove_clip(AudioClip * clip)
 {
-       printf("clip_added: clip is %lld\n", clip->get_id());
        QTreeWidgetItem* item = m_clipindices.value(clip->get_id());
+       
        if (!item) {
-               add_new_clip_entry(clip);
                return;
        }
-       for (int i=0; i<5; ++i) {
-               item->setForeground(i, QColor(Qt::black));
-       }
+       
+       update_clip_state(clip);
 }
 
-void ResourcesWidget::source_nolonger_in_use(ReadSource * source)
+void ResourcesWidget::add_source(ReadSource * source)
 {
        QTreeWidgetItem* item = m_sourceindices.value(source->get_id());
-       if (!item) return;
-       for (int i=0; i<5; ++i) {
-               item->setForeground(i, QColor(Qt::lightGray));
+       
+       if (! item) {
+               QTreeWidgetItem* item = new QTreeWidgetItem(sourcesTreeWidget);
+               m_sourceindices.insert(source->get_id(), item);
+               QString duration = frame_to_ms(source->get_nframes(), 44100);
+               item->setText(0, source->get_short_name());
+               item->setText(1, duration);
+               item->setText(2, "");
+               item->setText(3, "");
+               item->setData(0, Qt::UserRole, source->get_id());
+               item->setToolTip(0, source->get_short_name() + "   " + 
duration);
        }
+       
+       update_source_state(source->get_id());
 }
 
-void ResourcesWidget::source_back_in_use(ReadSource * source)
+void ResourcesWidget::remove_source(ReadSource * source)
 {
-       QTreeWidgetItem* item = m_sourceindices.value(source->get_id());
-       if (!item) return;
-       for (int i=0; i<5; ++i) {
-               item->setForeground(i, QColor(Qt::black));
-       }
 }
 
-void ResourcesWidget::add_new_clip_entry(AudioClip * clip)
+void ResourcesWidget::update_clip_state(AudioClip* clip)
 {
-       QTreeWidgetItem* sourceitem = 
m_sourceindices.value(clip->get_readsource_id());
+       QTreeWidgetItem* item = m_clipindices.value(clip->get_id());
+       Q_ASSERT(item);
        
-       if (! sourceitem ) return;
+       if (resources_manager()->is_clip_in_use(clip->get_id())) {
+               for (int i=0; i<5; ++i) {
+                       item->setForeground(i, QColor(Qt::black));
+               }
+       } else {
+               for (int i=0; i<5; ++i) {
+                       item->setForeground(i, QColor(Qt::lightGray));
+               }
+       }
        
-//     Q_ASSERT(sourceitem);
+       update_source_state(clip->get_readsource_id());
+}
        
-       QTreeWidgetItem* clipitem = new QTreeWidgetItem(sourceitem);
-       m_clipindices.insert(clip->get_id(), clipitem);
-       printf("add_new_clip_entry: clip is %lld\n", clip->get_id());
+void ResourcesWidget::update_source_state(qint64 id)
+{
+       QTreeWidgetItem* item = m_sourceindices.value(id);
+       Q_ASSERT(item);
        
-       clipitem->setText(0, clip->get_name());
-       QString start = frame_to_ms(clip->get_source_start_frame(), 
clip->get_rate());
-       QString end = frame_to_ms(clip->get_source_end_frame(), 
clip->get_rate());
-       clipitem->setText(1, frame_to_ms(clip->get_length(), clip->get_rate()));
-       clipitem->setText(2, start);
-       clipitem->setText(3, end);
-       clipitem->setData(0, Qt::UserRole, clip->get_id());
-       clipitem->setToolTip(0, clip->get_name() + "   " + start + " - " + end);
+       if (resources_manager()->is_source_in_use(id)) {
+               for (int i=0; i<5; ++i) {
+                       item->setForeground(i, QColor(Qt::black));
+               }
+       } else {
+               for (int i=0; i<5; ++i) {
+                       item->setForeground(i, QColor(Qt::lightGray));
+               }
+       }
 }
 

Index: traverso/widgets/ResourcesWidget.h
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/widgets/ResourcesWidget.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- traverso/widgets/ResourcesWidget.h  5 May 2007 20:43:58 -0000       1.5
+++ traverso/widgets/ResourcesWidget.h  17 May 2007 21:38:16 -0000      1.6
@@ -48,21 +48,23 @@
        QHash<qint64, QTreeWidgetItem*> m_clipindices;
        QHash<qint64, QTreeWidgetItem*> m_sourceindices;
        
-       void add_new_clip_entry(AudioClip* clip);
-       
+       void update_clip_state(AudioClip* clip);
+       void update_source_state(qint64 id);
 
 private slots:
        void set_project(Project* project);
-       void update_tree_widgets();
+       void populate_tree();
+       
        void view_combo_box_index_changed(int index);
        void song_combo_box_index_changed(int index);
+       
        void song_added(Song* song);
        void song_removed(Song* song);
        
-       void clip_removed(AudioClip* clip);
-       void clip_added(AudioClip* clip);
-       void source_nolonger_in_use(ReadSource* source);
-       void source_back_in_use(ReadSource* source);
+       void add_clip(AudioClip* clip);
+       void remove_clip(AudioClip* clip);
+       void add_source(ReadSource* source);
+       void remove_source(ReadSource* source);
 };
 
 #endif




reply via email to

[Prev in Thread] Current Thread [Next in Thread]