[Top][All Lists]
[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;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Traverso-commit] traverso/src common/APILinkedList.h core/AudioC...,
Remon Sijrier <=