From ddbca1db7356ee2960e348b9b2fdc01351438cb3 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Sun, 16 Dec 2012 19:57:43 +0100 Subject: [PATCH] Enable split audio and other audio actions only when a clip with audio is selected --- src/customtrackview.cpp | 27 +++++++++++++++++++++++++++ src/customtrackview.h | 2 ++ src/mainwindow.cpp | 6 ++++++ 3 files changed, 35 insertions(+) diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index 0bdb2a21..dd7e1781 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -236,6 +236,8 @@ void CustomTrackView::setContextMenu(QMenu *timeline, QMenu *clip, QMenu *transi for (int i = 0; i < list.count(); i++) { if (list.at(i)->data().toString() == "paste_effects") m_pasteEffectsAction = list.at(i); else if (list.at(i)->data().toString() == "ungroup_clip") m_ungroupAction = list.at(i); + else if (list.at(i)->data().toString() == "A") m_audioActions.append(list.at(i)); + else if (list.at(i)->data().toString() == "A+V") m_avActions.append(list.at(i)); } m_timelineContextTransitionMenu = transition; @@ -6917,9 +6919,27 @@ void CustomTrackView::doChangeClipType(const GenTime &pos, int track, bool video void CustomTrackView::updateClipTypeActions(ClipItem *clip) { + bool hasAudio; + bool hasAV; if (clip == NULL || (clip->clipType() != AV && clip->clipType() != PLAYLIST)) { m_clipTypeGroup->setEnabled(false); + hasAudio = clip != NULL && clip->clipType() == AUDIO; + hasAV = false; } else { + switch (clip->clipType()) { + case AV: + case PLAYLIST: + hasAudio = true; + hasAV = true; + break; + case AUDIO: + hasAudio = true; + hasAV = false; + break; + default: + hasAudio = false; + hasAV = false; + } m_clipTypeGroup->setEnabled(true); QList actions = m_clipTypeGroup->actions(); QString lookup; @@ -6933,6 +6953,13 @@ void CustomTrackView::updateClipTypeActions(ClipItem *clip) } } } + + for (int i = 0; i < m_audioActions.count(); i++) { + m_audioActions.at(i)->setEnabled(hasAudio); + } + for (int i = 0; i < m_avActions.count(); i++) { + m_avActions.at(i)->setEnabled(hasAV); + } } void CustomTrackView::slotGoToMarker(QAction *action) diff --git a/src/customtrackview.h b/src/customtrackview.h index 5503ea55..eba626a5 100644 --- a/src/customtrackview.h +++ b/src/customtrackview.h @@ -370,6 +370,8 @@ private: QAction *m_ungroupAction; QAction *m_editGuide; QAction *m_deleteGuide; + QList m_audioActions; + QList m_avActions; QActionGroup *m_clipTypeGroup; QTimer m_scrollTimer; QTimer m_thumbsTimer; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 1cd2f9a0..24933c2d 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1514,14 +1514,20 @@ void MainWindow::setupActions() KAction* splitAudio = new KAction(KIcon("document-new"), i18n("Split Audio"), this); collection.addAction("split_audio", splitAudio); + // "A+V" as data means this action should only be available for clips with audio AND video + splitAudio->setData("A+V"); connect(splitAudio, SIGNAL(triggered(bool)), this, SLOT(slotSplitAudio())); KAction* setAudioAlignReference = new KAction(i18n("Set Audio Reference"), this); collection.addAction("set_audio_align_ref", setAudioAlignReference); + // "A" as data means this action should only be available for clips with audio + setAudioAlignReference->setData("A"); connect(setAudioAlignReference, SIGNAL(triggered()), this, SLOT(slotSetAudioAlignReference())); KAction* alignAudio = new KAction(i18n("Align Audio to Reference"), this); collection.addAction("align_audio", alignAudio); + // "A" as data means this action should only be available for clips with audio + alignAudio->setData("A"); connect(alignAudio, SIGNAL(triggered()), this, SLOT(slotAlignAudio())); KAction* audioOnly = new KAction(KIcon("document-new"), i18n("Audio Only"), this); -- 2.39.2