]> git.sesse.net Git - kdenlive/commitdiff
First steps to implement 3 points editing (Using v to insert-overwrite)
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Thu, 29 Oct 2009 23:22:25 +0000 (23:22 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Thu, 29 Oct 2009 23:22:25 +0000 (23:22 +0000)
svn path=/trunk/kdenlive/; revision=4077

src/addtimelineclipcommand.cpp
src/addtimelineclipcommand.h
src/customtrackview.cpp
src/customtrackview.h
src/kdenliveui.rc
src/mainwindow.cpp
src/mainwindow.h
src/monitor.cpp
src/monitor.h

index 7498fa181811f1f0caab6b7932bf3ee1647efa82..3a13ad54dc26844641b578695153a695a62e0379 100644 (file)
@@ -23,7 +23,7 @@
 
 #include <KLocale>
 
-AddTimelineClipCommand::AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, const QString &clipId, ItemInfo info, EffectsList effects, bool doIt, bool doRemove, QUndoCommand * parent) :
+AddTimelineClipCommand::AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, const QString &clipId, ItemInfo info, EffectsList effects, bool overwrite, bool push, bool doIt, bool doRemove, QUndoCommand * parent) :
         QUndoCommand(parent),
         m_view(view),
         m_clipInfo(info),
@@ -31,7 +31,9 @@ AddTimelineClipCommand::AddTimelineClipCommand(CustomTrackView *view, QDomElemen
         m_clipId(clipId),
         m_xml(xml),
         m_doIt(doIt),
-        m_remove(doRemove)
+        m_remove(doRemove),
+        m_overwrite(overwrite),
+        m_push(push)
 {
     if (!m_remove) setText(i18n("Add timeline clip"));
     else setText(i18n("Delete timeline clip"));
@@ -46,13 +48,13 @@ AddTimelineClipCommand::AddTimelineClipCommand(CustomTrackView *view, QDomElemen
 void AddTimelineClipCommand::undo()
 {
     if (!m_remove) m_view->deleteClip(m_clipInfo, m_refresh);
-    else m_view->addClip(m_xml, m_clipId, m_clipInfo, m_effects, m_refresh);
+    else m_view->addClip(m_xml, m_clipId, m_clipInfo, m_effects, m_overwrite, m_push, m_refresh);
 }
 // virtual
 void AddTimelineClipCommand::redo()
 {
     if (m_doIt) {
-        if (!m_remove) m_view->addClip(m_xml, m_clipId, m_clipInfo, m_effects, m_refresh);
+        if (!m_remove) m_view->addClip(m_xml, m_clipId, m_clipInfo, m_effects, m_overwrite, m_push, m_refresh);
         else m_view->deleteClip(m_clipInfo, m_refresh);
     }
     m_doIt = true;
index 2752c3a5431a79c34f59e14f8db57dfa59421383..015e7a3c8a463397d69b34d4a08c8f2bdc65a928 100644 (file)
@@ -34,7 +34,7 @@ class CustomTrackView;
 class AddTimelineClipCommand : public QUndoCommand
 {
 public:
-    AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, const QString &clipId, ItemInfo info, EffectsList effects, bool doIt, bool doRemove, QUndoCommand * parent = 0);
+    AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, const QString &clipId, ItemInfo info, EffectsList effects, bool overwrite, bool push, bool doIt, bool doRemove, QUndoCommand * parent = 0);
     virtual void undo();
     virtual void redo();
 
@@ -47,6 +47,8 @@ private:
     bool m_doIt;
     bool m_remove;
     bool m_refresh;
+    bool m_overwrite;
+    bool m_push;
 };
 
 #endif
index 54b6f66a290cba2a8775f3093ff0cd6e176ef464..8e824b342eba88dc9bc805f08b03aea5dc8f0401 100644 (file)
@@ -2020,7 +2020,7 @@ void CustomTrackView::dropEvent(QDropEvent * event)
             }
             adjustTimelineClips(m_scene->editMode(), item, addCommand);
 
-            new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), item->info(), item->effectList(), false, false, addCommand);
+            new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), item->info(), item->effectList(), m_scene->editMode() == OVERWRITEEDIT, m_scene->editMode() == INSERTEDIT, false, false, addCommand);
 
             if (item->baseClip()->isTransparent() && getTransitionItemAtStart(info.startPos, info.track) == NULL) {
                 // add transparency transition
@@ -2077,7 +2077,7 @@ void CustomTrackView::adjustTimelineClips(EDITMODE mode, ClipItem *item, QUndoCo
                         clip->resizeEnd(info.startPos.frames(m_document->fps()));
                     }
                 } else if (clip->endPos() < info.endPos) {
-                    new AddTimelineClipCommand(this, clip->xml(), clip->clipProducer(), clip->info(), clip->effectList(), false, true, command);
+                    new AddTimelineClipCommand(this, clip->xml(), clip->clipProducer(), clip->info(), clip->effectList(), false, false, false, true, command);
                     scene()->removeItem(clip);
                     delete clip;
                     clip = NULL;
@@ -2575,7 +2575,7 @@ void CustomTrackView::deleteClip(const QString &clipId)
                     // Clip is in a group, destroy the group
                     new GroupClipsCommand(this, QList<ItemInfo>() << item->info(), QList<ItemInfo>(), false, deleteCommand);
                 }
