]> git.sesse.net Git - kdenlive/blobdiff - src/kdenlivedoc.cpp
Merge branch 'stabilize' of git.kde.org:kdenlive into stabilize
[kdenlive] / src / kdenlivedoc.cpp
index c4ca548dba24db61b5cc4ea1372e9c0296a7d2f7..8102ca681918534ca9bd7758d54239d9ad056af1 100644 (file)
@@ -28,7 +28,7 @@
 #include "mainwindow.h"
 #include "documentchecker.h"
 #include "documentvalidator.h"
-#include "kdenlive-config.h"
+#include "config-kdenlive.h"
 #include "initeffects.h"
 
 #include <KDebug>
@@ -39,6 +39,7 @@
 #include <KFileDialog>
 #include <KIO/NetAccess>
 #include <KIO/CopyJob>
+#include <KIO/JobUiDelegate>
 #include <KApplication>
 #include <KGlobal>
 #include <KBookmarkManager>
 
 #include <mlt++/Mlt.h>
 
-const double DOCUMENTVERSION = 0.86;
+#include "locale.h"
 
-KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, QString profileName, QMap <QString, QString> properties, const QPoint tracks, Render *render, KTextEdit *notes, bool *openBackup, MainWindow *parent, KProgressDialog *progressDialog) :
+
+const double DOCUMENTVERSION = 0.88;
+
+KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, QString profileName, QMap <QString, QString> properties, const QPoint &tracks, Render *render, KTextEdit *notes, bool *openBackup, MainWindow *parent, KProgressDialog *progressDialog) :
     QObject(parent),
     m_autosave(NULL),
     m_url(url),
@@ -64,9 +68,22 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
     m_modified(false),
     m_projectFolder(projectFolder)
 {
+    // init m_profile struct
+    m_profile.frame_rate_num = 0;
+    m_profile.frame_rate_den = 0;
+    m_profile.width = 0;
+    m_profile.height = 0;
+    m_profile.progressive = 0;
+    m_profile.sample_aspect_num = 0;
+    m_profile.sample_aspect_den = 0;
+    m_profile.display_aspect_num = 0;
+    m_profile.display_aspect_den = 0;
+    m_profile.colorspace = 0;
+
     m_clipManager = new ClipManager(this);
     m_autoSaveTimer = new QTimer(this);
     m_autoSaveTimer->setSingleShot(true);
+    connect(m_clipManager, SIGNAL(displayMessage(QString, int)), parent, SLOT(slotGotProgressInfo(QString,int)));
     bool success = false;
 
     // init default document properties
@@ -95,6 +112,15 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
         m_documentProperties[i.key()] = i.value();
     }
 
+    if (QLocale().decimalPoint() != QLocale::system().decimalPoint()) {
+        setlocale(LC_NUMERIC, "");
+        QLocale systemLocale = QLocale::system();
+        systemLocale.setNumberOptions(QLocale::OmitGroupSeparator);
+        QLocale::setDefault(systemLocale);
+        // locale conversion might need to be redone
+        initEffects::parseEffectFiles();
+    }
+
     *openBackup = false;
     
     if (!url.isEmpty()) {
@@ -299,7 +325,6 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
     // Make sure that the necessary folders exist
     KStandardDirs::makeDir(m_projectFolder.path(KUrl::AddTrailingSlash) + "titles/");
     KStandardDirs::makeDir(m_projectFolder.path(KUrl::AddTrailingSlash) + "thumbs/");
-    KStandardDirs::makeDir(m_projectFolder.path(KUrl::AddTrailingSlash) + "ladspa/");
     KStandardDirs::makeDir(m_projectFolder.path(KUrl::AddTrailingSlash) + "proxy/");
 
     updateProjectFolderPlacesEntry();
@@ -371,6 +396,7 @@ QDomDocument KdenliveDoc::createEmptyDocument(QList <TrackInfo> tracks)
     // Creating new document
     QDomDocument doc;
     QDomElement mlt = doc.createElement("mlt");
+    mlt.setAttribute("LC_NUMERIC", "");
     doc.appendChild(mlt);
     
     // Create black producer
@@ -389,7 +415,7 @@ QDomDocument KdenliveDoc::createEmptyDocument(QList <TrackInfo> tracks)
 
     property = doc.createElement("property");
     property.setAttribute("name", "aspect_ratio");
-    value = doc.createTextNode(QString::number(0.0));
+    value = doc.createTextNode(QString::number(0));
     property.appendChild(value);
     blk.appendChild(property);
 
@@ -555,7 +581,7 @@ QPoint KdenliveDoc::zone() const
     return QPoint(m_documentProperties.value("zonein").toInt(), m_documentProperties.value("zoneout").toInt());
 }
 
