From 39c2d285a59bc005ae3e4880818e8713971dff69 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Wed, 21 Dec 2011 01:36:02 +0100 Subject: [PATCH] Display job status in clip tooltip --- src/projectitem.cpp | 20 +++++++------------- src/projectitem.h | 2 +- src/projectlist.cpp | 12 ++++++------ src/projectlist.h | 21 +++++++++++++-------- src/projecttree/abstractclipjob.cpp | 7 +++++++ src/projecttree/abstractclipjob.h | 1 + src/projecttree/cutclipjob.cpp | 15 +++++++++++++++ src/projecttree/cutclipjob.h | 1 + src/projecttree/proxyclipjob.cpp | 15 +++++++++++++++ src/projecttree/proxyclipjob.h | 1 + 10 files changed, 67 insertions(+), 28 deletions(-) diff --git a/src/projectitem.cpp b/src/projectitem.cpp index 43f91e9b..949daf76 100644 --- a/src/projectitem.cpp +++ b/src/projectitem.cpp @@ -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(""); @@ -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(); } } diff --git a/src/projectitem.h b/src/projectitem.h index 06a6802e..af849bce 100644 --- a/src/projectitem.h +++ b/src/projectitem.h @@ -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. */ diff --git a/src/projectlist.cpp b/src/projectlist.cpp index 08a81dac..5c3458bc 100644 --- a/src/projectlist.cpp +++ b/src/projectlist.cpp @@ -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) { diff --git a/src/projectlist.h b/src/projectlist.h index a0f87f3b..3d25bc71 100644 --- a/src/projectlist.h +++ b/src/projectlist.h @@ -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); diff --git a/src/projecttree/abstractclipjob.cpp b/src/projecttree/abstractclipjob.cpp index ff630f72..df432cfe 100644 --- a/src/projecttree/abstractclipjob.cpp +++ b/src/projecttree/abstractclipjob.cpp @@ -68,3 +68,10 @@ int AbstractClipJob::processLogInfo() { return -1; } + +const QString AbstractClipJob::statusMessage(CLIPJOBSTATUS status) +{ + return QString(); +} + + diff --git a/src/projecttree/abstractclipjob.h b/src/projecttree/abstractclipjob.h index 1a3955e2..88461685 100644 --- a/src/projecttree/abstractclipjob.h +++ b/src/projecttree/abstractclipjob.h @@ -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; diff --git a/src/projecttree/cutclipjob.cpp b/src/projecttree/cutclipjob.cpp index e52a7f36..bd247c5d 100644 --- a/src/projecttree/cutclipjob.cpp +++ b/src/projecttree/cutclipjob.cpp @@ -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; +} diff --git a/src/projecttree/cutclipjob.h b/src/projecttree/cutclipjob.h index 966541a8..8af9b0d9 100644 --- a/src/projecttree/cutclipjob.h +++ b/src/projecttree/cutclipjob.h @@ -39,6 +39,7 @@ public: stringMap cancelProperties(); int processLogInfo(); bool addClipToProject; + const QString statusMessage(CLIPJOBSTATUS status); private: QString m_dest; diff --git a/src/projecttree/proxyclipjob.cpp b/src/projecttree/proxyclipjob.cpp index 31a67bbf..d7c88011 100644 --- a/src/projecttree/proxyclipjob.cpp +++ b/src/projecttree/proxyclipjob.cpp @@ -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; +} diff --git a/src/projecttree/proxyclipjob.h b/src/projecttree/proxyclipjob.h index 20c04d3f..591ea613 100644 --- a/src/projecttree/proxyclipjob.h +++ b/src/projecttree/proxyclipjob.h @@ -38,6 +38,7 @@ public: QProcess *startJob(bool *ok); stringMap cancelProperties(); int processLogInfo(); + const QString statusMessage(CLIPJOBSTATUS status); private: QString m_dest; -- 2.39.2