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 MoveClip.h


From: Remon Sijrier
Subject: [Traverso-commit] traverso/src/commands MoveClip.cpp MoveClip.h
Date: Tue, 12 Feb 2008 11:46:52 +0000

CVSROOT:        /sources/traverso
Module name:    traverso
Changes by:     Remon Sijrier <r_sijrier>       08/02/12 11:46:52

Modified files:
        src/commands   : MoveClip.cpp MoveClip.h 

Log message:
        * cleanup in preparation of using ClipGroups. No longer move the 
'graphical' representation of the clip, but the clip itself. We can do now due 
the fact that adding/removing AudioClips to/from Tracks has become very fast. 
(if not: buy a new computer :P )

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/commands/MoveClip.cpp?cvsroot=traverso&r1=1.58&r2=1.59
http://cvs.savannah.gnu.org/viewcvs/traverso/src/commands/MoveClip.h?cvsroot=traverso&r1=1.24&r2=1.25

Patches:
Index: MoveClip.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/commands/MoveClip.cpp,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -b -r1.58 -r1.59
--- MoveClip.cpp        7 Feb 2008 18:17:07 -0000       1.58
+++ MoveClip.cpp        12 Feb 2008 11:46:51 -0000      1.59
@@ -19,16 +19,21 @@
 
 */
 
-#include <libtraversocore.h>
-
 #include "MoveClip.h"
+
+#include "AudioClip.h"
+#include "ContextPointer.h"
+#include "ProjectManager.h"
+#include "ResourcesManager.h"
 #include "SnapList.h"
-#include <SheetView.h>
-#include <TrackView.h>
-#include <AudioClipView.h>
-#include <ViewPort.h>
-#include <ClipsViewPort.h>
-#include <QScrollBar>
+#include "Sheet.h"
+#include "Track.h"
+
+#include "ClipsViewPort.h"
+#include "SheetView.h"
+#include "TrackView.h"
+#include "AudioClipView.h"
+
 #include "Zoom.h"
 
 
@@ -40,41 +45,32 @@
   *    \class MoveClip
        \brief A Command class for Dragging or Copy-dragging an AudioClip
         
+       \sa TraversoCommands
  */
 
 
 /**
  *     Creates  a Move Clip or Copy Clip Command object.
-       
-       Use the first entry in arguments to set the command to be
-       of type MoveClip (arguments.at(0) == false), or of type CopyClip
-       argument (arguments.at(0) == true)
-       
-       arguments is set in the keymap file, example: 
-       
-       \code 
-       <Object objectname="AudioClipView" mousehint="LRUD" 
pluginname="TraversoCommands" commandname="MoveClip"  arguments="false" />
-       \endcode
- 
- 
+ *     
  * @param cv The AudioClipView that is to be dragged/copied.
- * @param arguments The first entry in the list is used to detect if it is a 
copy or drag Command
+ * @param arguments Can be either one of the following: move, copy, 
move_to_end, move_to_start
  */
 MoveClip::MoveClip(AudioClipView* cv, QString type)
        : Command(cv->get_clip(), "")
        , d(new Data)
 {
        m_actionType = type;
+       d->view = cv;
+       d->sv = d->view->get_sheetview();
+       d->zoom = 0;
+       m_sheet = d->sv->get_sheet();
+       m_targetTrack = 0;
        
        QString des;
        if (m_actionType == "copy") {
                des = tr("Copy Clip");
-               d->xoffset = TimeRef(cv->get_sheetview()->timeref_scalefactor * 
3);
        } else if (m_actionType == "move") {
                des = tr("Move Clip");
-       } else if (m_actionType == "anchored_left_edge_move" ||
-               m_actionType == "anchored_right_edge_move") {
-               des = tr("Move Anchored Edge");
        } else if (m_actionType == "move_to_start") {
                des = tr("Move Clip To Start");
        } else if (m_actionType == "move_to_end") {
@@ -83,17 +79,10 @@
        
        setText(des);
        
-       d->view = cv;
-       d->sv = d->view->get_sheetview();
-       d->zoom = 0;
-       m_sheet = d->sv->get_sheet();
-       m_targetTrack = 0;
-
-       if (m_actionType == "move_to_start" ||
-           m_actionType == "move_to_end") {
+       if (m_actionType == "move_to_start" || m_actionType == "move_to_end") {
                init_data();
        } else {
-               m_clip = 0;
+               m_clip = d->view->get_clip();
        }
 }
 
@@ -108,58 +97,24 @@
        }
 }
 
