X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fprojectitem.cpp;h=a462755765335f6a6474784d6d71e51d4a6abb17;hb=c24658bd34221d735f0641c924b890e1a6be7101;hp=c42252376c2427d987d09037cb7979d2200e6b78;hpb=a1f0a54b93ab364a37fd8242c1881c61d066ada7;p=kdenlive diff --git a/src/projectitem.cpp b/src/projectitem.cpp index c4225237..a4627557 100644 --- a/src/projectitem.cpp +++ b/src/projectitem.cpp @@ -24,7 +24,7 @@ #include "docclipbase.h" #include -#include +#include #include #include @@ -35,31 +35,47 @@ const int JobTypeRole = Qt::UserRole + 6; const int JobStatusMessage = Qt::UserRole + 7; const int itemHeight = 38; -ProjectItem::ProjectItem(QTreeWidget * parent, DocClipBase *clip) : - QTreeWidgetItem(parent, PROJECTCLIPTYPE), +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) : - QTreeWidgetItem(parent, PROJECTCLIPTYPE), +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); else setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled | Qt::ItemIsEditable | 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(); + 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(); @@ -67,7 +83,7 @@ void ProjectItem::buildItem() if (duration != GenTime()) { durationText = Timecode::getEasyTimecode(duration, KdenliveSettings::project_fps()); } - if (m_clipType == PLAYLIST) { + if (m_clipType == Playlist) { // Check if the playlist xml contains a proxy inside, and inform user if (playlistHasProxies(m_clip->fileURL().path())) { durationText.prepend(i18n("Contains proxies") + " / "); @@ -80,6 +96,17 @@ ProjectItem::~ProjectItem() { } +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() { @@ -97,7 +124,7 @@ const QString &ProjectItem::clipId() const return m_clipId; } -CLIPTYPE ProjectItem::clipType() const +ClipType ProjectItem::clipType() const { return m_clipType; } @@ -114,7 +141,7 @@ QDomElement ProjectItem::toXml() const const KUrl ProjectItem::clipUrl() const { - if (m_clipType != COLOR && m_clipType != VIRTUAL && m_clipType != UNKNOWN) + if (m_clipType != Color && m_clipType != Virtual && m_clipType != Unknown) return KUrl(m_clip->getProperty("resource")); else return KUrl(); } @@ -127,7 +154,7 @@ void ProjectItem::changeDuration(int frames) setData(0, DurationRole, itemdata + Timecode::getEasyTimecode(GenTime(frames, KdenliveSettings::project_fps()), KdenliveSettings::project_fps())); } -void ProjectItem::setProperties(QMap props) +void ProjectItem::setProperties(const QMap &props) { if (m_clip == NULL) return; m_clip->setProperties(props); @@ -167,40 +194,7 @@ void ProjectItem::slotSetToolTip() if (hasProxy() && data(0, JobTypeRole).toInt() != PROXYJOB) { tip.append(i18n("Proxy clip") + " | "); } - tip.append(""); - switch (m_clipType) { - case AUDIO: - tip.append(i18n("Audio clip") + "
" + clipUrl().path()); - break; - case VIDEO: - tip.append(i18n("Mute video clip") + "
" + clipUrl().path()); - break; - case AV: - tip.append(i18n("Video clip") + "
" + clipUrl().path()); - break; - case COLOR: - tip.append(i18n("Color clip")); - break; - case IMAGE: - tip.append(i18n("Image clip") + "
" + clipUrl().path()); - break; - case TEXT: - if (!clipUrl().isEmpty() && m_clip->getProperty("xmldata").isEmpty()) tip.append(i18n("Template text clip") + "
" + clipUrl().path()); - else tip.append(i18n("Text clip") + "
" + clipUrl().path()); - break; - case SLIDESHOW: - tip.append(i18n("Slideshow clip") + "
" + clipUrl().directory()); - break; - case VIRTUAL: - tip.append(i18n("Virtual clip")); - break; - case PLAYLIST: - tip.append(i18n("Playlist clip") + "
" + clipUrl().path()); - break; - default: - tip.append(i18n("Unknown clip")); - break; - } + tip.append(m_clip->shortInfo()); setToolTip(0, tip); } @@ -210,23 +204,29 @@ void ProjectItem::setProperties(const QMap < QString, QString > &attributes, con if (m_clip == NULL) return; QString prefix; - if (m_clipType == UNKNOWN) { + + 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 (cliptype == "video") m_clipType = VIDEO; + if (cliptype == "audio") m_clipType = Audio; + else if (cliptype == "video") m_clipType = Video; else if (cliptype == "av") m_clipType = AV; - else if (cliptype == "playlist") m_clipType = PLAYLIST; + else if (cliptype == "playlist") m_clipType = Playlist; else m_clipType = AV; m_clip->setClipType(m_clipType); slotSetToolTip(); - if (m_clipType == PLAYLIST) { + if (m_clipType == Playlist) { // Check if the playlist xml contains a proxy inside, and inform user if (playlistHasProxies(m_clip->fileURL().path())) { prefix = i18n("Contains proxies") + " / "; } } } + 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(); @@ -239,9 +239,6 @@ void ProjectItem::setProperties(const QMap < QString, QString > &attributes, con // 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")); @@ -253,19 +250,19 @@ void ProjectItem::setProperties(const QMap < QString, QString > &attributes, con } } -void ProjectItem::setJobStatus(JOBTYPE jobType, CLIPJOBSTATUS status, int progress, 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); - if ((status == JOBABORTED || status == JOBCRASHED || status == JOBDONE) || !statusMessage.isEmpty()) + if ((status == JobAborted || status == JobCrashed || status == JobDone) || !statusMessage.isEmpty()) setData(0, JobStatusMessage, statusMessage); slotSetToolTip(); } } -void ProjectItem::setConditionalJobStatus(CLIPJOBSTATUS status, JOBTYPE requestedJobType) +void ProjectItem::setConditionalJobStatus(ClipJobStatus status, JOBTYPE requestedJobType) { if (data(0, JobTypeRole).toInt() == requestedJobType) { setData(0, JobProgressRole, status); @@ -275,30 +272,30 @@ void ProjectItem::setConditionalJobStatus(CLIPJOBSTATUS status, JOBTYPE requeste bool ProjectItem::hasProxy() const { if (m_clip == NULL) return false; - if (m_clip->getProperty("proxy").size() < 2 || 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::isProxyReady() const { - return (data(0, JobProgressRole).toInt() == JOBDONE); + return (data(0, JobProgressRole).toInt() == JobDone); } bool ProjectItem::isJobRunning() const { int s = data(0, JobProgressRole).toInt(); - if (s == JOBWAITING || s == JOBWORKING || 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 == JOBWORKING || 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); @@ -312,7 +309,7 @@ bool ProjectItem::playlistHasProxies(const QString 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; }