traverso-commit
[Top][All Lists]
Advanced

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

[Traverso-commit] traverso/src commands/MoveClip.cpp traverso/son...


From: Remon Sijrier
Subject: [Traverso-commit] traverso/src commands/MoveClip.cpp traverso/son...
Date: Tue, 10 Apr 2007 17:11:49 +0000

CVSROOT:        /sources/traverso
Module name:    traverso
Changes by:     Remon Sijrier <r_sijrier>       07/04/10 17:11:49

Modified files:
        src/commands   : MoveClip.cpp 
        src/traverso/songcanvas: AudioClipView.cpp AudioClipView.h 
                                 CurveView.cpp MarkerView.cpp 
                                 MarkerView.h TimeLineView.cpp 
        src/traverso   : traverso.pro 
Added files:
        src/traverso/songcanvas: PositionIndicator.cpp 
                                 PositionIndicator.h 

Log message:
        * Drag Marker fixes
        * Convenience class PositionIndicator added, both Drag Marker and Move 
Clip updated

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/commands/MoveClip.cpp?cvsroot=traverso&r1=1.29&r2=1.30
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/songcanvas/AudioClipView.cpp?cvsroot=traverso&r1=1.35&r2=1.36
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/songcanvas/AudioClipView.h?cvsroot=traverso&r1=1.17&r2=1.18
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/songcanvas/CurveView.cpp?cvsroot=traverso&r1=1.24&r2=1.25
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/songcanvas/MarkerView.cpp?cvsroot=traverso&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/songcanvas/MarkerView.h?cvsroot=traverso&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/songcanvas/TimeLineView.cpp?cvsroot=traverso&r1=1.18&r2=1.19
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/songcanvas/PositionIndicator.cpp?cvsroot=traverso&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/songcanvas/PositionIndicator.h?cvsroot=traverso&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/traverso.pro?cvsroot=traverso&r1=1.41&r2=1.42

Patches:
Index: commands/MoveClip.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/commands/MoveClip.cpp,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -b -r1.29 -r1.30
--- commands/MoveClip.cpp       6 Apr 2007 09:29:03 -0000       1.29
+++ commands/MoveClip.cpp       10 Apr 2007 17:11:48 -0000      1.30
@@ -155,6 +155,7 @@
        d->origTrackStartFrame = m_clip->get_track_start_frame();
        d->origTrackEndFrame = m_clip->get_track_end_frame();
        d->resync = config().get_property("AudioClip", "SyncDuringDrag", 
false).toBool();
+       d->view->set_dragging(true);
 }
 
 
@@ -193,6 +194,8 @@
                m_clip->set_left_edge(m_oldOppositeEdge);
        }
 
+       d->view->set_dragging(false);
+       
        return 1;
 }
 

Index: traverso/songcanvas/AudioClipView.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/songcanvas/AudioClipView.cpp,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -b -r1.35 -r1.36
--- traverso/songcanvas/AudioClipView.cpp       2 Apr 2007 09:52:31 -0000       
1.35
+++ traverso/songcanvas/AudioClipView.cpp       10 Apr 2007 17:11:48 -0000      
1.36
@@ -29,6 +29,7 @@
 #include "TrackView.h"
 #include "FadeView.h"
 #include "CurveView.h"
+#include "PositionIndicator.h"
 
 #include "Themer.h"
 #include <Config.h>
@@ -43,7 +44,10 @@
 
 
 AudioClipView::AudioClipView(SongView* sv, TrackView* parent, AudioClip* clip )
-       : ViewItem(parent, clip), m_tv(parent), m_clip(clip)
+       : ViewItem(parent, clip)
+       , m_tv(parent)
+       , m_clip(clip)
+       , m_dragging(false)
 {
        PENTERCONS;
        
@@ -59,6 +63,7 @@
 
        m_waitingForPeaks = false;
        m_progress = m_peakloadingcount = 0;
+       m_posIndicator = 0;
        m_song = m_clip->get_song();
        
        if (FadeCurve* curve = m_clip->get_fade_in()) {
@@ -196,6 +201,10 @@
 //             curveView->paint(painter, option, widget);
        }
        
+       if (m_dragging) {
+               m_posIndicator->set_value(frame_to_smpte(x() * 
m_sv->scalefactor, m_song->get_rate()));
+       }
+       
        painter->restore();
 
 //     printf("drawing clip\n");
@@ -691,10 +700,30 @@
        m_boundingRect = QRectF(0, 0, (newPos / m_sv->scalefactor), m_height);
        
        QRect updaterect = QRect(m_oldRecordingPos, 0, newPos, 
m_boundingRect.height());
-       update();
+       update(updaterect);
        
        m_oldRecordingPos = newPos;
 }
 
