From: <j-...@us...> - 2009-10-29 23:22:33
|
Revision: 4077 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=4077&view=rev Author: j-b-m Date: 2009-10-29 23:22:25 +0000 (Thu, 29 Oct 2009) Log Message: ----------- First steps to implement 3 points editing (Using v to insert-overwrite) Modified Paths: -------------- trunk/kdenlive/src/addtimelineclipcommand.cpp trunk/kdenlive/src/addtimelineclipcommand.h trunk/kdenlive/src/customtrackview.cpp trunk/kdenlive/src/customtrackview.h trunk/kdenlive/src/kdenliveui.rc trunk/kdenlive/src/mainwindow.cpp trunk/kdenlive/src/mainwindow.h trunk/kdenlive/src/monitor.cpp trunk/kdenlive/src/monitor.h Modified: trunk/kdenlive/src/addtimelineclipcommand.cpp =================================================================== --- trunk/kdenlive/src/addtimelineclipcommand.cpp 2009-10-29 22:10:59 UTC (rev 4076) +++ trunk/kdenlive/src/addtimelineclipcommand.cpp 2009-10-29 23:22:25 UTC (rev 4077) @@ -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 @@ 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 @@ 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; Modified: trunk/kdenlive/src/addtimelineclipcommand.h =================================================================== --- trunk/kdenlive/src/addtimelineclipcommand.h 2009-10-29 22:10:59 UTC (rev 4076) +++ trunk/kdenlive/src/addtimelineclipcommand.h 2009-10-29 23:22:25 UTC (rev 4077) @@ -34,7 +34,7 @@ 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 @@ bool m_doIt; bool m_remove; bool m_refresh; + bool m_overwrite; + bool m_push; }; #endif Modified: trunk/kdenlive/src/customtrackview.cpp =================================================================== --- trunk/kdenlive/src/customtrackview.cpp 2009-10-29 22:10:59 UTC (rev 4076) +++ trunk/kdenlive/src/customtrackview.cpp 2009-10-29 23:22:25 UTC (rev 4077) @@ -2020,7 +2020,7 @@ } 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 @@ 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 @@ // 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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); +} Modified: trunk/kdenlive/src/customtrackview.h =================================================================== --- trunk/kdenlive/src/customtrackview.h 2009-10-29 22:10:59 UTC (rev 4076) +++ trunk/kdenlive/src/customtrackview.h 2009-10-29 23:22:25 UTC (rev 4077) @@ -59,7 +59,7 @@ /** 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 @@ void slotTrackUp(); void slotTrackDown(); void slotSelectTrack(int ix); + void insertZoneOverwrite(QStringList data, int in); protected: virtual void drawBackground(QPainter * painter, const QRectF & rect); Modified: trunk/kdenlive/src/kdenliveui.rc =================================================================== --- trunk/kdenlive/src/kdenliveui.rc 2009-10-29 22:10:59 UTC (rev 4076) +++ trunk/kdenlive/src/kdenliveui.rc 2009-10-29 23:22:25 UTC (rev 4077) @@ -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" /> @@ -71,12 +71,17 @@ </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" /> Modified: trunk/kdenlive/src/mainwindow.cpp =================================================================== --- trunk/kdenlive/src/mainwindow.cpp 2009-10-29 22:10:59 UTC (rev 4076) +++ trunk/kdenlive/src/mainwindow.cpp 2009-10-29 23:22:25 UTC (rev 4077) @@ -1101,6 +1101,11 @@ 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::slotInsertClipOverwrite() +{ + if (m_activeTimeline) { + QStringList data = m_clipMonitor->getZoneInfo(); + m_activeTimeline->projectView()->insertZoneOverwrite(data, m_activeTimeline->inPoint()); + } +} + void MainWindow::slotSelectTimelineClip() { if (m_activeTimeline) { Modified: trunk/kdenlive/src/mainwindow.h =================================================================== --- trunk/kdenlive/src/mainwindow.h 2009-10-29 22:10:59 UTC (rev 4076) +++ trunk/kdenlive/src/mainwindow.h 2009-10-29 23:22:25 UTC (rev 4077) @@ -249,6 +249,7 @@ void slotDeleteAllClipMarkers(); void slotEditClipMarker(); void slotCutTimelineClip(); + void slotInsertClipOverwrite(); void slotSelectTimelineClip(); void slotSelectTimelineTransition(); void slotDeselectTimelineClip(); Modified: trunk/kdenlive/src/monitor.cpp =================================================================== --- trunk/kdenlive/src/monitor.cpp 2009-10-29 22:10:59 UTC (rev 4076) +++ trunk/kdenlive/src/monitor.cpp 2009-10-29 23:22:25 UTC (rev 4077) @@ -851,7 +851,17 @@ } } +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), m_renderer(NULL) Modified: trunk/kdenlive/src/monitor.h =================================================================== --- trunk/kdenlive/src/monitor.h 2009-10-29 22:10:59 UTC (rev 4076) +++ trunk/kdenlive/src/monitor.h 2009-10-29 23:22:25 UTC (rev 4077) @@ -165,6 +165,7 @@ void slotSeekToPreviousSnap(); void adjustRulerSize(int length); void setTimePos(const QString &pos); + QStringList getZoneInfo() const; signals: void renderPosition(int); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |