#include <QPainter>
#include <QStyleOptionGraphicsItem>
-
+#include <QGraphicsScene>
#include <KDebug>
#include "clipitem.h"
ClipItem::ClipItem(int clipType, QString name, int producer, int maxDuration, const QRectF & rect)
- : QGraphicsRectItem(rect), m_resizeMode(NONE), m_grabPoint(0), m_clipType(clipType), m_clipName(name), m_producer(producer), m_cropStart(0), m_cropDuration(maxDuration), m_maxDuration(maxDuration)
+ : QGraphicsRectItem(rect), m_resizeMode(NONE), m_grabPoint(0), m_clipType(clipType), m_clipName(name), m_producer(producer), m_cropStart(0), m_cropDuration(maxDuration), m_maxDuration(maxDuration), m_maxTrack(0)
{
setToolTip(name);
//setCursor(Qt::SizeHorCursor);
{
m_resizeMode = operationMode(event->pos());
if (m_resizeMode == MOVE) {
+ m_maxTrack = scene()->sceneRect().height();
m_grabPoint = (int) (event->pos().x() - rect().x());
}
QGraphicsRectItem::mousePressEvent(event);
return;
}
if (m_resizeMode == MOVE) {
+ kDebug()<<"/////// MOVE CLIP, EVENT Y: "<<event->scenePos().y()<<", SCENE HEIGHT: "<<scene()->sceneRect().height();
int moveTrack = (int) event->scenePos().y() / 50;
int currentTrack = (int) rect().y() / 50;
int offset = moveTrack - currentTrack;
+ if (event->scenePos().y() >= m_maxTrack || event->scenePos().y() < 0) {
+ offset = 0;
+ kDebug()<<"%%%%%%%%%%%%%%%%%%%%%%% MAX HEIGHT OVERLOOK";
+ }
if (offset != 0) offset = 50 * offset;
moveTo(moveX - m_grabPoint, offset);
}
int m_maxDuration;
int m_cropStart;
int m_cropDuration;
+ int m_maxTrack;
};
#endif
QStylePainter p(this);
- int value = this->value(),
- minval = minimum(),
- maxval;
- maxval = maximum() + offset() - endOffset();
+ int value = this->value();
+ int minval = minimum();
+ int maxval = maximum() + offset() - endOffset();
//ioffsetval = value-offset;
// pixelpm = (int)ppm;
}*/
// draw pointer
- if (showPointer()) {
+ if (showPointer() && value > 0) {
QPolygon pa(4);
pa.setPoints(3, value-6, 9, value+6, 9, value/*+0*/, 16);
p.setBrush( QBrush(Qt::yellow) );
#include "resizeclipcommand.h"
#include "addtimelineclipcommand.h"
-CustomTrackView::CustomTrackView(KUndoStack *commandStack, QGraphicsScene * scene, QWidget *parent)
- : QGraphicsView(scene, parent), m_commandStack(commandStack), m_tracksCount(0), 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)
+CustomTrackView::CustomTrackView(KUndoStack *commandStack, QGraphicsScene * projectscene, QWidget *parent)
+ : QGraphicsView(projectscene, parent), m_commandStack(commandStack), m_tracksCount(0), 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)
{
setMouseTracking(true);
setAcceptDrops(true);
m_animationTimer->setUpdateInterval(100);
m_animationTimer->setLoopCount(0);
m_tipColor = QColor(230, 50, 0, 150);
+ setContentsMargins(0, 0, 0, 0);
+ if (projectscene) {
+ m_cursorLine = projectscene->addLine(0, 0, 0, 50);
+ m_cursorLine->setZValue(1000);
+ }
}
void CustomTrackView::initView()
{
- m_cursorLine = scene()->addLine(0, 0, 0, height());
- m_cursorLine->setZValue(1000);
+
}
// virtual
void CustomTrackView::resizeEvent ( QResizeEvent * event )
{
- if (m_cursorLine) m_cursorLine->setLine(m_cursorLine->line().x1(), 0, m_cursorLine->line().x1(), height());
+ QGraphicsView::resizeEvent(event);
}
// virtual
return Qt::MoveAction;
}
+void CustomTrackView::setDuration(int duration)
+{
+ kDebug()<<"///////////// PRO DUR: "<<duration<<", height: "<<50 * m_tracksCount;
+ m_projectDuration = duration;
+ scene()->setSceneRect(0, 0, m_projectDuration + 500, scene()->sceneRect().height()); //50 * m_tracksCount);
+}
+
+
void CustomTrackView::addTrack ()
{
m_tracksCount++;
+ m_cursorLine->setLine(m_cursorLine->line().x1(), 0, m_cursorLine->line().x1(), 50 * m_tracksCount);
+ //setSceneRect(0, 0, sceneRect().width(), 50 * m_tracksCount);
+ //verticalScrollBar()->setMaximum(50 * m_tracksCount);
+ //setFixedHeight(50 * m_tracksCount);
}
void CustomTrackView::removeTrack ()
{
m_tracksCount--;
+ m_cursorLine->setLine(m_cursorLine->line().x1(), 0, m_cursorLine->line().x1(), 50 * m_tracksCount);
}
void CustomTrackView::setCursorPos(int pos)
void CustomTrackView::drawBackground ( QPainter * painter, const QRectF & rect )
{
- //kDebug()<<"///// DRAWING BG: "<<rect.x()<<", width: "<<rect.width();
- painter->setPen(QColor(150, 150, 150, 255));
- painter->drawLine(rect.x(), 0, rect.x() + rect.width(), 0);
+ kDebug()<<"///// DRAWING BG TRACKS: "<<m_tracksCount;
+ QColor base = palette().button().color();
+ painter->setPen(base);
+ painter->setClipRect(rect);
+ painter->drawLine(0, 0, rect.width(), 0);
for (uint i = 0; i < m_tracksCount;i++)
{
- painter->drawLine(rect.x(), 50 * (i+1), rect.x() + rect.width(), 50 * (i+1));
- painter->drawText(QRectF(10, 50 * i, 100, 50 * i + 49), Qt::AlignLeft, i18n(" Track ") + QString::number(i));
+ painter->drawLine(0, 50 * (i+1), rect.width(), 50 * (i+1));
+ //painter->drawText(QRectF(10, 50 * i, 100, 50 * i + 49), Qt::AlignLeft, i18n(" Track ") + QString::number(i));
}
+ int lowerLimit = 50 * m_tracksCount;
+ if (height() > lowerLimit)
+ painter->fillRect(QRectF(0, lowerLimit - rect.y(), rect.width(), height() - lowerLimit - rect.y()), QBrush(base));
}
/*
void CustomTrackView::drawForeground ( QPainter * painter, const QRectF & rect )
Q_OBJECT
public:
- CustomTrackView(KUndoStack *commandStack, QGraphicsScene * scene, QWidget *parent=0);
+ CustomTrackView(KUndoStack *commandStack, QGraphicsScene * projectscene, QWidget *parent=0);
virtual void mousePressEvent ( QMouseEvent * event );
virtual void mouseReleaseEvent ( QMouseEvent * event );
virtual void mouseMoveEvent ( QMouseEvent * event );
void resizeClip ( const QPointF &startPos, const QPointF &endPos, bool resizeClipStart );
void addClip ( int clipType, QString clipName, int clipProducer, int maxDuration, const QRectF &rect );
void deleteClip ( const QRectF &rect );
+ void setDuration(int duration);
public slots:
void setCursorPos(int pos);
private:
int m_tracksCount;
+ int m_projectDuration;
int m_cursorPos;
ClipItem *m_dropItem;
void addItem(QString producer, QPoint pos);
QDomElement playlist1 = m_document.createElement("playlist");
playlist1.appendChild(prod);
+ playlist1.setAttribute("id", "playlist1");
multitrack.appendChild(playlist1);
QDomElement playlist2 = m_document.createElement("playlist");
+ playlist2.setAttribute("id", "playlist2");
multitrack.appendChild(playlist2);
QDomElement playlist3 = m_document.createElement("playlist");
multitrack.appendChild(playlist3);
+ playlist3.setAttribute("id", "playlist3");
QDomElement playlist4 = m_document.createElement("playlist");
playlist4.setAttribute("hide", "video");
multitrack.appendChild(playlist4);
+ playlist1.setAttribute("id", "playlist4");
QDomElement playlist5 = m_document.createElement("playlist");
playlist5.setAttribute("hide", "video");
multitrack.appendChild(playlist5);
+ playlist1.setAttribute("id", "playlist5");
tractor.appendChild(multitrack);
doc.appendChild(tractor);
registerFunction("move", m_moveFunction);
setEditMode("move");
- view->horizontalSlider->setValue(0);
- m_currentZoom = view->horizontalSlider->value();
connect(view->horizontalSlider, SIGNAL(valueChanged ( int )), this, SLOT(slotChangeZoom( int )));
connect(m_ruler, SIGNAL(cursorMoved ( int )), m_trackview, SLOT(setCursorPos( int )));
connect(m_trackview, SIGNAL(cursorMoved ( int )), this, SLOT(slotCursorMoved( int )));
connect(m_trackview, SIGNAL(zoomIn ()), this, SLOT(slotZoomIn()));
connect(m_trackview, SIGNAL(zoomOut ()), this, SLOT(slotZoomOut()));
connect(m_trackview->horizontalScrollBar(), SIGNAL(sliderMoved( int )), m_ruler, SLOT(slotMoveRuler( int )));
+
+ view->horizontalSlider->setValue(0);
+ m_currentZoom = view->horizontalSlider->value();
m_trackview->initView();
}
void TrackView::parseDocument(QDomDocument doc)
{
+ int cursorPos = 0;
+ QDomNode props = doc.elementsByTagName("properties").item(0);
+ if (!props.isNull()) {
+ cursorPos = props.toElement().attribute("timeline_position").toInt();
+ }
QDomNodeList tracks = doc.elementsByTagName("playlist");
m_projectDuration = 300;
m_projectTracks = tracks.count();
- int duration;
- for (int i = 0; i < tracks.count(); i++)
+ int duration = 0;
+ kDebug()<<"//////////// TIMELINE FOUND: "<<m_projectTracks<<" tracks";
+ for (int i = 0; i < m_projectTracks; i++)
{
if (tracks.item(i).toElement().attribute("hide", QString::null) == "video") {
// this is an audio track
}
else if (!tracks.item(i).toElement().attribute("id", QString::null).isEmpty())
duration = slotAddVideoTrack(i, tracks.item(i).toElement());
+ kDebug()<<" PRO DUR: "<<m_projectDuration<<", TRACK DUR: "<<duration;
if (duration > m_projectDuration) m_projectDuration = duration;
}
+ m_trackview->setDuration(m_projectDuration);
+ slotCursorMoved(cursorPos, true);
//m_scrollBox->setGeometry(0, 0, 300 * zoomFactor(), m_scrollArea->height());
}
-void TrackView::slotCursorMoved(int pos)
+void TrackView::slotCursorMoved(int pos, bool emitSignal)
{
kDebug()<<"///// CURSOR: "<<pos;
- m_ruler->slotNewValue(pos * FRAME_SIZE); //(int) m_trackview->mapToScene(QPoint(pos, 0)).x());
+ m_ruler->slotNewValue(pos * FRAME_SIZE, emitSignal); //(int) m_trackview->mapToScene(QPoint(pos, 0)).x());
//m_trackview->setCursorPos(pos);
//m_trackview->invalidateScene(QRectF(), QGraphicsScene::ForegroundLayer);
}
int TrackView::slotAddAudioTrack(int ix, QDomElement xml)
{
+ kDebug()<<"************* ADD AUDIO TRACK "<<ix;
m_trackview->addTrack();
DocumentTrack *track = new DocumentAudioTrack(xml, this, m_trackview);
HeaderTrack *header = new HeaderTrack();
//m_tracksAreaLayout->addWidget(track); //, ix, Qt::AlignTop);
m_headersLayout->addWidget(header); //, ix, Qt::AlignTop);
documentTracks.insert(ix, track);
- return track->duration();
+ return 0;
//track->show();
}
//m_tracksAreaLayout->addWidget(track); //, ix, Qt::AlignTop);
m_headersLayout->addWidget(header); //, ix, Qt::AlignTop);
documentTracks.insert(ix, track);
+ kDebug()<<"************* ADD VIDEO TRACK "<<ix<<", DURATION: "<<position;
return position;
//track->show();
}
private slots:
void slotChangeZoom(int factor);
- void slotCursorMoved(int pos);
+ void slotCursorMoved(int pos, bool slotCursorMoved = false);
void slotZoomIn();
void slotZoomOut();
};