traverso-commit
[Top][All Lists]
Advanced

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

[Traverso-commit] traverso/src common/APILinkedList.h core/AudioC...


From: Remon Sijrier
Subject: [Traverso-commit] traverso/src common/APILinkedList.h core/AudioC...
Date: Mon, 26 Nov 2007 16:02:13 +0000

CVSROOT:        /sources/traverso
Module name:    traverso
Changes by:     Remon Sijrier <r_sijrier>       07/11/26 16:02:13

Modified files:
        src/common     : APILinkedList.h 
        src/core       : AudioClip.cpp AudioClip.h Track.cpp Track.h 

Log message:
        * added a sort::(APILinkedListNode*), usefull when a node change 
position
        * fix is_smaller_then() for AudioClip/Track
        * call APILinkedList::sort(AudioClip* ) when a Clip changed position. 
This sometimes result in 2 times a sort action in Tracks cliplist when a node 
was added, but there are conditions when a clip is not added to a Track but 
only moved.....

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/common/APILinkedList.h?cvsroot=traverso&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/AudioClip.cpp?cvsroot=traverso&r1=1.153&r2=1.154
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/AudioClip.h?cvsroot=traverso&r1=1.68&r2=1.69
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Track.cpp?cvsroot=traverso&r1=1.74&r2=1.75
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Track.h?cvsroot=traverso&r1=1.35&r2=1.36

Patches:
Index: common/APILinkedList.h
===================================================================
RCS file: /sources/traverso/traverso/src/common/APILinkedList.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- common/APILinkedList.h      24 Nov 2007 22:49:22 -0000      1.3
+++ common/APILinkedList.h      26 Nov 2007 16:02:13 -0000      1.4
@@ -53,6 +53,7 @@
        APILinkedListNode* last() const {return m_last;}
        int size() const {return m_size;}
        void clear() {m_head = 0; m_last = 0; m_size=0;}
+       void sort(APILinkedListNode* node);
        bool isEmpty() {return m_size == 0 ? true : false;}
        int indexOf(APILinkedListNode* node);
        APILinkedListNode* at(int i);
