[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