]> git.sesse.net Git - kdenlive/blobdiff - src/mainwindow.cpp
initial support for clip grouping (still a bit buggy)
[kdenlive] / src / mainwindow.cpp
index 85f5b8857691c1904bdf74e4bc443ae2fe6ddf7b..a7dff06f492e15789e80f139054a01466f0bdb6e 100644 (file)
@@ -49,6 +49,7 @@
 #include "markerdialog.h"
 #include "clipitem.h"
 #include "interfaces.h"
+#include "kdenlive-config.h"
 
 #include <KApplication>
 #include <KAction>
@@ -85,6 +86,8 @@
 
 #include <stdlib.h>
 
+static const char version[] = VERSION;
+
 static const int ID_STATUS_MSG = 1;
 static const int ID_EDITMODE_MSG = 2;
 static const int ID_TIMELINE_MSG = 3;
@@ -319,6 +322,8 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, QWidget *parent
 
     m_timelineContextClipMenu->addAction(actionCollection()->action("delete_timeline_clip"));
     m_timelineContextClipMenu->addAction(actionCollection()->action("change_clip_speed"));
+    m_timelineContextClipMenu->addAction(actionCollection()->action("group_clip"));
+    m_timelineContextClipMenu->addAction(actionCollection()->action("ungroup_clip"));
     m_timelineContextClipMenu->addAction(actionCollection()->action("cut_timeline_clip"));
     m_timelineContextClipMenu->addAction(actionCollection()->action(KStandardAction::name(KStandardAction::Copy)));
     m_timelineContextClipMenu->addAction(actionCollection()->action("paste_effects"));
