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()
+{
+ AbstractClipItem *item;
+ if (m_dragItem) {
+ item = m_dragItem;
+ }
+ else {
+ GenTime pos = GenTime((int)(mapToScene(m_menuPosition).x()), m_document->fps());
+ int track = (int)(mapToScene(m_menuPosition).y() / m_tracksHeight);
+ item = getClipItemAt(pos, track);
+ }
+
+ if (item && !item->isItemLocked()) {
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();
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();
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);
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"));
//TODO: re-enable custom effects menu when it is implemented
m_timelineContextClipMenu->addMenu(m_customEffectsMenu);
+ m_timelineContextTransitionMenu->addAction(actionCollection()->action("edit_clip_duration"));
m_timelineContextTransitionMenu->addAction(actionCollection()->action("delete_timeline_clip"));
m_timelineContextTransitionMenu->addAction(actionCollection()->action(KStandardAction::name(KStandardAction::Copy)));
ungroupClip->setData("ungroup_clip");
connect(ungroupClip, SIGNAL(triggered(bool)), this, SLOT(slotUnGroupClips()));
+ KAction* editClipDuration = new KAction(KIcon("measure"), i18n("Edit 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);
collection->addAction("overwrite_to_in_point", insertOvertwrite);
}
}
+void MainWindow::slotEditClipDuration()
+{
+ if (m_activeTimeline) {
+ m_activeTimeline->projectView()->editClipDuration();
+ }
+}
+
void MainWindow::slotAddProjectClip(KUrl url)
{
if (m_activeDocument)