traverso-commit
[Top][All Lists]
Advanced

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

[Traverso-commit] traverso resources/themes/default/traversotheme...


From: Remon Sijrier
Subject: [Traverso-commit] traverso resources/themes/default/traversotheme...
Date: Fri, 23 Nov 2007 14:21:08 +0000

CVSROOT:        /sources/traverso
Module name:    traverso
Changes by:     Remon Sijrier <r_sijrier>       07/11/23 14:21:08

Modified files:
        resources/themes/default: traversotheme.xml 
        src/core       : Marker.cpp Marker.h SnapList.cpp Song.cpp 
                         TimeLine.cpp TimeLine.h 
        src/traverso/dialogs: MarkerDialog.cpp 
        src/traverso/songcanvas: MarkerView.cpp TimeLineView.cpp 

Log message:
        Using QMap<position, Marker*> as storage format introduced a couple of 
problems, which are hard to solve, so:
        * Moving back to QList<Marker*>
        * Use qSort to sort the Markers in the list when adding or moving a 
marker
        
        General improvements:
        * Make it impossible to remove the End marker, unless the 'clear all 
markers' is used.
        * Distinguish the end marker by giving it another color
        * Some cleanups in Marker related code.
        
        @ Nicola, sorry for messing so much with your latest commits.... But 
your commit count did go up :P
        Please have a look to see if everything is still how you intended it to 
be!

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/resources/themes/default/traversotheme.xml?cvsroot=traverso&r1=1.45&r2=1.46
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Marker.cpp?cvsroot=traverso&r1=1.16&r2=1.17
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Marker.h?cvsroot=traverso&r1=1.14&r2=1.15
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/SnapList.cpp?cvsroot=traverso&r1=1.23&r2=1.24
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Song.cpp?cvsroot=traverso&r1=1.157&r2=1.158
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/TimeLine.cpp?cvsroot=traverso&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/TimeLine.h?cvsroot=traverso&r1=1.10&r2=1.11
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/dialogs/MarkerDialog.cpp?cvsroot=traverso&r1=1.18&r2=1.19
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/songcanvas/MarkerView.cpp?cvsroot=traverso&r1=1.25&r2=1.26
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/songcanvas/TimeLineView.cpp?cvsroot=traverso&r1=1.55&r2=1.56

Patches:
Index: resources/themes/default/traversotheme.xml
===================================================================
RCS file: 
/sources/traverso/traverso/resources/themes/default/traversotheme.xml,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -b -r1.45 -r1.46
--- resources/themes/default/traversotheme.xml  17 Oct 2007 14:46:17 -0000      
1.45
+++ resources/themes/default/traversotheme.xml  23 Nov 2007 14:21:07 -0000      
1.46
@@ -174,6 +174,8 @@
                <color name="Workcursor:default" red="255" green="0" blue="0" 
alpha="255" />
                
                <color name="Marker:default" red="128" green="0" blue="128" 
alpha="255" />
+               <color name="Marker:end" red="50" green="0" blue="255" 
alpha="255" />
+               <color name="Marker:blinkend" red="128" green="0" blue="255" 
alpha="255" />
                <color name="Marker:blink" red="255" green="0" blue="128" 
alpha="255" />
        </colors>
 </Themer> 

Index: src/core/Marker.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/Marker.cpp,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- src/core/Marker.cpp 22 Nov 2007 20:02:14 -0000      1.16
+++ src/core/Marker.cpp 23 Nov 2007 14:21:08 -0000      1.17
@@ -80,12 +80,6 @@
                case ENDMARKER:
                        domNode.setAttribute("type",  "ENDMARKER");
                        break;
-               case TEMP_CDTRACK:
-                       domNode.setAttribute("type",  "TEMP_CDTRACK");
-                       break;
-               case TEMP_ENDMARKER:
-                       domNode.setAttribute("type",  "TEMP_ENDMARKER");
-                       break;
        }
 
        return domNode;
@@ -110,17 +104,10 @@
 
        if (tp == "CDTRACK") m_type = CDTRACK;
        if (tp == "ENDMARKER") m_type = ENDMARKER;
-       if (tp == "TEMP_CDTRACK") m_type = TEMP_CDTRACK;
-       if (tp == "TEMP_ENDMARKER") m_type = TEMP_ENDMARKER;
 
        return 1;
 }
 
