]> git.sesse.net Git - kdenlive/commitdiff
insert & move timeline clips
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 10 Feb 2008 21:39:42 +0000 (21:39 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 10 Feb 2008 21:39:42 +0000 (21:39 +0000)
svn path=/branches/KDE4/; revision=1831

src/addtimelineclipcommand.cpp
src/customruler.cpp
src/customtrackview.cpp
src/customtrackview.h
src/kdenlivedoc.cpp
src/monitor.cpp
src/renderer.cpp
src/renderer.h
src/trackview.cpp

index 27504a0b74e420312010b879d75ff9a93e9d1dd6..a5c716440656a78e3ba17c5cb8b0c33e1218969e 100644 (file)
@@ -32,7 +32,7 @@ void AddTimelineClipCommand::undo()
 {
 // kDebug()<<"----  undoing action";
   m_doIt = true;
-  if (m_doIt) m_view->deleteClip(m_clipRect);
+  if (m_doIt) m_view->deleteClip(m_clipTrack, m_clipPos, m_clipRect);
 }
 // virtual 
 void AddTimelineClipCommand::redo()
index 8081f9ccae36517451ce7e2ea32a7fa45c2e7fdb..478abcfc67d8ead6cd992e3620bd24bdbaf484d0 100644 (file)
@@ -100,7 +100,6 @@ void CustomRuler::mouseMoveEvent ( QMouseEvent * event )
 {
   int pos = event->x();
   slotMoveCursor( pos, true );
-  kDebug()<<pos;
 }
 
 void CustomRuler::slotMoveRuler(int newPos)
@@ -120,10 +119,9 @@ void CustomRuler::slotMoveCursor( int _value, bool emitSignal )
 
 void CustomRuler::slotNewValue ( int _value, bool emitSignal )
 {
-  kDebug()<<"--------------  SET NEW CURSOR: "<<_value;
   m_cursorPosition= _value / pixelPerMark();
   if (emitSignal) emit cursorMoved(m_cursorPosition / FRAME_SIZE);
-  KRuler::slotNewValue(_value* pixelPerMark() - offset());
+  KRuler::slotNewValue(_value * pixelPerMark() - offset());
 }
 
 void CustomRuler::setPixelPerMark (double rate)
index 562a2ecc7bf95687e67dba5595dfb65964b1a7b0..08f940cebef05292fa59fac443407455cbdebf2f 100644 (file)
@@ -278,8 +278,10 @@ void CustomTrackView::mousePressEvent ( QMouseEvent * event )
        m_dragItem = (ClipItem *) item;
        m_clickPoint = mapToScene(event->pos()).x() - m_dragItem->startPos() * m_scale;
        m_operationMode = m_dragItem->operationMode(item->mapFromScene(mapToScene(event->pos())), m_scale);
-       if (m_operationMode == MOVE || m_operationMode == RESIZESTART) m_startPos = QPointF(m_dragItem->startPos(), m_dragItem->track());
-       else if (m_operationMode == RESIZEEND) m_startPos = QPointF(m_dragItem->endPos(), m_dragItem->track());
+       if (m_operationMode == MOVE || m_operationMode == RESIZESTART) 
+         m_startPos = QPointF(m_dragItem->startPos(), m_dragItem->track());
+       else if (m_operationMode == RESIZEEND) 
+         m_startPos = QPointF(m_dragItem->endPos(), m_dragItem->track());
        kDebug()<<"//////// ITEM CLICKED: "<<m_startPos;
        collision = true;
        break;
@@ -349,7 +351,8 @@ 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);
     m_commandStack->push(command);
-    m_document->renderer()->mltInsertClip(m_tracksCount - m_dropItem->track() + 1, GenTime(m_dropItem->startPos(), 25), m_dropItem->xml());
+    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());
   }
   m_dropItem = NULL;
 }
@@ -415,6 +418,7 @@ void CustomTrackView::mouseReleaseEvent ( QMouseEvent * event )
     // move clip
     MoveClipCommand *command = new MoveClipCommand(this, m_startPos, QPointF(m_dragItem->startPos(), m_dragItem->track()), false);
     m_commandStack->push(command);
+    m_document->renderer()->mltMoveClip(m_tracksCount - m_startPos.y(), m_tracksCount - m_dragItem->track(), m_startPos.x(), m_dragItem->startPos());
   }
   else if (m_operationMode == RESIZESTART) {
     // resize start
@@ -430,7 +434,7 @@ void CustomTrackView::mouseReleaseEvent ( QMouseEvent * event )
   m_dragItem = NULL; 
 }
 
