]> git.sesse.net Git - kdenlive/blobdiff - src/kdenlivedoc.cpp
Various changes for getting an OpenGL context (almost) everywhere it is needed.
[kdenlive] / src / kdenlivedoc.cpp
index 291201f265d68f2379b109f8d3f9423061eeafeb..127cd32c3a163c4ad6968c586d2ad0444f9147de 100644 (file)
@@ -24,7 +24,7 @@
 #include "kdenlivesettings.h"
 #include "renderer.h"
 #include "clipmanager.h"
-#include "titlewidget.h"
+#include "widgets/titlewidget.h"
 #include "mainwindow.h"
 #include "documentchecker.h"
 #include "documentvalidator.h"
@@ -35,7 +35,7 @@
 #include <KStandardDirs>
 #include <KMessageBox>
 #include <KProgressDialog>
-#include <KLocale>
+#include <KLocalizedString>
 #include <KFileDialog>
 #include <KIO/NetAccess>
 #include <KIO/CopyJob>
@@ -61,7 +61,7 @@
 
 const double DOCUMENTVERSION = 0.88;
 
-KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, const QString &profileName, const QMap <QString, QString>& properties, const QMap <QString, QString>& metadata, const QPoint &tracks, Render *render, KTextEdit *notes, bool *openBackup, MainWindow *parent, KProgressDialog *progressDialog) :
+KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, const QString &profileName, const QMap <QString, QString>& properties, const QMap <QString, QString>& metadata, const QPoint &tracks, Render *render, KTextEdit *notes, bool *openBackup, QGLWidget *glContext, MainWindow *parent, KProgressDialog *progressDialog) :
     QObject(parent),
     m_autosave(NULL),
     m_url(url),
@@ -83,7 +83,7 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
     m_profile.display_aspect_den = 0;
     m_profile.colorspace = 0;
 
-    m_clipManager = new ClipManager(this);
+    m_clipManager = new ClipManager(this, glContext);
     m_autoSaveTimer = new QTimer(this);
     m_autoSaveTimer->setSingleShot(true);
     connect(m_clipManager, SIGNAL(displayMessage(QString,int)), parent, SLOT(slotGotProgressInfo(QString,int)));