-void Marker::was_updated()
-{
-       emit wasDragged(this);
-}
-
 void Marker::set_when(const TimeRef& when)
 {
        m_when = when;

Index: src/core/Marker.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/Marker.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- src/core/Marker.h   22 Nov 2007 20:02:14 -0000      1.14
+++ src/core/Marker.h   23 Nov 2007 14:21:08 -0000      1.15
@@ -38,8 +38,6 @@
        enum Type {
                CDTRACK,
                ENDMARKER,
-               TEMP_CDTRACK,
-               TEMP_ENDMARKER
        };
 
        Marker(TimeLine* tl, const TimeRef when, Type type = CDTRACK);
@@ -49,8 +47,6 @@
        QDomNode get_state(QDomDocument doc);
        int set_state(const QDomNode& node);
 
-       void was_updated();
-       
        void set_when (const TimeRef& when);
        void set_description(const QString &);
        void set_performer(const QString &);
@@ -92,8 +88,6 @@
 signals:
        void positionChanged(Snappable*);
        void descriptionChanged();
-       void wasDragged(Marker*);
-
 };
 
 #endif

Index: src/core/SnapList.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/SnapList.cpp,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -b -r1.23 -r1.24
--- src/core/SnapList.cpp       22 Nov 2007 22:01:05 -0000      1.23
+++ src/core/SnapList.cpp       23 Nov 2007 14:21:08 -0000      1.24
@@ -98,7 +98,7 @@
        }
 
        // add all on-screen markers
-       QList<Marker*> markerList = 
m_song->get_timeline()->get_markers().values();
+       QList<Marker*> markerList = m_song->get_timeline()->get_markers();
        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: src/core/Song.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/Song.cpp,v
retrieving revision 1.157
retrieving revision 1.158
diff -u -b -r1.157 -r1.158
--- src/core/Song.cpp   22 Nov 2007 22:01:05 -0000      1.157
+++ src/core/Song.cpp   23 Nov 2007 14:21:08 -0000      1.158
@@ -392,7 +392,7 @@
        }
        
        if (spec->isCdExport) {
-               QMap<TimeRef, Marker*> markers = m_timeline->get_markers();
+               QList<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,8 @@
 {
        QString output;
 
-       QMap<TimeRef, Marker*> mlist = m_timeline->get_markers();
+       QList<Marker*> mlist = m_timeline->get_markers();
+       QList<Marker*> tempmarkers;
 
        // 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:
@@ -833,49 +834,57 @@
        // - one marker (doesn't make sense)
        // - enough markers, but no end marker
 
+       Marker* temp;
+       
        if (mlist.size() < 2) {
                switch (mlist.size()) {
                        case 0:
                                // no markers present. We add one at the 
beginning and one at the
                                // end of the render area.
-                               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));
+                               temp = new Marker(m_timeline, 
spec->startLocation, Marker::CDTRACK);
+                               tempmarkers.append(temp);
+                               mlist.prepend(temp);
+                               temp = new Marker(m_timeline, 
spec->endLocation, Marker::ENDMARKER);
+                               tempmarkers.append(temp);
+                               mlist.append(temp);
                                break;
                        case 1:
-                               // one marker is present. We add two more at 
the beginning
-                               // and at the end of the render area. If the 
present marker
+                               // one marker is present. We add two more, one 
at the beginning
+                               // and one 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.
+                               // two markers at the same position.
 
                                // deactivate the next if-condition (only the 
first one) if you want the
                                // stuff before the first marker to go into the 
pre-gap
-                               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));
+                               if (mlist.at(0)->get_when() != 
(spec->startLocation)) {
+                                       temp = new Marker(m_timeline, 
spec->startLocation, Marker::CDTRACK);
+                                       tempmarkers.append(temp);
+                                       mlist.prepend(temp);
+                               }
+                               if (mlist.at(0)->get_when() != 
(spec->startLocation)) {
+                                       temp = new Marker(m_timeline, 
spec->endLocation, Marker::ENDMARKER);
+                                       tempmarkers.append(temp);
+                                       mlist.append(temp);
+                               }
                                break;
                }
        } else {
-               // 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));
+                // 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()) {
+                       temp = new Marker(m_timeline, spec->endLocation, 
Marker::ENDMARKER);
+                       tempmarkers.append(temp);
+                       mlist.append(temp);
+               }
        }
 
        TimeRef start;
