]> git.sesse.net Git - kdenlive/blobdiff - src/projectlist.h
Audio transcoding actions are now in "Extract audio" menu
[kdenlive] / src / projectlist.h
index e273b724cb1343c84aff155d0112b81576a21c4e..083efce59ce93c9b3e07a6ab5229ce33ff4361f4 100644 (file)
 #include <KTreeWidgetSearchLine>
 #include <KUrl>
 #include <KIcon>
+#include <kdeversion.h>
+
+#if KDE_IS_VERSION(4,7,0)
+#include <KMessageWidget>
+#endif
 
 #ifdef NEPOMUK
 #include <nepomuk/kratingpainter.h>
@@ -51,6 +56,7 @@
 #include "kdenlivesettings.h"
 #include "folderprojectitem.h"
 #include "subprojectitem.h"
+#include "projecttree/abstractclipjob.h"
 #include <kdialog.h>
 
 namespace Mlt
@@ -170,13 +176,15 @@ public:
                     }
                 }
                 else if (proxy == JOBCRASHED) {
-                    proxyText = i18n("Proxy crashed");
-                    QRectF txtBounding = painter->boundingRect(r2, Qt::AlignRight | Qt::AlignVCenter, " " + proxyText + " ");
-                    painter->setPen(Qt::NoPen);
-                    painter->setBrush(option.palette.highlight());
-                    painter->drawRoundedRect(txtBounding, 2, 2);
-                    painter->setPen(option.palette.highlightedText().color());
-                    painter->drawText(txtBounding, Qt::AlignHCenter | Qt::AlignVCenter , proxyText);
+                    proxyText = index.data(Qt::UserRole + 7).toString();
+                    if (!proxyText.isEmpty()) {
+                        QRectF txtBounding = painter->boundingRect(r2, Qt::AlignRight | Qt::AlignVCenter, " " + proxyText + " ");
+                        painter->setPen(Qt::NoPen);
+                        painter->setBrush(option.palette.highlight());
+                        painter->drawRoundedRect(txtBounding, 2, 2);
+                        painter->setPen(option.palette.highlightedText().color());
+                        painter->drawText(txtBounding, Qt::AlignHCenter | Qt::AlignVCenter , proxyText);
+                    }
                 }
             }
             
@@ -269,6 +277,7 @@ public slots:
 
     /** @brief Prepares removing the selected items. */
     void slotRemoveClip();
+    void slotAddClip(const QString url, const QString &groupName, const QString &groupId);
     void slotAddClip(const QList <QUrl> givenList = QList <QUrl> (), const QString &groupName = QString(), const QString &groupId = QString());
 
     /** @brief Adds, edits or deletes a folder item.
@@ -288,6 +297,8 @@ public slots:
     void slotForceProcessing(const QString &id);
     /** @brief Remove all instances of a proxy and delete the file. */
     void slotDeleteProxy(const QString proxyPath);
+    /** @brief Start a hard cut clip job. */
+    void slotCutClipJob(const QString &id, QPoint zone);
 
 private:
     ProjectListView *m_listView;
@@ -302,6 +313,7 @@ private:
     FolderProjectItem *getFolderItemById(const QString &id);
     QAction *m_openAction;
     QAction *m_reloadAction;
+    QMenu *m_extractAudioAction;
     QMenu *m_transcodeAction;
     QMenu *m_stabilizeAction;
     KdenliveDoc *m_doc;
@@ -318,19 +330,24 @@ private:
     QList <QString> m_thumbnailQueue;
     QAction *m_proxyAction;
     QStringList m_processingClips;
-    /** @brief Holds a list of proxy urls that should be aborted. */
-    QStringList m_abortProxy;
     /** @brief Holds a list of proxy urls that are currently being created. */
     QStringList m_processingProxy;
-    QMutex m_mutex;
+    QMutex m_jobMutex;
     bool m_abortAllJobs;
     /** @brief We are cleaning up the project list, so stop processing signals. */
     bool m_closing;
     QList <AbstractClipJob *> m_jobList;
