[Top][All Lists]
[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
- [Traverso-commit] traverso/src core/SnapList.cpp core/SnapList.h ...,
Nicola Doebelin <=