-       QMapIterator<TimeRef, Marker*> istart(mlist);
-       QMapIterator<TimeRef, Marker*> iend(mlist);
 
-                       // istart is element 0
-       iend.next();    // set this one to element 1
+       for(int i = 0; i < mlist.size()-1; ++i) {
 
-       bool isFirstTrack = true;
-
-       while (iend.hasNext()) {
-               istart.next();
-               iend.next();
-
-               Marker* startmarker = istart.value();
-               Marker* endmarker = iend.value();
+               Marker* startmarker = mlist.at(i);
+               Marker* endmarker = mlist.at(i+1);
 
                output += "TRACK AUDIO\n";
 
@@ -898,8 +907,7 @@
                output += "      MESSAGE \"" + startmarker->get_message() + 
"\"\n    }\n  }\n";
 
                // add some stuff only required for the first track (e.g. 
pre-gap)
-               if (isFirstTrack && pregap) {
-                       isFirstTrack = false;
+               if ((i == 0) && pregap) {
                        //if (start == 0) {
                                // standard pregap, because we have a track 
marker at the beginning
                                output += "  PREGAP 00:02:00\n";
@@ -920,17 +928,15 @@
                start += length;
 
                // check if the second marker is of type "Endmarker"
-               if ((endmarker->get_type() == Marker::ENDMARKER) || 
(endmarker->get_type() == Marker::TEMP_ENDMARKER)) {
+               if (endmarker->get_type() == Marker::ENDMARKER) {
                        break;
                }
        }
 
        // delete all temporary markers
-       foreach(Marker* marker, mlist) {
-               if ((marker->get_type() == Marker::TEMP_CDTRACK) || 
(marker->get_type() == Marker::TEMP_ENDMARKER)) {
+       foreach(Marker* marker, tempmarkers) {
                        delete marker;
                }
-       }
 
        return output;
 }

Index: src/core/TimeLine.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/TimeLine.cpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- src/core/TimeLine.cpp       22 Nov 2007 22:01:05 -0000      1.12
+++ src/core/TimeLine.cpp       23 Nov 2007 14:21:08 -0000      1.13
@@ -25,8 +25,11 @@
 #include "Marker.h"
 #include <AddRemove.h>
 #include "AudioDevice.h"
-#include <QMultiMap>
 
+static bool smallerMarker(const Marker* left, const Marker* right )
+{
+       return left->get_when() < right->get_when();
+}
 
 TimeLine::TimeLine(Song * song)
        : ContextItem(song)
@@ -57,16 +60,20 @@
 
        while (!markerNode.isNull()) {
                Marker* marker = new Marker(this, markerNode);
-               m_markers.insertMulti(marker->get_when(), marker);
-               connect(marker, SIGNAL(wasDragged(Marker*)), this, 
SLOT(marker_dragged(Marker*)));
+               connect(marker, SIGNAL(positionChanged(Snappable*)), this, 
SLOT(marker_position_changed(Snappable*)));
+               m_markers.append(marker);
                markerNode = markerNode.nextSibling();
        }
 
+       qSort(m_markers.begin(), m_markers.end(), smallerMarker);
+       
        return 1;
 }
 
 Command * TimeLine::add_marker(Marker* marker, bool historable)
 {
+       connect(marker, SIGNAL(positionChanged(Snappable*)), this, 
SLOT(marker_position_changed(Snappable*)));
+       
        AddRemove* cmd;
        cmd = new AddRemove(this, marker, historable, m_song,
                "private_add_marker(Marker*)", "markerAdded(Marker*)",
@@ -101,25 +108,17 @@
 
 void TimeLine::private_add_marker(Marker * marker)
 {
-       m_markers.insertMulti(marker->get_when(), marker);
-       connect(marker, SIGNAL(wasDragged(Marker*)), this, 
SLOT(marker_dragged(Marker*)));
+       m_markers.append(marker);
+       qSort(m_markers.begin(), m_markers.end(), smallerMarker);
 }
 
 void TimeLine::private_remove_marker(Marker * marker)
 {
-       QMultiMap<TimeRef, Marker*>::iterator i = QMultiMap<TimeRef, 
Marker*>(m_markers).find(marker->get_when(), marker);
-       m_markers.erase(i);
+       m_markers.removeAll(marker);
 }
 
 Marker * TimeLine::get_marker(qint64 id)
 {
-       // What about using a QHash instead of QList for storing our markers ?
-       // Then this function would be as simple as return m_markers.value(id);
-       // And most likely faster too :-)
-       // On the other hand, QList concumes less memory, and when marker count
-       // keeps below a certain value (< 100 or so), it perhaps doesn't make 
much sense
-       // The get_state() would use the foreach macro, as used below, to make 
things real easy ;-)
-       
        foreach(Marker* marker, m_markers) {
                if (marker->get_id() == id) {
                        return marker;
@@ -143,18 +142,8 @@
 
 bool TimeLine::get_start_location(TimeRef & location)
 {
-       TimeRef result(LONG_LONG_MAX);
-       
-       foreach(Marker* marker, m_markers) {
-               if ( ! (marker->get_type() == Marker::ENDMARKER) ) {
-                       if (marker->get_when() < result) {
-                               result = marker->get_when();
-                       }
-               }
-       }
-       
-       if (result != LONG_LONG_MAX) {
-               location = result;
+       if (m_markers.size() > 0) {
+               location = m_markers.first()->get_when();
                return true;
        }
        
@@ -173,8 +162,9 @@
        return false;
 }
 
-void TimeLine::marker_dragged(Marker *marker)
+void TimeLine::marker_position_changed(Snappable* snap)
 {
-       emit markerDragged(marker);
+       qSort(m_markers.begin(), m_markers.end(), smallerMarker);
+       emit markerPositionChanged((Marker*)snap);
 }
 

Index: src/core/TimeLine.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/TimeLine.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- src/core/TimeLine.h 22 Nov 2007 22:01:05 -0000      1.10
+++ src/core/TimeLine.h 23 Nov 2007 14:21:08 -0000      1.11
@@ -24,11 +24,12 @@
 
 #include "ContextItem.h"
 #include <QDomNode>
+#include <QList>
 #include "defines.h"
-#include <QMap>
 
 class Song;
 class Marker;
+class Snappable;
 class Command;
 
 class TimeLine : public ContextItem
@@ -41,7 +42,7 @@
        QDomNode get_state(QDomDocument doc);
        int set_state(const QDomNode& node);
        
-       QMap<TimeRef, Marker*> get_markers() const {return m_markers;}
+       QList<Marker*> get_markers() const {return m_markers;}
        Song *get_song() const {return m_song;}
        
        Marker* get_marker(qint64 id);
@@ -54,17 +55,17 @@
 
 private:
        Song* m_song;
-       QMap<TimeRef, Marker*> m_markers;
+       QList<Marker*> m_markers;
 
 private slots:
        void private_add_marker(Marker* marker);
        void private_remove_marker(Marker* marker);
-       void marker_dragged(Marker* marker);
+       void marker_position_changed(Snappable* snap);
 
 signals:
        void markerAdded(Marker*);
        void markerRemoved(Marker*);
-       void markerDragged(Marker*);
+       void markerPositionChanged(Marker*);
 };
 
 #endif

Index: src/traverso/dialogs/MarkerDialog.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/dialogs/MarkerDialog.cpp,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- src/traverso/dialogs/MarkerDialog.cpp       22 Nov 2007 22:01:05 -0000      
1.18
+++ src/traverso/dialogs/MarkerDialog.cpp       23 Nov 2007 14:21:08 -0000      
1.19
@@ -37,7 +37,7 @@
 #include <QFileDialog>
 #include <QDateTime>
 #include <AddRemove.h>
-#include <QMap>
+#include "Information.h"
 
 MarkerDialog::MarkerDialog(QWidget * parent)
        : QDialog(parent)
@@ -115,7 +115,7 @@
                comboBoxDisplaySong->addItem(m_songlist.at(i)->get_title());
                connect(m_songlist.at(i)->get_timeline(), 
SIGNAL(markerAdded(Marker*)), this, SLOT(update_marker_treeview()));
                connect(m_songlist.at(i)->get_timeline(), 
SIGNAL(markerRemoved(Marker*)), this, SLOT(update_marker_treeview()));
-               connect(m_songlist.at(i)->get_timeline(), 
SIGNAL(markerDragged(Marker*)), this, SLOT(update_marker_treeview()));
+               connect(m_songlist.at(i)->get_timeline(), 
SIGNAL(markerPositionChanged(Marker*)), this, SLOT(update_marker_treeview()));
        }
 
        // Fill dialog with marker stuff....
@@ -481,6 +481,11 @@
                return;
        }
 
+       if (m_marker->get_type() == Marker::ENDMARKER) {
+               info().information(tr("It's not possible to remove the 
endmarker!!"));
+               return;
+       }
+
        Song *song = m_songlist.at(comboBoxDisplaySong->currentIndex());
        TimeLine* tl = song->get_timeline();
                

Index: src/traverso/songcanvas/MarkerView.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/songcanvas/MarkerView.cpp,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -b -r1.25 -r1.26
--- src/traverso/songcanvas/MarkerView.cpp      5 Nov 2007 15:49:32 -0000       
1.25
+++ src/traverso/songcanvas/MarkerView.cpp      23 Nov 2007 14:21:08 -0000      
1.26
@@ -121,7 +121,11 @@
 
 void MarkerView::load_theme_data()
 {
+       if (m_marker->get_type() == Marker::ENDMARKER) {
+               m_fillColor = themer()->get_color("Marker:end");
+       } else {
        m_fillColor = themer()->get_color("Marker:default");
+       }
        calculate_bounding_rect();
 }
 
@@ -130,10 +134,18 @@
        m_active = b;
 
        if (b) {
+               if (m_marker->get_type() == Marker::ENDMARKER) {
+                       m_fillColor = themer()->get_color("Marker:blinkend");
+               } else {
                m_fillColor = themer()->get_color("Marker:blink");
+               }
                m_line->set_color(QColor(0, 0, 0, 140));
        } else {
+               if (m_marker->get_type() == Marker::ENDMARKER) {
+                       m_fillColor = themer()->get_color("Marker:end");
+               } else {
                m_fillColor = themer()->get_color("Marker:default");
+               }
                m_line->set_color(QColor(0, 0, 0, 45));
        }
 

Index: src/traverso/songcanvas/TimeLineView.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/songcanvas/TimeLineView.cpp,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -b -r1.55 -r1.56
--- src/traverso/songcanvas/TimeLineView.cpp    22 Nov 2007 22:01:05 -0000      
1.55
+++ src/traverso/songcanvas/TimeLineView.cpp    23 Nov 2007 14:21:08 -0000      
1.56
@@ -39,8 +39,8 @@
 #include <defines.h>
 #include <AddRemove.h>
 #include <CommandGroup.h>
-#include <InputEngine.h>
-#include "AudioDevice.h"
+#include "Information.h"
+#include "InputEngine.h"
 
 #include <QFont>
 #include <QDebug>
@@ -83,13 +83,13 @@
        d->view->get_songview()->start_shuttle(false);
        d->view->set_dragging(false);
        delete d;
-       return do_action();
+       
+       return 1;
 }
 
 int DragMarker::do_action()
 {
        m_marker->set_when(m_newWhen);
-       m_marker->was_updated();
        return 1;
 }
 
@@ -378,6 +378,10 @@
 {
        if (m_blinkingMarker) {
                Marker* marker = m_blinkingMarker->get_marker();
+               if (marker->get_type() == Marker::ENDMARKER) {
+                       info().information(tr("It's not possible to remove the 
endmarker!!"));
+                       return ie().failure();
+               }
                return m_timeline->remove_marker(marker);
        }
 
@@ -472,11 +476,9 @@
 
 Command * TimeLineView::clear_markers()
 {
-       QMap<TimeRef, Marker*> lst = m_timeline->get_markers();
-       
        CommandGroup* group = new CommandGroup(m_timeline, tr("Clear Markers"));
 
-       foreach(Marker *m, lst) {
+       foreach(Marker *m, m_timeline->get_markers()) {
                group->add_command(m_timeline->remove_marker(m));
        }
 




reply via email to

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