-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
The attached patch adds the duration dialog to the context menu for
clips in the timeline to make it easier to access, especially when using
keyframeable effects (then a double click adds a new keyframe).
regards ttill
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEYEARECAAYFAku5nEkACgkQzwEyz7QP6nQl7wCgk+yD8TLJPjgTFRb1SzxTuyIA
PIYAoNlb95CyYVb8zr1YMUvywGG7zF04
=aePB
-----END PGP SIGNATURE-----
Index: src/customtrackview.cpp
===================================================================
--- src/customtrackview.cpp (revision 4369)
+++ src/customtrackview.cpp (working copy)
@@ -1285,34 +1285,51 @@
emit clipItemSelected(item, item->selectedEffectIndex());
}
} else if (m_dragItem && !m_dragItem->isItemLocked()) {
+ editClipDuration();
+ } else {
+ QList<QGraphicsItem *> collisionList = items(event->pos());
+ if (collisionList.count() == 1 && collisionList.at(0)->type() == GUIDEITEM) {
+ Guide *editGuide = (Guide *) collisionList.at(0);
+ if (editGuide) slotEditGuide(editGuide->info());
+ }
+ }
+}
+
+void CustomTrackView::editClipDuration()
+{
+ GenTime pos = GenTime((int)(mapToScene(m_menuPosition).x()), m_document->fps());
+ int track = (int)(mapToScene(m_menuPosition).y() / m_tracksHeight);
+ ClipItem *item = getClipItemAt(pos, track);
+
+ if(item) {
GenTime minimum;
GenTime maximum;
- if (m_dragItem->type() == TRANSITIONWIDGET) {
- getTransitionAvailableSpace(m_dragItem, minimum, maximum);
+ if (item->type() == TRANSITIONWIDGET) {
+ getTransitionAvailableSpace(item, minimum, maximum);
} else {
- getClipAvailableSpace(m_dragItem, minimum, maximum);
+ getClipAvailableSpace(item, minimum, maximum);
}
//kDebug()<<"// GOT MOVE POS: "<<minimum.frames(25)<<" - "<<maximum.frames(25);
- ClipDurationDialog d(m_dragItem, m_document->timecode(), minimum, maximum, this);
+ ClipDurationDialog d(item, m_document->timecode(), minimum, maximum, this);
if (d.exec() == QDialog::Accepted) {
- if (m_dragItem->type() == TRANSITIONWIDGET) {
+ if (item->type() == TRANSITIONWIDGET) {
// move & resize transition
ItemInfo startInfo;
- startInfo.startPos = m_dragItem->startPos();
- startInfo.endPos = m_dragItem->endPos();
- startInfo.track = m_dragItem->track();
+ startInfo.startPos = item->startPos();
+ startInfo.endPos = item->endPos();
+ startInfo.track = item->track();
ItemInfo endInfo;
endInfo.startPos = d.startPos();
endInfo.endPos = endInfo.startPos + d.duration();
- endInfo.track = m_dragItem->track();
+ endInfo.track = item->track();
MoveTransitionCommand *command = new MoveTransitionCommand(this, startInfo, endInfo, true);
m_commandStack->push(command);
} else {
// move and resize clip
QUndoCommand *moveCommand = new QUndoCommand();
moveCommand->setText(i18n("Edit clip"));
- ItemInfo clipInfo = m_dragItem->info();
- if (d.duration() < m_dragItem->cropDuration() || d.cropStart() != clipInfo.cropStart) {
+ ItemInfo clipInfo = item->info();
+ if (d.duration() < item->cropDuration() || d.cropStart() != clipInfo.cropStart) {
// duration was reduced, so process it first
ItemInfo startInfo = clipInfo;
clipInfo.endPos = clipInfo.startPos + d.duration();
@@ -1322,10 +1339,10 @@
if (d.startPos() != clipInfo.startPos) {
ItemInfo startInfo = clipInfo;
clipInfo.startPos = d.startPos();
- clipInfo.endPos = m_dragItem->endPos() + (clipInfo.startPos - startInfo.startPos);
+ clipInfo.endPos = item->endPos() + (clipInfo.startPos - startInfo.startPos);
new MoveClipCommand(this, startInfo, clipInfo, true, moveCommand);
}
- if (d.duration() > m_dragItem->cropDuration()) {
+ if (d.duration() > item->cropDuration()) {
// duration was increased, so process it after move
ItemInfo startInfo = clipInfo;
clipInfo.endPos = clipInfo.startPos + d.duration();
@@ -1335,16 +1352,9 @@
m_commandStack->push(moveCommand);
}
}
- } else {
- QList<QGraphicsItem *> collisionList = items(event->pos());
- if (collisionList.count() == 1 && collisionList.at(0)->type() == GUIDEITEM) {
- Guide *editGuide = (Guide *) collisionList.at(0);
- if (editGuide) slotEditGuide(editGuide->info());
- }
}
}
-
void CustomTrackView::editKeyFrame(const GenTime pos, const int track, const int index, const QString keyframes)
{
ClipItem *clip = getClipItemAt((int)pos.frames(m_document->fps()), track);
Index: src/mainwindow.cpp
===================================================================
--- src/mainwindow.cpp (revision 4369)
+++ src/mainwindow.cpp (working copy)
@@ -396,6 +396,7 @@
m_timelineContextMenu->addAction(actionCollection()->action("delete_space"));
m_timelineContextMenu->addAction(actionCollection()->action(KStandardAction::name(KStandardAction::Paste)));
+ m_timelineContextClipMenu->addAction(actionCollection()->action("edit_clip_duration"));
m_timelineContextClipMenu->addAction(actionCollection()->action("delete_timeline_clip"));
m_timelineContextClipMenu->addAction(actionCollection()->action("group_clip"));
m_timelineContextClipMenu->addAction(actionCollection()->action("ungroup_clip"));
@@ -1133,6 +1134,10 @@
ungroupClip->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_G);
ungroupClip->setData("ungroup_clip");
connect(ungroupClip, SIGNAL(triggered(bool)), this, SLOT(slotUnGroupClips()));
+
+ KAction* editClipDuration = new KAction(KIcon("measure"), i18n("Edit Clip Duration"), this);
+ collection->addAction("edit_clip_duration", editClipDuration);
+ connect(editClipDuration, SIGNAL(triggered(bool)), this, SLOT(slotEditClipDuration()));
KAction* insertOvertwrite = new KAction(KIcon(), i18n("Insert Clip Zone in Timeline (Overwrite)"), this);
insertOvertwrite->setShortcut(Qt::Key_V);
@@ -2452,6 +2457,13 @@
}
}
+void MainWindow::slotEditClipDuration()
+{
+ if (m_activeTimeline) {
+ m_activeTimeline->projectView()->editClipDuration();
+ }
+}
+
void MainWindow::slotAddProjectClip(KUrl url)
{
if (m_activeDocument)
Index: src/customtrackview.h
===================================================================
--- src/customtrackview.h (revision 4369)
+++ src/customtrackview.h (working copy)
@@ -131,6 +131,7 @@
void setEditMode(EDITMODE mode);
void insertClipCut(DocClipBase *clip, int in, int out);
void clearSelection();
+ void editClipDuration();
public slots:
void setCursorPos(int pos, bool seek = true);
Index: src/mainwindow.h
===================================================================
--- src/mainwindow.h (revision 4369)
+++ src/mainwindow.h (working copy)
@@ -320,6 +320,7 @@
void slotDvdWizard(const QString &url = QString(), const QString &profile = "dv_pal");
void slotGroupClips();
void slotUnGroupClips();
+ void slotEditClipDuration();
void slotSplitAudio();
void slotUpdateClipType(QAction *action);
void slotShowTimeline(bool show);
------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Kdenlive-devel mailing list
Kdenlive-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kdenlive-devel