#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),
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"));
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;
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();
bool m_doIt;
bool m_remove;
bool m_refresh;
+ bool m_overwrite;
+ bool m_push;
};
#endif
}
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
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;
// 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);
}
}
}
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++;
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) {
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));
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;
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);
+}
/** 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);
void slotTrackUp();
void slotTrackDown();
void slotSelectTrack(int ix);
+ void insertZoneOverwrite(QStringList data, int in);
protected:
virtual void drawBackground(QPainter * painter, const QRectF & rect);
<?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" />
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);
}
}
+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) {
void slotDeleteAllClipMarkers();
void slotEditClipMarker();
void slotCutTimelineClip();
+ void slotInsertClipOverwrite();
void slotSelectTimelineClip();
void slotSelectTimelineTransition();
void slotDeselectTimelineClip();
}
}
+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),
void slotSeekToPreviousSnap();
void adjustRulerSize(int length);
void setTimePos(const QString &pos);
+ QStringList getZoneInfo() const;
signals:
void renderPosition(int);