traverso-commit
[Top][All Lists]
Advanced

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

[Traverso-commit] traverso/src core/SnapList.cpp core/SnapList.h ...


From: Nicola Doebelin
Subject: [Traverso-commit] traverso/src core/SnapList.cpp core/SnapList.h ...
Date: Wed, 01 Oct 2008 20:26:49 +0000

CVSROOT:        /sources/traverso
Module name:    traverso
Changes by:     Nicola Doebelin <n_doebelin>    08/10/01 20:26:49

Modified files:
        src/core       : SnapList.cpp SnapList.h 
        src/traverso/widgets: TransportConsoleWidget.cpp 
                              TransportConsoleWidget.h 

Log message:
        Some changes to the transport console. We can't use the sheet's 
snaplist to identify positions to skip to, because it does not consider 
offscreen markers and clip boundaries. The transport console thus needs its own 
implementation to find snap positions.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/SnapList.cpp?cvsroot=traverso&r1=1.30&r2=1.31
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/SnapList.h?cvsroot=traverso&r1=1.17&r2=1.18
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/widgets/TransportConsoleWidget.cpp?cvsroot=traverso&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/widgets/TransportConsoleWidget.h?cvsroot=traverso&r1=1.6&r2=1.7

Patches:
Index: core/SnapList.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/SnapList.cpp,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -b -r1.30 -r1.31
--- core/SnapList.cpp   21 Feb 2008 20:00:48 -0000      1.30
+++ core/SnapList.cpp   1 Oct 2008 20:26:48 -0000       1.31
@@ -53,7 +53,7 @@
 
 void SnapList::mark_dirty()
 {
-       printf("mark_dirty()\n");
+//     printf("mark_dirty()\n");
        m_isDirty = true;
 }
 

Index: core/SnapList.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/SnapList.h,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -b -r1.17 -r1.18
--- core/SnapList.h     21 Feb 2008 20:13:42 -0000      1.17
+++ core/SnapList.h     1 Oct 2008 20:26:48 -0000       1.18
@@ -45,6 +45,7 @@
 
        void set_range(const TimeRef& start, const TimeRef& end, int 
scalefactor);
        void mark_dirty();
+       bool is_dirty() {return m_isDirty;};
 
 private:
        Sheet*          m_sheet;

Index: traverso/widgets/TransportConsoleWidget.cpp
===================================================================
RCS file: 
/sources/traverso/traverso/src/traverso/widgets/TransportConsoleWidget.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- traverso/widgets/TransportConsoleWidget.cpp 6 Aug 2008 16:47:21 -0000       
1.11
+++ traverso/widgets/TransportConsoleWidget.cpp 1 Oct 2008 20:26:48 -0000       
1.12
@@ -109,6 +109,10 @@
 // even during playback.
 void TransportConsoleWidget::to_left()
 {
+       if (m_sheet->get_snap_list()->is_dirty()) {
+               update_snappositions();
+       }
+
        TimeRef p = m_sheet->get_transport_location();
 
        if (m_skipTimer.isActive()) 
@@ -116,8 +120,7 @@
                p = m_lastSnapPosition;
        }
 
-       SnapList* slist = m_sheet->get_snap_list();
-       TimeRef newpos = slist->prev_snap_pos(p);
+       TimeRef newpos = prev_snap_pos(p);
        m_sheet->set_transport_pos(newpos);
 
        m_lastSnapPosition = newpos;
@@ -146,10 +149,11 @@
 
 void TransportConsoleWidget::to_right()
 {
-       SnapList* slist = m_sheet->get_snap_list();
-       TimeRef p = m_sheet->get_transport_location();
-       TimeRef newpos = slist->next_snap_pos(p);
-       m_sheet->set_transport_pos(newpos);
+       if (m_sheet->get_snap_list()->is_dirty()) {
+               update_snappositions();
+       }
+
+       
m_sheet->set_transport_pos(next_snap_pos(m_sheet->get_transport_location()));
 }
 
 void TransportConsoleWidget::transfer_started()
@@ -218,5 +222,77 @@
        setIconSize(QSize(iconsize, iconsize));
 }
 
+void TransportConsoleWidget::update_snappositions()
+{
+       m_xposList.clear();
+
+       // store the beginning of the sheet and the work cursor
+       m_xposList << TimeRef();
+       m_xposList << m_sheet->get_work_location();
+
+       // store all clip borders
+       QList<AudioClip* > acList = 
m_sheet->get_audioclip_manager()->get_clip_list();
+       for (int i = 0; i < acList.size(); ++i) {
+               m_xposList << acList.at(i)->get_track_start_location();
+               m_xposList << acList.at(i)->get_track_end_location();
+       }
+
+       // store all marker positions
+       QList<Marker*> markerList = m_sheet->get_timeline()->get_markers();
+       for (int i = 0; i < markerList.size(); ++i) {
+               m_xposList << markerList.at(i)->get_when();
+       }
+
+       qSort(m_xposList);
+
+       // remove duplicates
+       QMutableListIterator<TimeRef> it(m_xposList);
+       while (it.hasNext()) {
+               TimeRef val = it.next();
+               if (m_xposList.count(val) > 1) {
+                       it.remove();
+               }
+       }
+}
+
+TimeRef TransportConsoleWidget::prev_snap_pos(const TimeRef& p)
+{
+       if (p < TimeRef()) {
+               PERROR("pos < 0");
+               return TimeRef();
+       }
+
+       QListIterator<TimeRef> it(m_xposList);
+
+       it.toBack();
+       while (it.hasPrevious()) {
+               TimeRef pos = it.previous();
+               if (pos < p) {
+                       return pos;
+               }
+       }
+
+       return p;
+}
+
+TimeRef TransportConsoleWidget::next_snap_pos(const TimeRef& p)
+{
+       if (p > m_xposList.last()) {
+               PERROR("pos > last snap position");
+               return p;
+       }
+
+       QListIterator<TimeRef> it(m_xposList);
+
+       while (it.hasNext()) {
+               TimeRef pos = it.next();
+               if (pos > p) {
+                       return pos;
+               }
+       }
+
+       return p;
+}
+
 //eof
 

Index: traverso/widgets/TransportConsoleWidget.h
===================================================================
RCS file: 
/sources/traverso/traverso/src/traverso/widgets/TransportConsoleWidget.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- traverso/widgets/TransportConsoleWidget.h   6 Aug 2008 16:47:21 -0000       
1.6
+++ traverso/widgets/TransportConsoleWidget.h   1 Oct 2008 20:26:49 -0000       
1.7
@@ -55,6 +55,9 @@
        QTimer          m_updateTimer;
        QTimer          m_skipTimer;
        TimeRef         m_lastSnapPosition;
+       QList<TimeRef>  m_xposList;
+       TimeRef         prev_snap_pos(const TimeRef&);
+       TimeRef         next_snap_pos(const TimeRef&);
 
 protected slots:
        void set_project(Project*);
@@ -73,6 +76,7 @@
        void update_recording_state();
        void update_label();
        void update_layout();
+       void update_snappositions();
 };
 
 #endif




reply via email to

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