+void AudioClipView::set_dragging(bool dragging)
+{
+       if (dragging) {
+               if (! m_posIndicator) {
+                       m_posIndicator = new PositionIndicator(this);
+                       scene()->addItem(m_posIndicator);
+                       m_posIndicator->set_position(2, 
get_childview_y_offset() + 1);
+               }
+       } else {
+               if (m_posIndicator) {
+                       scene()->removeItem(m_posIndicator);
+                       delete m_posIndicator;
+                       m_posIndicator = 0;
+               }
+       }
+       
+       m_dragging = dragging;
+}
+
+
 //eof
 

Index: traverso/songcanvas/AudioClipView.h
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/songcanvas/AudioClipView.h,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -b -r1.17 -r1.18
--- traverso/songcanvas/AudioClipView.h 2 Apr 2007 09:52:31 -0000       1.17
+++ traverso/songcanvas/AudioClipView.h 10 Apr 2007 17:11:48 -0000      1.18
@@ -17,7 +17,7 @@
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
 
-$Id: AudioClipView.h,v 1.17 2007/04/02 09:52:31 r_sijrier Exp $
+$Id: AudioClipView.h,v 1.18 2007/04/10 17:11:48 r_sijrier Exp $
 */
 
 #ifndef AUDIO_CLIP_VIEW_H
@@ -36,6 +36,7 @@
 class TrackView;
 class FadeView;
 class Peak;
