]> git.sesse.net Git - kdenlive/commitdiff
Display job status in clip tooltip
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 21 Dec 2011 00:36:02 +0000 (01:36 +0100)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 21 Dec 2011 00:36:02 +0000 (01:36 +0100)
src/projectitem.cpp
src/projectitem.h
src/projectlist.cpp
src/projectlist.h
src/projecttree/abstractclipjob.cpp
src/projecttree/abstractclipjob.h
src/projecttree/cutclipjob.cpp
src/projecttree/cutclipjob.h
src/projecttree/proxyclipjob.cpp
src/projecttree/proxyclipjob.h

index 43f91e9b3f267045bd9dafcfa60acadb308e3855..949daf763de699249a5148b4b67a4b7f167fc20e 100644 (file)
@@ -32,7 +32,7 @@
 const int DurationRole = Qt::UserRole + 1;
 const int JobProgressRole = Qt::UserRole + 5;
 const int JobTypeRole = Qt::UserRole + 6;
-const int JobCrasMessage = Qt::UserRole + 7;
+const int JobStatusMessage = Qt::UserRole + 7;
 const int itemHeight = 38;
 
 ProjectItem::ProjectItem(QTreeWidget * parent, DocClipBase *clip) :
@@ -169,14 +169,11 @@ void ProjectItem::slotSetToolTip()
 {
     QString tip;
     if (m_clip->isPlaceHolder()) tip.append(i18n("Missing") + " | ");
-    int s = data(0, JobProgressRole).toInt();
-    if (s == CREATINGJOB || s > 0) {
-        tip.append(i18n("Building proxy clip") + " | ");
-    }
-    else if (s == JOBWAITING) {
-        tip.append(i18n("Waiting - proxy clip") + " | ");
+    QString jobInfo = data(0, JobStatusMessage).toString();
+    if (!jobInfo.isEmpty()) {
+        tip.append(jobInfo + " | ");
     }
-    else if (hasProxy()) {
+    if (hasProxy() && data(0, JobTypeRole).toInt() != PROXYJOB) {
         tip.append(i18n("Proxy clip") + " | ");
     }
     tip.append("<b>");
@@ -265,16 +262,13 @@ void ProjectItem::setProperties(const QMap < QString, QString > &attributes, con
     }
 }
 
-void ProjectItem::setJobStatus(CLIPJOBSTATUS status, int progress, JOBTYPE jobType)
+void ProjectItem::setJobStatus(CLIPJOBSTATUS status, int progress, JOBTYPE jobType, const QString &statusMessage)
 {
-    if (status == JOBCRASHED) {
-        if (jobType == PROXYJOB) setData(0, JobCrasMessage, i18n("Proxy crashed"));
-        else if (jobType == CUTJOB) setData(0, JobCrasMessage, i18n("Transcoding crashed"));
-    }
     setData(0, JobTypeRole, jobType);
     if (progress > 0) setData(0, JobProgressRole, progress);
     else {
         setData(0, JobProgressRole, status);
+        setData(0, JobStatusMessage, statusMessage);
         slotSetToolTip();
     }
 }
index 06a6802ea4189443555157aeae3ea683363146d3..af849bce32a7a3d2697ed5ec8d97e7a0fad440a0 100644 (file)
@@ -66,7 +66,7 @@ public:
     static int itemDefaultHeight();
     void slotSetToolTip();
     /** \brief Set the status of the clip job. */
-    void setJobStatus(CLIPJOBSTATUS status, int progress = 0, JOBTYPE jobType = NOJOBTYPE);
+    void setJobStatus(CLIPJOBSTATUS status, int progress = 0, JOBTYPE jobType = NOJOBTYPE, const QString &statusMessage = QString());
     /** \brief Returns the proxy status for this clip (true means there is a proxy clip). */
     bool hasProxy() const;
     /** \brief Returns true if the proxy for this clip is ready. */
index 08a81dacbe161721c293387d1aede9ddb5b3ffbb..5c3458bc6e71a471aac832ed11d55b93084b59df 100644 (file)
@@ -2524,11 +2524,11 @@ void ProjectList::slotCreateProxy(const QString id)
         slotGotProxy(path);
         return;
     }
-    if (!item->isJobRunning()) setJobStatus(item, JOBWAITING);
     m_processingProxy.append(path);
 
     ProxyJob *job = new ProxyJob(item->clipType(), id, QStringList() << path << item->clipUrl().path() << item->referencedClip()->producerProperty("_exif_orientation") << m_doc->getDocumentProperty("proxyparams").simplified() << QString::number(m_render->frameRenderWidth()) << QString::number(m_render->renderHeight()));
     m_jobList.append(job);
+    if (!item->isJobRunning()) setJobStatus(item, JOBWAITING, 0, job->jobType, job->statusMessage(JOBWAITING));
     
     startJobProcess();
 }
@@ -2589,13 +2589,13 @@ void ProjectList::slotCutClipJob(const QString &id, QPoint zone)
     KdenliveSettings::setAdd_clip_cut(ui.add_clip->isChecked());
     delete d;
 
-    if (!item->isJobRunning()) setJobStatus(item, JOBWAITING);
     m_processingProxy.append(dest);
     QStringList jobParams;
     jobParams << dest << item->clipUrl().path() << timeIn << timeOut << QString::number(duration) << QString::number(KdenliveSettings::add_clip_cut());
     if (!extraParams.isEmpty()) jobParams << extraParams;
     CutClipJob *job = new CutClipJob(item->clipType(), id, jobParams);
     m_jobList.append(job);
+    if (!item->isJobRunning()) setJobStatus(item, JOBWAITING, 0, job->jobType, job->statusMessage(JOBWAITING));
     
     startJobProcess();
 }
