#include <QGraphicsView>
#include <QScrollBar>
-AbstractClipItem::AbstractClipItem(const QRectF& rect): QGraphicsRectItem(rect), m_startFade(0), m_endFade(0) {
+AbstractClipItem::AbstractClipItem(const ItemInfo info, const QRectF& rect): QGraphicsRectItem(rect), m_startFade(0), m_endFade(0) {
setFlags(QGraphicsItem::ItemClipsToShape | QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
+ setTrack(info.track);
+ m_startPos = info.startPos;
+ m_maxDuration = info.endPos - info.startPos;
}
void AbstractClipItem::moveTo(int x, double scale, int offset, int newTrack) {
double origX = rect().x();
if (durationDiff == GenTime()) return;
//kDebug() << "-- RESCALE: CROP=" << m_cropStart << ", DIFF = " << durationDiff;
- if (m_cropStart + durationDiff < GenTime() && type() == AVWIDGET) {
+ if (type() == AVWIDGET && m_cropStart + durationDiff < GenTime()) {
durationDiff = GenTime() - m_cropStart;
} else if (durationDiff >= m_cropDuration) {
durationDiff = m_cropDuration - GenTime(3, m_fps);
}
m_startPos += durationDiff;
- m_cropStart += durationDiff;
+ if (type() == AVWIDGET) m_cropStart += durationDiff;
m_cropDuration = m_cropDuration - durationDiff;
setRect(m_startPos.frames(m_fps) * scale, rect().y(), m_cropDuration.frames(m_fps) * scale, rect().height());
QList <QGraphicsItem *> collisionList = collidingItems(Qt::IntersectsItemBoundingRect);
GenTime diff = ((AbstractClipItem *)item)->endPos() + GenTime(1, m_fps) - m_startPos;
setRect((m_startPos + diff).frames(m_fps) * scale, rect().y(), (m_cropDuration - diff).frames(m_fps) * scale, rect().height());
m_startPos += diff;
- m_cropStart += diff;
+ if (type() == AVWIDGET) m_cropStart += diff;
m_cropDuration = m_cropDuration - diff;
break;
}
class AbstractClipItem : public QObject , public QGraphicsRectItem {
Q_OBJECT
public:
- AbstractClipItem(const QRectF& rect);
+ AbstractClipItem(const ItemInfo info, const QRectF& rect);
virtual OPERATIONTYPE operationMode(QPointF pos, double scale) = 0;
virtual GenTime startPos() const ;
virtual void setTrack(int track);
#include "addtimelineclipcommand.h"
#include "customtrackview.h"
-AddTimelineClipCommand::AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, int track, GenTime startpos, QRectF rect, GenTime duration, bool doIt, bool doRemove)
- : m_view(view), m_xml(xml), m_clipId(clipId), m_clipTrack(track), m_clipPos(startpos), m_clipRect(rect), m_clipDuration(duration), m_doIt(doIt), m_remove(doRemove) {
+AddTimelineClipCommand::AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, ItemInfo info, bool doIt, bool doRemove)
+ : m_view(view), m_xml(xml), m_clipId(clipId), m_clipInfo(info), m_doIt(doIt), m_remove(doRemove) {
if (!m_remove) setText(i18n("Add timeline clip"));
else setText(i18n("Delete timeline clip"));
}
// virtual
void AddTimelineClipCommand::undo() {
- if (!m_remove) m_view->deleteClip(m_clipTrack, m_clipPos, m_clipRect);
- else m_view->addClip(m_xml, m_clipId, m_clipTrack, m_clipPos, m_clipRect, m_clipDuration);
+ if (!m_remove) m_view->deleteClip(m_clipInfo);
+ else m_view->addClip(m_xml, m_clipId, m_clipInfo);
}
// virtual
void AddTimelineClipCommand::redo() {
if (m_doIt) {
- if (!m_remove) m_view->addClip(m_xml, m_clipId, m_clipTrack, m_clipPos, m_clipRect, m_clipDuration);
- else m_view->deleteClip(m_clipTrack, m_clipPos, m_clipRect);
+ if (!m_remove) m_view->addClip(m_xml, m_clipId, m_clipInfo);
+ else m_view->deleteClip(m_clipInfo);
}
m_doIt = true;
}
#include <KDebug>
#include "gentime.h"
+#include "definitions.h"
class CustomTrackView;
class AddTimelineClipCommand : public QUndoCommand {
public:
- AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, int track, GenTime startpos, QRectF rect, GenTime duration, bool doIt, bool doRemove);
+ AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, ItemInfo info, bool doIt, bool doRemove);
virtual void undo();
virtual void redo();
private:
CustomTrackView *m_view;
- GenTime m_clipDuration;
+ ItemInfo m_clipInfo;
int m_clipId;
QDomElement m_xml;
- int m_clipTrack;
- GenTime m_clipPos;
- QRectF m_clipRect;
bool m_doIt;
bool m_remove;
};
#include "addtransitioncommand.h"
#include "customtrackview.h"
-AddTransitionCommand::AddTransitionCommand(CustomTrackView *view, int track, QDomElement xml, GenTime pos, bool doIt) : m_view(view), m_track(track), m_xml(xml), m_pos(pos), m_doIt(doIt) {
+AddTransitionCommand::AddTransitionCommand(CustomTrackView *view, ItemInfo info, int transitiontrack, QMap <QString, QString> desc, QDomElement params, bool doIt) : m_view(view), m_info(info), m_track(transitiontrack), m_desc(desc), m_params(params), m_doIt(doIt) {
if (m_doIt) setText(i18n("Add transition to clip"));
else setText(i18n("Delete transition from clip"));
}
// virtual
void AddTransitionCommand::undo() {
- if (m_doIt) m_view->deleteTransition(m_track, m_pos, m_xml);
- else m_view->addTransition(m_track , m_pos, m_xml);
+ if (m_doIt) m_view->deleteTransition(m_info, m_track, m_desc, m_params);
+ else m_view->addTransition(m_info, m_track, m_desc, m_params);
}
// virtual
void AddTransitionCommand::redo() {
- if (m_doIt) m_view->addTransition(m_track , m_pos, m_xml);
- else m_view->deleteTransition(m_track, m_pos, m_xml);
+ if (m_doIt) m_view->addTransition(m_info, m_track, m_desc, m_params);
+ else m_view->deleteTransition(m_info, m_track, m_desc, m_params);
m_doIt = true;
}
#include <KDebug>
#include "gentime.h"
-
+#include "definitions.h"
class CustomTrackView;
class AddTransitionCommand : public QUndoCommand {
public:
- AddTransitionCommand(CustomTrackView *view, int track, QDomElement xml , GenTime pos, bool doIt);
+ AddTransitionCommand(CustomTrackView *view, ItemInfo info, int transitiontrack, QMap <QString, QString> desc, QDomElement params, bool doIt);
virtual void undo();
virtual void redo();
private:
CustomTrackView *m_view;
- GenTime m_pos;
- QDomElement m_xml;
+ ItemInfo m_info;
+ QMap <QString, QString> m_desc;
+ QDomElement m_params;
int m_track;
bool m_doIt;
};
#include "kdenlivesettings.h"
#include "kthumb.h"
-ClipItem::ClipItem(DocClipBase *clip, int track, GenTime startpos, const QRectF & rect, GenTime duration, double fps)
- : AbstractClipItem(rect), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), m_effectsCounter(1), audioThumbWasDrawn(false), m_opacity(1.0), m_timeLine(0), m_thumbsRequested(0), m_hover(false) {
- //setToolTip(name);
- // kDebug() << "******* CREATING NEW TML CLIP, DUR: " << duration;
+ClipItem::ClipItem(DocClipBase *clip, ItemInfo info, double scale, double fps)
+ : AbstractClipItem(info, QRectF()), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), m_effectsCounter(1), audioThumbWasDrawn(false), m_opacity(1.0), m_timeLine(0), m_thumbsRequested(0), m_hover(false) {
+ QRectF rect((double) info.startPos.frames(fps) * scale, (double)(info.track * KdenliveSettings::trackheight() + 1), (double)(info.endPos - info.startPos).frames(fps) * scale, (double)(KdenliveSettings::trackheight() - 1));
+ setRect(rect);
+ kDebug() << "///// NEW CLIP RECT: " << rect;
m_fps = fps;
- m_startPos = startpos;
- m_track = track;
m_xml = clip->toXML();
m_clipName = clip->name();
m_producer = clip->getId();
m_clipType = clip->clipType();
m_cropStart = GenTime();
- m_maxDuration = duration;
- if (duration != GenTime()) m_cropDuration = duration;
- else m_cropDuration = m_maxDuration;
+
+ m_cropDuration = m_maxDuration;
setAcceptDrops(true);
audioThumbReady = clip->audioThumbCreated();
/*
doc.setContent(effects, true);
QDomElement e = doc.documentElement();
CustomTrackView *view = (CustomTrackView *) scene()->views()[0];
- if (view) view->slotAddEffect(e, m_startPos, m_track);
+ if (view) view->slotAddEffect(e, m_startPos, track());
}
//virtual
CustomTrackView *view = (CustomTrackView *) scene()->views()[0];
QDomDocument doc;
QDomElement e = doc.documentElement();
- if (view) view->slotAddTransition(this, t->toXML() , t->startPos(), track());
+ //if (view) view->slotAddTransition(this, t->toXML() , t->startPos(), track());
}
// virtual
/*
Q_OBJECT
public:
- ClipItem(DocClipBase *clip, int track, GenTime startpos, const QRectF & rect, GenTime duration, double fps);
+ ClipItem(DocClipBase *clip, ItemInfo info, double scale, double fps);
virtual ~ ClipItem();
virtual void paint(QPainter *painter,
const QStyleOptionGraphicsItem *option,
int m_maxTrack;
-
QPixmap m_startPix;
QPixmap m_endPix;
bool m_hasThumbs;
// const int duration = animate ? 1500 : 1;
CustomTrackView::CustomTrackView(KdenliveDoc *doc, QGraphicsScene * projectscene, QWidget *parent)
- : QGraphicsView(projectscene, parent), m_cursorPos(0), m_dropItem(NULL), m_cursorLine(NULL), m_operationMode(NONE), m_startPos(QPointF()), m_dragItem(NULL), m_visualTip(NULL), m_moveOpMode(NONE), m_animation(NULL), m_projectDuration(0), m_scale(1.0), m_clickPoint(QPoint()), m_document(doc), m_autoScroll(KdenliveSettings::autoscroll()), m_tracksHeight(KdenliveSettings::trackheight()) {
+ : QGraphicsView(projectscene, parent), m_cursorPos(0), m_dropItem(NULL), m_cursorLine(NULL), m_operationMode(NONE), m_dragItem(NULL), m_visualTip(NULL), m_moveOpMode(NONE), m_animation(NULL), m_projectDuration(0), m_scale(1.0), m_clickPoint(QPoint()), m_document(doc), m_autoScroll(KdenliveSettings::autoscroll()), m_tracksHeight(KdenliveSettings::trackheight()) {
if (doc) m_commandStack = doc->commandStack();
else m_commandStack == NULL;
setMouseTracking(true);
} else {
bool collision = false;
QList<QGraphicsItem *> collisionList = items(event->pos());
- AbstractClipItem *clipItem = NULL, *transitionItem = NULL;
for (int i = 0; i < collisionList.size(); ++i) {
QGraphicsItem *item = collisionList.at(i);
if (item->type() == AVWIDGET || item->type() == TRANSITIONWIDGET) {
// select item
if (!item->isSelected()) {
-
+ QList<QGraphicsItem *> itemList = items();
+ for (int i = 0; i < itemList.count(); i++)
+ itemList.at(i)->setSelected(false);
item->setSelected(true);
update();
}
m_dragItem = (AbstractClipItem *) item;
- if (item->type() == AVWIDGET) {
- clipItem = m_dragItem;
- } else if (item->type() == TRANSITIONWIDGET) {
- transitionItem = m_dragItem;
- }
+
m_clickPoint = QPoint((int)(mapToScene(event->pos()).x() - m_dragItem->startPos().frames(m_document->fps()) * m_scale), (int)(event->pos().y() - m_dragItem->rect().top()));
+ m_dragItemInfo.startPos = m_dragItem->startPos();
+ m_dragItemInfo.endPos = m_dragItem->endPos();
+ m_dragItemInfo.track = m_dragItem->track();
+
m_operationMode = m_dragItem->operationMode(item->mapFromScene(mapToScene(event->pos())), m_scale);
if (m_operationMode == MOVE) setCursor(Qt::ClosedHandCursor);
- if (m_operationMode == MOVE || m_operationMode == RESIZESTART)
- m_startPos = QPointF(m_dragItem->startPos().frames(m_document->fps()), m_dragItem->track());
- else if (m_operationMode == RESIZEEND)
- m_startPos = QPointF(m_dragItem->endPos().frames(m_document->fps()), m_dragItem->track());
- else if (m_operationMode == TRANSITIONSTART) {
- Transition *tr = new Transition(
- QRect((int)(m_dragItem->startPos().frames(m_document->fps()) *m_scale) , (int)(m_dragItem->rect().y() + m_dragItem->rect().height() / 2),
- (int)(GenTime(2.5).frames(m_document->fps()) *m_scale) , (int)(m_dragItem->rect().height())
- ),
- (ClipItem*)m_dragItem, "luma" , m_dragItem->startPos(), m_dragItem->startPos() + GenTime(2.5), m_document->fps());
- tr->setTrack(m_dragItem->track());
- scene()->addItem(tr);
- //m_dragItem->addTransition(tra);
+ if (m_operationMode == TRANSITIONSTART) {
+ ItemInfo info;
+ info.startPos = m_dragItem->startPos();
+ info.endPos = info.startPos + GenTime(2.5);
+ info.track = m_dragItem->track();
+ int transitiontrack = getPreviousVideoTrack(info.track);
+ slotAddTransition((ClipItem *) m_dragItem, info, transitiontrack, QMap<QString, QString>());
+ }
+ if (m_operationMode == TRANSITIONEND) {
+ ItemInfo info;
+ info.endPos = m_dragItem->endPos();
+ info.startPos = info.endPos - GenTime(2.5);
+ info.track = m_dragItem->track();
+ int transitiontrack = info.track - 1;
+ slotAddTransition((ClipItem *) m_dragItem, info, transitiontrack, QMap<QString, QString>());
}
updateSnapPoints(m_dragItem);
- kDebug() << "//////// ITEM CLICKED: " << m_startPos;
collision = true;
break;
}
}
- emit clipItemSelected((ClipItem*) clipItem);
- emit transitionItemSelected((Transition*) transitionItem);
+ if (m_dragItem->type() == AVWIDGET) emit clipItemSelected((ClipItem*) m_dragItem);
+ else emit transitionItemSelected((Transition*) m_dragItem);
if (!collision) {
kDebug() << "//////// NO ITEM FOUND ON CLICK";
m_dragItem = NULL;
m_commandStack->push(command);
}
-void CustomTrackView::slotAddTransition(ClipItem* clip , QDomElement transition, GenTime startTime , int startTrack) {
- AddTransitionCommand* command = new AddTransitionCommand(this, startTrack, transition, startTime, true);
+void CustomTrackView::slotAddTransition(ClipItem* clip, ItemInfo transitionInfo, int endTrack, QMap <QString, QString> desc, QDomElement transition) {
+ AddTransitionCommand* command = new AddTransitionCommand(this, transitionInfo, endTrack, desc, transition, true);
m_commandStack->push(command);
m_document->setModified(true);
}
-void CustomTrackView::addTransition(int startTrack, GenTime startPos , QDomElement e) {
-
- kDebug() << "---- ADDING transition " << e.attribute("tag") << ", on tracks " << m_tracksList.count() - e.attribute("transition_track").toInt() << " / " << getPreviousVideoTrack(e.attribute("transition_track").toInt());
- m_document->renderer()->mltAddTransition(e.attribute("tag"), getPreviousVideoTrack(e.attribute("transition_track").toInt()), m_tracksList.count() - e.attribute("transition_track").toInt() ,
- GenTime(e.attribute("start").toInt(), m_document->renderer()->fps()),
- GenTime(e.attribute("end").toInt(), m_document->renderer()->fps()),
- e);
+void CustomTrackView::addTransition(ItemInfo transitionInfo, int endTrack, QMap <QString, QString> desc, QDomElement params) {
+ Transition *tr = new Transition(transitionInfo, endTrack, m_scale, m_document->fps(), desc, params);
+ scene()->addItem(tr);
+ //kDebug() << "---- ADDING transition " << e.attribute("tag") << ", on tracks " << m_tracksList.count() - e.attribute("transition_track").toInt() << " / " << getPreviousVideoTrack(e.attribute("transition_track").toInt());
+ m_document->renderer()->mltAddTransition(tr->transitionTag(), endTrack, m_tracksList.count() - transitionInfo.track, transitionInfo.startPos, transitionInfo.endPos, params);
m_document->setModified(true);
}
-void CustomTrackView::deleteTransition(int, GenTime, QDomElement e) {
+void CustomTrackView::deleteTransition(ItemInfo transitionInfo, int endTrack, QMap <QString, QString> desc, QDomElement params) {
+ Transition *item = getTransitionItemAt((int)transitionInfo.startPos.frames(m_document->fps()) + 1, transitionInfo.track);
QMap < QString, QString> map;
- QDomNamedNodeMap attribs = e.attributes();
- m_document->renderer()->mltDeleteTransition(e.attribute("tag"), getPreviousVideoTrack(e.attribute("transition_track").toInt()), m_tracksList.count() - e.attribute("transition_track").toInt() ,
- GenTime(e.attribute("start").toInt(), m_document->renderer()->fps()),
- GenTime(e.attribute("end").toInt(), m_document->renderer()->fps()),
- e);
+ m_document->renderer()->mltDeleteTransition(item->transitionTag(), endTrack, m_tracksList.count() - transitionInfo.track, transitionInfo.startPos, transitionInfo.endPos, params);
+ delete item;
m_document->setModified(true);
}
void CustomTrackView::slotTransitionUpdated(QDomElement old, QDomElement newEffect) {
- EditTransitionCommand *command = new EditTransitionCommand(this, newEffect.attribute("a_track").toInt(), GenTime(newEffect.attribute("start").toInt(), m_document->renderer()->fps()) , old, newEffect , true);
+ /*EditTransitionCommand *command = new EditTransitionCommand(this, newEffect.attribute("a_track").toInt(), GenTime(newEffect.attribute("start").toInt(), m_document->renderer()->fps()) , old, newEffect , true);
m_commandStack->push(command);
- m_document->setModified(true);
+ m_document->setModified(true);*/
}
void CustomTrackView::updateTransition(int track, GenTime pos, QDomElement oldTransition, QDomElement transition) {
}
void CustomTrackView::addItem(DocClipBase *clip, QPoint pos) {
- int in = 0;
- GenTime out = clip->duration();
- //kdDebug()<<"- - - -CREATING CLIP, duration = "<<out<<", URL: "<<clip->fileURL();
- int trackTop = (int)(mapToScene(pos).y() / m_tracksHeight) * m_tracksHeight + 1;
- m_dropItem = new ClipItem(clip, (int)(mapToScene(pos).y() / m_tracksHeight), GenTime(), QRectF(mapToScene(pos).x() * m_scale, trackTop, out.frames(m_document->fps()) * m_scale, m_tracksHeight - 1), out, m_document->fps());
+ ItemInfo info;
+ info.startPos = GenTime((int)(mapToScene(pos).x() / m_scale), m_document->fps());
+ info.endPos = info.startPos + clip->duration();
+ info.track = (int)(pos.y() / m_tracksHeight);
+ //kDebug()<<"------------ ADDING CLIP ITEM----: "<<info.startPos.frames(25)<<", "<<info.endPos.frames(25)<<", "<<info.track;
+ m_dropItem = new ClipItem(clip, info, m_scale, m_document->fps());
scene()->addItem(m_dropItem);
}
void CustomTrackView::dragMoveEvent(QDragMoveEvent * event) {
event->setDropAction(Qt::IgnoreAction);
- //kDebug()<<"+++++++++++++ DRAG MOVE, : "<<mapToScene(event->pos()).x()<<", SCAL: "<<m_scale;
+ kDebug() << "+++++++++++++ DRAG MOVE, : " << mapToScene(event->pos()).x() << ", SCAL: " << m_scale;
if (m_dropItem) {
int track = (int)(event->pos().y() / m_tracksHeight); //) * (m_scale * 50) + m_scale;
m_dropItem->moveTo((int)(mapToScene(event->pos()).x() / m_scale), m_scale, (int)((track - m_dropItem->track()) * m_tracksHeight), track);
void CustomTrackView::dropEvent(QDropEvent * event) {
if (m_dropItem) {
- AddTimelineClipCommand *command = new AddTimelineClipCommand(this, m_dropItem->xml(), m_dropItem->clipProducer(), m_dropItem->track(), m_dropItem->startPos(), m_dropItem->rect(), m_dropItem->duration(), false, false);
+ ItemInfo info;
+ info.startPos = m_dropItem->startPos();
+ info.endPos = m_dropItem->endPos();
+ info.track = m_dropItem->track();
+ AddTimelineClipCommand *command = new AddTimelineClipCommand(this, m_dropItem->xml(), m_dropItem->clipProducer(), info, false, false);
m_commandStack->push(command);
m_dropItem->baseClip()->addReference();
m_document->updateClip(m_dropItem->baseClip()->getId());
if (itemList.at(i)->type() == AVWIDGET) {
ClipItem *item = (ClipItem *)itemList.at(i);
if (item->clipProducer() == clipId) {
- AddTimelineClipCommand *command = new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), item->track(), item->startPos(), item->rect(), item->duration(), true, true);
+ ItemInfo info;
+ info.startPos = item->startPos();
+ info.endPos = item->endPos();
+ info.track = item->track();
+ AddTimelineClipCommand *command = new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), info, true, true);
m_commandStack->push(command);
//delete item;
}
QGraphicsView::mouseReleaseEvent(event);
setDragMode(QGraphicsView::NoDrag);
if (m_dragItem == NULL) return;
+ ItemInfo info;
+ info.startPos = m_dragItem->startPos();
+ info.endPos = m_dragItem->endPos();
+ info.track = m_dragItem->track();
+
if (m_operationMode == MOVE) setCursor(Qt::OpenHandCursor);
if (m_operationMode == MOVE) {// && m_startPos.x() != m_dragItem->startPos().frames(m_document->fps())) {
// move clip
if (m_dragItem->type() == AVWIDGET) {
- MoveClipCommand *command = new MoveClipCommand(this, m_startPos, QPointF(m_dragItem->startPos().frames(m_document->fps()), m_dragItem->track()), false);
+ MoveClipCommand *command = new MoveClipCommand(this, m_dragItemInfo, info, false);
m_commandStack->push(command);
- m_document->renderer()->mltMoveClip((int)(m_tracksList.count() - m_startPos.y()), (int)(m_tracksList.count() - m_dragItem->track()), (int) m_startPos.x(), (int)(m_dragItem->startPos().frames(m_document->fps())));
+ m_document->renderer()->mltMoveClip((int)(m_tracksList.count() - m_dragItemInfo.track), (int)(m_tracksList.count() - m_dragItem->track()), (int) m_dragItemInfo.startPos.frames(m_document->fps()), (int)(m_dragItem->startPos().frames(m_document->fps())));
}
if (m_dragItem->type() == TRANSITIONWIDGET) {
- Transition* transition = (Transition*)m_dragItem;
- GenTime oldin = transition->transitionStartTime();
- GenTime oldout = transition->transitionEndTime();
- GenTime newin = m_dragItem->startPos();
- GenTime newout = newin + (oldout - oldin);
- transition->moveTransition(newin - oldin);
- MoveTransitionCommand *command = new MoveTransitionCommand(this, QPointF(oldin.frames(m_document->fps()), oldout.frames(m_document->fps())), QPointF(newin.frames(m_document->fps()), newout.frames(m_document->fps())), (int) m_startPos.y(), (int)(m_dragItem->track()), false);
+ MoveTransitionCommand *command = new MoveTransitionCommand(this, m_dragItemInfo, info, false);
m_commandStack->push(command);
//kDebug()<<"/// MOVING TRS FROM: "<<(int)(m_tracksList.count() - m_startPos.y())<<", OFFSET: "<<(int) (m_dragItem->track() - m_startPos.y());
- m_document->renderer()->mltMoveTransition(transition->transitionName(), (int)(m_tracksList.count() - m_startPos.y()), (int)(m_startPos.y() - m_dragItem->track()), oldin, oldout, newin, newout);
+ Transition *transition = (Transition *) m_dragItem;
+ m_document->renderer()->mltMoveTransition(transition->transitionName(), (int)(m_tracksList.count() - m_dragItemInfo.track), (int)(m_dragItemInfo.track - m_dragItem->track()), m_dragItemInfo.startPos, m_dragItemInfo.endPos, info.startPos, info.endPos);
}
} else if (m_operationMode == RESIZESTART) {
// resize start
if (m_dragItem->type() == AVWIDGET) {
- m_document->renderer()->mltResizeClipStart(m_tracksList.count() - m_dragItem->track(), m_dragItem->endPos(), m_dragItem->startPos(), GenTime((int)m_startPos.x(), m_document->fps()), m_dragItem->cropStart(), m_dragItem->cropStart() + m_dragItem->endPos() - m_dragItem->startPos());
- ResizeClipCommand *command = new ResizeClipCommand(this, m_startPos, QPointF(m_dragItem->startPos().frames(m_document->fps()), m_dragItem->track()), true, false);
+ m_document->renderer()->mltResizeClipStart(m_tracksList.count() - m_dragItem->track(), m_dragItem->endPos(), m_dragItem->startPos(), m_dragItemInfo.startPos, m_dragItem->cropStart(), m_dragItem->cropStart() + m_dragItem->endPos() - m_dragItem->startPos());
+ ResizeClipCommand *command = new ResizeClipCommand(this, m_dragItemInfo, info, false);
m_commandStack->push(command);
} else if (m_dragItem->type() == TRANSITIONWIDGET) {
- Transition* transition = (Transition*)m_dragItem;
- GenTime oldin = transition->transitionStartTime();
- GenTime oldout = transition->transitionEndTime();
- GenTime newin = m_dragItem->startPos();
- GenTime newout = m_dragItem->endPos();
- transition->resizeTransitionStart(newin);
- MoveTransitionCommand *command = new MoveTransitionCommand(this, QPointF(oldin.frames(m_document->fps()), oldout.frames(m_document->fps())), QPointF(newin.frames(m_document->fps()), newout.frames(m_document->fps())), (int) m_startPos.y(), (int)(m_dragItem->track()), false);
+ MoveTransitionCommand *command = new MoveTransitionCommand(this, m_dragItemInfo, info, false);
m_commandStack->push(command);
- m_document->renderer()->mltMoveTransition(transition->transitionName(), (int)(m_tracksList.count() - m_startPos.y()), 0, oldin, oldout, newin, newout);
+ Transition *transition = (Transition *) m_dragItem;
+ m_document->renderer()->mltMoveTransition(transition->transitionName(), (int)(m_tracksList.count() - m_dragItemInfo.track), 0, m_dragItemInfo.startPos, m_dragItemInfo.endPos, info.startPos, info.endPos);
}
m_document->renderer()->doRefresh();
} else if (m_operationMode == RESIZEEND) {
// resize end
if (m_dragItem->type() == AVWIDGET) {
- ResizeClipCommand *command = new ResizeClipCommand(this, m_startPos, QPointF(m_dragItem->endPos().frames(m_document->fps()), m_dragItem->track()), false, false);
+ ResizeClipCommand *command = new ResizeClipCommand(this, m_dragItemInfo, info, false);
m_document->renderer()->mltResizeClipEnd(m_tracksList.count() - m_dragItem->track(), m_dragItem->startPos(), m_dragItem->cropStart(), m_dragItem->cropStart() + m_dragItem->endPos() - m_dragItem->startPos());
m_commandStack->push(command);
} else if (m_dragItem->type() == TRANSITIONWIDGET) {
- Transition* transition = (Transition*)m_dragItem;
- GenTime oldin = transition->transitionStartTime();
- GenTime oldout = transition->transitionEndTime();
- GenTime newin = m_dragItem->startPos();
- GenTime newout = m_dragItem->endPos();
- transition->resizeTransitionEnd(newout);
- MoveTransitionCommand *command = new MoveTransitionCommand(this, QPointF(oldin.frames(m_document->fps()), oldout.frames(m_document->fps())), QPointF(newin.frames(m_document->fps()), newout.frames(m_document->fps())), (int) m_startPos.y(), (int)(m_dragItem->track()), false);
+
+ MoveTransitionCommand *command = new MoveTransitionCommand(this, m_dragItemInfo, info, false);
m_commandStack->push(command);
- m_document->renderer()->mltMoveTransition(transition->transitionName(), (int)(m_tracksList.count() - m_startPos.y()), 0, oldin, oldout, newin, newout);
+ Transition *transition = (Transition *) m_dragItem;
+ m_document->renderer()->mltMoveTransition(transition->transitionName(), (int)(m_tracksList.count() - m_dragItemInfo.track), 0, m_dragItemInfo.startPos, m_dragItemInfo.endPos, info.startPos, info.endPos);
}
m_document->renderer()->doRefresh();
}
m_dragItem = NULL;
}
-void CustomTrackView::deleteClip(int track, GenTime startpos, const QRectF &rect) {
- ClipItem *item = getClipItemAt(startpos, track);
+void CustomTrackView::deleteClip(ItemInfo info) {
+ ClipItem *item = getClipItemAt((int) info.startPos.frames(m_document->fps()), info.track);
if (!item) {
- kDebug() << "---------------- ERROR, CANNOT find clip to move at: " << rect.x();
+ kDebug() << "---------------- ERROR, CANNOT find clip to move at...";// << rect.x();
return;
}
item->baseClip()->removeReference();
m_document->updateClip(item->baseClip()->getId());
delete item;
- m_document->renderer()->mltRemoveClip(m_tracksList.count() - track, startpos);
+ m_document->renderer()->mltRemoveClip(m_tracksList.count() - info.track, info.startPos);
m_document->renderer()->doRefresh();
}
for (int i = 0; i < itemList.count(); i++) {
if (itemList.at(i)->type() == AVWIDGET && itemList.at(i)->isSelected()) {
ClipItem *item = (ClipItem *) itemList.at(i);
- AddTimelineClipCommand *command = new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), item->track(), item->startPos(), item->rect(), item->duration(), true, true);
+ ItemInfo info;
+ info.startPos = item->startPos();
+ info.endPos = item->endPos();
+ info.track = item->track();
+ AddTimelineClipCommand *command = new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), info, true, true);
m_commandStack->push(command);
}
}
}
-void CustomTrackView::addClip(QDomElement xml, int clipId, int track, GenTime startpos, const QRectF &rect, GenTime duration) {
- QRect r((int)(startpos.frames(m_document->fps()) * m_scale), m_tracksHeight * track, (int)(duration.frames(m_document->fps()) * m_scale), m_tracksHeight - 1);
+void CustomTrackView::addClip(QDomElement xml, int clipId, ItemInfo info) {
DocClipBase *baseclip = m_document->clipManager()->getClipById(clipId);
- ClipItem *item = new ClipItem(baseclip, track, startpos, r, duration, m_document->fps());
+ ClipItem *item = new ClipItem(baseclip, info, m_scale, m_document->fps());
scene()->addItem(item);
baseclip->addReference();
m_document->updateClip(baseclip->getId());
- m_document->renderer()->mltInsertClip(m_tracksList.count() - track, startpos, xml);
+ m_document->renderer()->mltInsertClip(m_tracksList.count() - info.track, info.startPos, xml);
m_document->renderer()->doRefresh();
}
return getTransitionItemAt(framepos, track);
}
-void CustomTrackView::moveClip(const QPointF &startPos, const QPointF &endPos) {
- ClipItem *item = getClipItemAt((int)startPos.x() + 1, (int)startPos.y());
+void CustomTrackView::moveClip(const ItemInfo start, const ItemInfo end) {
+ ClipItem *item = getClipItemAt((int) start.startPos.frames(m_document->fps()) + 1, start.track);
if (!item) {
- kDebug() << "---------------- ERROR, CANNOT find clip to move at: " << startPos.x() * m_scale * FRAME_SIZE + 1 << ", " << startPos.y() * m_tracksHeight + m_tracksHeight / 2;
+ kDebug() << "---------------- ERROR, CANNOT find clip to move at.. ";// << startPos.x() * m_scale * FRAME_SIZE + 1 << ", " << startPos.y() * m_tracksHeight + m_tracksHeight / 2;
return;
}
- kDebug() << "---------------- Move CLIP FROM: " << startPos.x() << ", END:" << endPos.x() << ",TRACKS: " << startPos.y() << " TO " << endPos.y();
- item->moveTo((int)endPos.x(), m_scale, (int)((endPos.y() - startPos.y()) * m_tracksHeight), (int)endPos.y());
- m_document->renderer()->mltMoveClip((int)(m_tracksList.count() - startPos.y()), (int)(m_tracksList.count() - endPos.y()), (int) startPos.x(), (int)endPos.x());
+ //kDebug() << "---------------- Move CLIP FROM: " << startPos.x() << ", END:" << endPos.x() << ",TRACKS: " << startPos.y() << " TO " << endPos.y();
+ item->moveTo((int) end.startPos.frames(m_document->fps()), m_scale, (int)((end.track - start.track) * m_tracksHeight), end.track);
+ m_document->renderer()->mltMoveClip((int)(m_tracksList.count() - start.track), (int)(m_tracksList.count() - end.track), (int) start.startPos.frames(m_document->fps()), (int)end.startPos.frames(m_document->fps()));
}
-void CustomTrackView::moveTransition(const QPointF &startPos, const QPointF &endPos, int oldtrack, int newtrack) {
- Transition *item = getTransitionItemAt((int)startPos.x() + 1, oldtrack);
+void CustomTrackView::moveTransition(const ItemInfo start, const ItemInfo end) {
+ Transition *item = getTransitionItemAt((int)start.startPos.frames(m_document->fps()) + 1, start.track);
if (!item) {
- kDebug() << "---------------- ERROR, CANNOT find transition to move at: " << startPos.x() * m_scale * FRAME_SIZE + 1 << ", " << startPos.y() * m_tracksHeight + m_tracksHeight / 2;
+ kDebug() << "---------------- ERROR, CANNOT find transition to move... ";// << startPos.x() * m_scale * FRAME_SIZE + 1 << ", " << startPos.y() * m_tracksHeight + m_tracksHeight / 2;
return;
}
//kDebug() << "---------------- Move TRANSITION FROM: " << startPos.x() << ", END:" << endPos.x() << ",TRACKS: " << oldtrack << " TO " << newtrack;
//kDebug()<<"/// RESIZE TRANS START: ("<< startPos.x()<<"x"<< startPos.y()<<") / ("<<endPos.x()<<"x"<< endPos.y()<<")";
- if (endPos.y() - endPos.x() == startPos.y() - startPos.x()) {
+ if (end.endPos - end.startPos == start.endPos - start.startPos) {
// Transition was moved
- item->moveTo((int)endPos.x(), m_scale, (newtrack - oldtrack) * m_tracksHeight, newtrack);
- item->moveTransition(GenTime((int)(endPos.x() - startPos.x()), m_document->fps()));
- } else if (endPos.y() == startPos.y()) {
+ item->moveTo((int) end.startPos.frames(m_document->fps()), m_scale, (end.track - start.track) * m_tracksHeight, end.track);
+ } else if (end.endPos == start.endPos) {
// Transition start resize
- item->resizeStart((int)endPos.x(), m_scale);
- item->resizeTransitionStart(GenTime((int) endPos.x(), m_document->fps()));
+ item->resizeStart((int) end.startPos.frames(m_document->fps()), m_scale);
} else {
// Transition end resize;
- item->resizeEnd((int)endPos.y(), m_scale);
- item->resizeTransitionEnd(GenTime((int) endPos.y(), m_document->fps()));
+ item->resizeEnd((int) end.endPos.frames(m_document->fps()), m_scale);
}
//item->moveTransition(GenTime((int) (endPos.x() - startPos.x()), m_document->fps()));
- m_document->renderer()->mltMoveTransition(item->transitionName(), m_tracksList.count() - oldtrack, oldtrack - newtrack, GenTime((int) startPos.x(), m_document->fps()), GenTime((int) startPos.y(), m_document->fps()), GenTime((int) endPos.x(), m_document->fps()), GenTime((int) endPos.y(), m_document->fps()));
+ m_document->renderer()->mltMoveTransition(item->transitionName(), m_tracksList.count() - start.track, start.track - end.track, start.startPos, start.endPos, end.startPos, end.endPos);
}
-void CustomTrackView::resizeClip(const QPointF &startPos, const QPointF &endPos, bool resizeClipStart) {
+void CustomTrackView::resizeClip(const ItemInfo start, const ItemInfo end) {
int offset;
+ bool resizeClipStart = true;
+ if (start.startPos == end.startPos) resizeClipStart = false;
if (resizeClipStart) offset = 1;
else offset = -1;
- ClipItem *item = getClipItemAt((int)(startPos.x() + offset), (int) startPos.y());
+ ClipItem *item = getClipItemAt((int)(start.startPos.frames(m_document->fps()) + offset), start.track);
if (!item) {
- kDebug() << "---------------- ERROR, CANNOT find clip to resize at: " << startPos;
+ kDebug() << "---------------- ERROR, CANNOT find clip to resize at... "; // << startPos;
return;
}
- qreal diff = endPos.x() - startPos.x();
if (resizeClipStart) {
- m_document->renderer()->mltResizeClipStart(m_tracksList.count() - item->track(), item->endPos(), GenTime((int)endPos.x(), m_document->fps()), item->startPos(), item->cropStart() + GenTime((int)diff, m_document->fps()), item->cropStart() + GenTime((int)diff, m_document->fps()) + item->endPos() - GenTime((int)endPos.x(), m_document->fps()));
- item->resizeStart((int)endPos.x(), m_scale);
+ m_document->renderer()->mltResizeClipStart(m_tracksList.count() - item->track(), item->endPos(), end.startPos, item->startPos(), item->cropStart() + end.startPos - start.startPos, item->cropStart() + end.startPos - start.startPos + item->endPos() - end.startPos);
+ item->resizeStart((int) end.startPos.frames(m_document->fps()), m_scale);
} else {
- m_document->renderer()->mltResizeClipEnd(m_tracksList.count() - item->track(), item->startPos(), item->cropStart(), item->cropStart() + GenTime((int)endPos.x(), m_document->fps()) - item->startPos());
- item->resizeEnd((int)endPos.x(), m_scale);
+ m_document->renderer()->mltResizeClipEnd(m_tracksList.count() - item->track(), item->startPos(), item->cropStart(), item->cropStart() + end.startPos - item->startPos());
+ item->resizeEnd((int) end.startPos.frames(m_document->fps()), m_scale);
}
m_document->renderer()->doRefresh();
}
}
} else if (itemList.at(i)->type() == TRANSITIONWIDGET) {
Transition *transition = static_cast <Transition*>(itemList.at(i));
- GenTime start = transition->transitionStartTime();
- GenTime end = transition->transitionEndTime();
+ GenTime start = transition->startPos();
+ GenTime end = transition->endPos();
m_snapPoints.append(start);
m_snapPoints.append(end);
if (offset != GenTime()) {
void removeTrack();
int cursorPos();
void checkAutoScroll();
- void moveClip(const QPointF &startPos, const QPointF &endPos);
+ void moveClip(const ItemInfo start, const ItemInfo end);
/** move transition, startPos = (old start, old end), endPos = (new start, new end) */
- void moveTransition(const QPointF &startPos, const QPointF &endPos, int oldtrack, int newtrack);
- void resizeClip(const QPointF &startPos, const QPointF &endPos, bool resizeClipStart);
- void addClip(QDomElement xml, int clipId, int track, GenTime startpos, const QRectF &rect, GenTime duration);
- void deleteClip(int track, GenTime startpos, const QRectF &rect);
+ void moveTransition(const ItemInfo start, const ItemInfo end);
+ void resizeClip(const ItemInfo start, const ItemInfo end);
+ void addClip(QDomElement xml, int clipId, ItemInfo info);
+ void deleteClip(ItemInfo info);
void setScale(double scaleFactor);
void deleteClip(int clipId);
void slotAddEffect(QDomElement effect, GenTime pos, int track);
void addEffect(int track, GenTime pos, QDomElement effect);
void deleteEffect(int track, GenTime pos, QDomElement effect);
void updateEffect(int track, GenTime pos, QDomElement effect);
- void addTransition(int track, GenTime pos, QDomElement transition);
- void deleteTransition(int track, GenTime pos, QDomElement transition);
+ void addTransition(ItemInfo transitionInfo, int endTrack, QMap <QString, QString> desc, QDomElement params);
+ void deleteTransition(ItemInfo transitionInfo, int endTrack, QMap <QString, QString> desc, QDomElement params);
void updateTransition(int track, GenTime pos, QDomElement oldTransition, QDomElement transition);
void moveTransition(GenTime oldpos, GenTime newpos);
void activateMonitor();
void slotUpdateClipEffect(ClipItem *clip, QDomElement oldeffect, QDomElement effect);
void slotRefreshEffects(ClipItem *clip);
void setDuration(int duration);
- void slotAddTransition(ClipItem* clip , QDomElement transition, GenTime startTime , int startTrack);
+ void slotAddTransition(ClipItem* clip, ItemInfo transitionInfo, int endTrack,
+ QMap <QString, QString> desc, QDomElement transition = QDomElement());
void slotTransitionUpdated(QDomElement, QDomElement);
void slotSwitchTrackAudio(int ix);
void slotSwitchTrackVideo(int ix);
KdenliveDoc *m_document;
void addItem(DocClipBase *clip, QPoint pos);
QGraphicsLineItem *m_cursorLine;
- QPointF m_startPos;
+ ItemInfo m_dragItemInfo;
OPERATIONTYPE m_operationMode;
OPERATIONTYPE m_moveOpMode;
AbstractClipItem *m_dragItem;
#ifndef DEFINITIONS_H
#define DEFINITIONS_H
+#include "gentime.h"
+
#define FRAME_SIZE 90
#define MAXCLIPDURATION 15000
bool isBlind;
};
+struct ItemInfo {
+ GenTime startPos;
+ GenTime endPos;
+ int track;
+};
+
struct MltVideoProfile {
QString path;
QString description;
#include "moveclipcommand.h"
#include "customtrackview.h"
-MoveClipCommand::MoveClipCommand(CustomTrackView *view, const QPointF startPos, const QPointF endPos, bool doIt)
- : m_view(view), m_startPos(startPos), m_endPos(endPos), m_doIt(doIt) {
+MoveClipCommand::MoveClipCommand(CustomTrackView *view, const ItemInfo start, const ItemInfo end, bool doIt)
+ : m_view(view), m_startPos(start), m_endPos(end), m_doIt(doIt) {
setText(i18n("Move clip"));
}
#include <QPointF>
#include <KDebug>
+#include "definitions.h"
class CustomTrackView;
class MoveClipCommand : public QUndoCommand {
public:
- MoveClipCommand(CustomTrackView *view, const QPointF startPos, const QPointF endPos, bool doIt);
+ MoveClipCommand(CustomTrackView *view, const ItemInfo start, const ItemInfo end, bool doIt);
virtual void undo();
virtual void redo();
private:
CustomTrackView *m_view;
- QPointF m_startPos;
- QPointF m_endPos;
+ ItemInfo m_startPos;
+ ItemInfo m_endPos;
bool m_doIt;
};
#include "movetransitioncommand.h"
#include "customtrackview.h"
-MoveTransitionCommand::MoveTransitionCommand(CustomTrackView *view, const QPointF startPos, const QPointF endPos, int startTrack, int endTrack, bool doIt)
- : m_view(view), m_startPos(startPos), m_endPos(endPos), m_startTrack(startTrack), m_endTrack(endTrack), m_doIt(doIt) {
+MoveTransitionCommand::MoveTransitionCommand(CustomTrackView *view, const ItemInfo start, const ItemInfo end, bool doIt) : m_view(view), m_startPos(start), m_endPos(end), m_doIt(doIt) {
setText(i18n("Move transition"));
}
void MoveTransitionCommand::undo() {
// kDebug()<<"---- undoing action";
m_doIt = true;
- m_view->moveTransition(m_endPos, m_startPos, m_endTrack, m_startTrack);
+ m_view->moveTransition(m_endPos, m_startPos);
}
// virtual
void MoveTransitionCommand::redo() {
kDebug() << "---- redoing action";
- if (m_doIt) m_view->moveTransition(m_startPos, m_endPos, m_startTrack, m_endTrack);
+ if (m_doIt) m_view->moveTransition(m_startPos, m_endPos);
m_doIt = true;
}
#include <KDebug>
+#include "definitions.h"
+
class CustomTrackView;
class MoveTransitionCommand : public QUndoCommand {
public:
- MoveTransitionCommand(CustomTrackView *view, const QPointF startPos, const QPointF endPos, int startTrack, int endTrack, bool doIt);
+ MoveTransitionCommand(CustomTrackView *view, const ItemInfo start, const ItemInfo end, bool doIt);
virtual void undo();
virtual void redo();
private:
CustomTrackView *m_view;
- QPointF m_startPos;
- QPointF m_endPos;
+ ItemInfo m_startPos;
+ ItemInfo m_endPos;
bool m_doIt;
- int m_startTrack;
- int m_endTrack;
};
#endif
#include "resizeclipcommand.h"
#include "customtrackview.h"
-ResizeClipCommand::ResizeClipCommand(CustomTrackView *view, const QPointF startPos, const QPointF endPos, bool resizeClipStart, bool doIt)
- : m_view(view), m_startPos(startPos), m_endPos(endPos), m_resizeClipStart(resizeClipStart), m_doIt(doIt) {
+
+ResizeClipCommand::ResizeClipCommand(CustomTrackView *view, const ItemInfo start, const ItemInfo end, bool doIt)
+ : m_view(view), m_startPos(start), m_endPos(end), m_doIt(doIt) {
setText(i18n("Resize clip"));
}
void ResizeClipCommand::undo() {
// kDebug()<<"---- undoing action";
m_doIt = true;
- if (m_doIt) m_view->resizeClip(m_endPos, m_startPos, m_resizeClipStart);
+ if (m_doIt) m_view->resizeClip(m_endPos, m_startPos);
}
// virtual
void ResizeClipCommand::redo() {
kDebug() << "---- redoing action";
- if (m_doIt) m_view->resizeClip(m_startPos, m_endPos, m_resizeClipStart);
+ if (m_doIt) m_view->resizeClip(m_startPos, m_endPos);
m_doIt = true;
}
#include <KDebug>
+#include "definitions.h"
+
class CustomTrackView;
class ResizeClipCommand : public QUndoCommand {
public:
- ResizeClipCommand(CustomTrackView *view, const QPointF startPos, const QPointF endPos, bool resizeClipStart, bool doIt);
+ ResizeClipCommand(CustomTrackView *view, const ItemInfo start, const ItemInfo end, bool doIt);
virtual void undo();
virtual void redo();
private:
CustomTrackView *m_view;
- QPointF m_startPos;
- QPointF m_endPos;
- bool m_resizeClipStart;
+ ItemInfo m_startPos;
+ ItemInfo m_endPos;
bool m_doIt;
};
int in = elem.attribute("in", 0).toInt();
int id = elem.attribute("producer", 0).toInt();
DocClipBase *clip = m_doc->clipManager()->getClipById(id);
- int out = elem.attribute("out", 0).toInt() - in;
- //kDebug()<<"++++++++++++++\n\n / / /ADDING CLIP: "<<clip.cropTime<<", out: "<<clip.duration<<", Producer: "<<clip.producer<<"\n\n++++++++++++++++++++";
- ClipItem *item = new ClipItem(clip, ix, GenTime(position, m_doc->fps()), QRectF(position * m_scale, trackTop + 1, out * m_scale, KdenliveSettings::trackheight() - 1), GenTime(out, m_doc->fps()), m_doc->fps());
+ int out = elem.attribute("out", 0).toInt();
+
+ ItemInfo info;
+ info.startPos = GenTime(position, m_doc->fps());
+ info.endPos = GenTime(out, m_doc->fps());
+ info.track = ix;
+
+ ClipItem *item = new ClipItem(clip, info, m_scale, m_doc->fps());
m_scene->addItem(item);
position += out;
#include "kdenlivesettings.h"
-Transition::Transition(const QRectF& rect , ClipItem * clipa, const QString & type, const GenTime &startTime, const GenTime &endTime, double fps, bool inverted) : AbstractClipItem(rect) {
- m_invertTransition = inverted;
+Transition::Transition(const ItemInfo info, int transitiontrack, double scale, double fps, QMap <QString, QString> desc, QDomElement params) : AbstractClipItem(info, QRectF(info.startPos.frames(fps) *scale , info.track * KdenliveSettings::trackheight() + KdenliveSettings::trackheight() / 2, (info.endPos - info.startPos).frames(fps) * scale , KdenliveSettings::trackheight() - 1)) {
m_singleClip = true;
- m_transitionTrack = clipa->track();
+ m_transitionTrack = transitiontrack;
m_secondClip = NULL;
- m_transitionName = type;
+ m_cropStart = GenTime();
m_fps = fps;
- m_cropDuration = endTime - startTime;
- m_startPos = startTime;
- m_maxDuration = GenTime(1000000);
- // Default duration = 2.5 seconds
- GenTime defaultTransitionDuration = GenTime(2.5);
-
- m_referenceClip = clipa;
-
- if (startTime < m_referenceClip->startPos()) m_transitionStart = GenTime(0.0);
- else if (startTime > m_referenceClip->endPos()) m_transitionStart = m_referenceClip->duration() - defaultTransitionDuration;
- else m_transitionStart = startTime - m_referenceClip->startPos();
+ m_cropDuration = m_maxDuration;
+ //m_referenceClip = clipa;
+ if (desc.isEmpty()) {
+ m_description.insert("tag", "luma");
+ m_description.insert("name", "Luma");
+ m_description.insert("description", "Luma Transitions");
+ QDomDocument doc;
+ m_parameters = doc.createElement("ktransition");
+ } else {
+ m_description = desc;
+ m_parameters = params;
+ }
- if (m_transitionStart + m_cropDuration > m_referenceClip->duration())
- m_transitionDuration = m_referenceClip->duration() - m_transitionStart;
- else m_transitionDuration = m_cropDuration;
m_secondClip = 0;
setFlags(QGraphicsItem::ItemClipsToShape | QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
setZValue(2);
- QDomDocument doc;
- doc.setContent(QString("<ktransition tag=\"luma\">\n\
- <name>Luma</name>\n\
- <description>Luma Transitions</description>\n\
- <properties id=\"luma\" tag=\"luma\" />\n\
- <parameter type=\"bool\" name=\"reverse\" max=\"1\" min=\"0\" default=\"1\" factor=\"1\">\n\
- <name>Reverse</name>\n\
- </parameter>\n\
- </ktransition>"));
- m_transitionParameters = doc.documentElement();
-
- m_referenceClip->addTransition(this);
-}
-
-// create a transition from XML
-Transition::Transition(const QRectF& rect , ClipItem * clip, QDomElement transitionElement, double fps, GenTime offset) : AbstractClipItem(rect) {
- if (offset == GenTime()) offset = clip->startPos();
- m_referenceClip = clip;
- m_singleClip = true;
- m_secondClip = NULL;
- m_transitionStart = GenTime(transitionElement.attribute("start", QString::null).toInt(), m_referenceClip->fps());
- m_transitionDuration = GenTime(transitionElement.attribute("end", QString::null).toInt(), m_referenceClip->fps()) - m_transitionStart;
- m_transitionTrack = transitionElement.attribute("transition_track", "0").toInt();
- m_transitionStart = m_transitionStart - offset;
-
- m_invertTransition = transitionElement.attribute("inverted", "0").toInt();
- m_transitionName = transitionElement.attribute("type" , "luma");
-
- // load transition parameters
- typedef QMap<QString, QString> ParamMap;
- ParamMap params;
- for (QDomNode n = transitionElement.firstChild(); !n.isNull(); n = n.nextSibling()) {
- QDomElement paramElement = n.toElement();
- params[paramElement.tagName()] = paramElement.attribute("value", QString::null);
- }
- if (m_invertTransition) params["reverse"] = "1";
- //if (!params.isEmpty()) setTransitionParameters(params);
-
- // Check if transition is valid (not outside of clip)
- if (m_transitionStart > clip->duration())
- m_transitionDuration = GenTime();
-
+ //m_referenceClip->addTransition(this);
}
Transition::~Transition() {
}
QString Transition::transitionName() const {
- return m_transitionName;
+ return m_description.value("name");
}
-void Transition::setTransitionParameters(const QDomElement & elem) {
- m_transitionParameters = elem;
- m_transitionName = elem.attribute("tag");
+QString Transition::transitionTag() const {
+ return m_description.value("tag");
}
-bool Transition::invertTransition() const {
- if (!m_singleClip) {
- if (m_referenceClip->startPos() < m_secondClip->startPos()) return true;
- else return false;
- }
- return m_invertTransition;
+void Transition::setTransitionParameters(const QDomElement params) {
+ m_parameters = params;
+}
+
+
+bool Transition::invertedTransition() const {
+ return false; //m_parameters.attribute("reverse").toInt();
}
QPixmap Transition::transitionPixmap() const {
KIcon icon;
- if (m_transitionName == "luma") {
- if (invertTransition()) icon = KIcon("kdenlive_trans_up");
+ if (transitionTag() == "luma") {
+ if (invertedTransition()) icon = KIcon("kdenlive_trans_up");
else icon = KIcon("kdenlive_trans_down");
- } else if (m_transitionName == "composite") {
+ } else if (transitionTag() == "composite") {
icon = KIcon("kdenlive_trans_wiper");
- } else if (m_transitionName == "lumafile") {
+ } else if (transitionTag() == "lumafile") {
icon = KIcon("kdenlive_trans_luma");
} else icon = KIcon("kdenlive_trans_pip");
return icon.pixmap(QSize(15, 15));
}
-int Transition::transitionTrack() const {
- return m_transitionTrack;
-}
-
-void Transition::setTransitionTrack(int track) {
- m_transitionTrack = track;
-}
void Transition::setTransitionDirection(bool inv) {
- m_invertTransition = inv;
-}
-
-int Transition::transitionStartTrack() const {
- return m_referenceClip->track();
+ //m_parameters.setAttribute("reverse", inv);
}
int Transition::transitionEndTrack() const {
- if (!m_singleClip) return m_secondClip->track();
- return m_referenceClip->track() + 1;
- //TODO: calculate next video track
-}
-
-GenTime Transition::transitionDuration() const {
- return transitionEndTime() - transitionStartTime();
-}
-
-GenTime Transition::transitionStartTime() const {
- if (!m_singleClip) {
- GenTime startb = m_secondClip->startPos();
- GenTime starta = m_referenceClip->startPos();
- if (startb > m_referenceClip->endPos()) return m_referenceClip->endPos() - GenTime(0.12);
- if (startb > starta)
- return startb;
- return starta;
- } else return m_referenceClip->startPos() + m_transitionStart;
+ return m_transitionTrack;
}
-
-GenTime Transition::transitionEndTime() const {
- if (!m_singleClip) {
- GenTime endb = m_secondClip->endPos();
- GenTime enda = m_referenceClip->endPos();
- if (m_secondClip->startPos() > enda) return enda;
- if (endb < m_referenceClip->startPos()) return m_referenceClip->startPos() + GenTime(0.12);
- else if (endb > enda) return enda;
- else return endb;
- } else {
- if (m_transitionStart + m_transitionDuration > m_referenceClip->duration())
- return m_referenceClip->endPos();
- return m_referenceClip->startPos() + m_transitionStart + m_transitionDuration;
- }
-}
void Transition::paint(QPainter *painter,
const QStyleOptionGraphicsItem *option,
QWidget *widget) {
int Transition::type() const {
return TRANSITIONWIDGET;
}
+
OPERATIONTYPE Transition::operationMode(QPointF pos, double scale) {
if (abs((int)(pos.x() - rect().x())) < 6) return RESIZESTART;
else if (abs((int)(pos.x() - (rect().x() + rect().width()))) < 6) return RESIZEEND;
return MOVE;
}
-void Transition::resizeTransitionStart(GenTime time) {
- if (!m_singleClip) return; //cannot resize automatic transitions
- if (time < m_referenceClip->startPos()) time = m_referenceClip->startPos();
- // Transitions shouldn't be shorter than 3 frames, about 0.12 seconds
- if (transitionEndTime().ms() - time.ms() < 120.0) time = transitionEndTime() - GenTime(0.12);
- m_transitionDuration = m_transitionDuration - (time - m_referenceClip->startPos() - m_transitionStart);
- m_transitionStart = time - m_referenceClip->startPos();
-}
-
-void Transition::resizeTransitionEnd(GenTime time) {
- if (!m_singleClip) return; //cannot resize automatic transitions
- if (time > m_referenceClip->endPos()) time = m_referenceClip->endPos();
- // Transitions shouldn't be shorter than 3 frames, about 0.12 seconds
- if (time.ms() - transitionStartTime().ms() < 120.0) time = transitionStartTime() + GenTime(0.12);
- m_transitionDuration = time - (m_referenceClip->startPos() + m_transitionStart);
-}
-
-void Transition::moveTransition(GenTime time) {
- if (!m_singleClip) return; //cannot move automatic transitions
- if (m_transitionStart + time < GenTime(0.0)) m_transitionStart = GenTime(0.0);
- else if (m_transitionStart + time > m_referenceClip->duration() - m_transitionDuration)
- m_transitionStart = m_referenceClip->duration() - m_transitionDuration;
- else m_transitionStart = m_transitionStart + time;
- if (m_transitionStart < GenTime(0.0)) m_transitionStart = GenTime(0.0);
-}
bool Transition::hasClip(const ClipItem * clip) const {
if (clip == m_secondClip) return true;
return false;
}
+/*
Transition *Transition::clone() {
return new Transition::Transition(rect(), m_referenceClip, this->toXML() , m_fps);
- /*if (m_singleClip || m_secondClip == 0)
- return new Transition::Transition(m_referenceClip);
- else
- //return new Transition::Transition(m_referenceClip, m_secondClip);
- return new Transition::Transition(m_referenceClip, this->toXML());
- */
-}
+}*/
+/*
Transition *Transition::reparent(ClipItem * clip) {
return new Transition::Transition(rect(), clip, this->toXML(), m_fps, m_referenceClip->startPos());
-}
+}*/
bool Transition::isValid() const {
- return (m_transitionDuration != GenTime());
+ return true; //(m_transitionDuration != GenTime());
}
const ClipItem *Transition::referencedClip() const {
return m_referenceClip;
}
+/*
QDomElement Transition::toXML() {
- m_transitionParameters.setAttribute("type", m_transitionName);
+ m_transitionParameters.setAttribute("type", transitionTag);
//m_transitionParameters.setAttribute("inverted", invertTransition());
m_transitionParameters.setAttribute("transition_track", m_transitionTrack);
m_transitionParameters.setAttribute("start", transitionStartTime().frames(m_referenceClip->fps()));
}
return m_transitionParameters;
-}
+}*/
#include <QString>
#include <QGraphicsRectItem>
#include <QPixmap>
-#include <qdom.h>
+#include <QDomElement>
#include <QMap>
#include "gentime.h"
Q_OBJECT
public:
- Transition(const QRectF&, ClipItem * clipa, const QString& type, const GenTime &startTime, const GenTime &endTime, double fps, bool inverted = false);
- Transition(const QRectF&, ClipItem * clip, QDomElement transitionElement, double fps, GenTime offset = GenTime());
+ Transition(const ItemInfo info, int transitiontrack, double scale, double fps, QMap <QString, QString> desc, QDomElement params = QDomElement());
virtual ~Transition();
virtual void paint(QPainter *painter,
const QStyleOptionGraphicsItem *option,
QWidget *widget);
virtual int type() const;
/** Returns an XML representation of this transition. */
- QDomElement toXML();
+ //QDomElement toXML();
- GenTime transitionStartTime() const;
- GenTime transitionEndTime() const;
/** Return the track number of transition in the playlist*/
- int transitionStartTrack() const;
int transitionEndTrack() const;
Transition *clone();
bool hasClip(const ClipItem * clip) const;
bool belongsToClip(const ClipItem * clip) const;
- void resizeTransitionEnd(GenTime time);
- void resizeTransitionStart(GenTime time);
- void moveTransition(GenTime time);
- bool invertTransition() const;
+ bool invertedTransition() const;
QString transitionName() const;
+ QString transitionTag() const;
OPERATIONTYPE operationMode(QPointF pos, double scale);
- void setTransitionType(QString newType);
//const QMap < QString, QString > transitionParameters() const;
- void setTransitionParameters(const QDomElement&);
+ void setTransitionParameters(const QDomElement params);
void setTransitionDirection(bool inv);
- int transitionTrack() const;
void setTransitionTrack(int track);
QPixmap transitionPixmap() const;
- Transition *reparent(ClipItem * clip);
+ //Transition *reparent(ClipItem * clip);
bool isValid() const;
- GenTime transitionDuration() const;
+
const ClipItem *referencedClip() const;
private:
-
- GenTime m_transitionStart;
- GenTime m_transitionDuration;
- QDomElement m_transitionParameters;
-
- /** The name of the transition to be displayed to user */
- QString m_transitionName;
-
- /** Should the transition be reversed */
- bool m_invertTransition;
-
bool m_singleClip;
-
- /** The track to which the transition is attached*/
- int m_track;
-
+ /** contains the transition description (name, tag, description) */
+ QMap <QString, QString> m_description;
+ /** contains the transition parameters */
+ QDomElement m_parameters;
/** The clip to which the transition is attached */
ClipItem *m_referenceClip;
* *
***************************************************************************/
+
+#include <KDebug>
+
#include "transitionsettings.h"
#include "transition.h"
-#include <KDebug>
#include "effectslist.h"
#include "effectstackedit.h"
void TransitionSettings::slotTransitionChanged() {
- QDomElement e = m_usedTransition->toXML();
-
- //set old values from e in <ktransition> to desc (like reverse and so )
- QDomElement desc = m_transitions->getEffectByName(ui.listWidget->currentItem()->text());
- if (m_usedTransition) {
- m_usedTransition->setTransitionParameters(desc);
- m_usedTransition->update();
- }
- emit transitionUpdated(e, m_usedTransition->toXML());
- emit transferParamDesc(desc, 0, 0);
-
+ /*
+ QDomElement e = m_usedTransition->toXML();
+
+ //set old values from e in <ktransition> to desc (like reverse and so )
+ QDomElement desc = m_transitions->getEffectByName(ui.listWidget->currentItem()->text());
+ if (m_usedTransition) {
+ m_usedTransition->setTransitionParameters(desc);
+ m_usedTransition->update();
+ }
+ emit transitionUpdated(e, m_usedTransition->toXML());
+ emit transferParamDesc(desc, 0, 0);
+ */
}
void TransitionSettings::slotTransitionItemSelected(Transition* t) {