+class PositionIndicator;
 
 class AudioClipView : public ViewItem
 {
@@ -60,6 +61,7 @@
        
        TrackView* get_trackview() const {return m_tv;}
        void set_trackview(TrackView* view) {m_tv = view;}
+       void set_dragging(bool dragging);
        
        void load_theme_data();
        
@@ -73,6 +75,7 @@
        Song*           m_song;
        CurveView*      curveView;
        QList<Peak*>    m_peakloadinglist;
+       PositionIndicator* m_posIndicator;
 
        QPixmap clipNamePixmapActive;
        QPixmap clipNamePixmapInActive;
@@ -84,6 +87,7 @@
        bool m_waitingForPeaks;
        bool m_mergedView;
        bool m_classicView;
+       bool m_dragging;
        int m_height;
        int m_infoAreaHeight;
        int m_mimimumheightforinfoarea;

Index: traverso/songcanvas/CurveView.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/songcanvas/CurveView.cpp,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -b -r1.24 -r1.25
--- traverso/songcanvas/CurveView.cpp   2 Apr 2007 21:05:43 -0000       1.24
+++ traverso/songcanvas/CurveView.cpp   10 Apr 2007 17:11:48 -0000      1.25
@@ -17,7 +17,7 @@
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
 
-$Id: CurveView.cpp,v 1.24 2007/04/02 21:05:43 r_sijrier Exp $
+$Id: CurveView.cpp,v 1.25 2007/04/10 17:11:48 r_sijrier Exp $
 */
 
 #include "CurveView.h"
@@ -463,7 +463,6 @@
 
 void CurveView::node_moved( )
 {
-       printf("CurveView::node_moved()\n");
        CurveNodeView* prev = 0;
        CurveNodeView* next = 0;
        

Index: traverso/songcanvas/MarkerView.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/songcanvas/MarkerView.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- traverso/songcanvas/MarkerView.cpp  2 Apr 2007 00:35:14 -0000       1.8
+++ traverso/songcanvas/MarkerView.cpp  10 Apr 2007 17:11:48 -0000      1.9
@@ -23,8 +23,10 @@
 #include "SongView.h"
 #include "Themer.h"
 #include "ClipsViewPort.h"
+#include "PositionIndicator.h"
 
 #include <QColor>
+#include <Song.h>
 #include <Marker.h>
 #include <Utils.h>
 #include <QDebug>
@@ -33,10 +35,12 @@
 
 MarkerView::MarkerView(Marker* marker, SongView* sv, ViewItem* parentView)
        : ViewItem(parentView, marker)
+       , m_dragging(false)
 {
        m_sv = sv;
        m_marker = marker;
        m_active = false;
+       m_posIndicator = 0;
 
        load_theme_data();
        
@@ -54,7 +58,7 @@
        painter->setRenderHint(QPainter::Antialiasing);
        painter->setFont( QFont( "Bitstream Vera Sans", 7) );
        
-       painter->setPen(QColor("#000000"));
+       painter->setPen(QColor(Qt::black));
        painter->setBrush(m_fillColor);
 
        const QPointF pts[3] = {
@@ -69,6 +73,11 @@
                painter->drawLine(MARKER_WIDTH/2, 9, MARKER_WIDTH/2, 
(int)m_boundingRect.height());
        }
 
+       if (m_dragging) {
+               m_posIndicator->set_value(frame_to_smpte( (x() + 
m_boundingRect.width() / 2 ) * m_sv->scalefactor,
+                                         m_sv->get_song()->get_rate()));
+       }
+
        painter->restore();
 }
 
@@ -92,7 +101,7 @@
 void MarkerView::update_position()
 {
        // markerwidth / 2 == center of markerview !
-       setPos(m_marker->get_when() / m_sv->scalefactor - MARKER_WIDTH / 2, 0);
+       setPos( (long)(m_marker->get_when() / m_sv->scalefactor) - 
(MARKER_WIDTH / 2), 0);
 }
 
 void MarkerView::set_position(int i)
@@ -126,4 +135,24 @@
        update();
 }
 
+void MarkerView::set_dragging(bool dragging)
+{
+       if (dragging) {
+               if (! m_posIndicator) {
+                       m_posIndicator = new PositionIndicator(this);
+                       scene()->addItem(m_posIndicator);
+                       m_posIndicator->set_position(15, 0);
+               }
+       } else {
+               if (m_posIndicator) {
+                       scene()->removeItem(m_posIndicator);
+                       delete m_posIndicator;
+                       m_posIndicator = 0;
+               }
+       }
+       
+       m_dragging = dragging;
+}
+
 //eof
+

Index: traverso/songcanvas/MarkerView.h
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/songcanvas/MarkerView.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- traverso/songcanvas/MarkerView.h    25 Mar 2007 20:01:09 -0000      1.5
+++ traverso/songcanvas/MarkerView.h    10 Apr 2007 17:11:48 -0000      1.6
@@ -27,6 +27,7 @@
 class Marker;
 class SongView;
 class QColor;
+class PositionIndicator;
 
 class MarkerView : public ViewItem
 {
@@ -41,6 +42,7 @@
        void load_theme_data();
        void set_active(bool);
        void set_position(int);
+       void set_dragging(bool dragging);
        
        Marker* get_marker() const {return m_marker;}
        
@@ -48,6 +50,8 @@
        Marker* m_marker;
        QColor  m_fillColor;
        bool    m_active;
+       bool    m_dragging;
+       PositionIndicator* m_posIndicator;
        
 private slots:
        void update_position();

Index: traverso/songcanvas/TimeLineView.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/songcanvas/TimeLineView.cpp,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- traverso/songcanvas/TimeLineView.cpp        9 Apr 2007 15:22:01 -0000       
1.18
+++ traverso/songcanvas/TimeLineView.cpp        10 Apr 2007 17:11:48 -0000      
1.19
@@ -38,6 +38,7 @@
 #include <Command.h>
 #include <defines.h>
 #include <AddRemove.h>
+#include <CommandGroup.h>
 
 #include <QDebug>
 
@@ -52,6 +53,9 @@
 class DragMarker : public Command
 {
        Q_OBJECT
+       Q_CLASSINFO("move_left", tr("Move Left"))
+       Q_CLASSINFO("move_right", tr("Move right"))
+       
 public:
        DragMarker(MarkerView* mview, double scalefactor, const QString& des);
 
@@ -64,7 +68,7 @@
 
 private :
        Marker*         m_marker;
-       MarkerView*     m_mview;
+       MarkerView*     m_view;
        nframes_t       m_origWhen;
        nframes_t       m_newWhen;
        double          m_scalefactor;
@@ -81,8 +85,8 @@
 DragMarker::DragMarker(MarkerView* mview, double scalefactor, const QString& 
des)
        : Command(mview->get_marker(), des)
 {
-       m_mview = mview;
-       m_marker= m_mview->get_marker();
+       m_view = mview;
+       m_marker= m_view->get_marker();
        m_scalefactor = scalefactor;
 }
 
@@ -91,22 +95,22 @@
        return 1;
 }
 
-int DragMarker::finish_hold()
-{
-       m_marker->set_snappable(true);
-       m_mview->get_songview()->start_shuttle(false);
-       return do_action();
-}
-
 int DragMarker::begin_hold()
 {
        m_origWhen = m_newWhen = m_marker->get_when();
        m_marker->set_snappable(false);
-       m_mview->get_songview()->start_shuttle(true, true);
-       
+       m_view->get_songview()->start_shuttle(true, true);
+       m_view->set_dragging(true);     
        return 1;
 }
 
+int DragMarker::finish_hold()
+{
+       m_marker->set_snappable(true);
+       m_view->get_songview()->start_shuttle(false);
+       m_view->set_dragging(false);
+       return do_action();
+}
 
 int DragMarker::do_action()
 {
@@ -123,28 +127,39 @@
 void DragMarker::move_left(bool )
 {
        // Move 1 pixel to the left
-       m_newWhen = m_newWhen + (uint) ( 1 * m_scalefactor);
+       long newpos = m_newWhen - (uint) ( 1 * m_scalefactor);
+       if (newpos < 0) {
+               newpos = 0;
+       }
+       m_newWhen = newpos;
        do_action();
 }
 
 void DragMarker::move_right(bool )
 {
        // Move 1 pixel to the right
-       m_newWhen = m_newWhen - (uint) ( 1 * m_scalefactor);
+       m_newWhen = m_newWhen + (uint) ( 1 * m_scalefactor);
        do_action();
 }
 
 int DragMarker::jog()
 {
-       m_newWhen = (uint) (cpointer().scene_x() * m_scalefactor);
+       long newpos = (uint) (cpointer().scene_x() * m_scalefactor);
 
        if (m_marker->get_timeline()->get_song()->is_snap_on()) {
                SnapList* slist = 
m_marker->get_timeline()->get_song()->get_snap_list();
-               m_newWhen = slist->get_snap_value(m_newWhen);
+               newpos = slist->get_snap_value(newpos);
        }
 
-       m_mview->set_position(int(m_newWhen / m_scalefactor));
-       m_mview->get_songview()->update_shuttle_factor();
+       if (newpos < 0 ) {
+               newpos = 0;
+       }
+       
+       m_newWhen = newpos;
+       m_view->set_position(int(m_newWhen / m_scalefactor));
+       
+       m_view->get_songview()->update_shuttle_factor();
+       
        return 1;
 }
 
@@ -304,7 +319,7 @@
 
        if (m_blinkingMarker) {
                m_blinkingMarker->set_active(true);
-               m_blinkTimer.start(40);
+//             m_blinkTimer.start(40);
        }
 }
 
@@ -318,7 +333,7 @@
                return;
        }
        
-       m_blinkTimer.stop();
+//     m_blinkTimer.stop();
        if (m_blinkingMarker) {
                // TODO add these functions, or something else to 
                // let the user know which marker is to be moved!
@@ -378,12 +393,13 @@
 {
        QList<Marker*> lst = m_timeline->get_markers();
 
+       CommandGroup* group = new CommandGroup(m_timeline, tr("Clear Markers"));
+
        foreach(Marker *m, lst) {
-               AddRemove *ar = (AddRemove*) m_timeline->remove_marker(m);
-               Command::process_command(ar);
+               group->add_command(m_timeline->remove_marker(m));
        }
 
-       return 0;
+       return group;
 }
 
 void TimeLineView::load_theme_data()

Index: traverso/traverso.pro
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/traverso.pro,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -b -r1.41 -r1.42
--- traverso/traverso.pro       5 Apr 2007 13:15:06 -0000       1.41
+++ traverso/traverso.pro       10 Apr 2007 17:11:49 -0000      1.42
@@ -55,7 +55,8 @@
        dialogs/project/NewSongDialog.h \
        dialogs/project/NewProjectDialog.h \
        dialogs/project/OpenProjectDialog.h \
-       dialogs/project/NewTrackDialog.h
+       dialogs/project/NewTrackDialog.h \
+       songcanvas/PositionIndicator.h
 SOURCES += \
        Traverso.cpp \
        AudioSourcesTreeWidget.cpp \
@@ -86,7 +87,8 @@
        dialogs/project/NewSongDialog.cpp \
        dialogs/project/NewProjectDialog.cpp \
        dialogs/project/OpenProjectDialog.cpp \
-       dialogs/project/NewTrackDialog.cpp
+       dialogs/project/NewTrackDialog.cpp \
+       songcanvas/PositionIndicator.cpp
 FORMS += ui/ExportWidget.ui \
        ui/AudioSourcesManagerWidget.ui \
        ui/PluginSelectorDialog.ui \

Index: traverso/songcanvas/PositionIndicator.cpp
===================================================================
RCS file: traverso/songcanvas/PositionIndicator.cpp
diff -N traverso/songcanvas/PositionIndicator.cpp
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ traverso/songcanvas/PositionIndicator.cpp   10 Apr 2007 17:11:48 -0000      
1.1
@@ -0,0 +1,71 @@
+/*
+    Copyright (C) 2007 Remon Sijrier 
+ 
+    This file is part of Traverso
+ 
+    Traverso is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+ 
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
+ 
+*/
+
+#include "PositionIndicator.h"
+
+#include "SongView.h"
+
+#include <QColor>
+#include <Utils.h>
+
+PositionIndicator::PositionIndicator(ViewItem* parentView)
+       : ViewItem(parentView, 0)
+{
+       calculate_bounding_rect();
+}
+
+void PositionIndicator::paint(QPainter * painter, const 
QStyleOptionGraphicsItem * option, QWidget * widget)
+{
+       Q_UNUSED(option);
+       Q_UNUSED(widget);
+       
+       painter->drawPixmap(0, 0, m_background);
+       painter->drawText(m_boundingRect, Qt::AlignVCenter, m_value);
+}
+
+void PositionIndicator::calculate_bounding_rect()
+{
+       prepareGeometryChange();
+       m_boundingRect = QRectF(0, 0, 65, 14);
+       
+       m_background = QPixmap(m_boundingRect.width(), m_boundingRect.height());
+       m_background.fill(QColor(Qt::transparent));
+       
+       QPainter painter(&m_background);
+       painter.setRenderHint(QPainter::Antialiasing);
+       painter.setBrush(QColor(255, 255, 255, 225));
+       painter.setPen(Qt::NoPen);
+       int rounding = 10;
+       painter.drawRoundRect(0, 0, m_boundingRect.width(), 
m_boundingRect.height(), rounding, rounding);
+}
+
+void PositionIndicator::set_position(int x, int y)
+{
+       setPos(x, y);
+}
+
+void PositionIndicator::set_value(const QString & value)
+{
+       m_value = value;
+}
+
+//eof
+

Index: traverso/songcanvas/PositionIndicator.h
===================================================================
RCS file: traverso/songcanvas/PositionIndicator.h
diff -N traverso/songcanvas/PositionIndicator.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ traverso/songcanvas/PositionIndicator.h     10 Apr 2007 17:11:48 -0000      
1.1
@@ -0,0 +1,49 @@
+/*
+    Copyright (C) 2007 Remon Sijrier 
+ 
+    This file is part of Traverso
+ 
+    Traverso is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+ 
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
+ 
+*/
+
+#ifndef POSITION_INDICATOR_H
+#define POSITION_INDICATOR_H
+
+#include "ViewItem.h"
+#include <QPixmap>
+
+class PositionIndicator : public ViewItem
+{
+       Q_OBJECT
+       
+public:
+       PositionIndicator(ViewItem* parent);
+       ~PositionIndicator() {}
+       
+       void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, 
QWidget *widget);
+       void calculate_bounding_rect();
+       void set_position(int x, int y);
+       
+       void set_value(const QString& value);
+       
+private:
+       QString m_value;
+       QPixmap m_background;
+};
+
+#endif
+
+//eof




reply via email to

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