-void CustomTrackView::deleteClip ( const QRectF &rect )
+void CustomTrackView::deleteClip (int track, int startpos, const QRectF &rect )
 {
   ClipItem *item = (ClipItem *) scene()->itemAt(rect.x() + 1, rect.y() + 1);
   if (!item) {
@@ -438,6 +442,7 @@ void CustomTrackView::deleteClip ( const QRectF &rect )
     return;
   }
   delete item;
+  m_document->renderer()->mltRemoveClip(m_tracksCount - track, GenTime(startpos, 25));
 }
 
 void CustomTrackView::addClip ( QDomElement xml, int track, int startpos, const QRectF &rect, int duration )
@@ -445,6 +450,7 @@ void CustomTrackView::addClip ( QDomElement xml, int track, int startpos, const
   QRect r(startpos * m_scale, 50 * track, duration * m_scale, 49); 
   ClipItem *item = new ClipItem(xml, track, startpos, r, duration);
   scene()->addItem(item);
+  m_document->renderer()->mltInsertClip(m_tracksCount - track, GenTime(startpos, 25), xml);
 }
 
 void CustomTrackView::moveClip ( const QPointF &startPos, const QPointF &endPos )
@@ -456,6 +462,7 @@ void CustomTrackView::moveClip ( const QPointF &startPos, const QPointF &endPos
   }
   kDebug()<<"----------------  Move CLIP FROM: "<<startPos.x()<<", END:"<<endPos.x();
   item->moveTo(endPos.x(), m_scale, (endPos.y() - startPos.y()) * 50, endPos.y());
+  m_document->renderer()->mltMoveClip(m_tracksCount - startPos.y(), m_tracksCount - endPos.y(), startPos.x(), endPos.x());
 }
 
 void CustomTrackView::resizeClip ( const QPointF &startPos, const QPointF &endPos, bool resizeClipStart )
@@ -548,13 +555,13 @@ void CustomTrackView::setScale(double scaleFactor)
 void CustomTrackView::drawBackground ( QPainter * painter, const QRectF & rect )  
 {
   QColor base = palette().button().color();
-  painter->setPen(base);
+  //painter->setPen(base);
   painter->setClipRect(rect);
   painter->drawLine(0, 0, rect.width(), 0);
     for (uint i = 0; i < m_tracksCount;i++)
     {
-    painter->drawLine(0, 50 * (i+1), 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), width(), 50 * (i+1));
+      painter->drawText(QRectF(10, 50 * i, 100, 50 * i + 49), Qt::AlignLeft, i18n(" Track ") + QString::number(i + 1));
     }
   int lowerLimit = 50 * m_tracksCount;
   if (height() > lowerLimit)
index 897d0307c4dd8bfc6323d3a85309454a0a8601be..d0386b3950b09f1422e254008b34624543d0dcb6 100644 (file)
@@ -46,7 +46,7 @@ class CustomTrackView : public QGraphicsView
     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 deleteClip ( const QRectF &rect );
+    void deleteClip ( int track, int startpos, const QRectF &rect );
     void setDuration(int duration);
     void setScale(double scaleFactor);
 
index edf64942df786d597af0d52a4aab294bbc643ca6..a04b6145b10d288e8597df86f93f719d0e8817f5 100644 (file)
@@ -66,24 +66,28 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, double fps, int width, int height, QWi
     QDomElement tractor = m_document.createElement("tractor");
     QDomElement multitrack = m_document.createElement("multitrack");
     QDomElement playlist = m_document.createElement("playlist");
+    QDomElement producer = m_document.createElement("producer");
+    /*producer.setAttribute("mlt_service", "colour");
+    producer.setAttribute("colour", "red");
+    playlist.appendChild(producer);*/
     multitrack.appendChild(playlist);
     QDomElement playlist1 = m_document.createElement("playlist");
     playlist1.setAttribute("id", "playlist1");
+    playlist1.setAttribute("hide", "video");
     multitrack.appendChild(playlist1);
     QDomElement playlist2 = m_document.createElement("playlist");
     playlist2.setAttribute("id", "playlist2");
+    playlist2.setAttribute("hide", "video");
     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");
+    playlist4.setAttribute("id", "playlist4");
     QDomElement playlist5 = m_document.createElement("playlist");
