[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Traverso-commit] traverso/src core/SnapList.cpp core/Song.cpp co...
From: |
Nicola Doebelin |
Subject: |
[Traverso-commit] traverso/src core/SnapList.cpp core/Song.cpp co... |
Date: |
Thu, 22 Nov 2007 22:01:06 +0000 |
CVSROOT: /sources/traverso
Module name: traverso
Changes by: Nicola Doebelin <n_doebelin> 07/11/22 22:01:06
Modified files:
src/core : SnapList.cpp Song.cpp TimeLine.cpp TimeLine.h
src/traverso/dialogs: MarkerDialog.cpp
src/traverso/songcanvas: TimeLineView.cpp
Log message:
Changed the internal storage of the Markers from QList to QMap to keep
them sorted.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/SnapList.cpp?cvsroot=traverso&r1=1.22&r2=1.23
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Song.cpp?cvsroot=traverso&r1=1.156&r2=1.157
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/TimeLine.cpp?cvsroot=traverso&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/TimeLine.h?cvsroot=traverso&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/dialogs/MarkerDialog.cpp?cvsroot=traverso&r1=1.17&r2=1.18
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/songcanvas/TimeLineView.cpp?cvsroot=traverso&r1=1.54&r2=1.55
Patches:
Index: core/SnapList.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/SnapList.cpp,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -b -r1.22 -r1.23
--- core/SnapList.cpp 5 Nov 2007 15:49:30 -0000 1.22
+++ core/SnapList.cpp 22 Nov 2007 22:01:05 -0000 1.23
@@ -98,7 +98,7 @@
}
// add all on-screen markers
- QList<Marker*> markerList = m_song->get_timeline()->get_markers();
+ QList<Marker*> markerList =
m_song->get_timeline()->get_markers().values();
for (int i = 0; i < markerList.size(); ++i) {
if (markerList.at(i)->is_snappable() &&
markerList.at(i)->get_when() >= m_rangeStart && markerList.at(i)->get_when() <=
m_rangeEnd) {
m_xposList.append(markerList.at(i)->get_when());
Index: core/Song.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/Song.cpp,v
retrieving revision 1.156
retrieving revision 1.157
diff -u -b -r1.156 -r1.157
--- core/Song.cpp 22 Nov 2007 15:47:12 -0000 1.156
+++ core/Song.cpp 22 Nov 2007 22:01:05 -0000 1.157
@@ -392,7 +392,7 @@
}
if (spec->isCdExport) {
- QList<Marker*> markers = m_timeline->get_markers();
+ QMap<TimeRef, Marker*> markers = m_timeline->get_markers();
if (m_timeline->get_start_location(startlocation)) {
PMESG2(" Start marker found at %s",
QS_C(timeref_to_ms(startlocation)));
@@ -825,7 +825,7 @@
{
QString output;
- QList<Marker*> mlist = m_timeline->get_markers();
+ QMap<TimeRef, Marker*> mlist = m_timeline->get_markers();
//Â Here we make the marker-stuff idiot-proof ;-). Traverso doesn't
insist on having any
//Â marker at all, so we need to handle cases like:
@@ -838,44 +838,44 @@
case 0:
// no markers present. We add one at the
beginning and one at the
// end of the render area.
- mlist.append(new Marker(m_timeline,
spec->startLocation, Marker::TEMP_CDTRACK));
- mlist.append(new Marker(m_timeline,
spec->endLocation, Marker::TEMP_ENDMARKER));
+ mlist.insertMulti(spec->startLocation, new
Marker(m_timeline, spec->startLocation, Marker::TEMP_CDTRACK));
+ mlist.insertMulti(spec->endLocation, new
Marker(m_timeline, spec->endLocation, Marker::TEMP_ENDMARKER));
break;
case 1:
// one marker is present. We add two more at
the beginning
- // and at the end of the render area. But we
must check if
- // the present marker happens to be at one of
these positions.
+ // and at the end of the render area. If the
present marker
+ // happened to be at either the start or the
end position,
+ // it will now be overwritten, so we will never
end up with
+ // two markers at the same position. just make
sure NOT to
+ // use 'insertMulti', use 'insert' instead.
//Â deactivate the next if-condition (only the
first one) if you want the
// stuff before the first marker to go into the
pre-gap
- if (mlist.at(0)->get_when() !=
(spec->startLocation)) {
- mlist.append(new Marker(m_timeline,
spec->startLocation, Marker::TEMP_CDTRACK));
- }
- if (mlist.at(0)->get_when() !=
spec->endLocation) {
- mlist.append(new Marker(m_timeline,
spec->endLocation, Marker::TEMP_ENDMARKER));
- }
+ mlist.insert(spec->startLocation, new
Marker(m_timeline, spec->startLocation, Marker::TEMP_CDTRACK));
+ mlist.insert(spec->endLocation, new
Marker(m_timeline, spec->endLocation, Marker::TEMP_ENDMARKER));
break;
}
} else {
- //Â would be ok, but let's check if there is an end marker
present. If not,
- //Â add one to spec->end_frame
- if (!m_timeline->has_end_marker()) {
- mlist.append(new Marker(m_timeline, spec->endLocation,
Marker::TEMP_ENDMARKER));
- }
- }
-
- // Sort the list according to Marker::get_when() values. This
- // is the correct way to do it according to the Qt docu.
- QMap<TimeRef, Marker*> markermap;
- foreach(Marker *marker, mlist) {
- markermap.insert(marker->get_when(), marker);
+ //Â would be ok, but let's add a marker at the end anyway, and
overwrite
+ // the one that could be there already.
+ mlist.insert(spec->endLocation, new Marker(m_timeline,
spec->endLocation, Marker::TEMP_ENDMARKER));
}
- mlist = markermap.values();
TimeRef start;
- for(int i = 0; i < mlist.size()-1; ++i) {
- Marker* startmarker = mlist.at(i);
- Marker* endmarker = mlist.at(i+1);
+ QMapIterator<TimeRef, Marker*> istart(mlist);
+ QMapIterator<TimeRef, Marker*> iend(mlist);
+
+ // istart is element 0
+ iend.next(); // set this one to element 1
+
+ bool isFirstTrack = true;
+
+ while (iend.hasNext()) {
+ istart.next();
+ iend.next();
+
+ Marker* startmarker = istart.value();
+ Marker* endmarker = iend.value();
output += "TRACK AUDIO\n";
@@ -898,7 +898,8 @@
output += " MESSAGE \"" + startmarker->get_message() +
"\"\n }\n }\n";
//Â add some stuff only required for the first track (e.g.
pre-gap)
- if (i == 0 && pregap) {
+ if (isFirstTrack && pregap) {
+ isFirstTrack = false;
//if (start == 0) {
// standard pregap, because we have a track
marker at the beginning
output += " PREGAP 00:02:00\n";
Index: core/TimeLine.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/TimeLine.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- core/TimeLine.cpp 22 Nov 2007 20:02:14 -0000 1.11
+++ core/TimeLine.cpp 22 Nov 2007 22:01:05 -0000 1.12
@@ -25,6 +25,7 @@
#include "Marker.h"
#include <AddRemove.h>
#include "AudioDevice.h"
+#include <QMultiMap>
TimeLine::TimeLine(Song * song)
@@ -40,8 +41,8 @@
QDomNode markersNode = doc.createElement("Markers");
domNode.appendChild(markersNode);
- for (int i = 0; i < m_markers.size(); ++i) {
- markersNode.appendChild(m_markers.at(i)->get_state(doc));
+ foreach (Marker *marker, m_markers) {
+ markersNode.appendChild(marker->get_state(doc));
}
return domNode;
@@ -56,7 +57,7 @@
while (!markerNode.isNull()) {
Marker* marker = new Marker(this, markerNode);
- m_markers.append(marker);
+ m_markers.insertMulti(marker->get_when(), marker);
connect(marker, SIGNAL(wasDragged(Marker*)), this,
SLOT(marker_dragged(Marker*)));
markerNode = markerNode.nextSibling();
}
@@ -100,13 +101,14 @@
void TimeLine::private_add_marker(Marker * marker)
{
- m_markers.append(marker);
+ m_markers.insertMulti(marker->get_when(), marker);
connect(marker, SIGNAL(wasDragged(Marker*)), this,
SLOT(marker_dragged(Marker*)));
}
void TimeLine::private_remove_marker(Marker * marker)
{
- m_markers.removeAll(marker);
+ QMultiMap<TimeRef, Marker*>::iterator i = QMultiMap<TimeRef,
Marker*>(m_markers).find(marker->get_when(), marker);
+ m_markers.erase(i);
}
Marker * TimeLine::get_marker(qint64 id)
Index: core/TimeLine.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/TimeLine.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- core/TimeLine.h 22 Nov 2007 20:02:14 -0000 1.9
+++ core/TimeLine.h 22 Nov 2007 22:01:05 -0000 1.10
@@ -25,6 +25,7 @@
#include "ContextItem.h"
#include <QDomNode>
#include "defines.h"
+#include <QMap>
class Song;
class Marker;
@@ -40,7 +41,7 @@
QDomNode get_state(QDomDocument doc);
int set_state(const QDomNode& node);
- QList<Marker*> get_markers() const {return m_markers;}
+ QMap<TimeRef, Marker*> get_markers() const {return m_markers;}
Song *get_song() const {return m_song;}
Marker* get_marker(qint64 id);
@@ -53,7 +54,7 @@
private:
Song* m_song;
- QList<Marker*> m_markers;
+ QMap<TimeRef, Marker*> m_markers;
private slots:
void private_add_marker(Marker* marker);
Index: traverso/dialogs/MarkerDialog.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/dialogs/MarkerDialog.cpp,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -b -r1.17 -r1.18
--- traverso/dialogs/MarkerDialog.cpp 22 Nov 2007 20:49:41 -0000 1.17
+++ traverso/dialogs/MarkerDialog.cpp 22 Nov 2007 22:01:05 -0000 1.18
@@ -524,18 +524,7 @@
Song *song = m_songlist.at(i);
TimeLine* tl = song->get_timeline();
- QMap<TimeRef, Marker*> markerMap;
-
- // convert the list into a map, because the list is not sorted, but the
- // map is sorted automatically
foreach(Marker* marker, tl->get_markers()) {
- markerMap.insert(marker->get_when(), marker);
- }
-
- QMapIterator<TimeRef, Marker*> iter(markerMap);
- while (iter.hasNext()) {
- iter.next();
- Marker *marker = iter.value();
QString name = marker->get_description();
QString pos = timeref_to_cd(marker->get_when());
Index: traverso/songcanvas/TimeLineView.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/songcanvas/TimeLineView.cpp,v
retrieving revision 1.54
retrieving revision 1.55
diff -u -b -r1.54 -r1.55
--- traverso/songcanvas/TimeLineView.cpp 22 Nov 2007 20:02:14 -0000
1.54
+++ traverso/songcanvas/TimeLineView.cpp 22 Nov 2007 22:01:05 -0000
1.55
@@ -472,7 +472,7 @@
Command * TimeLineView::clear_markers()
{
- QList<Marker*> lst = m_timeline->get_markers();
+ QMap<TimeRef, Marker*> lst = m_timeline->get_markers();
CommandGroup* group = new CommandGroup(m_timeline, tr("Clear Markers"));
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Traverso-commit] traverso/src core/SnapList.cpp core/Song.cpp co...,
Nicola Doebelin <=