]> git.sesse.net Git - kdenlive/blobdiff - src/mainwindow.cpp
newstuff and templates for title
[kdenlive] / src / mainwindow.cpp
index 0ca4c23cc2adfa119e90ddc48ce5553c4e14ca55..4a1a0c670d46e5b628c5337125f13e86c3db3c7d 100644 (file)
 #include <KFileItem>
 #include <KNotification>
 #include <KNotifyConfigWidget>
+#if KDE_IS_VERSION(4,3,80)
+#include <knewstuff3/downloaddialog.h>
+#include <knewstuff3/knewstuffaction.h>
+#else
 #include <knewstuff2/engine.h>
 #include <knewstuff2/ui/knewstuffaction.h>
+#define KNS3 KNS
+#endif /* KDE_IS_VERSION(4,3,80) */
 #include <KToolBar>
 #include <KColorScheme>
 
@@ -421,6 +427,9 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, QWidget *parent
     m_monitorManager->initMonitors(m_clipMonitor, m_projectMonitor);
     slotConnectMonitors();
 
+    // Disable drop B frames, see Kdenlive issue #1330, see also kdenlivesettingsdialog.cpp
+    KdenliveSettings::setDropbframes(false);
+
     // Open or create a file.  Command line argument passed in Url has
     // precedence, then "openlastproject", then just a plain empty file.
     // If opening Url fails, openlastproject will _not_ be used.
@@ -696,6 +705,7 @@ void MainWindow::slotConnectMonitors()
 
     m_projectList->setRenderer(m_projectMonitor->render);
     //connect(m_projectList, SIGNAL(receivedClipDuration(const QString &)), this, SLOT(slotUpdateClip(const QString &)));
+    connect(m_projectList, SIGNAL(deleteProjectClips(QStringList, QMap<QString, QString>)), this, SLOT(slotDeleteProjectClips(QStringList, QMap<QString, QString>)));
     connect(m_projectList, SIGNAL(showClipProperties(DocClipBase *)), this, SLOT(slotShowClipProperties(DocClipBase *)));
     connect(m_projectList, SIGNAL(showClipProperties(QList <DocClipBase *>, QMap<QString, QString>)), this, SLOT(slotShowClipProperties(QList <DocClipBase *>, QMap<QString, QString>)));
     connect(m_projectList, SIGNAL(getFileProperties(const QDomElement, const QString &, int, bool)), m_projectMonitor->render, SLOT(getFileProperties(const QDomElement, const QString &, int, bool)));
@@ -940,11 +950,13 @@ void MainWindow::setupActions()
     collection->addAction("manage_profiles", profilesAction);
     connect(profilesAction, SIGNAL(triggered(bool)), this, SLOT(slotEditProfiles()));
 
-    KNS::standardAction(i18n("Download New Wipes..."), this, SLOT(slotGetNewLumaStuff()), actionCollection(), "get_new_lumas");
+    KNS3::standardAction(i18n("Download New Wipes..."), this, SLOT(slotGetNewLumaStuff()), actionCollection(), "get_new_lumas");
+
+    KNS3::standardAction(i18n("Download New Render Profiles..."), this, SLOT(slotGetNewRenderStuff()), actionCollection(), "get_new_profiles");
 
-    KNS::standardAction(i18n("Download New Render Profiles..."), this, SLOT(slotGetNewRenderStuff()), actionCollection(), "get_new_profiles");
+    KNS3::standardAction(i18n("Download New Project Profiles..."), this, SLOT(slotGetNewMltProfileStuff()), actionCollection(), "get_new_mlt_profiles");
 
-    KNS::standardAction(i18n("Download New Project Profiles..."), this, SLOT(slotGetNewMltProfileStuff()), actionCollection(), "get_new_mlt_profiles");
+    KNS3::standardAction(i18n("Download New Title Templates..."), this, SLOT(slotGetNewTitleStuff()), actionCollection(), "get_new_titles");
 
     KAction* wizAction = new KAction(KIcon("configure"), i18n("Run Config Wizard"), this);
     collection->addAction("run_wizard", wizAction);