-    QFutureSynchronizer<void> m_proxyThreads;
+    QFutureSynchronizer<void> m_jobThreads;
     InvalidDialog *m_invalidClipDialog;
     QMenu *m_jobsMenu;
     SmallInfoLabel *m_infoLabel;
+#if KDE_IS_VERSION(4,7,0)
+    KMessageWidget *m_infoMessage;
+    /** @brief A string containing the last error log for a clip job. */
+    QString m_errorLog;
+    /** @brief The action that will trigger the log dialog. */
+    QAction *m_logAction;
+#endif
     
     void requestClipThumbnail(const QString id);
 
@@ -354,16 +371,25 @@ private:
 
     /** @brief Set the Proxy status on a clip. 
      * @param item The clip item to set status
-     * @param status The proxy status (see definitions.h) */
-    void setProxyStatus(ProjectItem *item, CLIPJOBSTATUS status, int progress = 0);
-    /** @brief Process ffmpeg output to find out process progress. */
-    void processLogInfo(QList <ProjectItem *>items, int progress);
+     * @param jobType The job type 
+     * @param status The job status (see definitions.h)
+     * @param progress The job progress (in percents)
+     * @param statusMessage The job info message */
+    void setJobStatus(ProjectItem *item, JOBTYPE jobType, CLIPJOBSTATUS status, int progress = 0, const QString &statusMessage = QString());
     void monitorItemEditing(bool enable);
     /** @brief Get cached thumbnail for a project's clip or create it if no cache. */
     void getCachedThumbnail(ProjectItem *item);
     void getCachedThumbnail(SubProjectItem *item);
     /** @brief The clip is about to be reloaded, cancel thumbnail requests. */
     void resetThumbsProducer(DocClipBase *clip);
+    /** @brief Check if it is necessary to start a job thread. */
+    void slotCheckJobProcess();
+    /** @brief Check if a clip has a running or pending proxy process. */
+    bool hasPendingProxy(ProjectItem *item);
+    /** @brief Delete pending jobs for a clip. */
+    void deleteJobsForClip(const QString &clipId);
+    /** @brief Discard specific job type for a clip. */
+    void discardJobs(const QString &id, JOBTYPE type);
 
 private slots:
     void slotClipSelected();
@@ -402,12 +428,21 @@ private slots:
     void slotCreateProxy(const QString id);
     /** @brief Stop creation of this clip's proxy. */
     void slotAbortProxy(const QString id, const QString path);
-    /** @brief Start creation of proxy clip. */
-    void slotGenerateProxy();
+    /** @brief Start creation of clip jobs. */
+    void slotProcessJobs();
     /** @brief Discard running and pending clip jobs. */
     void slotCancelJobs();
     /** @brief Discard a running clip jobs. */
     void slotCancelRunningJob(const QString id, stringMap);
+    /** @brief Update a clip's job status. */
+    void slotProcessLog(const QString, int progress, int, const QString = QString());
+    /** @brief A clip job crashed, inform user. */
+    void slotUpdateJobStatus(const QString &id, int type, int status, const QString &label, const QString &actionName, const QString details);
+    void slotUpdateJobStatus(ProjectItem *item, int type, int status, const QString &label, const QString &actionName = QString(), const QString details = QString());
+    /** @brief Display error log for last failed job. */
+    void slotShowJobLog();
+    /** @brief A proxy clip is ready. */
+    void slotGotProxyForId(const QString);
 
 signals:
     void clipSelected(DocClipBase *, QPoint zone = QPoint(), bool forceUpdate = false);
@@ -434,6 +469,11 @@ signals:
     /** @brief Set number of running jobs. */
     void jobCount(int);
     void cancelRunningJob(const QString, stringMap);
+    void processLog(const QString, int , int, const QString = QString());
+    void addClip(const QString, const QString &, const QString &);
+    void updateJobStatus(const QString, int, int, const QString &label = QString(), const QString &actionName = QString(), const QString details = QString());
+    void checkJobProcess();
+    void gotProxy(const QString);
 };
 
 #endif