[Top][All Lists]
[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