@@ -1464,6 +1476,7 @@ void MainWindow::newFile(bool showProjectSettings, bool force)
         connectDocumentInfo(doc);
         connectDocument(trackView, doc);
     } else m_timelineArea->setTabBarHidden(false);
+    m_monitorManager->activateMonitor("clip");
     m_closeAction->setEnabled(m_timelineArea->count() > 1);
 }
 
@@ -2045,7 +2058,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc)   //cha
     connect(m_projectList, SIGNAL(displayMessage(const QString&, int)), this, SLOT(slotGotProgressInfo(const QString&, int)));
 
 
-    trackView->projectView()->setContextMenu(m_timelineContextMenu, m_timelineContextClipMenu, m_timelineContextTransitionMenu, m_clipTypeGroup);
+    trackView->projectView()->setContextMenu(m_timelineContextMenu, m_timelineContextClipMenu, m_timelineContextTransitionMenu, m_clipTypeGroup, (QMenu*)(factory()->container("marker_menu", this)));
     m_activeTimeline = trackView;
     if (m_renderWidget) {
         m_renderWidget->setProfile(doc->mltProfile());
@@ -2896,69 +2909,59 @@ void MainWindow::slotResizeItemEnd()
     if (m_activeTimeline) m_activeTimeline->projectView()->setOutPoint();
 }
 