-                new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), item->info(), item->effectList(), true, true, deleteCommand);
+                new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), item->info(), item->effectList(), false, false, true, true, deleteCommand);
             }
         }
     }
@@ -3350,7 +3350,7 @@ void CustomTrackView::deleteSelectedClips()
             ClipItem *item = static_cast <ClipItem *>(itemList.at(i));
             if (item->parentItem()) resetGroup = true;
             //kDebug()<<"// DELETE CLP AT: "<<item->info().startPos.frames(25);
-            new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), item->info(), item->effectList(), true, true, deleteSelected);
+            new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), item->info(), item->effectList(), false, false, true, true, deleteSelected);
             emit clipItemSelected(NULL);
         } else if (itemList.at(i)->type() == TRANSITIONWIDGET) {
             transitionCount++;
@@ -3516,7 +3516,7 @@ void CustomTrackView::doGroupClips(QList <ItemInfo> clipInfos, QList <ItemInfo>
     setDocumentModified();
 }
 
-void CustomTrackView::addClip(QDomElement xml, const QString &clipId, ItemInfo info, EffectsList effects, bool refresh)
+void CustomTrackView::addClip(QDomElement xml, const QString &clipId, ItemInfo info, EffectsList effects, bool overwrite, bool push, bool refresh)
 {
     DocClipBase *baseclip = m_document->clipManager()->getClipById(clipId);
     if (baseclip == NULL) {
@@ -4569,7 +4569,7 @@ void CustomTrackView::pasteClip()
             info.endPos += offset;
             info.track += trackOffset;
             if (canBePastedTo(info, AVWIDGET)) {
-                new AddTimelineClipCommand(this, clip->xml(), clip->clipProducer(), info, clip->effectList(), true, false, pasteClips);
+                new AddTimelineClipCommand(this, clip->xml(), clip->clipProducer(), info, clip->effectList(), m_scene->editMode() == OVERWRITEEDIT, m_scene->editMode() == INSERTEDIT, true, false, pasteClips);
             } else emit displayMessage(i18n("Cannot paste clip to selected place"), ErrorMessage);
         } else if (m_copiedItems.at(i) && m_copiedItems.at(i)->type() == TRANSITIONWIDGET) {
             Transition *tr = static_cast <Transition *>(m_copiedItems.at(i));
@@ -4916,7 +4916,7 @@ void CustomTrackView::deleteTimelineTrack(int ix, TrackInfo trackinfo)
     for (int i = 0; i < selection.count(); i++) {
         if (selection.at(i)->type() == AVWIDGET) {
             ClipItem *item =  static_cast <ClipItem *>(selection.at(i));
-            new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), item->info(), item->effectList(), false, true, deleteTrack);
+            new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), item->info(), item->effectList(), false, false, false, true, deleteTrack);
             m_scene->removeItem(item);
             delete item;
             item = NULL;
@@ -5477,4 +5477,14 @@ void CustomTrackView::checkTrackSequence(int track)
     if (times != timelineList) KMessageBox::sorry(this, i18n("error"), i18n("TRACTOR"));
 }
 
-
+void CustomTrackView::insertZoneOverwrite(QStringList data, int in)
+{
+    DocClipBase *clip = m_document->getBaseClip(data.at(0));
+    ItemInfo info;
+    info.startPos = GenTime(in, m_document->fps());
+    info.cropDuration = GenTime(data.at(1).toInt(), m_document->fps());
+    info.endPos = info.startPos + GenTime(data.at(2).toInt(), m_document->fps());;
+    info.track = m_selectedTrack;
+    AddTimelineClipCommand *add = new AddTimelineClipCommand(this, clip->toXML(), clip->getId(), info, EffectsList(), true, false, true, false);
+    m_commandStack->push(add);
+}
index cdc5a3e8b9cd3743d00e25dbdecf21c7351f27c7..e878e5959c1d50f1cf4e6cf16c1194de06ba4423 100644 (file)
@@ -59,7 +59,7 @@ public:
     /** move transition, startPos = (old start, old end), endPos = (new start, new end) */
     void moveTransition(const ItemInfo start, const ItemInfo end, bool m_refresh);
     void resizeClip(const ItemInfo start, const ItemInfo end, bool dontWorry = false);
-    void addClip(QDomElement xml, const QString &clipId, ItemInfo info, EffectsList list = EffectsList(), bool refresh = true);
+    void addClip(QDomElement xml, const QString &clipId, ItemInfo info, EffectsList list = EffectsList(), bool overwrite = false, bool push = false, bool refresh = true);
     void deleteClip(ItemInfo info, bool refresh = true);
     void slotDeleteClipMarker(const QString &comment, const QString &id, const GenTime &position);
     void slotDeleteAllClipMarkers(const QString &id);