-    playlist5.setAttribute("hide", "video");
     multitrack.appendChild(playlist5);
-    playlist1.setAttribute("id", "playlist5");
+    playlist5.setAttribute("id", "playlist5");
     tractor.appendChild(multitrack);
     doc.appendChild(tractor);
     
index 88f902d4616e83f2aacc495cfe222aecd2de6ed0..3d70ff0153a0a15facfca0476341ec8dd47c9c8a 100644 (file)
@@ -85,6 +85,7 @@ void Monitor::slotSeek(int pos)
   int realPos = ((double) pos) / m_scale;
   render->seekToFrame(realPos);
   m_position = realPos;
+  emit renderPosition(m_position);
   ui.monitor_time->setText(m_monitorManager->timecode().getTimecodeFromFrames(m_position));
 }
 
index 4627dff4d5f1ec10f75521221f3dcd42941200db..19fe51c14e6bfcf5b1bd40921f30bd5bc125ea2e 100644 (file)
@@ -47,7 +47,8 @@ static void consumer_frame_show(mlt_consumer, Render * self, mlt_frame frame_ptr
     if (mlt_properties_get_double( MLT_FRAME_PROPERTIES( frame_ptr ), "_speed" ) == 0.0) {
         self->emitConsumerStopped();
     }
-    else {
+    else 
+    {
        self->emitFrameNumber(mlt_frame_get_position(frame_ptr));
     }
 }
@@ -117,72 +118,6 @@ void Render::closeMlt()
     //delete m_osdInfo;
 }
 
-
-
-
-/** Wraps the VEML command of the same name; requests that the renderer
-should create a video window. If show is true, then the window should be
-displayed, otherwise it should be hidden. Render will emit the signal
-replyCreateVideoXWindow() once the renderer has replied. */
-
-void Render::createVideoXWindow(WId winid, WId externalMonitor)
-{
-  return;
-    if (m_mltConsumer) {
-       delete m_mltConsumer;
-    }
-
-    kDebug()<<"///////// INIT MONITOR WID";
-    //Mlt::Profile profile("dv_pal");//hdv_1080_50i");
-    //m_profile = profile;
-    //Mlt::Producer *producer = new Mlt::Producer( profile, "/home/one/Video002.mp4" );
-    Mlt::Consumer *consumer = new Mlt::Consumer( *m_mltProfile , "sdl_preview");
-    //m_mltProducer = producer;
-    m_mltConsumer = consumer;
-    //consumer->set( "rescale", "none" );
-    m_mltConsumer->set("resize", 1);
-    m_mltConsumer->set("window_id", (int) winid);
-    m_mltConsumer->set("terminate_on_pause", 1);
-    m_externalwinid = (int) externalMonitor;
-    m_winid = (int) winid;
-    m_mltConsumer->listen("consumer-frame-show", this, (mlt_listener) consumer_frame_show);
-    //m_mltProducer->set_speed(0.0);
-    //m_mltConsumer->connect( *m_mltProducer );
-    //m_mltConsumer->start( );
-/*
-    m_mltConsumer = new Mlt::Consumer(m_profile, "sdl_preview");
-    if (!m_mltConsumer || !m_mltConsumer->is_valid()) {
-       KMessageBox::error(qApp->activeWindow(), i18n("Could not create the video preview window.\nThere is something wrong with your Kdenlive install.\n Exiting now..."));
-       kError()<<"Sorry, cannot create MLT consumer, check your MLT install you miss SDL libraries support in MLT";
-       exit(1);
-    }
-
-    m_externalwinid = (int) externalMonitor;
-    m_winid = (int) winid;
-    
-    m_mltConsumer->set("window_id", m_winid);
-    m_mltConsumer->set("resize", 1);
-    
-    m_mltConsumer->set("terminate_on_pause", 1);
-    m_mltConsumer->set("progressive", 1);
-    m_mltConsumer->set("audio_buffer", 1024);
-    m_mltConsumer->set("frequency", 48000);
-
-    m_mltConsumer->listen("consumer-frame-show", this, (mlt_listener) consumer_frame_show);
-*/
-    /*QString aDevice = KdenliveSettings::audiodevice();
-    if (!KdenliveSettings::videodriver().isEmpty()) m_mltConsumer->set("video_driver", KdenliveSettings::videodriver().ascii());
-    if (!KdenliveSettings::audiodriver().isEmpty()) m_mltConsumer->set("audio_driver", KdenliveSettings::audiodriver().ascii());
-    m_mltConsumer->set("audio_device", aDevice.section(";", 1).ascii());*/
-
-   initSceneList();
-
-    //QTimer::singleShot(500, this, SLOT(initSceneList()));
-    //initSceneList();
-//  m_mltConsumer->listen("consumer-stopped", this, (mlt_listener) consumer_stopped);
-//  m_mltConsumer->set("buffer", 25);
-}
 
 
 int Render::resetRendererProfile(char * profile)