@@ -246,9 +246,9 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
                                     if (e.tagName() == "trackinfo") {
                                         TrackInfo projectTrack;
                                         if (e.attribute("type") == "audio")
-                                            projectTrack.type = AUDIOTRACK;
+                                            projectTrack.type = AudioTrack;
                                         else
-                                            projectTrack.type = VIDEOTRACK;
+                                            projectTrack.type = VideoTrack;
                                         projectTrack.isMute = e.attribute("mute").toInt();
                                         projectTrack.isBlind = e.attribute("blind").toInt();
                                         projectTrack.isLocked = e.attribute("locked").toInt();
@@ -422,7 +422,7 @@ QDomDocument KdenliveDoc::createEmptyDocument(int videotracks, int audiotracks)
     // Better default names for tracks: Audio 1 etc. instead of blank numbers
     for (int i = 0; i < audiotracks; ++i) {
         TrackInfo audioTrack;
-        audioTrack.type = AUDIOTRACK;
+        audioTrack.type = AudioTrack;
         audioTrack.isMute = false;
         audioTrack.isBlind = true;
         audioTrack.isLocked = false;
@@ -434,7 +434,7 @@ QDomDocument KdenliveDoc::createEmptyDocument(int videotracks, int audiotracks)
     }
     for (int i = 0; i < videotracks; ++i) {
         TrackInfo videoTrack;
-        videoTrack.type = VIDEOTRACK;
+        videoTrack.type = VideoTrack;
         videoTrack.isMute = false;
         videoTrack.isBlind = false;
         videoTrack.isLocked = false;
@@ -531,7 +531,7 @@ QDomDocument KdenliveDoc::createEmptyDocument(const QList <TrackInfo> &tracks)
     for (int i = 1; i < total; ++i) {
         QDomElement track = doc.createElement("track");
         track.setAttribute("producer", "playlist" + QString::number(i));
-        if (tracks.at(i - 1).type == AUDIOTRACK) {
+        if (tracks.at(i - 1).type == AudioTrack) {
             track.setAttribute("hide", "video");
         } else if (tracks.at(i - 1).isBlind)
             track.setAttribute("hide", "video");
@@ -731,7 +731,7 @@ QDomDocument KdenliveDoc::xmlSceneList(const QString &scene, const QStringList &
     QDomElement tracksinfo = sceneList.createElement("tracksinfo");
     foreach(const TrackInfo & info, m_tracksList) {
         QDomElement trackinfo = sceneList.createElement("trackinfo");
-        if (info.type == AUDIOTRACK) trackinfo.setAttribute("type", "audio");
+        if (info.type == AudioTrack) trackinfo.setAttribute("type", "audio");
         trackinfo.setAttribute("mute", info.isMute);
         trackinfo.setAttribute("blind", info.isBlind);
         trackinfo.setAttribute("locked", info.isLocked);
@@ -841,6 +841,7 @@ void KdenliveDoc::setProjectFolder(KUrl url)
     KStandardDirs::makeDir(url.path());
     KStandardDirs::makeDir(url.path(KUrl::AddTrailingSlash) + "titles/");
     KStandardDirs::makeDir(url.path(KUrl::AddTrailingSlash) + "thumbs/");
+    KStandardDirs::makeDir(url.path(KUrl::AddTrailingSlash) + "proxy/");
     if (KMessageBox::questionYesNo(kapp->activeWindow(), i18n("You have changed the project folder. Do you want to copy the cached data from %1 to the new folder %2?", m_projectFolder.path(), url.path())) == KMessageBox::Yes) moveProjectData(url);
     m_projectFolder = url;
 
@@ -853,7 +854,7 @@ void KdenliveDoc::moveProjectData(const KUrl &url)
     KUrl::List cacheUrls;
     for (int i = 0; i < list.count(); ++i) {
         DocClipBase *clip = list.at(i);
-        if (clip->clipType() == TEXT) {
+        if (clip->clipType() == Text) {
             // the image for title clip must be moved
             KUrl oldUrl = clip->fileURL();
             KUrl newUrl = KUrl(url.path(KUrl::AddTrailingSlash) + "titles/" + oldUrl.fileName());
@@ -862,13 +863,17 @@ void KdenliveDoc::moveProjectData(const KUrl &url)
         }
         QString hash = clip->getClipHash();
         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)) {
             cacheUrls << oldVideoThumbUrl;
         }
+        KUrl oldAudioThumbUrl = KUrl(m_projectFolder.path(KUrl::AddTrailingSlash) + "thumbs/" + hash + ".thumb");
         if (KIO::NetAccess::exists(oldAudioThumbUrl, KIO::NetAccess::SourceSide, 0)) {
             cacheUrls << oldAudioThumbUrl;
         }
+        KUrl oldVideoProxyUrl = KUrl(m_projectFolder.path(KUrl::AddTrailingSlash) + "proxy/" + hash + '.' + KdenliveSettings::proxyextension());
+        if (KIO::NetAccess::exists(oldVideoProxyUrl, KIO::NetAccess::SourceSide, 0)) {
+            cacheUrls << oldVideoProxyUrl;
+        }
     }
     if (!cacheUrls.isEmpty()) {
         KIO::Job *job = KIO::copy(cacheUrls, KUrl(url.path(KUrl::AddTrailingSlash) + "thumbs/"));
@@ -1096,14 +1101,14 @@ bool KdenliveDoc::addClip(QDomElement elem, const QString &clipId, bool createCl
         elem.setAttribute("id", producerId);
         QString path = elem.attribute("resource");
         QString extension;
-        if (elem.attribute("type").toInt() == SLIDESHOW) {
+        if (elem.attribute("type").toInt() == SlideShow) {
             extension = KUrl(path).fileName();
             path = KUrl(path).directory();
         }
         if (elem.hasAttribute("_missingsource")) {
             // Clip has proxy but missing original source
         }
-        else if (path.isEmpty() == false && QFile::exists(path) == false && elem.attribute("type").toInt() != TEXT && !elem.hasAttribute("placeholder")) {
+        else if (path.isEmpty() == false && QFile::exists(path) == false && elem.attribute("type").toInt() != Text && !elem.hasAttribute("placeholder")) {
             kDebug() << "// FOUND MISSING CLIP: " << path << ", TYPE: " << elem.attribute("type").toInt();
             const QString size = elem.attribute("file_size");
             const QString hash = elem.attribute("file_hash");
@@ -1115,7 +1120,7 @@ bool KdenliveDoc::addClip(QDomElement elem, const QString &clipId, bool createCl
                 else
                     action = (KMessageBox::ButtonCode) KMessageBox::questionYesNoCancel(kapp->activeWindow(), i18n("Clip <b>%1</b><br />is invalid, what do you want to do?", path), i18n("File not found"), KGuiItem(i18n("Search automatically")), KGuiItem(i18n("Keep as placeholder")));
             } else {
-                if (elem.attribute("type").toInt() == SLIDESHOW) {
+                if (elem.attribute("type").toInt() == SlideShow) {
                     int res = KMessageBox::questionYesNoCancel(kapp->activeWindow(), i18n("Clip <b>%1</b><br />is invalid or missing, what do you want to do?", path), i18n("File not found"), KGuiItem(i18n("Search manually")), KGuiItem(i18n("Keep as placeholder")));
                     if (res == KMessageBox::Yes)
                         newpath = KFileDialog::getExistingDirectory(KUrl("kfiledialog:///clipfolder"), kapp->activeWindow(), i18n("Looking for %1", path));
@@ -1145,7 +1150,8 @@ bool KdenliveDoc::addClip(QDomElement elem, const QString &clipId, bool createCl
                 elem.setAttribute("placeholder", '1');
             }
             if (!newpath.isEmpty()) {
-                if (elem.attribute("type").toInt() == SLIDESHOW)
+                kDebug() << "// NEW CLIP PATH FOR CLIP " << clipId << " : " << newpath;
+                if (elem.attribute("type").toInt() == SlideShow)
                     newpath.append('/' + extension);
                 elem.setAttribute("resource", newpath);
                 setNewClipResource(clipId, newpath);
@@ -1207,9 +1213,11 @@ QString KdenliveDoc::searchFileRecursively(const QDir &dir, const QString &match
                 fileHash = QCryptographicHash::hash(fileData, QCryptographicHash::Md5);
                 if (QString(fileHash.toHex()) == matchHash)
                     return file.fileName();
+                else
+                    kDebug() << filesAndDirs.at(i) << "size match but not hash";
             }
         }
-        kDebug() << filesAndDirs.at(i) << file.size() << fileHash.toHex();
+        //kDebug() << filesAndDirs.at(i) << file.size() << fileHash.toHex();
     }
     filesAndDirs = dir.entryList(QDir::Dirs | QDir::Readable | QDir::Executable | QDir::NoDotAndDotDot);
     for (int i = 0; i < filesAndDirs.size() && foundFileName.isEmpty(); ++i) {
@@ -1435,7 +1443,7 @@ QPoint KdenliveDoc::getTracksCount() const
     int audio = 0;
     int video = 0;
     foreach(const TrackInfo & info, m_tracksList) {
-        if (info.type == VIDEOTRACK) video++;
+        if (info.type == VideoTrack) video++;
         else audio++;
     }
     return QPoint(video, audio);