@@ -168,6 +168,7 @@ public slots:
     void slotTrackUp();
     void slotTrackDown();
     void slotSelectTrack(int ix);
+    void insertZoneOverwrite(QStringList data, int in);
 
 protected:
     virtual void drawBackground(QPainter * painter, const QRectF & rect);
index 91e60ccd383539bd01a07d90dbcdab9cbfebebac..e1fa359cb9e5f0cbf681861d39cdd746cfc1f23e 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
-<gui name="kdenlive" version="49">
+<gui name="kdenlive" version="50">
   <ToolBar name="extraToolBar" >
     <text>Extra Toolbar</text>
        <Action name="project_render" />
 </Menu>
 
     <Menu name="timeline" ><text>Timeline</text>
-      <Action name="select_timeline_clip" />
-      <Action name="select_add_timeline_clip" />
-      <Action name="deselect_timeline_clip" />
-      <Action name="select_timeline_transition" />
-      <Action name="select_add_timeline_transition" />
-      <Action name="deselect_timeline_transition" />
+      <Menu name="keyboard_selection" ><text>Selection</text>
+         <Action name="select_timeline_clip" />
+         <Action name="select_add_timeline_clip" />
+         <Action name="deselect_timeline_clip" />
+         <Action name="select_timeline_transition" />
+         <Action name="select_add_timeline_transition" />
+         <Action name="deselect_timeline_transition" />
+      </Menu>
+      <Menu name="keyboard_insert" ><text>Insertion</text>
+         <Action name="overwrite_to_in_point" />
+      </Menu>
       <Action name="resize_timeline_clip_start" />
       <Action name="resize_timeline_clip_end" />
       <Action name="cut_timeline_clip" />
index 62243db0b02cdab59f34e21508e6c446e97ec8ab..ebcf106c7f825e5b850922819ce06472d899d229 100644 (file)
@@ -1101,6 +1101,11 @@ void MainWindow::setupActions()
     ungroupClip->setData("ungroup_clip");
     connect(ungroupClip, SIGNAL(triggered(bool)), this, SLOT(slotUnGroupClips()));
 
+    KAction* insertOvertwrite = new KAction(KIcon(), i18n("Insert Clip Zone in Timeline (Overwrite)"), this);
+    insertOvertwrite->setShortcut(Qt::Key_V);
+    collection->addAction("overwrite_to_in_point", insertOvertwrite);
+    connect(insertOvertwrite, SIGNAL(triggered(bool)), this, SLOT(slotInsertClipOverwrite()));
+
     KAction* selectTimelineClip = new KAction(KIcon("edit-select"), i18n("Select Clip"), this);
     selectTimelineClip->setShortcut(Qt::Key_Plus);
     collection->addAction("select_timeline_clip", selectTimelineClip);
@@ -2333,6 +2338,14 @@ void MainWindow::slotCutTimelineClip()
     }
 }
 
+void MainWindow::slotInsertClipOverwrite()
+{
+    if (m_activeTimeline) {
+        QStringList data = m_clipMonitor->getZoneInfo();
+        m_activeTimeline->projectView()->insertZoneOverwrite(data, m_activeTimeline->inPoint());
+    }
+}
+
 void MainWindow::slotSelectTimelineClip()
 {
     if (m_activeTimeline) {
index 7cd9bc7c632c6e9b4c4ccf5bbb3afee0bc87fc17..8fe335f2a797def63c0015ac09c9fc5e5ea61073 100644 (file)
@@ -249,6 +249,7 @@ private slots:
     void slotDeleteAllClipMarkers();
     void slotEditClipMarker();
     void slotCutTimelineClip();
+    void slotInsertClipOverwrite();
     void slotSelectTimelineClip();
     void slotSelectTimelineTransition();
     void slotDeselectTimelineClip();
index 1a17c5f1ae29703e122d1f37cfec6e4a1d3aea94..c5490a7f29c98560ddafe8425e1e7f7ba7147f70 100644 (file)
@@ -851,6 +851,16 @@ void Monitor::updateTimecodeFormat()
     }
 }
 
+QStringList Monitor::getZoneInfo() const
+{
+    QStringList result;
+    if (m_currentClip == NULL) return result;
+    result << m_currentClip->getId();
+    QPoint zone = m_ruler->zone();
+    result << QString::number(zone.x()) << QString::number(zone.y());
+    return result;
+}
+
 
 MonitorRefresh::MonitorRefresh(QWidget* parent) : \
         QWidget(parent),
index 1fb41d9ec9a98cce19e04b6fe3293575be337e2e..aacf233df2c754866c35413a6dfacd6851f628f7 100644 (file)
@@ -165,6 +165,7 @@ public slots:
     void slotSeekToPreviousSnap();
     void adjustRulerSize(int length);
     void setTimePos(const QString &pos);
+    QStringList getZoneInfo() const;
 
 signals:
     void renderPosition(int);