@@ -101,25 +102,23 @@
 {
        Q_ASSERT(item);
        
-       APILinkedListNode *q,*r;
-       q = m_head;
-       
-       if (!q) {
+       if (!m_size) {
                return 0;
        }
        
-       if(q == item) {
-               m_head = q->next;
+       if(m_head == item) {
+               m_head = m_head->next;
                m_size--;
                if (m_size == 0) {
-                       m_last = 0;
+                       m_last = m_head = 0;
                }
                Q_ASSERT(m_last == slow_last());
                return 1;
        }
 
-       r = q;
-       q = q->next;
+       APILinkedListNode *q,*r;
+       r = m_head;
+       q = m_head->next;
        
        while( q!=0 ) {
                if( q == item ) {
@@ -164,7 +163,7 @@
 // T = O(n)
 inline APILinkedListNode * APILinkedList::slow_last() const
 {
-       if (!m_head) {
+       if (!m_size) {
                return 0;
        }
        
@@ -234,4 +233,11 @@
        return 0;
 }
 
+inline void APILinkedList::sort(APILinkedListNode* node)
+{
+       if (remove(node)) {
+               add_and_sort(node);
+       }
+}
+
 #endif

Index: core/AudioClip.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/AudioClip.cpp,v
retrieving revision 1.153
retrieving revision 1.154
diff -u -b -r1.153 -r1.154
--- core/AudioClip.cpp  24 Nov 2007 10:56:47 -0000      1.153
+++ core/AudioClip.cpp  26 Nov 2007 16:02:13 -0000      1.154
@@ -76,6 +76,7 @@
 AudioClip::AudioClip(const QDomNode& node)
        : ContextItem()
        , Snappable()
+       , m_track(0)
        , m_readSource(0)
 {
        PENTERCONS;
@@ -348,6 +349,9 @@
 {
        m_trackStartLocation = location;
        set_track_end_location(m_trackStartLocation + m_length);
+       if (m_track) {
+               THREAD_SAVE_INVOKE(m_track, this, 
clip_position_changed(AudioClip*));
+       }
        emit positionChanged(this);
 }
 

Index: core/AudioClip.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/AudioClip.h,v
retrieving revision 1.68
retrieving revision 1.69
diff -u -b -r1.68 -r1.69
--- core/AudioClip.h    19 Nov 2007 11:18:53 -0000      1.68
+++ core/AudioClip.h    26 Nov 2007 16:02:13 -0000      1.69
@@ -111,7 +111,7 @@
        bool is_locked() const {return m_isLocked;}
        bool has_song() const;
        bool is_readsource_invalid() const {return !m_isReadSourceValid;}
-       bool is_smaller_then(APILinkedListNode* node) {return 
((AudioClip*)node)->get_track_start_location() < get_track_start_location();}
+       bool is_smaller_then(APILinkedListNode* node) {return 
((AudioClip*)node)->get_track_start_location() > get_track_start_location();}
 
        int recording_state() const;
 

Index: core/Track.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/Track.cpp,v
retrieving revision 1.74
retrieving revision 1.75
diff -u -b -r1.74 -r1.75
--- core/Track.cpp      19 Nov 2007 11:18:53 -0000      1.74
+++ core/Track.cpp      26 Nov 2007 16:02:13 -0000      1.75
@@ -105,7 +105,7 @@
        if (! istemplate ) {
                QDomNode clips = doc.createElement("Clips");
        
-               apill_foreach(AudioClip* clip, AudioClip, audioClipList) {
+               apill_foreach(AudioClip* clip, AudioClip, m_clips) {
                        if (clip->get_length() == qint64(0)) {
                                PERROR("Clip lenght is 0! This shouldn't 
happen!!!!");
                                continue;
@@ -189,7 +189,7 @@
 
 AudioClip* Track::get_clip_after(const TimeRef& pos)
 {
-       apill_foreach(AudioClip* clip, AudioClip, audioClipList) {
+       apill_foreach(AudioClip* clip, AudioClip, m_clips) {
                if (clip->get_track_start_location() > pos) {
                        return clip;
                }
@@ -200,7 +200,7 @@
 
 AudioClip* Track::get_clip_before(const TimeRef& pos)
 {
-       apill_foreach(AudioClip* clip, AudioClip, audioClipList) {
+       apill_foreach(AudioClip* clip, AudioClip, m_clips) {
                if (clip->get_track_start_location() < pos) {
                        return clip;
                }
@@ -237,12 +237,12 @@
 
 void Track::private_add_clip(AudioClip* clip)
 {
-       audioClipList.add_and_sort(clip);
+       m_clips.add_and_sort(clip);
 }
 
 void Track::private_remove_clip(AudioClip* clip)
 {
-       audioClipList.remove(clip);
+       m_clips.remove(clip);
 }
 
 int Track::arm()
@@ -367,7 +367,7 @@
 
 int Track::get_total_clips()
 {
-       return audioClipList.size();
+       return m_clips.size();
 }
 
 void Track::set_muted_by_solo(bool muted)
@@ -422,7 +422,7 @@
 
        m_pluginChain->process_pre_fader(bus, nframes);
        
-       apill_foreach(AudioClip* clip, AudioClip, audioClipList) {
+       apill_foreach(AudioClip* clip, AudioClip, m_clips) {
                if (isArmed && clip->recording_state() == 
AudioClip::NO_RECORDING) {
                        if (m_isMuted || mutedBySolo) {
                                continue;
@@ -500,13 +500,13 @@
 
 void Track::get_render_range(TimeRef& startlocation, TimeRef& endlocation )
 {
-       if (audioClipList.size() == 0)
+       if (m_clips.size() == 0)
                return;
                
        endlocation = TimeRef();
        startlocation = LONG_LONG_MAX;
        
-       apill_foreach(AudioClip* clip, AudioClip, audioClipList) {
+       apill_foreach(AudioClip* clip, AudioClip, m_clips) {
                if (! clip->is_muted() ) {
                        if (clip->get_track_end_location() > endlocation) {
                                endlocation = clip->get_track_end_location();
@@ -552,3 +552,7 @@
        emit inBusChanged();
 }
 
+void Track::clip_position_changed(AudioClip * clip)
+{
+       m_clips.sort(clip);
+}

Index: core/Track.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/Track.h,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -b -r1.35 -r1.36
--- core/Track.h        19 Nov 2007 11:18:53 -0000      1.35
+++ core/Track.h        26 Nov 2007 16:02:13 -0000      1.36
@@ -79,9 +79,9 @@
        int get_total_clips();
        QDomNode get_state(QDomDocument doc, bool istemplate=false);
        PluginChain* get_plugin_chain() const {return m_pluginChain;}
-       APILinkedList& get_cliplist() {return audioClipList;}
+       APILinkedList& get_cliplist() {return m_clips;}
        int get_sort_index() const;
-       bool is_smaller_then(APILinkedListNode* node) {return 
((Track*)node)->get_sort_index() < get_sort_index();}
+       bool is_smaller_then(APILinkedListNode* node) {return 
((Track*)node)->get_sort_index() > get_sort_index();}
 
        
 
@@ -119,7 +119,7 @@
 
 private :
        Song*           m_song;
-       APILinkedList   audioClipList;
+       APILinkedList   m_clips;
 
        float   m_pan;
        int numtakes;
@@ -157,6 +157,7 @@
 
 public slots:
        void set_gain(float gain);
+       void clip_position_changed(AudioClip* clip);
        
        float get_gain() const;
 




reply via email to

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