@@ -2687,7 +2687,7 @@ void ProjectList::slotProcessJobs()
         file.close();
         QFile::remove(job->destination());
     
-        setJobStatus(processingItem, CREATINGJOB, 0, job->jobType);
+        setJobStatus(processingItem, CREATINGJOB, 0, job->jobType, job->statusMessage(CREATINGJOB));
 
         bool success;
         QProcess *jobProcess = job->startJob(&success);
@@ -2728,7 +2728,7 @@ void ProjectList::slotProcessJobs()
             }
             else {
                 int progress = job->processLogInfo();
-                if (progress > -1) emit processLog(processingItem, progress, job->jobType); 
+                if (progress > 0) emit processLog(processingItem, progress, job->jobType); 
             }
             jobProcess->waitForFinished(500);
         }
@@ -2954,11 +2954,11 @@ void ProjectList::slotDeleteProxy(const QString proxyPath)
     QFile::remove(proxyPath);
 }
 
-void ProjectList::setJobStatus(ProjectItem *item, CLIPJOBSTATUS status, int progress, JOBTYPE jobType)
+void ProjectList::setJobStatus(ProjectItem *item, CLIPJOBSTATUS status, int progress, JOBTYPE jobType, const QString &statusMessage)
 {
     if (item == NULL || m_abortAllJobs) return;
     monitorItemEditing(false);
-    item->setJobStatus(status, progress, jobType);
+    item->setJobStatus(status, progress, jobType, statusMessage);
     if (status == JOBCRASHED) {
         DocClipBase *clip = item->referencedClip();
         if (!clip) {
index a0f87f3bad135009b10df8ebc0a26f7fe77935ea..3d25bc71eaddb7356008719feb8f62cb3f83f82f 100644 (file)
@@ -177,12 +177,14 @@ public:
                 }
                 else if (proxy == JOBCRASHED) {
                     proxyText = index.data(Qt::UserRole + 7).toString();
-                    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);
+                    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);
+                    }
                 }
             }
             
@@ -370,8 +372,11 @@ private:
 
     /** @brief Set the Proxy status on a clip. 
      * @param item The clip item to set status
-     * @param status The job status (see definitions.h) */
-    void setJobStatus(ProjectItem *item, CLIPJOBSTATUS status, int progress = 0, JOBTYPE jobType = NOJOBTYPE);
+     * @param status The job status (see definitions.h)
+     * @param progress The job progress (in percents)
+     * @param jobType The job type 
+     * @param statusMessage The job info message */
+    void setJobStatus(ProjectItem *item, CLIPJOBSTATUS status, int progress = 0, JOBTYPE jobType = NOJOBTYPE, 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);
index ff630f72ce8d8d927f92169b6dabbebee2e6aab5..df432cfe710c7f246f9f1088b29a7a20c2cf7571 100644 (file)
@@ -68,3 +68,10 @@ int AbstractClipJob::processLogInfo()
 {
     return -1;
 }
+
+const QString AbstractClipJob::statusMessage(CLIPJOBSTATUS status)
+{
+    return QString();
+}
+
+
index 1a3955e2ff3a940aa7dfa58b8696edccbe56123c..8846168565280a2da70f794ee4ea506ef1ef9489 100644 (file)
@@ -45,6 +45,7 @@ public:
     virtual QProcess *startJob(bool */*ok*/);
     virtual stringMap cancelProperties();
     virtual int processLogInfo();
+    virtual const QString statusMessage(CLIPJOBSTATUS status);
     
 protected:
     QString m_errorMessage;
index e52a7f3663636f5b36cc8567815d9d9717398f7f..bd247c5d933d0164e9ea9bf9658172c3b82011a1 100644 (file)
@@ -107,4 +107,19 @@ stringMap CutClipJob::cancelProperties()
     return props;
 }
 
+const QString CutClipJob::statusMessage(CLIPJOBSTATUS status)
+{
+    QString statusInfo;
+    switch (status) {
+        case CREATINGJOB:
+            statusInfo = i18n("Extracting clip cut");
+            break;
+        case JOBWAITING:
+            statusInfo = i18n("Waiting - clip cut");
+            break;
+        default:
+            break;
+    }
+    return statusInfo;
+}
 
index 966541a86a72f088400cafca219576b8d86e3478..8af9b0d90e5b5b7c1dbee66933bcea477caea3db 100644 (file)
@@ -39,6 +39,7 @@ public:
     stringMap cancelProperties();
     int processLogInfo();
     bool addClipToProject;
+    const QString statusMessage(CLIPJOBSTATUS status);
     
 private:
     QString m_dest;
index 31a67bbf681252f522b13ae660f52306e2983c31..d7c880112fab88effe8facfe1cc2687b93cc7927 100644 (file)
@@ -197,4 +197,19 @@ stringMap ProxyJob::cancelProperties()
     return props;
 }
 
+const QString ProxyJob::statusMessage(CLIPJOBSTATUS status)
+{
+    QString statusInfo;
+    switch (status) {
+        case CREATINGJOB:
+            statusInfo = i18n("Creating proxy");
+            break;
+        case JOBWAITING:
+            statusInfo = i18n("Waiting - proxy");
+            break;
+        default:
+            break;
+    }
+    return statusInfo;
+}
 
index 20c04d3fa1e85ee95e8623973baf37ab10bb1f73..591ea613c93b3dcea00ab411f0b41bbc66c04f05 100644 (file)
@@ -38,6 +38,7 @@ public:
     QProcess *startJob(bool *ok);
     stringMap cancelProperties();
     int processLogInfo();
+    const QString statusMessage(CLIPJOBSTATUS status);
     
 private:
     QString m_dest;