From c6d43344e195571ecc784897310c02a7125623d0 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Wed, 23 Jan 2008 20:16:25 +0000 Subject: [PATCH] progress in timeline widget svn path=/branches/KDE4/; revision=1818 --- src/clipitem.cpp | 10 ++++++++-- src/clipitem.h | 1 + src/customruler.cpp | 9 ++++----- src/customtrackview.cpp | 42 +++++++++++++++++++++++++++++++---------- src/customtrackview.h | 4 +++- src/kdenlivedoc.cpp | 5 +++++ src/trackview.cpp | 26 ++++++++++++++++++------- src/trackview.h | 2 +- 8 files changed, 73 insertions(+), 26 deletions(-) diff --git a/src/clipitem.cpp b/src/clipitem.cpp index 89e8c495..a97ffb9a 100644 --- a/src/clipitem.cpp +++ b/src/clipitem.cpp @@ -21,14 +21,14 @@ #include #include - +#include #include #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); @@ -118,6 +118,7 @@ OPERATIONTYPE ClipItem::operationMode(QPointF pos) { 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); @@ -222,9 +223,14 @@ OPERATIONTYPE ClipItem::operationMode(QPointF pos) return; } if (m_resizeMode == MOVE) { + kDebug()<<"/////// MOVE CLIP, EVENT Y: "<scenePos().y()<<", SCENE HEIGHT: "<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); } diff --git a/src/clipitem.h b/src/clipitem.h index 4de4bf1c..9f548a00 100644 --- a/src/clipitem.h +++ b/src/clipitem.h @@ -59,6 +59,7 @@ class ClipItem : public QGraphicsRectItem int m_maxDuration; int m_cropStart; int m_cropDuration; + int m_maxTrack; }; #endif diff --git a/src/customruler.cpp b/src/customruler.cpp index 5e1069b3..8081f9cc 100644 --- a/src/customruler.cpp +++ b/src/customruler.cpp @@ -142,10 +142,9 @@ void CustomRuler::paintEvent(QPaintEvent * /*e*/) 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; @@ -235,7 +234,7 @@ void CustomRuler::paintEvent(QPaintEvent * /*e*/) }*/ // 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) ); diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index 6258358a..cee97f92 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -34,8 +34,8 @@ #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); @@ -44,18 +44,22 @@ CustomTrackView::CustomTrackView(KUndoStack *commandStack, QGraphicsScene * scen 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 @@ -334,14 +338,27 @@ Qt::DropActions CustomTrackView::supportedDropActions () const return Qt::MoveAction; } +void CustomTrackView::setDuration(int duration) +{ + kDebug()<<"///////////// PRO DUR: "<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) @@ -439,14 +456,19 @@ void CustomTrackView::resizeClip ( const QPointF &startPos, const QPointF &endPo void CustomTrackView::drawBackground ( QPainter * painter, const QRectF & rect ) { - //kDebug()<<"///// DRAWING BG: "<setPen(QColor(150, 150, 150, 255)); - painter->drawLine(rect.x(), 0, rect.x() + rect.width(), 0); + kDebug()<<"///// DRAWING BG TRACKS: "<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 ) diff --git a/src/customtrackview.h b/src/customtrackview.h index 3b8057e7..23cf3e10 100644 --- a/src/customtrackview.h +++ b/src/customtrackview.h @@ -34,7 +34,7 @@ class CustomTrackView : public QGraphicsView 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 ); @@ -46,6 +46,7 @@ class CustomTrackView : public QGraphicsView 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); @@ -64,6 +65,7 @@ class CustomTrackView : public QGraphicsView private: int m_tracksCount; + int m_projectDuration; int m_cursorPos; ClipItem *m_dropItem; void addItem(QString producer, QPoint pos); diff --git a/src/kdenlivedoc.cpp b/src/kdenlivedoc.cpp index 124783a5..4af830ff 100644 --- a/src/kdenlivedoc.cpp +++ b/src/kdenlivedoc.cpp @@ -75,17 +75,22 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, double fps, int width, int height, QWi 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); diff --git a/src/trackview.cpp b/src/trackview.cpp index 6a48058c..269929f8 100644 --- a/src/trackview.cpp +++ b/src/trackview.cpp @@ -64,14 +64,15 @@ TrackView::TrackView(KdenliveDoc *doc, QWidget *parent) 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(); } @@ -92,11 +93,17 @@ int TrackView::tracksNumber() 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_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: "<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); } @@ -153,13 +163,14 @@ KdenliveDoc *TrackView::document() int TrackView::slotAddAudioTrack(int ix, QDomElement xml) { + kDebug()<<"************* ADD AUDIO TRACK "<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(); } @@ -196,6 +207,7 @@ int TrackView::slotAddVideoTrack(int ix, QDomElement xml) //m_tracksAreaLayout->addWidget(track); //, ix, Qt::AlignTop); m_headersLayout->addWidget(header); //, ix, Qt::AlignTop); documentTracks.insert(ix, track); + kDebug()<<"************* ADD VIDEO TRACK "<show(); } diff --git a/src/trackview.h b/src/trackview.h index d2777528..39ca417f 100644 --- a/src/trackview.h +++ b/src/trackview.h @@ -92,7 +92,7 @@ class TrackView : public QWidget private slots: void slotChangeZoom(int factor); - void slotCursorMoved(int pos); + void slotCursorMoved(int pos, bool slotCursorMoved = false); void slotZoomIn(); void slotZoomOut(); }; -- 2.39.2