-void MoveClip::audioclip_added(AudioClip * clip)
-{
-       Q_UNUSED(clip);
-       
-       QList<AudioClipView* >* clipviews = 
d->view->get_trackview()->get_clipviews();
-       
-       for (int i = 0; i < clipviews->size(); ++i) {
-               AudioClipView* acv = clipviews->at(i);
-               
-               if ( ! acv) {
-                       continue;
-               }
-               
-               if ( ! (acv->get_clip()->get_id() == d->newclip->get_id()) ) {
-                       continue;
-               }
-               
-               d->view = acv;
-               init_data(true);
-
-               disconnect(d->view->get_clip()->get_track(), 
SIGNAL(audioClipAdded(AudioClip*)),
-                       this, SLOT(audioclip_added(AudioClip*)));
-               
-               return;
-       }
-}
-
-
-void MoveClip::init_data(bool isCopy)
+void MoveClip::init_data()
 {
-       if (isCopy) {
-               m_clip = d->newclip;
-       } else {
-               m_clip = d->view->get_clip();
-       }
+       if (m_actionType == "copy") {
+               m_clip = resources_manager()->get_clip(m_clip->get_id());
+               m_clip->set_sheet(m_sheet);
+               m_clip->set_track(d->view->get_clip()->get_track());
+               
m_clip->set_track_start_location(m_clip->get_track_start_location() + 
TimeRef(d->sv->timeref_scalefactor * 3));
 
-       if (m_actionType == "anchored_left_edge_move") {
-               m_oldOppositeEdge = m_clip->get_track_start_location() + 
m_clip->get_length();
-       }
-       else if (m_actionType == "anchored_right_edge_move") {
-               m_oldOppositeEdge = m_clip->get_track_start_location();
+               Command::process_command(m_clip->get_track()->add_clip(m_clip, 
false));
        }
 
+       m_clip->set_snappable(false);
        m_originTrack = m_targetTrack = m_clip->get_track();
        m_originalTrackStartLocation = m_clip->get_track_start_location();
-       m_posDiff = TimeRef();
-       d->origXPos = cpointer().scene_x();
-       d->origPos = QPointF(d->origXPos, cpointer().scene_y());
-       d->sv->start_shuttle(true, true);
-       d->origTrackStartLocation = m_clip->get_track_start_location();
        d->origTrackEndLocation = m_clip->get_track_end_location();
-       d->resync = config().get_property("AudioClip", "SyncDuringDrag", 
false).toBool();
+       d->origXPos = cpointer().on_first_input_event_scene_x();
+       d->origPos = QPointF(d->origXPos, 
cpointer().on_first_input_event_scene_y());
+       d->sv->start_shuttle(true, true);
        d->view->set_dragging(true);
        d->bypassjog = false;
        d->origTrackView = d->view->get_trackview();
@@ -169,23 +124,8 @@
 int MoveClip::begin_hold()
 {
        d->sv->stop_follow_play_head();
-       if (m_actionType == "copy") {
-               d->newclip = 
resources_manager()->get_clip(d->view->get_clip()->get_id());
-               d->newclip->set_sheet(m_sheet);
-               d->newclip->set_track(d->view->get_clip()->get_track());
-               
d->newclip->set_track_start_location(d->view->get_clip()->get_track_start_location()
 + d->xoffset);
-               
-               connect(d->view->get_clip()->get_track(), 
SIGNAL(audioClipAdded(AudioClip*)),
-                       this, SLOT(audioclip_added(AudioClip*)));
-       
-               
Command::process_command(d->view->get_clip()->get_track()->add_clip(d->newclip, 
false));
-               d->newclip->set_snappable(false);
-               
-               return 1;
-       }
 
        init_data();
-       m_clip->set_snappable(false);
 
        return 1;
 }
@@ -195,7 +135,6 @@
 {
        m_clip->set_snappable(true);
        d->sv->start_shuttle(false);
-       d->view->set_dragging(false);
 
        return 1;
 }
@@ -203,16 +142,17 @@
 
 int MoveClip::prepare_actions()
 {
+       if (d->zoom) {
+               delete d->zoom;
+       }
        delete d;
        d = 0;
        
-       if (m_actionType == "anchored_right_edge_move") {
-               m_clip->set_left_edge(m_oldOppositeEdge);
-       }
-       
        if (m_actionType == "copy") {
                Command::process_command(m_targetTrack->remove_clip(m_clip, 
false));
                Command::process_command(m_originTrack->remove_clip(m_clip, 
false));
+       } else {
+               m_sheet->move_clip(m_targetTrack, m_originTrack, m_clip, 
m_originalTrackStartLocation);
        }
        
        if (m_originTrack == m_targetTrack &&  m_posDiff == qint64(0) && 
@@ -227,27 +167,18 @@
 int MoveClip::do_action()
 {
        PENTER;
-       if (m_actionType == "move_to_start") {
-               move_to_start(false);
-               return 1;
-       }
-       else if (m_actionType == "move_to_end") {
-               move_to_end(false);
-               return 1;
+       if (m_actionType == "move") {
+               m_sheet->move_clip(m_originTrack, m_targetTrack, m_clip, 
m_originalTrackStartLocation + m_posDiff);
        }
-
-       if (m_actionType == "copy") {
+       else if (m_actionType == "copy") {
                Command::process_command(m_targetTrack->add_clip(m_clip, 
false));
                m_clip->set_track_start_location(m_originalTrackStartLocation + 
m_posDiff);
-       } else {
-               m_sheet->move_clip(m_originTrack, m_targetTrack, m_clip, 
m_originalTrackStartLocation + m_posDiff);
        }
-       
-       if (m_actionType == "anchored_left_edge_move") {
-               m_clip->set_right_edge(m_oldOppositeEdge);
+       else if (m_actionType == "move_to_start") {
+               move_to_start(false);
        }
-       else if (m_actionType == "anchored_right_edge_move") {
-               m_clip->set_left_edge(m_oldOppositeEdge);
+       else if (m_actionType == "move_to_end") {
+               move_to_end(false);
        }
        
        return 1;
@@ -264,31 +195,13 @@
                m_sheet->move_clip(m_targetTrack, m_originTrack, m_clip, 
m_originalTrackStartLocation);
        }
 
-       if (m_actionType == "anchored_left_edge_move") {
-               m_clip->set_right_edge(m_oldOppositeEdge);
-       }
-       else if (m_actionType == "anchored_right_edge_move") {
-               m_clip->set_track_start_location(m_oldOppositeEdge - m_posDiff);
-               m_clip->set_left_edge(m_oldOppositeEdge);
-       }
-       
        return 1;
 }
 
 void MoveClip::cancel_action()
 {
        finish_hold();
-       
-       if (m_actionType == "copy") {
-               Command::process_command(m_originTrack->remove_clip(m_clip, 
false));
-       } else if (m_actionType == "move") {
-               if (d->resync) {
-                       
m_clip->set_track_start_location(m_originalTrackStartLocation);
-               }
-               d->view->set_trackview(d->origTrackView);
-               d->view->setPos(QPoint((int)(m_originalTrackStartLocation / 
d->sv->timeref_scalefactor),
-                               d->origTrackView->get_childview_y_offset()));
-       }
+       undo_action();
 }
 
 int MoveClip::jog()
@@ -315,19 +228,13 @@
        d->jogBypassPos = cpointer().pos();
        
        QPointF diffPoint(cpointer().scene_pos() - d->origPos);
-       QPointF newPos(d->view->pos() + diffPoint);
        
        d->origPos = cpointer().scene_pos();
        
-       if (m_actionType != "anchored_left_edge_move" && m_actionType != 
"anchored_right_edge_move") {
                TrackView* trackView = 
d->sv->get_trackview_under(cpointer().scene_pos());
-               if (!trackView) {
-       //              printf("no trackview returned\n");
-               } else if (trackView != d->view->get_trackview()) {
-                       d->view->set_trackview(trackView);
+       if (trackView) {
                        m_targetTrack = trackView->get_track();
                }
-       }
 
        int newXPos = cpointer().scene_x();
 
@@ -335,10 +242,10 @@
        TimeRef newTrackStartLocation;
        TimeRef newTrackEndLocation = d->origTrackEndLocation + diff_f;
 
-       if (diff_f < TimeRef() && d->origTrackStartLocation < (-1 * diff_f)) {
+       if (diff_f < TimeRef() && m_originalTrackStartLocation < (-1 * diff_f)) 
{
                newTrackStartLocation = qint64(0);
        } else {
-               newTrackStartLocation = d->origTrackStartLocation + diff_f;
+               newTrackStartLocation = m_originalTrackStartLocation + diff_f;
        }
 
        if (m_sheet->is_snap_on()) {
@@ -348,33 +255,11 @@
        m_posDiff = newTrackStartLocation - m_originalTrackStartLocation;
 
        // store the new position only if the clip was moved, but not if it 
stuck to a snap position
-       if (d->origTrackStartLocation != newTrackStartLocation) {
+       if (m_originalTrackStartLocation != newTrackStartLocation) {
                d->origPos.setX(newXPos);
        }
 
-       if (m_actionType == "anchored_left_edge_move" && !d->resync) {
-                       m_clip->set_right_edge(m_oldOppositeEdge - m_posDiff);
-       }
-
-       if (m_actionType == "anchored_right_edge_move") {
-               m_clip->set_left_edge(m_oldOppositeEdge - m_posDiff);
-               newPos.setX(m_originalTrackStartLocation / 
d->sv->timeref_scalefactor);
-               newPos.setY(d->view->pos().y());
-               d->view->setPos(newPos);
-       } else {
-               newPos.setX(newTrackStartLocation / d->sv->timeref_scalefactor);
-               newPos.setY(d->view->pos().y());
-               if (d->resync) {
-                       if (m_clip->get_track_start_location() != 
newTrackStartLocation) {
-                               
m_clip->set_track_start_location(newTrackStartLocation);
-                       }
-                       if (m_actionType == "anchored_left_edge_move") {
-                               m_clip->set_right_edge(m_oldOppositeEdge);
-                       }
-               } else {
-                       d->view->setPos(newPos);
-               }
-       }
+       m_sheet->move_clip(m_clip->get_track(), m_targetTrack, m_clip, 
newTrackStartLocation);
        
        d->sv->update_shuttle_factor();
        
@@ -441,11 +326,11 @@
        // check if there is anything to snap
        bool start_snapped = false;
        bool end_snapped = false;
-       if (slist->is_snap_value(leftlocation) && m_actionType != 
"anchored_right_edge_move") {
+       if (slist->is_snap_value(leftlocation)) {
                start_snapped = true;
        }
        
-       if (slist->is_snap_value(rightlocation) && m_actionType != 
"anchored_left_edge_move") {
+       if (slist->is_snap_value(rightlocation)) {
                end_snapped = true;
        }
 
@@ -486,7 +371,7 @@
                delete d->zoom;
                d->zoom = 0;
                cpointer().get_viewport()->set_holdcursor(":/cursorHoldLrud");
-               d->origXPos -= (d->origPos - cpointer().scene_pos()).x();
+               d->origXPos -= int((d->origPos - cpointer().scene_pos()).x());
                d->origPos = cpointer().scene_pos();
                d->sv->start_shuttle(true, true);
        }

Index: MoveClip.h
===================================================================
RCS file: /sources/traverso/traverso/src/commands/MoveClip.h,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -b -r1.24 -r1.25
--- MoveClip.h  7 Feb 2008 18:04:00 -0000       1.24
+++ MoveClip.h  12 Feb 2008 11:46:52 -0000      1.25
@@ -17,7 +17,6 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  
-    $Id: MoveClip.h,v 1.24 2008/02/07 18:04:00 r_sijrier Exp $
 */
 
 #ifndef MOVECLIPACTION_H
@@ -62,7 +61,6 @@
        AudioClip*      m_clip;
         TimeRef        m_originalTrackStartLocation;
         TimeRef        m_posDiff;
-        TimeRef        m_oldOppositeEdge;
         Track*                 m_originTrack;
         Track*                 m_targetTrack;
        QString         m_actionType;
@@ -70,12 +68,10 @@
        struct Data {
                int             origXPos;
                TimeRef         xoffset;
-               AudioClip*      newclip;
                SheetView*      sv;
                AudioClipView*  view;
                TrackView*      origTrackView;
                QPointF         origPos;
-               TimeRef         origTrackStartLocation;
                TimeRef         origTrackEndLocation;
                bool            resync;
                bool            bypassjog;
@@ -86,7 +82,7 @@
 
        Data* d;
 
-       void init_data(bool isCopy=false);
+       void init_data();
        void calculate_snap_diff(TimeRef& leftlocation, TimeRef rightlocation);
        
 public slots:
@@ -95,9 +91,6 @@
         void move_to_start(bool autorepeat);
         void move_to_end(bool autorepeat);
        void start_zoom(bool autorepeat);
-       
-private slots:
-       void audioclip_added(AudioClip* clip);
 };
 
 #endif




reply via email to

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