]> git.sesse.net Git - kdenlive/commitdiff
Enable split audio and other audio actions only when a clip with audio is selected
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 16 Dec 2012 18:57:43 +0000 (19:57 +0100)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 16 Dec 2012 18:57:43 +0000 (19:57 +0100)
src/customtrackview.cpp
src/customtrackview.h
src/mainwindow.cpp

index 0bdb2a21ee5d94130b07ec9fa79bfa7262271fdd..dd7e178198f4532d9cdfb4046afd7daa4b72308f 100644 (file)
@@ -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 <QAction *> 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)
index 5503ea55fd4a685790cf13feb20301b3b3d27dd5..eba626a517ea858514977866eb63a395e410efd8 100644 (file)
@@ -370,6 +370,8 @@ private:
     QAction *m_ungroupAction;
     QAction *m_editGuide;
     QAction *m_deleteGuide;
+    QList <QAction*> m_audioActions;
+    QList <QAction*> m_avActions;
     QActionGroup *m_clipTypeGroup;
     QTimer m_scrollTimer;
     QTimer m_thumbsTimer;
index 1cd2f9a04fa5554f63ced29f948b6059814e77a3..24933c2d8cc84d4ed9ba75279854252fa10dc048 100644 (file)
@@ -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);