]> git.sesse.net Git - kdenlive/commitdiff
Captured files should go to project folder if wanted:
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 22 Sep 2010 16:51:32 +0000 (16:51 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 22 Sep 2010 16:51:32 +0000 (16:51 +0000)
http://kdenlive.org/mantis/view.php?id=620

svn path=/trunk/kdenlive/; revision=4924

src/kdenlivesettings.kcfg
src/kdenlivesettingsdialog.cpp
src/kdenlivesettingsdialog.h
src/mainwindow.cpp
src/mainwindow.h
src/recmonitor.cpp
src/recmonitor.h
src/widgets/configenv_ui.ui

index 80a37af27f1fd9d43a0647c2ce5d114453a58319..f2ceeb6bdbaad92f6c7f10a44c31a2775594e0cc 100644 (file)
       <default>$HOME/kdenlive</default>
     </entry>
 
+    <entry name="capturetoprojectfolder" type="Bool">
+      <label>Save captured files to project folder by default.</label>
+      <default>true</default>
+    </entry>
+
     <entry name="capturefolder" type="Path">
       <label>Default folder for captured files.</label>
       <default>$HOME</default>
index 9ddc792d196a3c100fa7445a63a404ec70a062c7..31ec0d9ee762b13f20076bb4d5ff059054044f8d 100644 (file)
@@ -43,8 +43,8 @@
 
 
 KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent) :
-        KConfigDialog(parent, "settings", KdenliveSettings::self()),
-        m_modified(false)
+    KConfigDialog(parent, "settings", KdenliveSettings::self()),
+    m_modified(false)
 {
 
     QWidget *p1 = new QWidget;
@@ -73,6 +73,8 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent) :
     m_configEnv.projecturl->lineEdit()->setObjectName("kcfg_defaultprojectfolder");
     m_configEnv.capturefolderurl->setMode(KFile::Directory);
     m_configEnv.capturefolderurl->lineEdit()->setObjectName("kcfg_capturefolder");
+    m_configEnv.capturefolderurl->setEnabled(!KdenliveSettings::capturetoprojectfolder());
+    connect(m_configEnv.kcfg_capturetoprojectfolder, SIGNAL(clicked()), this, SLOT(slotEnableCaptureFolder()));
     m_page2 = addPage(p2, i18n("Environment"), "application-x-executable-script");
 
     QWidget *p4 = new QWidget;
@@ -199,6 +201,11 @@ void KdenliveSettingsDialog::slotUpdateRmdRegionStatus()
     m_configCapture.region_group->setHidden(m_configCapture.kcfg_rmd_capture_type->currentIndex() != 1);
 }
 
