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/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"));
 




reply via email to

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