]> git.sesse.net Git - kdenlive/commitdiff
progress in timeline widget
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 23 Jan 2008 20:16:25 +0000 (20:16 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 23 Jan 2008 20:16:25 +0000 (20:16 +0000)
svn path=/branches/KDE4/; revision=1818

src/clipitem.cpp
src/clipitem.h
src/customruler.cpp
src/customtrackview.cpp
src/customtrackview.h
src/kdenlivedoc.cpp
src/trackview.cpp
src/trackview.h

index 89e8c49521f706361c205e1b52f67148704cdb74..a97ffb9add6ee1923ce38a07d4edace3c3dc4a5e 100644 (file)
 
 #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);
@@ -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: "<<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);
     }
index 4de4bf1c23fb70d9579e47250a161507667591a8..9f548a000fc2237089d8346ee62fbd8022d41235 100644 (file)
@@ -59,6 +59,7 @@ class ClipItem : public QGraphicsRectItem
     int m_maxDuration;
     int m_cropStart;
     int m_cropDuration;
+    int m_maxTrack;
 };
 
 #endif
index 5e1069b36b3878f825749d0fa87a435699877698..8081f9ccae36517451ce7e2ea32a7fa45c2e7fdb 100644 (file)
@@ -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) );
index 6258358a16d1930bb26da87ab5e63bb9496b3f9d..cee97f92c09ff691e966bc90f3575b5554dafd9f 100644 (file)
@@ -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: "<<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)
@@ -439,14 +456,19 @@ void CustomTrackView::resizeClip ( const QPointF &startPos, const QPointF &endPo
 
 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 )  
index 3b8057e7b24739704e6b63e0044da733569f1c7c..23cf3e10b07e7f448aec8360981a1f956740c7d7 100644 (file)
@@ -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);
index 124783a5843827c1637eab7e818fa7cd14663ae2..4af830ffe66c4db520057a3997dd97555ff94443 100644 (file)
@@ -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);
     
index 6a48058c83f2f65886749ecd52f5dfda976b6e72..269929f8dff02180eecbb4235b4c0a0593ab1724 100644 (file)
@@ -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_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
@@ -104,15 +111,18 @@ void TrackView::parseDocument(QDomDocument doc)
     }
     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);
 }
@@ -153,13 +163,14 @@ KdenliveDoc *TrackView::document()
 
 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();
 }
 
@@ -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 "<<ix<<", DURATION: "<<position;
   return position;
   //track->show();
 }
index d27775284ddf3f8fb54118f015539d24ffad4d4d..39ca417f87789433bdafb6b5b292ac14590e9267 100644 (file)
@@ -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();
 };