X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fcustomtrackview.cpp;h=bc10df9c101d7e9157f4e7025dbe5c698199dba6;hb=998aca24e64e7df71573f445ba32cefd334be9e8;hp=974cb86bd28fdb306e46aaae62134564e7a73396;hpb=c8974480ce8d464baadf3dd567adfcb5af4afaac;p=kdenlive diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index 974cb86b..bc10df9c 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -398,19 +398,26 @@ void CustomTrackView::mouseMoveEvent(QMouseEvent * event) if (!m_controlModifier && m_dragItem->type() == AVWIDGET && m_dragItem->parentItem() && m_dragItem->parentItem() != m_selectionGroup) { AbstractGroupItem *parent = static_cast (m_dragItem->parentItem()); if (parent) - parent->resizeStart((int)(snappedPos) - m_dragItemInfo.startPos.frames(m_document->fps())); + parent->resizeStart((int)(snappedPos - m_dragItemInfo.startPos.frames(m_document->fps()))); } else { m_dragItem->resizeStart((int)(snappedPos)); } + QString crop = m_document->timecode().getDisplayTimecode(m_dragItem->cropStart(), KdenliveSettings::frametimecode()); + QString duration = m_document->timecode().getDisplayTimecode(m_dragItem->cropDuration(), KdenliveSettings::frametimecode()); + QString offset = m_document->timecode().getDisplayTimecode(m_dragItem->cropStart() - m_dragItemInfo.cropStart, KdenliveSettings::frametimecode()); + emit displayMessage(i18n("Crop from start:") + ' ' + crop + ' ' + i18n("Duration:") + ' ' + duration + ' ' + i18n("Offset:") + ' ' + offset, InformationMessage); } else if (m_operationMode == RESIZEEND && move) { m_document->renderer()->pause(); if (!m_controlModifier && m_dragItem->type() == AVWIDGET && m_dragItem->parentItem() && m_dragItem->parentItem() != m_selectionGroup) { AbstractGroupItem *parent = static_cast (m_dragItem->parentItem()); if (parent) - parent->resizeEnd((int)(snappedPos) - m_dragItemInfo.endPos.frames(m_document->fps())); + parent->resizeEnd((int)(snappedPos - m_dragItemInfo.endPos.frames(m_document->fps()))); } else { m_dragItem->resizeEnd((int)(snappedPos)); } + QString duration = m_document->timecode().getDisplayTimecode(m_dragItem->cropDuration(), KdenliveSettings::frametimecode()); + QString offset = m_document->timecode().getDisplayTimecode(m_dragItem->cropDuration() - m_dragItemInfo.cropDuration, KdenliveSettings::frametimecode()); + emit displayMessage(i18n("Duration:") + ' ' + duration + ' ' + i18n("Offset:") + ' ' + offset, InformationMessage); } else if (m_operationMode == FADEIN && move) { ((ClipItem*) m_dragItem)->setFadeIn((int)(mappedXPos - m_dragItem->startPos().frames(m_document->fps()))); } else if (m_operationMode == FADEOUT && move) { @@ -2338,8 +2345,12 @@ void CustomTrackView::dropEvent(QDropEvent * event) */ m_pasteEffectsAction->setEnabled(m_copiedItems.count() == 1); - if (items.count() > 1) groupSelectedItems(true); - else if (items.count() == 1) m_dragItem = static_cast (items.at(0)); + if (items.count() > 1) { + groupSelectedItems(true); + } else if (items.count() == 1) { + m_dragItem = static_cast (items.at(0)); + emit clipItemSelected((ClipItem*)m_dragItem); + } event->setDropAction(Qt::MoveAction); event->accept(); } else QGraphicsView::dropEvent(event); @@ -2572,9 +2583,10 @@ void CustomTrackView::addTrack(TrackInfo type, int ix) m_cursorLine->setLine(m_cursorLine->line().x1(), 0, m_cursorLine->line().x1(), maxHeight - 1); setSceneRect(0, 0, sceneRect().width(), m_tracksHeight * m_document->tracksCount()); viewport()->update(); - emit tracksChanged(); //QTimer::singleShot(500, this, SIGNAL(trackHeightChanged())); //setFixedHeight(50 * m_tracksCount); + + updateTrackNames(ix, true); } void CustomTrackView::removeTrack(int ix) @@ -2644,7 +2656,8 @@ void CustomTrackView::removeTrack(int ix) m_selectedTrack = qMin(m_selectedTrack, m_document->tracksCount() - 1); viewport()->update(); - emit tracksChanged(); + + updateTrackNames(ix, false); //QTimer::singleShot(500, this, SIGNAL(trackHeightChanged())); } @@ -2656,8 +2669,8 @@ void CustomTrackView::configTracks(QList < TrackInfo > trackInfos) lockTrack(m_document->tracksCount() - i - 1, m_document->trackInfoAt(i).isLocked, false); } - QTimer::singleShot(300, this, SIGNAL(trackHeightChanged())); viewport()->update(); + emit trackHeightChanged(); } void CustomTrackView::slotSwitchTrackAudio(int ix) @@ -4923,13 +4936,18 @@ bool CustomTrackView::addGuide(const GenTime pos, const QString &comment) return true; } -void CustomTrackView::slotAddGuide() +void CustomTrackView::slotAddGuide(bool dialog) { CommentedTime marker(GenTime(m_cursorPos, m_document->fps()), i18n("Guide")); - MarkerDialog d(NULL, marker, m_document->timecode(), i18n("Add Guide"), this); - if (d.exec() != QDialog::Accepted) return; - if (addGuide(d.newMarker().time(), d.newMarker().comment())) { - EditGuideCommand *command = new EditGuideCommand(this, GenTime(), QString(), d.newMarker().time(), d.newMarker().comment(), false); + if (dialog) { + MarkerDialog d(NULL, marker, m_document->timecode(), i18n("Add Guide"), this); + if (d.exec() != QDialog::Accepted) return; + marker.setComment(d.newMarker().comment()); + } else { + marker.setComment(m_document->timecode().getDisplayTimecodeFromFrames(m_cursorPos, false)); + } + if (addGuide(marker.time(), marker.comment())) { + EditGuideCommand *command = new EditGuideCommand(this, GenTime(), QString(), marker.time(), marker.comment(), false); m_commandStack->push(command); } } @@ -5800,6 +5818,11 @@ void CustomTrackView::doSplitAudio(const GenTime &pos, int track, bool split) if (split) { int start = pos.frames(m_document->fps()); int freetrack = m_document->tracksCount() - track - 1; + + // do not split audio when we are on an audio track + if (m_document->trackInfoAt(freetrack).type == AUDIOTRACK) + return; + for (; freetrack > 0; freetrack--) { kDebug() << "// CHK DOC TRK:" << freetrack << ", DUR:" << m_document->renderer()->mltTrackDuration(freetrack); if (m_document->trackInfoAt(freetrack - 1).type == AUDIOTRACK && !m_document->trackInfoAt(freetrack - 1).isLocked) { @@ -6468,3 +6491,41 @@ void CustomTrackView::updatePanZoom(ClipItem* item, GenTime cutPos) if (effects.count() > 0) emit clipItemSelected(item, item->selectedEffectIndex()); } + +void CustomTrackView::updateTrackNames(int track, bool added) +{ + QList tracks = m_document->tracksList(); + int max = tracks.count(); + int docTrack = max - track - 1; + + // count number of tracks of each type + int videoTracks = 0; + int audioTracks = 0; + for (int i = max - 1; i >= 0; --i) { + TrackInfo info = tracks.at(i); + if (info.type == VIDEOTRACK) + videoTracks++; + else + audioTracks++; + + if (i <= docTrack) { + QString type = (info.type == VIDEOTRACK ? "Video " : "Audio "); + int typeNumber = (info.type == VIDEOTRACK ? videoTracks : audioTracks); + + if (added) { + if (i == docTrack || info.trackName == type + QString::number(typeNumber - 1)) { + info.trackName = type + QString::number(typeNumber); + m_document->setTrackType(i, info); + } + } else { + if (info.trackName == type + QString::number(typeNumber + 1)) { + info.trackName = type + QString::number(typeNumber); + m_document->setTrackType(i, info); + } + } + } + } + + emit tracksChanged(); +} +