@@ -198,11 +133,6 @@ int Render::resetRendererProfile(char * profile)
     return 1;
 }
 
-void Render::restartConsumer()
-{
-    if (m_winid != -1) createVideoXWindow( m_winid, m_externalwinid);
-}
-
 /** Wraps the VEML command of the same name; Seeks the renderer clip to the given time. */
 void Render::seek(GenTime time)
 {
@@ -619,9 +549,7 @@ void Render::setSceneList(QDomDocument list, int position)
        }*/
 
        m_fps = m_mltProducer->get_fps();
-        if (!m_mltConsumer) {
-           restartConsumer();
-        }
+
        emit playListDuration(m_mltProducer->get_playtime());
        //m_connectTimer->start( 500 );
        connectPlaylist();
@@ -702,9 +630,8 @@ void Render::slotOsdTimeout()
 void Render::start()
 {
     kDebug()<<"-----  STARTING MONITOR: "<<m_name;
-    if (!m_mltConsumer || m_winid == -1) {
+    if (m_winid == -1) {
     kDebug()<<"-----  BROKEN MONITOR: "<<m_name<<", RESTART";
-       restartConsumer();
        return;
     }
 
@@ -1322,6 +1249,7 @@ void Render::mltMoveClip(int startTrack, int endTrack, GenTime moveStart, GenTim
 
 void Render::mltMoveClip(int startTrack, int endTrack, int moveStart, int moveEnd)
 {
+  kDebug()<<"RENDER MOVE CLIP: "<<startTrack<<"-"<<endTrack<<"-"<<moveStart<<"-"<<moveEnd;
     m_mltConsumer->set("refresh", 0);
     Mlt::Service service(m_mltProducer->parent().get_service());
 
index 213aaf154a84442d9035503aa205beb76214653b..5e2e725257c3d6c9d7bcaf9fb6079198ce37738e 100644 (file)
@@ -68,11 +68,6 @@ class Render:public QObject {
      Render(const QString & rendererName, int winid, int extid, QWidget *parent = 0);
     ~Render();
 
-       /** Wraps the VEML command of the same name; requests that the renderer
-       should create a video window. If show is true, then the window should be
-       displayed, otherwise it should be hidden. Render will emit the signal
-       replyCreateVideoXWindow() once the renderer has replied. */
-    void createVideoXWindow(WId winid, WId externalMonitor);
        /** Seeks the renderer clip to the given time. */
     void seek(GenTime time);
     void seekToFrame(int pos);
@@ -211,13 +206,10 @@ class Render:public QObject {
        /** refresh monitor display */
         void refresh();
        void slotOsdTimeout();
-       void restartConsumer();
        void connectPlaylist();
        void initSceneList();
 
      signals:                  // Signals
-       /** This signal is emitted once a reply to createVideoXWidow() has been recieved. */
-    void replyCreateVideoXWindow(WId);
        /** emitted when the renderer recieves a reply to a getFileProperties request. */
     void replyGetFileProperties(int clipId, const QMap < QString, QString > &, const QMap < QString, QString > &);
 
index 7a727caf280b426003c0be088e761c4223a34f56..2425e236c68efe5525d0c5a74da44916e7db4b70 100644 (file)
@@ -95,6 +95,7 @@ int TrackView::tracksNumber()
 void TrackView::parseDocument(QDomDocument doc)
 {
   int cursorPos = 0;
+  kDebug()<<"//// DOCUMENT: "<<doc.toString();
   QDomNode props = doc.elementsByTagName("properties").item(0);
   if (!props.isNull()) {
     cursorPos = props.toElement().attribute("timeline_position").toInt();
@@ -129,6 +130,7 @@ void TrackView::setCursorPos(int pos)
 void TrackView::moveCursorPos(int pos)
 {
   m_trackview->setCursorPos(pos * m_scale, false);
+  //m_ruler->slotNewValue(pos * FRAME_SIZE, false);
 }
 
 void TrackView::slotCursorMoved(int pos, bool emitSignal)