@@ -898,6 +903,15 @@ void MainWindow::setupActions() {
     stickTransition->setText(i18n("Automatic Transition"));
     connect(stickTransition, SIGNAL(triggered(bool)), this, SLOT(slotAutoTransition()));
 
+    KAction* groupClip = new KAction(KIcon("object-group"), i18n("Group Clips"), this);
+    collection->addAction("group_clip", groupClip);
+    connect(groupClip, SIGNAL(triggered(bool)), this, SLOT(slotGroupClips()));
+
+    KAction* ungroupClip = new KAction(KIcon("object-ungroup"), i18n("Ungroup Clips"), this);
+    collection->addAction("ungroup_clip", ungroupClip);
+    ungroupClip->setData("ungroup_clip");
+    connect(ungroupClip, SIGNAL(triggered(bool)), this, SLOT(slotUnGroupClips()));
+
     KAction* cutTimelineClip = new KAction(KIcon("edit-cut"), i18n("Cut Clip"), this);
     cutTimelineClip->setShortcut(Qt::SHIFT + Qt::Key_R);
     collection->addAction("cut_timeline_clip", cutTimelineClip);
@@ -1072,23 +1086,32 @@ void MainWindow::readOptions() {
     KSharedConfigPtr config = KGlobal::config();
     m_fileOpenRecent->loadEntries(KConfigGroup(config, "Recent Files"));
     KConfigGroup initialGroup(config, "version");
-    if (!initialGroup.exists()) {
+    bool upgrade = false;
+    if (initialGroup.exists()) {
+        if (initialGroup.readEntry("version", QString()).section(' ', 0, 0) != QString(version).section(' ', 0, 0))
+            upgrade = true;
+
+        if (initialGroup.readEntry("version") == "0.7") {
+            //Add new settings from 0.7.1
+            if (KdenliveSettings::defaultprojectfolder().isEmpty()) {
+                QString path = QDir::homePath() + "/kdenlive";
+                if (KStandardDirs::makeDir(path)  == false) kDebug() << "/// ERROR CREATING PROJECT FOLDER: " << path;
+                KdenliveSettings::setDefaultprojectfolder(path);
+            }
+        }
+
+    }
+
+    if (!initialGroup.exists() || upgrade) {
         // this is our first run, show Wizard
-        Wizard *w = new Wizard(this);
+        Wizard *w = new Wizard(upgrade, this);
         if (w->exec() == QDialog::Accepted && w->isOk()) {
             w->adjustSettings();
-            initialGroup.writeEntry("version", "0.7");
+            initialGroup.writeEntry("version", version);
             delete w;
         } else {
             ::exit(1);
         }
-    } else if (initialGroup.readEntry("version") == "0.7") {
-        //Add new settings from 0.7.1
-        if (KdenliveSettings::defaultprojectfolder().isEmpty()) {
-            QString path = QDir::homePath() + "/kdenlive";
-            if (KStandardDirs::makeDir(path)  == false) kDebug() << "/// ERROR CREATING PROJECT FOLDER: " << path;
-            KdenliveSettings::setDefaultprojectfolder(path);
-        }
     }
     KConfigGroup treecolumns(config, "Project Tree");
     const QByteArray state = treecolumns.readEntry("columns", QByteArray());
@@ -1448,8 +1471,8 @@ void MainWindow::slotRenderProject() {
 void MainWindow::slotDoRender(const QString &dest, const QString &render, const QStringList &overlay_args, const QStringList &avformat_args, bool zoneOnly, bool playAfter, double guideStart, double guideEnd, bool resizeProfile, const QString &scriptExport) {
     kDebug() << "// SCRIPT EXPORT: " << scriptExport;
     if (dest.isEmpty()) return;
-    int in;
-    int out;
+    int in = 0;
+    int out = 0;
     TrackView *currentTab = (TrackView *) m_timelineArea->currentWidget();
     if (currentTab && zoneOnly) {
         in = currentTab->inPoint();
@@ -1728,6 +1751,7 @@ void MainWindow::slotPreferences(int page, int option) {
     connect(dialog, SIGNAL(settingsChanged(const QString&)), this, SLOT(updateConfiguration()));
     connect(dialog, SIGNAL(doResetProfile()), m_monitorManager, SLOT(slotResetProfiles()));
     connect(dialog, SIGNAL(updatePreviewSettings()), this, SLOT(slotUpdatePreviewSettings()));
+    connect(dialog, SIGNAL(updateCaptureFolder()), m_recMonitor, SLOT(slotUpdateCaptureFolder()));
     //connect(dialog, SIGNAL(updatePreviewSettings()), this, SLOT(slotUpdatePreviewSettings()));
     dialog->show();
     if (page != -1) dialog->showPage(page, option);
@@ -1974,6 +1998,18 @@ void MainWindow::slotCutTimelineClip() {
     }
 }
 
+void MainWindow::slotGroupClips() {
+    if (m_activeTimeline) {
+        m_activeTimeline->projectView()->groupClips();
+    }
+}
+
+void MainWindow::slotUnGroupClips() {
+    if (m_activeTimeline) {
+        m_activeTimeline->projectView()->groupClips(false);
+    }
+}
+
 void MainWindow::slotAddProjectClip(KUrl url) {
     if (m_activeDocument)
         m_activeDocument->slotAddClipFile(url, QString());
@@ -2219,7 +2255,7 @@ void MainWindow::keyPressEvent(QKeyEvent *ke) {
 
 
 /** Gets called when the window gets hidden */
-void MainWindow::hideEvent(QHideEvent *event) {
+void MainWindow::hideEvent(QHideEvent */*event*/) {
     // kDebug() << "I was hidden";
     // issue http://www.kdenlive.org/mantis/view.php?id=231
     if (this->isMinimized()) {
@@ -2282,7 +2318,6 @@ void MainWindow::slotSetOutPoint() {
 void MainWindow::slotGetNewLumaStuff() {
     //KNS::Entry::List download();
     KNS::Entry::List entries = KNS::Engine::download();
-    int numberInstalled = 0;
     // list of changed entries
     kDebug() << "// PARSING KNS";
     foreach(KNS::Entry* entry, entries) {