+void KdenliveSettingsDialog::slotEnableCaptureFolder()
+{
+    m_configEnv.capturefolderurl->setEnabled(!m_configEnv.kcfg_capturetoprojectfolder->isChecked());
+}
+
 void KdenliveSettingsDialog::checkProfile()
 {
     m_configProject.kcfg_profiles_list->clear();
@@ -305,7 +312,7 @@ void KdenliveSettingsDialog::slotReadAudioDevices()
     kDebug() << "// / / / / / READING APLAY: ";
     kDebug() << result;
     QStringList lines = result.split('\n');
-    foreach(const QString &data, lines) {
+    foreach(const QString & data, lines) {
         kDebug() << "// READING LINE: " << data;
         if (data.simplified().startsWith("card")) {
             QString card = data.section(':', 0, 0).section(' ', -1);
@@ -430,6 +437,11 @@ void KdenliveSettingsDialog::updateSettings()
     bool resetProfile = false;
     bool updateCapturePath = false;
 
+    if (m_configEnv.kcfg_capturetoprojectfolder->isChecked() != KdenliveSettings::capturetoprojectfolder()) {
+        KdenliveSettings::setCapturetoprojectfolder(m_configEnv.kcfg_capturetoprojectfolder->isChecked());
+        updateCapturePath = true;
+    }
+
     if (m_configEnv.capturefolderurl->url().path() != KdenliveSettings::capturefolder()) {
         KdenliveSettings::setCapturefolder(m_configEnv.capturefolderurl->url().path());
         updateCapturePath = true;
index b41e691dcb0e8d23bd31a3ad8bb75a9c36ba5928..8b6edb63d712cf269844d91615c8fcc6365c04a0 100644 (file)
@@ -65,6 +65,7 @@ private slots:
     void slotAddTranscode();
     void slotDeleteTranscode();
     void slotDialogModified();
+    void slotEnableCaptureFolder();
 
 private:
     KPageWidgetItem *m_page1;
index 0b8022d399d00ab6d13edb6c7eed24b8b895550c..57d374d4577d5aa07f528792a003e59fc3d8b13d 100644 (file)
@@ -2082,7 +2082,8 @@ void MainWindow::slotEditProjectSettings()
     if (w->exec() == QDialog::Accepted) {
         QString profile = w->selectedProfile();
         m_activeDocument->setProjectFolder(w->selectedFolder());
-        if (m_renderWidget) m_renderWidget->setDocumentPath(w->selectedFolder().path(KUrl::AddTrailingSlash));
+        m_recMonitor->slotUpdateCaptureFolder(m_activeDocument->projectFolder().path(KUrl::AddTrailingSlash));
+        if (m_renderWidget) m_renderWidget->setDocumentPath(m_activeDocument->projectFolder().path(KUrl::AddTrailingSlash));
         if (KdenliveSettings::videothumbnails() != w->enableVideoThumbs()) slotSwitchVideoThumbs();
         if (KdenliveSettings::audiothumbnails() != w->enableAudioThumbs()) slotSwitchAudioThumbs();
         if (m_activeDocument->profilePath() != profile) slotUpdateProjectProfile(profile);
@@ -2373,6 +2374,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc)   //cha
     m_activeDocument = doc;
     m_activeTimeline->updateProjectFps();
     m_activeDocument->checkProjectClips();
+    m_recMonitor->slotUpdateCaptureFolder(m_activeDocument->projectFolder().path(KUrl::AddTrailingSlash));
     if (KdenliveSettings::dropbframes()) slotUpdatePreviewSettings();
     //Update the mouse position display so it will display in DF/NDF format by default based on the project setting.
     slotUpdateMousePosition(0);
@@ -2419,13 +2421,19 @@ void MainWindow::slotPreferences(int page, int option)
     connect(dialog, SIGNAL(doResetProfile()), m_monitorManager, SLOT(slotResetProfiles()));
     connect(dialog, SIGNAL(updatePreviewSettings()), this, SLOT(slotUpdatePreviewSettings()));
 #ifndef Q_WS_MAC
-    connect(dialog, SIGNAL(updateCaptureFolder()), m_recMonitor, SLOT(slotUpdateCaptureFolder()));
+    connect(dialog, SIGNAL(updateCaptureFolder()), this, SLOT(slotUpdateCaptureFolder()));
 #endif
     //connect(dialog, SIGNAL(updatePreviewSettings()), this, SLOT(slotUpdatePreviewSettings()));
     dialog->show();
     if (page != -1) dialog->showPage(page, option);
 }
 
+void MainWindow::slotUpdateCaptureFolder()
+{
+    if (m_activeDocument) m_recMonitor->slotUpdateCaptureFolder(m_activeDocument->projectFolder().path(KUrl::AddTrailingSlash));
+    else m_recMonitor->slotUpdateCaptureFolder(KdenliveSettings::defaultprojectfolder());
+}
+
 void MainWindow::slotUpdatePreviewSettings()
 {
     if (m_activeDocument) {
@@ -3313,8 +3321,7 @@ void MainWindow::slotSaveZone(Render *render, QPoint zone)
 
     QVBoxLayout *vbox = new QVBoxLayout(widget);
     QLabel *label1 = new QLabel(i18n("Save clip zone as:"), this);
-    QString path = m_activeDocument->projectFolder().path();
-    path.append("/");
+    QString path = m_activeDocument->projectFolder().path(KUrl::AddTrailingSlash);
     path.append("untitled.mlt");
     KUrlRequester *url = new KUrlRequester(KUrl(path), this);
     url->setFilter("video/mlt-playlist");
@@ -3543,7 +3550,7 @@ void MainWindow::slotPrepareRendering(bool scriptExport, bool zoneOnly, const QS
     QString playlistPath;
     if (scriptExport) {
         bool ok;
-        QString scriptsFolder = m_activeDocument->projectFolder().path() + "/scripts/";
+        QString scriptsFolder = m_activeDocument->projectFolder().path(KUrl::AddTrailingSlash) + "scripts/";
         QString path = m_renderWidget->getFreeScriptName();
         scriptPath = QInputDialog::getText(this, i18n("Create Render Script"), i18n("Script name (will be saved in: %1)", scriptsFolder), QLineEdit::Normal, KUrl(path).fileName(), &ok);
         if (!ok || scriptPath.isEmpty()) return;
@@ -3834,7 +3841,7 @@ void MainWindow::slotShowTitleBars(bool show)
         if (!m_histogramDock->isFloating()) {
             m_histogramDock->setTitleBarWidget(new QWidget(this));
         }
-        if(!m_notesDock->isFloating()) {
+        if (!m_notesDock->isFloating()) {
             m_notesDock->setTitleBarWidget(new QWidget(this));
         }
     }
index 5d723fa5429db1f4e088f3ad60feb69adc2e1a6a..c27f7deeda080619b2f77d02ea0b6969fc903962 100644 (file)
@@ -475,6 +475,8 @@ private slots:
     void slotDeleteProjectClips(QStringList ids, QMap<QString, QString> folderids);
     void slotShowTitleBars(bool show);
     void slotSwitchTitles();
+    /** @brief Update the capture folder if user asked a change. */
+    void slotUpdateCaptureFolder();
 
     /** @brief Saves the widgets layout */
     void slotSaveLayout(QAction*);
index 6542c5fb938074aca591f6435a411555e3fef9e7..24cdd8119e3a969c7b18cf4d9ee2df40c8a014e7 100644 (file)
 
 
 RecMonitor::RecMonitor(QString name, QWidget *parent) :
-        QWidget(parent),
-        m_name(name),
-        m_isActive(false),
-        m_isCapturing(false),
-        m_didCapture(false),
-        m_isPlaying(false)
+    QWidget(parent),
+    m_name(name),
+    m_isActive(false),
+    m_isCapturing(false),
+    m_didCapture(false),
+    m_isPlaying(false)
 {
     setupUi(this);
 
@@ -160,15 +160,16 @@ void RecMonitor::slotConfigure()
     emit showConfigDialog(4, device_selector->currentIndex());
 }
 
-void RecMonitor::slotUpdateCaptureFolder()
+void RecMonitor::slotUpdateCaptureFolder(const QString currentProjectFolder)
 {
-    if (m_captureProcess) m_captureProcess->setWorkingDirectory(KdenliveSettings::capturefolder());
+    if (KdenliveSettings::capturetoprojectfolder()) m_capturePath = currentProjectFolder;
+    else m_capturePath = KdenliveSettings::capturefolder();
+    if (m_captureProcess) m_captureProcess->setWorkingDirectory(m_capturePath);
     if (m_captureProcess->state() != QProcess::NotRunning) {
         if (device_selector->currentIndex() == FIREWIRE)
             KMessageBox::information(this, i18n("You need to disconnect and reconnect in the capture monitor to apply your changes"), i18n("Capturing"));
         else KMessageBox::information(this, i18n("You need to stop capture before your changes can be applied"), i18n("Capturing"));
     } else slotVideoDeviceChanged(device_selector->currentIndex());
-    kDebug() << "// UPDATE CAPT FOLD: " << KdenliveSettings::capturefolder();
 
 #if KDE_IS_VERSION(4,2,0)
     // update free space info
@@ -191,7 +192,7 @@ void RecMonitor::slotVideoDeviceChanged(int ix)
             if (rmdpath.isEmpty()) video_frame->setPixmap(mergeSideBySide(KIcon("dialog-warning").pixmap(QSize(50, 50)), i18n("Recordmydesktop utility not found,\n please install it for screen grabs")));
             else KdenliveSettings::setRmd_path(rmdpath);
         }
-        if (!KdenliveSettings::rmd_path().isEmpty()) video_frame->setPixmap(mergeSideBySide(KIcon("video-display").pixmap(QSize(50, 50)), i18n("Press record button\nto start screen capture\nFiles will be saved in:\n%1", KdenliveSettings::capturefolder())));
+        if (!KdenliveSettings::rmd_path().isEmpty()) video_frame->setPixmap(mergeSideBySide(KIcon("video-display").pixmap(QSize(50, 50)), i18n("Press record button\nto start screen capture\nFiles will be saved in:\n%1", m_capturePath)));
         //video_frame->setText(i18n("Press record button\nto start screen capture"));
         break;
     case VIDEO4LINUX:
@@ -218,7 +219,7 @@ void RecMonitor::slotVideoDeviceChanged(int ix)
             else KdenliveSettings::setDvgrab_path(dvgrabpath);
         } else {
             // Show capture info
-            QString capturefile = KdenliveSettings::capturefolder();
+            QString capturefile = m_capturePath;
             if (!capturefile.endsWith("/")) capturefile.append("/");
             QString capturename = KdenliveSettings::dvgrabfilename();
             if (capturename.isEmpty()) capturename = "capture";
@@ -270,7 +271,7 @@ void RecMonitor::checkDeviceAvailability()
         video_frame->setPixmap(mergeSideBySide(KIcon("camera-web").pixmap(QSize(50, 50)), i18n("Cannot read from device %1\nPlease check drivers and access rights.", KdenliveSettings::video4vdevice())));
         //video_frame->setText(i18n("Cannot read from device %1\nPlease check drivers and access rights.", KdenliveSettings::video4vdevice()));
     } else //video_frame->setText(i18n("Press play or record button\nto start video capture"));
-        video_frame->setPixmap(mergeSideBySide(KIcon("camera-web").pixmap(QSize(50, 50)), i18n("Press play or record button\nto start video capture\nFiles will be saved in:\n%1", KdenliveSettings::capturefolder())));
+        video_frame->setPixmap(mergeSideBySide(KIcon("camera-web").pixmap(QSize(50, 50)), i18n("Press play or record button\nto start video capture\nFiles will be saved in:\n%1", m_capturePath)));
 }
 
 void RecMonitor::slotDisconnect()
@@ -383,7 +384,7 @@ void RecMonitor::slotStartCapture(bool play)
         m_displayArgs << "-x" << QString::number(video_frame->width()) << "-y" << QString::number(video_frame->height()) << "-";
 
         m_captureProcess->setStandardOutputProcess(m_displayProcess);
-        m_captureProcess->setWorkingDirectory(KdenliveSettings::capturefolder());
+        m_captureProcess->setWorkingDirectory(m_capturePath);
         kDebug() << "Capture: Running dvgrab " << m_captureArgs.join(" ");
 
         m_captureProcess->start(KdenliveSettings::dvgrab_path(), m_captureArgs);
@@ -453,11 +454,11 @@ void RecMonitor::slotRecord()
         QString extension = "mp4";
         if (device_selector->currentIndex() == SCREENGRAB) extension = "ogv"; //KdenliveSettings::screengrabextension();
         else if (device_selector->currentIndex() == VIDEO4LINUX) extension = KdenliveSettings::video4extension();
-        QString path = KdenliveSettings::capturefolder() + "/capture0000." + extension;
+        QString path = m_capturePath + "/capture0000." + extension;
         int i = 1;
         while (QFile::exists(path)) {
             QString num = QString::number(i).rightJustified(4, '0', false);
-            path = KdenliveSettings::capturefolder() + "/capture" + num + '.' + extension;
+            path = m_capturePath + "/capture" + num + '.' + extension;
             i++;
         }
         m_captureFile = KUrl(path);
@@ -597,7 +598,7 @@ void RecMonitor::slotProcessStatus(QProcess::ProcessState status)
                 if (m_captureProcess->exitCode() != 0) {
                     video_frame->setText(i18n("Capture crashed, please check your parameters\nRecordMyDesktop exit code: %1", QString::number(m_captureProcess->exitCode())));
                 } else {
-                    video_frame->setPixmap(mergeSideBySide(KIcon("video-display").pixmap(QSize(50, 50)), i18n("Press record button\nto start screen capture\nFiles will be saved in:\n%1", KdenliveSettings::capturefolder())));
+                    video_frame->setPixmap(mergeSideBySide(KIcon("video-display").pixmap(QSize(50, 50)), i18n("Press record button\nto start screen capture\nFiles will be saved in:\n%1", m_capturePath)));
                 }
             }
         }
@@ -630,14 +631,14 @@ void RecMonitor::manageCapturedFiles()
         extension = ".m2t";
         break;
     }
-    QDir dir(KdenliveSettings::capturefolder());
+    QDir dir(m_capturePath);
     QStringList filters;
     QString capturename = KdenliveSettings::dvgrabfilename();
     if (capturename.isEmpty()) capturename = "capture";
     filters << capturename + "*" + extension;
     const QStringList result = dir.entryList(filters, QDir::Files, QDir::Time);
     KUrl::List capturedFiles;
-    foreach(const QString &name, result) {
+    foreach(const QString & name, result) {
         KUrl url = KUrl(dir.filePath(name));
         if (KIO::NetAccess::exists(url, KIO::NetAccess::SourceSide, this)) {
             KFileItem file(KFileItem::Unknown, KFileItem::Unknown, url, true);
@@ -651,7 +652,7 @@ void RecMonitor::manageCapturedFiles()
         ManageCapturesDialog *d = new ManageCapturesDialog(capturedFiles, this);
         if (d->exec() == QDialog::Accepted) {
             capturedFiles = d->importFiles();
-            foreach(const KUrl &url, capturedFiles) {
+            foreach(const KUrl & url, capturedFiles) {
                 emit addProjectClip(url);
             }
         }
@@ -670,7 +671,7 @@ void RecMonitor::mousePressEvent(QMouseEvent * /*event*/)
 void RecMonitor::slotUpdateFreeSpace()
 {
 #if KDE_IS_VERSION(4,2,0)
-    KDiskFreeSpaceInfo info = KDiskFreeSpaceInfo::freeSpaceInfo(KdenliveSettings::capturefolder());
+    KDiskFreeSpaceInfo info = KDiskFreeSpaceInfo::freeSpaceInfo(m_capturePath);
     if (info.isValid()) {
         m_freeSpace->setValue(100 * info.used() / info.size());
         m_freeSpace->setText(i18n("Free space: %1", KIO::convertSize(info.available())));
index 1ab5b6e49b356f984c9d883a124423049b38d2ba..ad41b0ca5f294a07c507d390b4c302e99f346fd7 100644 (file)
@@ -63,6 +63,7 @@ private:
     bool m_isActive;
     KDateTime m_captureTime;
     QLabel m_dvinfo;
+    QString m_capturePath;
 
 #if KDE_IS_VERSION(4,2,0)
     KCapacityBar *m_freeSpace;
@@ -111,7 +112,7 @@ public slots:
     void start();
     void activateRecMonitor();
     void slotPlay();
-    void slotUpdateCaptureFolder();
+    void slotUpdateCaptureFolder(const QString currentProjectFolder);
 
 signals:
     void renderPosition(int);
index 2b448004f7625bb14b0fabae2829a668bf61f878..b582b06c01ddeec694a0b451340941320b3476e3 100644 (file)
@@ -1,58 +1,59 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>ConfigEnv_UI</class>
- <widget class="QWidget" name="ConfigEnv_UI" >
-  <property name="geometry" >
+ <widget class="QWidget" name="ConfigEnv_UI">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>365</width>
-    <height>240</height>
+    <width>380</width>
+    <height>225</height>
    </rect>
   </property>
-  <layout class="QGridLayout" name="gridLayout" >
-   <item row="0" column="0" >
-    <widget class="QCheckBox" name="kcfg_activate_nepomuk" >
-     <property name="text" >
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <widget class="QCheckBox" name="kcfg_activate_nepomuk">
+     <property name="text">
       <string>Desktop search integration</string>
      </property>
     </widget>
    </item>
-   <item row="1" column="0" >
-    <widget class="QTabWidget" name="tabWidget" >
-     <property name="currentIndex" >
+   <item row="1" column="0">
+    <widget class="QTabWidget" name="tabWidget">
+     <property name="currentIndex">
       <number>0</number>
      </property>
-     <widget class="QWidget" name="tab" >
-      <attribute name="title" >
+     <widget class="QWidget" name="tab">
+      <attribute name="title">
        <string>MLT environment</string>
       </attribute>
-      <layout class="QGridLayout" name="gridLayout_4" >
-       <item row="0" column="0" >
-        <widget class="QLabel" name="label" >
-         <property name="text" >
+      <layout class="QGridLayout" name="gridLayout_4">
+       <item row="0" column="0">
+        <widget class="QLabel" name="label">
+         <property name="text">
           <string>MLT profiles folder</string>
          </property>
         </widget>
        </item>
-       <item row="0" column="1" >
-        <widget class="KUrlRequester" name="mltpathurl" />
+       <item row="0" column="1">
+        <widget class="KUrlRequester" name="mltpathurl"/>
        </item>
-       <item row="1" column="0" >
-        <widget class="QLabel" name="label_2" >
-         <property name="text" >
+       <item row="1" column="0">
+        <widget class="QLabel" name="label_2">
+         <property name="text">
           <string>Melt path</string>
          </property>
         </widget>
        </item>
-       <item row="1" column="1" >
-        <widget class="KUrlRequester" name="rendererpathurl" />
+       <item row="1" column="1">
+        <widget class="KUrlRequester" name="rendererpathurl"/>
        </item>
-       <item row="2" column="1" >
-        <spacer name="verticalSpacer_2" >
-         <property name="orientation" >
+       <item row="2" column="1">
+        <spacer name="verticalSpacer_2">
+         <property name="orientation">
           <enum>Qt::Vertical</enum>
          </property>
-         <property name="sizeHint" stdset="0" >
+         <property name="sizeHint" stdset="0">
           <size>
            <width>20</width>
            <height>40</height>
        </item>
       </layout>
      </widget>
-     <widget class="QWidget" name="tab_2" >
-      <attribute name="title" >
+     <widget class="QWidget" name="tab_2">
+      <attribute name="title">
        <string>Default folders</string>
       </attribute>
-      <layout class="QGridLayout" name="gridLayout_2" >
-       <item row="0" column="0" >
-        <widget class="QLabel" name="label_5" >
-         <property name="text" >
+      <layout class="QGridLayout" name="gridLayout_2">
+       <item row="0" column="0">
+        <widget class="QLabel" name="label_5">
+         <property name="text">
           <string>Project folder</string>
          </property>
         </widget>
        </item>
-       <item row="0" column="1" >
-        <widget class="KUrlRequester" name="projecturl" />
+       <item row="0" column="1" colspan="2">
+        <widget class="KUrlRequester" name="projecturl"/>
        </item>
-       <item row="1" column="0" >
-        <widget class="QLabel" name="label_3" >
-         <property name="text" >
+       <item row="1" column="0">
+        <widget class="QLabel" name="label_3">
+         <property name="text">
           <string>Temporary files</string>
          </property>
         </widget>
        </item>
-       <item row="1" column="1" >
-        <widget class="KUrlRequester" name="tmppathurl" />
+       <item row="1" column="1" colspan="2">
+        <widget class="KUrlRequester" name="tmppathurl"/>
        </item>
-       <item row="2" column="0" >
-        <widget class="QLabel" name="label_10" >
-         <property name="text" >
+       <item row="2" column="0">
+        <widget class="QLabel" name="label_10">
+         <property name="text">
           <string>Capture folder</string>
          </property>
         </widget>
        </item>
-       <item row="2" column="1" >
-        <widget class="KUrlRequester" name="capturefolderurl" />
-       </item>
-       <item row="3" column="1" >
-        <spacer name="verticalSpacer_3" >
-         <property name="orientation" >
+       <item row="4" column="2">
+        <spacer name="verticalSpacer_3">
+         <property name="orientation">
           <enum>Qt::Vertical</enum>
          </property>
-         <property name="sizeHint" stdset="0" >
+         <property name="sizeHint" stdset="0">
           <size>
            <width>20</width>
            <height>40</height>
          </property>
         </spacer>
        </item>
+       <item row="2" column="1" colspan="2">
+        <widget class="QCheckBox" name="kcfg_capturetoprojectfolder">
+         <property name="text">
+          <string>Use project folder</string>
+         </property>
+        </widget>
+       </item>
+       <item row="3" column="1" colspan="2">
+        <widget class="KUrlRequester" name="capturefolderurl"/>
+       </item>
       </layout>
      </widget>
-     <widget class="QWidget" name="tab_3" >
-      <attribute name="title" >
+     <widget class="QWidget" name="tab_3">
+      <attribute name="title">
        <string>Default apps</string>
       </attribute>
-      <layout class="QGridLayout" name="gridLayout_6" >
-       <item row="0" column="0" >
-        <widget class="QLabel" name="label_4" >
-         <property name="text" >
+      <layout class="QGridLayout" name="gridLayout_6">
+       <item row="0" column="0">
+        <widget class="QLabel" name="label_4">
+         <property name="text">
           <string>Image editing</string>
          </property>
         </widget>
        </item>
-       <item row="0" column="1" >
-        <widget class="KLineEdit" name="kcfg_defaultimageapp" >
-         <property name="showClearButton" stdset="0" >
+       <item row="0" column="1">
+        <widget class="KLineEdit" name="kcfg_defaultimageapp">
+         <property name="showClearButton" stdset="0">
           <bool>true</bool>
          </property>
         </widget>
        </item>
-       <item row="0" column="2" >
-        <widget class="KPushButton" name="kp_image" >
-         <property name="text" >
+       <item row="0" column="2">
+        <widget class="KPushButton" name="kp_image">
+         <property name="text">
           <string>Change</string>
          </property>
         </widget>
        </item>
-       <item row="1" column="0" >
-        <widget class="QLabel" name="label_11" >
-         <property name="text" >
+       <item row="1" column="0">
+        <widget class="QLabel" name="label_11">
+         <property name="text">
           <string>Audio editing</string>
          </property>
         </widget>
        </item>
-       <item row="1" column="1" >
-        <widget class="KLineEdit" name="kcfg_defaultaudioapp" >
-         <property name="showClearButton" stdset="0" >
+       <item row="1" column="1">
+        <widget class="KLineEdit" name="kcfg_defaultaudioapp">
+         <property name="showClearButton" stdset="0">
           <bool>true</bool>
          </property>
         </widget>
        </item>
-       <item row="1" column="2" >
-        <widget class="KPushButton" name="kp_audio" >
-         <property name="text" >
+       <item row="1" column="2">
+        <widget class="KPushButton" name="kp_audio">
+         <property name="text">
           <string>Change</string>
          </property>
         </widget>
        </item>
-       <item row="2" column="0" >
-        <widget class="QLabel" name="label_12" >
-         <property name="text" >
+       <item row="2" column="0">
+        <widget class="QLabel" name="label_12">
+         <property name="text">
           <string>Video player</string>
          </property>
         </widget>
        </item>
-       <item row="2" column="1" >
-        <widget class="KLineEdit" name="kcfg_defaultplayerapp" >
-         <property name="showClearButton" stdset="0" >
+       <item row="2" column="1">
+        <widget class="KLineEdit" name="kcfg_defaultplayerapp">
+         <property name="showClearButton" stdset="0">
           <bool>true</bool>
          </property>
         </widget>
        </item>
-       <item row="2" column="2" >
-        <widget class="KPushButton" name="kp_player" >
-         <property name="text" >
+       <item row="2" column="2">
+        <widget class="KPushButton" name="kp_player">
+         <property name="text">
           <string>Change</string>
          </property>
         </widget>
        </item>
-       <item row="3" column="1" >
-        <spacer name="verticalSpacer_4" >
-         <property name="orientation" >
+       <item row="3" column="1">
+        <spacer name="verticalSpacer_4">
+         <property name="orientation">
           <enum>Qt::Vertical</enum>
          </property>
-         <property name="sizeHint" stdset="0" >
+         <property name="sizeHint" stdset="0">
           <size>
            <width>20</width>
            <height>40</height>
  </widget>
  <customwidgets>
   <customwidget>
-   <class>KLineEdit</class>
-   <extends>QLineEdit</extends>
-   <header>klineedit.h</header>
+   <class>KUrlRequester</class>
+   <extends>QFrame</extends>
+   <header>kurlrequester.h</header>
   </customwidget>
   <customwidget>
    <class>KPushButton</class>
    <header>kpushbutton.h</header>
   </customwidget>
   <customwidget>
-   <class>KUrlRequester</class>
-   <extends>QFrame</extends>
-   <header>kurlrequester.h</header>
+   <class>KLineEdit</class>
+   <extends>QLineEdit</extends>
+   <header>klineedit.h</header>
   </customwidget>
  </customwidgets>
  <resources/>