From 8bd54421258c11c5bf046cca6660c58229df254e Mon Sep 17 00:00:00 2001 From: Till Theato Date: Sun, 30 May 2010 13:50:26 +0000 Subject: [PATCH] Add option to automatically split audio when adding a clip to timeline (based on patch by Hugh Tebby) svn path=/trunk/kdenlive/; revision=4489 --- icons/hi16-action-kdenlive-split-audio.png | Bin 0 -> 670 bytes icons/ox16-action-kdenlive-split-audio.png | Bin 0 -> 670 bytes src/customtrackview.cpp | 23 +++++++++++++++------ src/customtrackview.h | 7 ++++++- src/kdenlivesettings.kcfg | 5 +++++ src/mainwindow.cpp | 17 +++++++++++++++ src/mainwindow.h | 3 +++ src/widgets/configmisc_ui.ui | 23 ++++++++++++++------- 8 files changed, 63 insertions(+), 15 deletions(-) create mode 100644 icons/hi16-action-kdenlive-split-audio.png create mode 100644 icons/ox16-action-kdenlive-split-audio.png diff --git a/icons/hi16-action-kdenlive-split-audio.png b/icons/hi16-action-kdenlive-split-audio.png new file mode 100644 index 0000000000000000000000000000000000000000..157e5f506a7ba661f20c1812c0a70ecf2e17d424 GIT binary patch literal 670 zcmV;P0%84$P)Px#24YJ`L;&9a&;YhwZE$`7000SaNLh0L00FxI00FxJI_%@(00007bV*G`2igT4 z4j2fNyr{YW00JIKL_t(I%Y~EAOH@%5$3N%##u=S?>QhS{Lk2-e$;zNbAx1wJLMvND z{s#$e3zxNV)3&A5qFsX0BBK^%kkFz6X;q6s%%XIr%$)b0dXI~FGtG$B+1$^$Kfavv zJzQa*P*tf&Yk-|nA|hIOR{+}jE;vVfGN(pIhKG$Y3)bpD!S{2?`nq4%>g9s(e@fQZ zNn)y4Vg69A^HvZwch*jD>f6aY}5;0G~@ z9{iItHW4@7iJR^Opt*YxFLSjlVw`T^JWX9KG#u%xth@-R_Eutv8;I!x=73hz zdca4-^a35g7VrV+MeQ{C>|&|Z8e)kd#GFBlhuZ7FHe%wyF~qbL4YEFP2r-9&4czn> zey`+e0434z6>uZ-9;5aLB5S}Ly0Z#wp!Pc=FF^zB_6+OG%hgjzwHMvr__l_Z83a7? z*=ImVbN5-)4zlG>;nb%1xs>HUVWMyRSKP}SuiA@Z7rnUr!SmK1KmY&$07*qoM6N<$ Ef`ke!8~^|S literal 0 HcmV?d00001 diff --git a/icons/ox16-action-kdenlive-split-audio.png b/icons/ox16-action-kdenlive-split-audio.png new file mode 100644 index 0000000000000000000000000000000000000000..157e5f506a7ba661f20c1812c0a70ecf2e17d424 GIT binary patch literal 670 zcmV;P0%84$P)Px#24YJ`L;&9a&;YhwZE$`7000SaNLh0L00FxI00FxJI_%@(00007bV*G`2igT4 z4j2fNyr{YW00JIKL_t(I%Y~EAOH@%5$3N%##u=S?>QhS{Lk2-e$;zNbAx1wJLMvND z{s#$e3zxNV)3&A5qFsX0BBK^%kkFz6X;q6s%%XIr%$)b0dXI~FGtG$B+1$^$Kfavv zJzQa*P*tf&Yk-|nA|hIOR{+}jE;vVfGN(pIhKG$Y3)bpD!S{2?`nq4%>g9s(e@fQZ zNn)y4Vg69A^HvZwch*jD>f6aY}5;0G~@ z9{iItHW4@7iJR^Opt*YxFLSjlVw`T^JWX9KG#u%xth@-R_Eutv8;I!x=73hz zdca4-^a35g7VrV+MeQ{C>|&|Z8e)kd#GFBlhuZ7FHe%wyF~qbL4YEFP2r-9&4czn> zey`+e0434z6>uZ-9;5aLB5S}Ly0Z#wp!Pc=FF^zB_6+OG%hgjzwHMvr__l_Z83a7? z*=ImVbN5-)4zlG>;nb%1xs>HUVWMyRSKP}SuiA@Z7rnUr!SmK1KmY&$07*qoM6N<$ Ef`ke!8~^|S literal 0 HcmV?d00001 diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index 12ee3323..3ada9543 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -2275,6 +2275,10 @@ void CustomTrackView::dropEvent(QDropEvent * event) brokenClips.clear(); if (addCommand->childCount() > 0) m_commandStack->push(addCommand); else delete addCommand; + + // Automatic audio split + if (KdenliveSettings::splitaudio()) + splitAudio(); setDocumentModified(); /* @@ -3680,9 +3684,8 @@ void CustomTrackView::deleteSelectedClips() if (!clip->isItemLocked()) transitionInfos.append(clip->info()); } } - if (clipInfos.count() > 0) { + if (clipInfos.count() > 0) new GroupClipsCommand(this, clipInfos, transitionInfos, false, deleteSelected); - } } } @@ -5452,7 +5455,6 @@ void CustomTrackView::getTransitionAvailableSpace(AbstractClipItem *item, GenTim } } - void CustomTrackView::loadGroups(const QDomNodeList groups) { for (int i = 0; i < groups.count(); i++) { @@ -5480,7 +5482,7 @@ void CustomTrackView::splitAudio() resetSelectionGroup(); QList selection = scene()->selectedItems(); if (selection.isEmpty()) { - emit displayMessage(i18n("You must select one clip for this action"), ErrorMessage); + emit displayMessage(i18n("You must select at least one clip for this action"), ErrorMessage); return; } QUndoCommand *splitCommand = new QUndoCommand(); @@ -5866,9 +5868,13 @@ void CustomTrackView::slotSelectTrack(int ix) viewport()->update(); } -void CustomTrackView::selectClip(bool add, bool group) +void CustomTrackView::selectClip(bool add, bool group, int track, int pos) { - QRectF rect(m_cursorPos, m_selectedTrack * m_tracksHeight + m_tracksHeight / 2, 1, 1); + QRectF rect; + if (track != -1 && pos != -1) + rect = QRectF(pos, track * m_tracksHeight + m_tracksHeight / 2, 1, 1); + else + rect = QRectF(m_cursorPos, m_selectedTrack * m_tracksHeight + m_tracksHeight / 2, 1, 1); QList selection = m_scene->items(rect); resetSelectionGroup(group); if (!group) m_scene->clearSelection(); @@ -5955,6 +5961,11 @@ void CustomTrackView::insertZoneOverwrite(QStringList data, int in) adjustTimelineClips(OVERWRITEEDIT, NULL, info, addCommand); new AddTimelineClipCommand(this, clip->toXML(), clip->getId(), info, EffectsList(), true, false, true, false, addCommand); m_commandStack->push(addCommand); + + selectClip(true, false, m_selectedTrack, in); + // Automatic audio split + if (KdenliveSettings::splitaudio()) + splitAudio(); } void CustomTrackView::clearSelection() diff --git a/src/customtrackview.h b/src/customtrackview.h index 3ecd55ed..519376c7 100644 --- a/src/customtrackview.h +++ b/src/customtrackview.h @@ -141,7 +141,12 @@ public: int selectedTrack() const; QStringList selectedClips() const; QList selectedClipItems() const; - void selectClip(bool add, bool group = false); + /** @brief Selects a clip. + * @param add Whether to select or deselect + * @param group (optional) Whether to add the clip to a group + * @param track (optional) The track of the clip (has to be combined with @param pos) + * @param pos (optional) The position of the clip (has to be combined with @param track) */ + void selectClip(bool add, bool group = false, int track = -1, int pos = -1); void selectTransition(bool add, bool group = false); QStringList extractTransitionsLumas(); void setEditMode(EDITMODE mode); diff --git a/src/kdenlivesettings.kcfg b/src/kdenlivesettings.kcfg index 4fdd18a2..7fadebf3 100644 --- a/src/kdenlivesettings.kcfg +++ b/src/kdenlivesettings.kcfg @@ -52,6 +52,11 @@ + + + + false + diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 532a481d..28eeca5c 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -851,6 +851,13 @@ void MainWindow::setupActions() toolbar->addSeparator(); + //create automatic audio split button + m_buttonAutomaticSplitAudio = new KAction(KIcon("kdenlive-split-audio"), i18n("Split audio and video automatically"), this); + toolbar->addAction(m_buttonAutomaticSplitAudio); + m_buttonAutomaticSplitAudio->setCheckable(true); + m_buttonAutomaticSplitAudio->setChecked(KdenliveSettings::splitaudio()); + connect(m_buttonAutomaticSplitAudio, SIGNAL(triggered()), this, SLOT(slotSwitchSplitAudio())); + m_buttonVideoThumbs = new KAction(KIcon("kdenlive-show-videothumb"), i18n("Show video thumbnails"), this); toolbar->addAction(m_buttonVideoThumbs); m_buttonVideoThumbs->setCheckable(true); @@ -875,6 +882,10 @@ void MainWindow::setupActions() m_buttonSnap->setChecked(KdenliveSettings::snaptopoints()); connect(m_buttonSnap, SIGNAL(triggered()), this, SLOT(slotSwitchSnap())); + actionWidget = toolbar->widgetForAction(m_buttonAutomaticSplitAudio); + actionWidget->setMaximumWidth(max); + actionWidget->setMaximumHeight(max - 4); + actionWidget = toolbar->widgetForAction(m_buttonVideoThumbs); actionWidget->setMaximumWidth(max); actionWidget->setMaximumHeight(max - 4); @@ -908,6 +919,7 @@ void MainWindow::setupActions() collection->addAction("razor_tool", m_buttonRazorTool); collection->addAction("spacer_tool", m_buttonSpacerTool); + collection->addAction("automatic_split_audio", m_buttonAutomaticSplitAudio); collection->addAction("show_video_thumbs", m_buttonVideoThumbs); collection->addAction("show_audio_thumbs", m_buttonAudioThumbs); collection->addAction("show_markers", m_buttonShowMarkers); @@ -2185,6 +2197,11 @@ void MainWindow::updateConfiguration() } +void MainWindow::slotSwitchSplitAudio() +{ + KdenliveSettings::setSplitaudio(!KdenliveSettings::splitaudio()); + m_buttonAutomaticSplitAudio->setChecked(KdenliveSettings::splitaudio()); +} void MainWindow::slotSwitchVideoThumbs() { diff --git a/src/mainwindow.h b/src/mainwindow.h index 9451809e..9704fea3 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -189,6 +189,7 @@ private: KAction *m_buttonVideoThumbs; KAction *m_buttonShowMarkers; KAction *m_buttonFitZoom; + KAction *m_buttonAutomaticSplitAudio; KAction *m_normalEditTool; KAction *m_overwriteEditTool; KAction *m_insertEditTool; @@ -277,6 +278,8 @@ private slots: void slotDetectAudioDriver(); void slotEditProjectSettings(); void slotDisplayActionMessage(QAction *a); + /** @brief Turns automatic splitting of audio and video on/off. */ + void slotSwitchSplitAudio(); void slotSwitchVideoThumbs(); void slotSwitchAudioThumbs(); void slotSwitchMarkersComments(); diff --git a/src/widgets/configmisc_ui.ui b/src/widgets/configmisc_ui.ui index 6374dbf5..9476c692 100644 --- a/src/widgets/configmisc_ui.ui +++ b/src/widgets/configmisc_ui.ui @@ -32,7 +32,7 @@ - + Default Durations @@ -83,7 +83,7 @@ - + Default Profile @@ -169,14 +169,14 @@ - + Video tracks - + Qt::Horizontal @@ -189,14 +189,14 @@ - + Audio tracks - + Qt::Vertical @@ -209,10 +209,10 @@ - + - + @@ -222,6 +222,13 @@ + + + + Automatically split audio from video + + + -- 2.39.2