[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kdenlive] src/timeline: Fix audio split on Insert/Overwrite
From:       Jean-Baptiste Mardelle <jb () kdenlive ! org>
Date:       2016-04-30 14:43:21
Message-ID: E1awW77-0005SU-7l () scm ! kde ! org
[Download RAW message or body]

Git commit a88d8769d7665d3f3b584bf9d201fd46a3f0361a by Jean-Baptiste Mardelle.
Committed on 30/04/2016 at 14:43.
Pushed by mardelle into branch 'master'.

Fix audio split on Insert/Overwrite
Ref: T1961

M  +26   -16   src/timeline/customtrackview.cpp
M  +1    -1    src/timeline/customtrackview.h
M  +4    -5    src/timeline/timelinecommands.cpp
M  +1    -2    src/timeline/timelinecommands.h

http://commits.kde.org/kdenlive/a88d8769d7665d3f3b584bf9d201fd46a3f0361a

diff --git a/src/timeline/customtrackview.cpp b/src/timeline/customtrackview.cpp
index 213c14c..83f4668 100644
--- a/src/timeline/customtrackview.cpp
+++ b/src/timeline/customtrackview.cpp
@@ -3310,6 +3310,11 @@ void CustomTrackView::cutTimeline(int cutPos, QUndoCommand \
*masterCommand)  void CustomTrackView::extractZone(QPoint z, bool closeGap, \
QUndoCommand *masterCommand)  {
     // remove track zone and close gap
+    if (closeGap && m_timeline->getTrackInfo(m_selectedTrack).isLocked) {
+        // Cannot perform an Extract operation on a locked track
+        emit displayMessage(i18n("Cannot perform operation on a locked track"), \
ErrorMessage); +        return;
+    }
     if (z.isNull())
         z = m_document->zone();
     QRectF rect(z.x(), 0, z.y() - z.x() - 1, m_timeline->visibleTracksCount() * \
m_tracksHeight); @@ -7276,23 +7281,23 @@ void CustomTrackView::splitAudio(bool warn, \
ItemInfo info, QUndoCommand *masterC  {
     resetSelectionGroup();
     QList<QGraphicsItem *> selection;
-    if (info.isValid()) {
-        ClipItem *clip = getClipItemAtStart(info.startPos, info.track);
-        if (clip) {
-            selection << clip;
-        }
-    } else {
-        selection = scene()->selectedItems();
-    }
-    if (selection.isEmpty()) {
-        emit displayMessage(i18n("You must select at least one clip for this \
                action"), ErrorMessage);
-        return;
-    }
     bool hasMasterCommand = masterCommand != NULL;
     if (!hasMasterCommand) {
         masterCommand = new QUndoCommand();
         masterCommand->setText(i18n("Split audio"));
     }
+    if (!info.isValid()) {
+        // Operate on current selection
+        selection = scene()->selectedItems();
+        if (selection.isEmpty()) {
+            emit displayMessage(i18n("You must select at least one clip for this \
action"), ErrorMessage); +            if (!hasMasterCommand)
+                delete masterCommand;
+            return;
+        }
+    } else {
+        new SplitAudioCommand(this, info.track, info.startPos, masterCommand);
+    }
     for (int i = 0; i < selection.count(); ++i) {
         if (selection.at(i)->type() == AVWidget) {
             ClipItem *clip = static_cast <ClipItem *>(selection.at(i));
@@ -7300,9 +7305,7 @@ void CustomTrackView::splitAudio(bool warn, ItemInfo info, \
QUndoCommand *masterC  if (clip->parentItem()) {
                     emit displayMessage(i18n("Cannot split audio of grouped clips"), \
ErrorMessage);  } else {
-                    EffectsList effects;
-                    effects.clone(clip->effectList());
-                    new SplitAudioCommand(this, clip->track(), clip->startPos(), \
effects, masterCommand); +                    new SplitAudioCommand(this, \
clip->track(), clip->startPos(), masterCommand);  }
             }
         }
@@ -7442,13 +7445,15 @@ void CustomTrackView::slotAlignClip(int track, int pos, int \
shift)  
 }
 
-void CustomTrackView::doSplitAudio(const GenTime &pos, int track, EffectsList \
effects, bool split) +void CustomTrackView::doSplitAudio(const GenTime &pos, int \
track, bool split)  {
     ClipItem *clip = getClipItemAtStart(pos, track);
     if (clip == NULL) {
         //qDebug() << "// Cannot find clip to split!!!";
         return;
     }
+    EffectsList effects;
+    effects.clone(clip->effectList());
     if (split) {
         int start = pos.frames(m_document->fps());
         int freetrack = track - 1;
@@ -7925,6 +7930,11 @@ void CustomTrackView::checkTrackSequence(int track)
 
 void CustomTrackView::insertZone(TimelineMode::EditMode sceneMode, const QString \
clipId, QPoint binZone)  {
+    if (m_timeline->getTrackInfo(m_selectedTrack).isLocked) {
+        // Cannot perform an Extract operation on a locked track
+        emit displayMessage(i18n("Cannot perform operation on a locked track"), \
ErrorMessage); +        return;
+    }
     if (binZone.isNull()) return;
     QPoint timelineZone = m_document->zone();
     ItemInfo info;
diff --git a/src/timeline/customtrackview.h b/src/timeline/customtrackview.h
index daeb2b0..93fdb17 100644
--- a/src/timeline/customtrackview.h
+++ b/src/timeline/customtrackview.h
@@ -164,7 +164,7 @@ public:
     * @param pos Position of the clip to split
     * @param track Track of the clip
     * @param split Split or unsplit */
-    void doSplitAudio(const GenTime &pos, int track, EffectsList effects, bool \
split); +    void doSplitAudio(const GenTime &pos, int track, bool split);
     /** @brief Sets the clip type (av, video only, audio only) of the current \
selection. */  void setClipType(PlaylistState::ClipState state);
     void doChangeClipType(const GenTime &pos, int track, PlaylistState::ClipState \
                state);
diff --git a/src/timeline/timelinecommands.cpp b/src/timeline/timelinecommands.cpp
index 5088fb4..1bf1297 100644
--- a/src/timeline/timelinecommands.cpp
+++ b/src/timeline/timelinecommands.cpp
@@ -759,23 +759,22 @@ void ResizeClipCommand::redo()
     m_doIt = true;
 }
 
-SplitAudioCommand::SplitAudioCommand(CustomTrackView *view, const int track, const \
GenTime &pos, const EffectsList &effects, QUndoCommand * parent) : \
+SplitAudioCommand::SplitAudioCommand(CustomTrackView *view, const int track, const \
GenTime &pos, QUndoCommand * parent) :  QUndoCommand(parent),
     m_view(view),
     m_pos(pos),
-    m_track(track),
-    m_effects(effects)
+    m_track(track)
 {
     setText(i18n("Split audio"));
 }
 // virtual
 void SplitAudioCommand::undo()
 {
-    m_view->doSplitAudio(m_pos, m_track, m_effects, false);
+    m_view->doSplitAudio(m_pos, m_track, false);
 }
 // virtual
 void SplitAudioCommand::redo()
 {
-    m_view->doSplitAudio(m_pos, m_track, m_effects, true);
+    m_view->doSplitAudio(m_pos, m_track, true);
 }
 
diff --git a/src/timeline/timelinecommands.h b/src/timeline/timelinecommands.h
index 83079dd..d8d6251 100644
--- a/src/timeline/timelinecommands.h
+++ b/src/timeline/timelinecommands.h
@@ -408,14 +408,13 @@ private:
 class SplitAudioCommand : public QUndoCommand
 {
 public:
-    SplitAudioCommand(CustomTrackView *view, const int track, const GenTime &pos, \
const EffectsList &effects, QUndoCommand * parent = 0); +    \
SplitAudioCommand(CustomTrackView *view, const int track, const GenTime &pos, \
QUndoCommand * parent = 0);  void undo();
     void redo();
 private:
     CustomTrackView *m_view;
     const GenTime m_pos;
     const int m_track;
-    EffectsList m_effects;
 };
 
 #endif


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic