]> git.sesse.net Git - kdenlive/commitdiff
Add option to automatically split audio when adding a clip to timeline (based on...
authorTill Theato <root@ttill.de>
Sun, 30 May 2010 13:50:26 +0000 (13:50 +0000)
committerTill Theato <root@ttill.de>
Sun, 30 May 2010 13:50:26 +0000 (13:50 +0000)
svn path=/trunk/kdenlive/; revision=4489

icons/hi16-action-kdenlive-split-audio.png [new file with mode: 0644]
icons/ox16-action-kdenlive-split-audio.png [new file with mode: 0644]
src/customtrackview.cpp
src/customtrackview.h
src/kdenlivesettings.kcfg
src/mainwindow.cpp
src/mainwindow.h
src/widgets/configmisc_ui.ui

diff --git a/icons/hi16-action-kdenlive-split-audio.png b/icons/hi16-action-kdenlive-split-audio.png
new file mode 100644 (file)
index 0000000..157e5f5
Binary files /dev/null and b/icons/hi16-action-kdenlive-split-audio.png differ
diff --git a/icons/ox16-action-kdenlive-split-audio.png b/icons/ox16-action-kdenlive-split-audio.png
new file mode 100644 (file)
index 0000000..157e5f5
Binary files /dev/null and b/icons/ox16-action-kdenlive-split-audio.png differ
index 12ee3323ea076e6987b2a44396140fabaff9a0e5..3ada9543f49d948cb1a525f29135c588a7ec73cb 100644 (file)
@@ -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<QGraphicsItem *> 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<QGraphicsItem *> 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()
index 3ecd55ed12ba7800a78a4649343e704b7810adf5..519376c75ea1f1d9c8b1a1064fa0f67e46370b12 100644 (file)
@@ -141,7 +141,12 @@ public:
     int selectedTrack() const;
     QStringList selectedClips() const;
     QList<ClipItem *> 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);
index 4fdd18a2fe5319e8da916c3e3cc31ccc6f9ca1a6..7fadebf35cc1ae5c73a54d1f718ff6e8593ad669 100644 (file)
       <label>active project format.</label>
       <default></default>
     </entry>
+    
+    <entry name="splitaudio" type="Bool">
+      <label>Automatically split audio and video.</label>
+      <default>false</default>
+    </entry>
   </group>
 
   <group name="display">
index 532a481d76aa02455472db77734562b37437cca2..28eeca5c08ab8a6bc4c6fc47230ff0bc5f39ff05 100644 (file)
@@ -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()
 {
index 9451809ef8139a9d33134409e6cb97d2476106b6..9704fea3152bdbf1ac6e51016e8b281a0e3c2bfe 100644 (file)
@@ -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();
index 6374dbf59ba43ff5811de41fa0c6f0e0342d2eec..9476c69215c7631a7153e1eacb2038a14965416f 100644 (file)
@@ -32,7 +32,7 @@
      </property>
     </widget>
    </item>
-   <item row="4" column="0" colspan="6">
+   <item row="5" column="0" colspan="6">
     <widget class="QGroupBox" name="groupBox">
      <property name="title">
       <string>Default Durations</string>
@@ -83,7 +83,7 @@
      </layout>
     </widget>
    </item>
-   <item row="5" column="0" colspan="6">
+   <item row="6" column="0" colspan="6">
     <widget class="QGroupBox" name="properties">
      <property name="title">
       <string>Default Profile</string>
      </layout>
     </widget>
    </item>
-   <item row="6" column="0">
+   <item row="7" column="0">
     <widget class="QLabel" name="label_6">
      <property name="text">
       <string>Video tracks</string>
      </property>
     </widget>
    </item>
-   <item row="6" column="2">
+   <item row="7" column="2">
     <spacer name="horizontalSpacer">
      <property name="orientation">
       <enum>Qt::Horizontal</enum>
      </property>
     </spacer>
    </item>
-   <item row="6" column="3">
+   <item row="7" column="3">
     <widget class="QLabel" name="label_7">
      <property name="text">
       <string>Audio tracks</string>
      </property>
     </widget>
    </item>
-   <item row="7" column="0" colspan="6">
+   <item row="8" column="0" colspan="6">
     <spacer>
      <property name="orientation">
       <enum>Qt::Vertical</enum>
      </property>
     </spacer>
    </item>
-   <item row="6" column="1">
+   <item row="7" column="1">
     <widget class="KIntSpinBox" name="kcfg_videotracks"/>
    </item>
-   <item row="6" column="4">
+   <item row="7" column="4">
     <widget class="KIntSpinBox" name="kcfg_audiotracks"/>
    </item>
    <item row="3" column="0" colspan="5">
      </property>
     </widget>
    </item>
+   <item row="4" column="0" colspan="5">
+    <widget class="QCheckBox" name="kcfg_splitaudio">
+     <property name="text">
+      <string>Automatically split audio from video</string>
+     </property>
+    </widget>
+   </item>
   </layout>
  </widget>
  <customwidgets>