#include "docclipbase.h"
#include <KDebug>
-#include <KLocale>
+#include <KLocalizedString>
#include <KIcon>
#include <QFile>
const int JobStatusMessage = Qt::UserRole + 7;
const int itemHeight = 38;
-ProjectItem::ProjectItem(QTreeWidget * parent, DocClipBase *clip) :
+ProjectItem::ProjectItem(QTreeWidget * parent, DocClipBase *clip, const QSize &pixmapSize) :
QTreeWidgetItem(parent, PROJECTCLIPTYPE),
m_clip(clip),
- m_clipId(clip->getId())
+ m_clipId(clip->getId()),
+ m_pixmapSet(false)
{
- buildItem();
+ buildItem(pixmapSize);
}
-ProjectItem::ProjectItem(QTreeWidgetItem * parent, DocClipBase *clip) :
+ProjectItem::ProjectItem(QTreeWidgetItem * parent, DocClipBase *clip, const QSize &pixmapSize) :
QTreeWidgetItem(parent, PROJECTCLIPTYPE),
m_clip(clip),
- m_clipId(clip->getId())
+ m_clipId(clip->getId()),
+ m_pixmapSet(false)
{
- buildItem();
+ buildItem(pixmapSize);
}
-void ProjectItem::buildItem()
+void ProjectItem::buildItem(const QSize &pixmapSize)
{
setSizeHint(0, QSize(itemHeight * 3, itemHeight));
if (m_clip->isPlaceHolder()) setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDropEnabled);
QString name = m_clip->getProperty("name");
if (name.isEmpty()) name = KUrl(m_clip->getProperty("resource")).fileName();
m_clipType = (CLIPTYPE) m_clip->getProperty("type").toInt();
+ switch(m_clipType) {
+ case AUDIO:
+ setData(0, Qt::DecorationRole, KIcon("audio-x-generic").pixmap(pixmapSize));
+ m_pixmapSet = true;
+ break;
+ case IMAGE:
+ case SLIDESHOW:
+ setData(0, Qt::DecorationRole, KIcon("image-x-generic").pixmap(pixmapSize));
+ break;
+ default:
+ setData(0, Qt::DecorationRole, KIcon("video-x-generic").pixmap(pixmapSize));
+ }
+ if (m_clipType != UNKNOWN) slotSetToolTip();
+
setText(0, name);
setText(1, m_clip->description());
GenTime duration = m_clip->duration();
{
}
+bool ProjectItem::hasPixmap() const
+{
+ return m_pixmapSet;
+}
+
+void ProjectItem::setPixmap(const QPixmap& p)
+{
+ m_pixmapSet = true;
+ setData(0, Qt::DecorationRole, p);
+}
+
//static
int ProjectItem::itemDefaultHeight()
{
return m_clip->getProperty("duration").toInt();
}
-QStringList ProjectItem::names() const
-{
- QStringList result;
- result.append(text(0));
- result.append(text(1));
- result.append(text(2));
- return result;
-}
-
QDomElement ProjectItem::toXml() const
{
return m_clip->toXML();
setData(0, DurationRole, itemdata + Timecode::getEasyTimecode(GenTime(frames, KdenliveSettings::project_fps()), KdenliveSettings::project_fps()));
}
-void ProjectItem::setProperties(QMap <QString, QString> props)
+void ProjectItem::setProperties(const QMap<QString, QString> &props)
{
if (m_clip == NULL) return;
m_clip->setProperties(props);
if (hasProxy() && data(0, JobTypeRole).toInt() != PROXYJOB) {
tip.append(i18n("Proxy clip") + " | ");
}
- tip.append("<b>");
- switch (m_clipType) {
- case AUDIO:
- tip.append(i18n("Audio clip") + "</b><br />" + clipUrl().path());
- break;
- case VIDEO:
- tip.append(i18n("Mute video clip") + "</b><br />" + clipUrl().path());
- break;
- case AV:
- tip.append(i18n("Video clip") + "</b><br />" + clipUrl().path());
- break;
- case COLOR:
- tip.append(i18n("Color clip"));
- break;
- case IMAGE:
- tip.append(i18n("Image clip") + "</b><br />" + clipUrl().path());
- break;
- case TEXT:
- if (!clipUrl().isEmpty() && m_clip->getProperty("xmldata").isEmpty()) tip.append(i18n("Template text clip") + "</b><br />" + clipUrl().path());
- else tip.append(i18n("Text clip") + "</b><br />" + clipUrl().path());
- break;
- case SLIDESHOW:
- tip.append(i18n("Slideshow clip") + "</b><br />" + clipUrl().directory());
- break;
- case VIRTUAL:
- tip.append(i18n("Virtual clip"));
- break;
- case PLAYLIST:
- tip.append(i18n("Playlist clip") + "</b><br />" + clipUrl().path());
- break;
- default:
- tip.append(i18n("Unknown clip"));
- break;
- }
+ tip.append(m_clip->shortInfo());
setToolTip(0, tip);
}
if (m_clip == NULL) return;
QString prefix;
+
+ m_clip->setProperties(attributes);
+ m_clip->setMetadata(metadata);
+
if (m_clipType == UNKNOWN) {
QString cliptype = attributes.value("type");
if (cliptype == "audio") m_clipType = AUDIO;
}
}
}
+ else if (attributes.contains("frame_size")) slotSetToolTip();
+
if (attributes.contains("duration")) {
GenTime duration = GenTime(attributes.value("duration").toInt(), KdenliveSettings::project_fps());
QString itemdata = data(0, DurationRole).toString();
// No duration known, use an arbitrary one until it is.
}
- m_clip->setProperties(attributes);
- m_clip->setMetadata(metadata);
-
if (m_clip->description().isEmpty()) {
if (metadata.contains("description")) {
m_clip->setProperty("description", metadata.value("description"));
}
}
-void ProjectItem::setJobStatus(CLIPJOBSTATUS status, int progress, JOBTYPE jobType, const QString &statusMessage)
+void ProjectItem::setJobStatus(JOBTYPE jobType, CLIPJOBSTATUS status, int progress, const QString &statusMessage)
{
setData(0, JobTypeRole, jobType);
- if (progress > 0) setData(0, JobProgressRole, progress);
+ if (progress > 0) setData(0, JobProgressRole, qMin(100, progress));
else {
setData(0, JobProgressRole, status);
- setData(0, JobStatusMessage, statusMessage);
+ if ((status == JOBABORTED || status == JOBCRASHED || status == JOBDONE) || !statusMessage.isEmpty())
+ setData(0, JobStatusMessage, statusMessage);
slotSetToolTip();
}
}
+void ProjectItem::setConditionalJobStatus(CLIPJOBSTATUS status, JOBTYPE requestedJobType)
+{
+ if (data(0, JobTypeRole).toInt() == requestedJobType) {
+ setData(0, JobProgressRole, status);
+ }
+}
+
bool ProjectItem::hasProxy() const
{
if (m_clip == NULL) return false;
- if (m_clip->getProperty("proxy").isEmpty() || m_clip->getProperty("proxy") == "-" || data(0, JobProgressRole).toInt() == JOBCRASHED) return false;
+ if (m_clip->getProperty("proxy").size() < 2 || data(0, JobProgressRole).toInt() == JOBCRASHED) return false;
return true;
}
bool ProjectItem::isJobRunning() const
{
int s = data(0, JobProgressRole).toInt();
- if (s == JOBWAITING || s == CREATINGJOB || s > 0) return true;
+ if (s == JOBWAITING || s == JOBWORKING || s > 0) return true;
return false;
}
bool ProjectItem::isProxyRunning() const
{
int s = data(0, JobProgressRole).toInt();
- if ((s == CREATINGJOB || s > 0) && data(0, JobTypeRole).toInt() == (int) PROXYJOB) return true;
+ if ((s == JOBWORKING || s > 0) && data(0, JobTypeRole).toInt() == (int) PROXYJOB) return true;
return false;
}
-bool ProjectItem::playlistHasProxies(const QString path)
+bool ProjectItem::playlistHasProxies(const QString& path)
{
kDebug()<<"// CHECKING FOR PROXIES";
QFile file(path);
file.close();
QString root = doc.documentElement().attribute("root");
QDomNodeList kdenliveProducers = doc.elementsByTagName("kdenlive_producer");
- for (int i = 0; i < kdenliveProducers.count(); i++) {
+ for (int i = 0; i < kdenliveProducers.count(); ++i) {
QString proxy = kdenliveProducers.at(i).toElement().attribute("proxy");
if (!proxy.isEmpty() && proxy != "-") return true;
}