-QDomDocument KdenliveDoc::xmlSceneList(const QString &scene, const QStringList expandedFolders)
+QDomDocument KdenliveDoc::xmlSceneList(const QString &scene, const QStringList &expandedFolders)
 {
     QDomDocument sceneList;
     sceneList.setContent(scene, true);
@@ -565,6 +591,18 @@ QDomDocument KdenliveDoc::xmlSceneList(const QString &scene, const QStringList e
         return sceneList;
     }
 
+    // Set playlist audio volume to 100%
+    QDomElement tractor = mlt.firstChildElement("tractor");
+    if (!tractor.isNull()) {
+        QDomNodeList props = tractor.elementsByTagName("property");
+        for (int i = 0; i < props.count(); i++) {
+            if (props.at(i).toElement().attribute("name") == "meta.volume") {
+                props.at(i).firstChild().setNodeValue("1");
+                break;
+            }
+        }
+    }
+
     QDomElement addedXml = sceneList.createElement("kdenlivedoc");
     mlt.appendChild(addedXml);
 
@@ -680,7 +718,7 @@ QDomDocument KdenliveDoc::xmlSceneList(const QString &scene, const QStringList e
     return sceneList;
 }
 
-bool KdenliveDoc::saveSceneList(const QString &path, const QString &scene, const QStringList expandedFolders, bool autosave)
+bool KdenliveDoc::saveSceneList(const QString &path, const QString &scene, const QStringList &expandedFolders, bool autosave)
 {
     QDomDocument sceneList = xmlSceneList(scene, expandedFolders);
     if (sceneList.isNull()) {
@@ -748,7 +786,7 @@ void KdenliveDoc::setProjectFolder(KUrl url)
 void KdenliveDoc::moveProjectData(KUrl url)
 {
     QList <DocClipBase*> list = m_clipManager->documentClipList();
-    //TODO: Also move ladspa effects files
+    KUrl::List cacheUrls;
     for (int i = 0; i < list.count(); i++) {
         DocClipBase *clip = list.at(i);
         if (clip->clipType() == TEXT) {
@@ -762,16 +800,17 @@ void KdenliveDoc::moveProjectData(KUrl url)
         KUrl oldVideoThumbUrl = KUrl(m_projectFolder.path(KUrl::AddTrailingSlash) + "thumbs/" + hash + ".png");
         KUrl oldAudioThumbUrl = KUrl(m_projectFolder.path(KUrl::AddTrailingSlash) + "thumbs/" + hash + ".thumb");
         if (KIO::NetAccess::exists(oldVideoThumbUrl, KIO::NetAccess::SourceSide, 0)) {
-            KUrl newUrl = KUrl(url.path(KUrl::AddTrailingSlash) + "thumbs/" + hash + ".png");
-            KIO::Job *job = KIO::copy(oldVideoThumbUrl, newUrl);
-            KIO::NetAccess::synchronousRun(job, 0);
+            cacheUrls << oldVideoThumbUrl;
         }
         if (KIO::NetAccess::exists(oldAudioThumbUrl, KIO::NetAccess::SourceSide, 0)) {
-            KUrl newUrl = KUrl(url.path(KUrl::AddTrailingSlash) + "thumbs/" + hash + ".thumb");
-            KIO::Job *job = KIO::copy(oldAudioThumbUrl, newUrl);
-            if (KIO::NetAccess::synchronousRun(job, 0)) clip->refreshThumbUrl();
+            cacheUrls << oldAudioThumbUrl;
         }
     }
+    if (!cacheUrls.isEmpty()) {
+        KIO::Job *job = KIO::copy(cacheUrls, KUrl(url.path(KUrl::AddTrailingSlash) + "thumbs/"));
+        job->ui()->setWindow(kapp->activeWindow());
+        KIO::NetAccess::synchronousRun(job, 0);
+    }
 }
 
 const QString &KdenliveDoc::profilePath() const
@@ -885,7 +924,7 @@ Render *KdenliveDoc::renderer()
     return m_render;
 }
 
-void KdenliveDoc::updateClip(const QString id)
+void KdenliveDoc::updateClip(const QString &id)
 {
     emit updateClipDisplay(id);
 }
@@ -1154,7 +1193,7 @@ void KdenliveDoc::deleteClip(const QString &clipId)
     emit signalDeleteProjectClip(clipId);
 }
 
-void KdenliveDoc::slotAddClipList(const KUrl::List urls, const QString group, const QString &groupId)
+void KdenliveDoc::slotAddClipList(const KUrl::List urls, const QString &group, const QString &groupId)
 {
     m_clipManager->slotAddClipList(urls, group, groupId);
     //emit selectLastAddedClip(QString::number(m_clipManager->lastClipId()));
@@ -1162,7 +1201,7 @@ void KdenliveDoc::slotAddClipList(const KUrl::List urls, const QString group, co
 }
 
 
-void KdenliveDoc::slotAddClipFile(const KUrl url, const QString group, const QString &groupId)
+void KdenliveDoc::slotAddClipFile(const KUrl &url, const QString &group, const QString &groupId)
 {
     m_clipManager->slotAddClipFile(url, group, groupId);
     emit selectLastAddedClip(QString::number(m_clipManager->lastClipId()));
@@ -1193,7 +1232,7 @@ void KdenliveDoc::slotCreateColorClip(const QString &name, const QString &color,
     emit selectLastAddedClip(QString::number(m_clipManager->lastClipId()));
 }
 
-void KdenliveDoc::slotCreateSlideshowClipFile(const QString name, const QString path, int count, const QString duration,
+void KdenliveDoc::slotCreateSlideshowClipFile(const QString &name, const QString &path, int count, const QString &duration,
         const bool loop, const bool crop, const bool fade,
         const QString &luma_duration, const QString &luma_file, const int softness,
         const QString &animation, QString group, const QString &groupId)
@@ -1343,17 +1382,6 @@ void KdenliveDoc::cachePixmap(const QString &fileId, const QPixmap &pix) const
     pix.save(m_projectFolder.path(KUrl::AddTrailingSlash) + "thumbs/" + fileId + ".png");
 }
 
-QString KdenliveDoc::getLadspaFile() const
-{
-    int ct = 0;
-    QString counter = QString::number(ct).rightJustified(5, '0', false);
-    while (QFile::exists(m_projectFolder.path(KUrl::AddTrailingSlash) + "ladspa/" + counter + ".ladspa")) {
-        ct++;
-        counter = QString::number(ct).rightJustified(5, '0', false);
-    }
-    return m_projectFolder.path(KUrl::AddTrailingSlash) + "ladspa/" + counter + ".ladspa";
-}
-
 bool KdenliveDoc::checkDocumentClips(QDomNodeList infoproducers)
 {
     DocumentChecker d(infoproducers, m_document);
@@ -1547,7 +1575,9 @@ void KdenliveDoc::updateProjectFolderPlacesEntry()
 
     const QString file = KStandardDirs::locateLocal("data", "kfileplaces/bookmarks.xml");
     KBookmarkManager *bookmarkManager = KBookmarkManager::managerForFile(file, "kfilePlaces");
+    if (!bookmarkManager) return;
     KBookmarkGroup root = bookmarkManager->root();
+    
     KBookmark bookmark = root.first();
 
     QString kdenliveName = KGlobal::mainComponent().componentName();