#include "addtimelineclipcommand.h"
-AddTimelineClipCommand::AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int track, int startpos, QRectF rect, int duration, bool doIt)
- : m_view(view), m_xml(xml), m_clipTrack(track), m_clipPos(startpos), m_clipRect(rect), m_clipDuration(duration), m_doIt(doIt) {
+AddTimelineClipCommand::AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, int track, int startpos, QRectF rect, int duration, bool doIt)
+ : m_view(view), m_xml(xml), m_clipId(clipId), m_clipTrack(track), m_clipPos(startpos), m_clipRect(rect), m_clipDuration(duration), m_doIt(doIt) {
setText(i18n("Add timeline clip"));
}
void AddTimelineClipCommand::redo()
{
//kDebug()<<"---- redoing action";
- if (m_doIt) m_view->addClip(m_xml, m_clipTrack, m_clipPos, m_clipRect, m_clipDuration);
+ if (m_doIt) m_view->addClip(m_xml, m_clipId, m_clipTrack, m_clipPos, m_clipRect, m_clipDuration);
m_doIt = true;
}
class AddTimelineClipCommand : public QUndoCommand
{
public:
- AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int track, int startpos, QRectF rect, int duration, bool doIt);
+ AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, int track, int startpos, QRectF rect, int duration, bool doIt);
virtual void undo();
virtual void redo();
private:
CustomTrackView *m_view;
int m_clipDuration;
+ int m_clipId;
QDomElement m_xml;
int m_clipTrack;
int m_clipPos;
#include "renderer.h"
#include "kdenlivesettings.h"
-ClipItem::ClipItem(QDomElement xml, int track, int startpos, const QRectF & rect, int duration)
- : QGraphicsRectItem(rect), m_xml(xml), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_track(track), m_startPos(startpos), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), m_startFade(0), m_endFade(0)
-{
- //setToolTip(name);
-
- m_clipName = xml.attribute("name");
- if (m_clipName.isEmpty()) m_clipName = KUrl(xml.attribute("resource")).fileName();
-
- m_producer = xml.attribute("id").toInt();
-
- m_clipType = (CLIPTYPE) xml.attribute("type").toInt();
-
- m_cropStart = xml.attribute("in", 0).toInt();
- m_maxDuration = xml.attribute("duration", 0).toInt();
- if (m_maxDuration == 0) m_maxDuration = xml.attribute("out", 0).toInt() - m_cropStart;
-
- if (duration != -1) m_cropDuration = duration;
- else m_cropDuration = m_maxDuration;
-
- setFlags(QGraphicsItem::ItemClipsToShape | QGraphicsItem::ItemClipsChildrenToShape | QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
-
- setBrush(QColor(100, 100, 150));
- if (m_clipType == VIDEO || m_clipType == AV) {
- m_hasThumbs = true;
- //connect(this, SIGNAL(getThumb(int, int)), clip->thumbProducer(), SLOT(extractImage(int, int)));
- //connect(clip->thumbProducer(), SIGNAL(thumbReady(int, QPixmap)), this, SLOT(slotThumbReady(int, QPixmap)));
- QTimer::singleShot(300, this, SLOT(slotFetchThumbs()));
-
- startThumbTimer = new QTimer(this);
- startThumbTimer->setSingleShot(true);
- connect(startThumbTimer, SIGNAL(timeout()), this, SLOT(slotGetStartThumb()));
- endThumbTimer = new QTimer(this);
- endThumbTimer->setSingleShot(true);
- connect(endThumbTimer, SIGNAL(timeout()), this, SLOT(slotGetEndThumb()));
-
- }
- else if (m_clipType == COLOR) {
- QString colour = xml.attribute("colour");
- colour = colour.replace(0, 2, "#");
- setBrush(QColor(colour.left(7)));
- }
- else if (m_clipType == IMAGE) {
- m_startPix = KThumb::getImage(KUrl(xml.attribute("resource")), 50 * KdenliveSettings::project_display_ratio(), 50);
- }
-}
-
ClipItem::ClipItem(DocClipBase *clip, int track, int startpos, const QRectF & rect, int duration)
: QGraphicsRectItem(rect), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_track(track), m_startPos(startpos), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), m_startFade(0), m_endFade(0)
{
if (duration != -1) m_cropDuration = duration;
else m_cropDuration = m_maxDuration;
+/*
+ m_cropStart = xml.attribute("in", 0).toInt();
+ m_maxDuration = xml.attribute("duration", 0).toInt();
+ if (m_maxDuration == 0) m_maxDuration = xml.attribute("out", 0).toInt() - m_cropStart;
+
+ if (duration != -1) m_cropDuration = duration;
+ else m_cropDuration = m_maxDuration;*/
+
+
setFlags(QGraphicsItem::ItemClipsToShape | QGraphicsItem::ItemClipsChildrenToShape | QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
setBrush(QColor(100, 100, 150));
return 70000;
}
+DocClipBase *ClipItem::baseClip()
+{
+ return m_clip;
+}
+
QDomElement ClipItem::xml() const
{
return m_xml;
return m_startPos;
}
+int ClipItem::cropStart()
+{
+ return m_cropStart;
+}
+
int ClipItem::endPos()
{
return m_startPos + m_cropDuration;
Q_OBJECT
public:
- ClipItem(QDomElement xml, int track, int startpos, const QRectF & rect, int duration = -1);
ClipItem(DocClipBase *clip, int track, int startpos, const QRectF & rect, int duration);
virtual ~ ClipItem();
virtual void paint(QPainter *painter,
OPERATIONTYPE operationMode(QPointF pos, double scale);
int clipProducer();
int clipType();
+ DocClipBase *baseClip();
QString clipName();
int maxDuration();
int track();
void setTrack(int track);
int startPos();
+ int cropStart();
int endPos();
int duration();
QDomElement xml() const;
}
-void CustomTrackView::addItem(QString producer, QPoint pos)
-{
- QDomDocument doc;
- doc.setContent(producer);
- QDomElement elem = doc.documentElement();
- int in = elem.attribute("in", 0).toInt();
- int out = elem.attribute("out", 0).toInt() - in;
- if (out == 0) out = elem.attribute("duration", 0).toInt();
- kDebug()<<"ADDING CLIP: "<<producer<<", OUT: "<<out<<", POS: "<<mapToScene(pos);
- int trackTop = ((int) mapToScene(pos).y()/50) * 50 + 1;
- m_dropItem = new ClipItem(elem, ((int) mapToScene(pos).y()/50), in, QRectF(mapToScene(pos).x() * m_scale, trackTop, out * m_scale, 49), out);
- scene()->addItem(m_dropItem);
-}
-
-
void CustomTrackView::dragMoveEvent(QDragMoveEvent * event) {
event->setDropAction(Qt::IgnoreAction);
if (m_dropItem) {
void CustomTrackView::dropEvent ( QDropEvent * event ) {
if (m_dropItem) {
- AddTimelineClipCommand *command = new AddTimelineClipCommand(this, m_dropItem->xml(), m_dropItem->track(), m_dropItem->startPos(), m_dropItem->rect(), m_dropItem->duration(), false);
+ AddTimelineClipCommand *command = new AddTimelineClipCommand(this, m_dropItem->xml(), m_dropItem->clipProducer(), m_dropItem->track(), m_dropItem->startPos(), m_dropItem->rect(), m_dropItem->duration(), false);
m_commandStack->push(command);
kDebug()<<"IIIIIIIIIIIIIIIIIIIIIIII TRAX CNT: "<<m_tracksCount<<", DROP: "<<m_dropItem->track();
m_document->renderer()->mltInsertClip(m_tracksCount - m_dropItem->track(), GenTime(m_dropItem->startPos(), 25), m_dropItem->xml());
else if (m_operationMode == RESIZESTART) {
// resize start
ResizeClipCommand *command = new ResizeClipCommand(this, m_startPos, QPointF(m_dragItem->startPos(), m_dragItem->track()), true, false);
+
+ m_document->renderer()->mltResizeClipStart(m_tracksCount - m_dragItem->track(), GenTime(m_dragItem->endPos(), 25), GenTime(m_dragItem->startPos(), 25), GenTime(m_startPos.x(), 25), GenTime(m_dragItem->cropStart(), 25), GenTime(m_dragItem->cropStart(), 25) + GenTime(m_dragItem->endPos(), 25) - GenTime(m_dragItem->startPos(), 25));
m_commandStack->push(command);
}
else if (m_operationMode == RESIZEEND) {
// resize end
ResizeClipCommand *command = new ResizeClipCommand(this, m_startPos, QPointF(m_dragItem->endPos(), m_dragItem->track()), false, false);
+
+ m_document->renderer()->mltResizeClipEnd(m_tracksCount - m_dragItem->track(), GenTime(m_dragItem->startPos(), 25), GenTime(m_dragItem->cropStart(), 25), GenTime(m_dragItem->cropStart(), 25) + GenTime(m_dragItem->endPos(), 25) - GenTime(m_dragItem->startPos(), 25));
m_commandStack->push(command);
}
m_operationMode = NONE;
m_document->renderer()->mltRemoveClip(m_tracksCount - track, GenTime(startpos, 25));
}
-void CustomTrackView::addClip ( QDomElement xml, int track, int startpos, const QRectF &rect, int duration )
+void CustomTrackView::addClip ( QDomElement xml, int clipId, int track, int startpos, const QRectF &rect, int duration )
{
QRect r(startpos * m_scale, 50 * track, duration * m_scale, 49);
- ClipItem *item = new ClipItem(xml, track, startpos, r, duration);
+ DocClipBase *baseclip = m_document->clipManager()->getClipById(clipId);
+ ClipItem *item = new ClipItem(baseclip, track, startpos, r, duration);
scene()->addItem(item);
m_document->renderer()->mltInsertClip(m_tracksCount - track, GenTime(startpos, 25), xml);
}
void initView();
void moveClip ( const QPointF &startPos, const QPointF &endPos );
void resizeClip ( const QPointF &startPos, const QPointF &endPos, bool resizeClipStart );
- void addClip ( QDomElement xml, int track, int startpos, const QRectF &rect, int duration);
+ void addClip ( QDomElement xml, int clipId, int track, int startpos, const QRectF &rect, int duration);
void deleteClip ( int track, int startpos, const QRectF &rect );
void setDuration(int duration);
void setScale(double scaleFactor);
int m_cursorPos;
ClipItem *m_dropItem;
KdenliveDoc *m_document;
- void addItem(QString producer, QPoint pos);
void addItem(DocClipBase *clip, QPoint pos);
QGraphicsLineItem *m_cursorLine;
QPointF m_startPos;
}
else if (elem.tagName() == "entry") {
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(elem, ix, position, QRectF(position * m_scale, trackTop + 1, out * m_scale, 49), out);
+ ClipItem *item = new ClipItem(clip, ix, position, QRectF(position * m_scale, trackTop + 1, out * m_scale, 49), out);
m_scene->addItem(item);
position += out;