+int MainWindow::getNewStuff(const QString &configFile)
+{
+    KNS3::Entry::List entries;
+#if KDE_IS_VERSION(4,3,80)
+    KNS3::DownloadDialog dialog(configFile);
+    dialog.exec();
+    entries = dialog.changedEntries();
+    foreach(const KNS3::Entry &entry, entries) {
+        if (entry.status() == KNS3::Entry::Installed)
+            kDebug() << "// Installed files: " << entry.installedFiles();
+    }
+#else
+    KNS::Engine engine(0);
+    if (engine.init(configFile))
+        entries = engine.downloadDialogModal(this);
+    foreach(KNS::Entry *entry, entries) {
+        if (entry->status() == KNS::Entry::Installed)
+            kDebug() << "// Installed files: " << entry->installedFiles();
+    }
+#endif /* KDE_IS_VERSION(4,3,80) */
+    return entries.size();
+}
+
+void MainWindow::slotGetNewTitleStuff()
+{
+    if (getNewStuff("kdenlive_titles.knsrc") > 0) {
+        TitleWidget::refreshTitleTemplates();
+    }
+}
+
 void MainWindow::slotGetNewLumaStuff()
 {
-    //KNS::Entry::List download();
-    KNS::Entry::List entries = KNS::Engine::download();
-    // list of changed entries
-    kDebug() << "// PARSING KNS";
-    foreach(KNS::Entry* entry, entries) {
-        // care only about installed ones
-        if (entry->status() == KNS::Entry::Installed) {
-            foreach(const QString &file, entry->installedFiles()) {
-                kDebug() << "// CURRENTLY INSTALLED: " << file;
-            }
-        }
+    if (getNewStuff("kdenlive_wipes.knsrc") > 0) {
+        initEffects::refreshLumas();
+        m_activeTimeline->projectView()->reloadTransitionLumas();
     }
-    qDeleteAll(entries);
-    initEffects::refreshLumas();
-    m_activeTimeline->projectView()->reloadTransitionLumas();
 }
 
 void MainWindow::slotGetNewRenderStuff()
 {
-    //KNS::Entry::List download();
-
-    KNS::Engine engine(0);
-    if (engine.init("kdenlive_render.knsrc")) {
-        KNS::Entry::List entries = engine.downloadDialogModal(this);
-
-        if (entries.size() > 0) {
-            foreach(KNS::Entry* entry, entries) {
-                // care only about installed ones
-                if (entry->status() == KNS::Entry::Installed) {
-                    foreach(const QString &file, entry->installedFiles()) {
-                        kDebug() << "// CURRENTLY INSTALLED: " << file;
-                    }
-                }
-            }
-        }
-        if (m_renderWidget) m_renderWidget->reloadProfiles();
+    if (getNewStuff("kdenlive_renderprofiles.knsrc") > 0) {
+        if (m_renderWidget)
+            m_renderWidget->reloadProfiles();
     }
 }
 
 void MainWindow::slotGetNewMltProfileStuff()
 {
-    //KNS::Entry::List download();
-
-    KNS::Engine engine(0);
-    if (engine.init("kdenlive_mltprofiles.knsrc")) {
-        KNS::Entry::List entries = engine.downloadDialogModal(this);
-
-        if (entries.size() > 0) {
-            foreach(KNS::Entry* entry, entries) {
-                // care only about installed ones
-                if (entry->status() == KNS::Entry::Installed) {
-                    foreach(const QString &file, entry->installedFiles()) {
-                        kDebug() << "// CURRENTLY INSTALLED: " << file;
-                    }
-                }
-            }
-
-            // update the list of profiles in settings dialog
-            KdenliveSettingsDialog* d = static_cast <KdenliveSettingsDialog*>(KConfigDialog::exists("settings"));
-            if (d) d->checkProfile();
-        }
+    if (getNewStuff("kdenlive_projectprofiles.knsrc") > 0) {
+        // update the list of profiles in settings dialog
+        KdenliveSettingsDialog* d = static_cast <KdenliveSettingsDialog*>(KConfigDialog::exists("settings"));
+        if (d)
+            d->checkProfile();
     }
 }
 
@@ -3171,6 +3174,7 @@ void MainWindow::slotUpdateTimecodeFormat(int ix)
     KdenliveSettings::setFrametimecode(ix == 1);
     m_clipMonitor->updateTimecodeFormat();
     m_projectMonitor->updateTimecodeFormat();
+    m_activeTimeline->projectView()->clearSelection();
 }
 
 void MainWindow::slotRemoveFocus()
@@ -3196,6 +3200,9 @@ void MainWindow::slotShutdown()
     if (interface && interface->isServiceRegistered("org.kde.ksmserver")) {
         QDBusInterface smserver("org.kde.ksmserver", "/KSMServer", "org.kde.KSMServerInterface");
         smserver.call("logout", 1, 2, 2);
+    } else if (interface && interface->isServiceRegistered("org.gnome.SessionManager")) {
+        QDBusInterface smserver("org.gnome.SessionManager", "/org/gnome/SessionManager", "org.gnome.SessionManager");
+        smserver.call("Shutdown");
     }
 }
 
@@ -3278,7 +3285,7 @@ QPixmap MainWindow::createSchemePreviewIcon(const KSharedConfigPtr &config)
 
 void MainWindow::slotSwitchMonitors()
 {
-    m_monitorManager->slotSwitchMonitors();
+    m_monitorManager->slotSwitchMonitors(m_clipMonitor->isActive());
     if (m_projectMonitor->isActive()) m_activeTimeline->projectView()->setFocus();
     else m_projectList->focusTree();
 }
@@ -3297,5 +3304,16 @@ void MainWindow::slotInsertZoneToTimeline()
     m_activeTimeline->projectView()->insertClipCut(m_clipMonitor->activeClip(), info.at(1).toInt(), info.at(2).toInt());
 }
 
+
+void MainWindow::slotDeleteProjectClips(QStringList ids, QMap<QString, QString> folderids)
+{
+    for (int i = 0; i < ids.size(); ++i) {
+        m_activeTimeline->slotDeleteClip(ids.at(i));
+    }
+    m_activeDocument->clipManager()->slotDeleteClips(ids);
+    if (!folderids.isEmpty()) m_projectList->deleteProjectFolder(folderids);
+
+}
+
 #include "mainwindow.moc"