X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fprojectitem.cpp;h=7b3a335efde2394c2617a415c3ef522ee136cc9e;hb=7ec7b3fb2351e87b56d02342c48f7f045353e41c;hp=3b4cdf40adf77c521998b980f4b6359cfa50c178;hpb=5ac61d0ef08900a046b8baaf8570ab016352766f;p=kdenlive diff --git a/src/projectitem.cpp b/src/projectitem.cpp index 3b4cdf40..7b3a335e 100644 --- a/src/projectitem.cpp +++ b/src/projectitem.cpp @@ -18,251 +18,247 @@ ***************************************************************************/ -#include -#include -#include -#include +#include "projectitem.h" +#include "timecode.h" +#include "kdenlivesettings.h" +#include "docclipbase.h" #include #include #include +const int DurationRole = Qt::UserRole + 1; -#include "projectitem.h" -#include "timecode.h" - - const int NameRole = Qt::UserRole; - const int DurationRole = NameRole + 1; - const int FullPathRole = NameRole + 2; - const int ClipTypeRole = NameRole + 3; - -ProjectItem::ProjectItem(QTreeWidget * parent, const QStringList & strings, QDomElement xml, int clipId) - : QTreeWidgetItem(parent, strings, QTreeWidgetItem::UserType), m_clipType(DocClipBase::NONE), m_clipId(clipId), m_isGroup(false), m_groupName(QString::null) +// folder +ProjectItem::ProjectItem(QTreeWidget * parent, const QStringList & strings, const QString &clipId) : + QTreeWidgetItem(parent, strings), + m_groupname(strings.at(1)), + m_clipType(FOLDER), + m_clipId(clipId), + m_clip(NULL) { - m_element = xml.cloneNode().toElement(); - setSizeHint(0, QSize(65, 45)); - setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled); - if (!m_element.isNull()) { - m_element.setAttribute("id", clipId); - QString cType = m_element.attribute("type", QString::null); - if (!cType.isEmpty()) { - m_clipType = (DocClipBase::CLIPTYPE) cType.toInt(); - slotSetToolTip(); - } - } + setSizeHint(0, QSize(65, 45)); + setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled | Qt::ItemIsEditable); + setIcon(0, KIcon("folder")); + setToolTip(1, "" + i18n("Folder")); + //kDebug() << "Constructed as folder, with clipId: " << m_clipId << ", and groupname: " << m_groupname; } -ProjectItem::ProjectItem(QTreeWidgetItem * parent, const QStringList & strings, QDomElement xml, int clipId) - : QTreeWidgetItem(parent, strings, QTreeWidgetItem::UserType), m_clipType(DocClipBase::NONE), m_clipId(clipId), m_isGroup(false), m_groupName(QString::null) +ProjectItem::ProjectItem(QTreeWidget * parent, DocClipBase *clip) : + QTreeWidgetItem(parent) { - m_element = xml.cloneNode().toElement(); - setSizeHint(0, QSize(65, 45)); - setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled); - if (!m_element.isNull()) { - m_element.setAttribute("id", clipId); - QString cType = m_element.attribute("type", QString::null); - if (!cType.isEmpty()) { - m_clipType = (DocClipBase::CLIPTYPE) cType.toInt(); - slotSetToolTip(); - } - } + setSizeHint(0, QSize(65, 45)); + setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled | Qt::ItemIsEditable); + m_clip = clip; + m_clipId = clip->getId(); + QString name = m_clip->getProperty("name"); + if (name.isEmpty()) name = KUrl(m_clip->getProperty("resource")).fileName(); + m_clipType = (CLIPTYPE) m_clip->getProperty("type").toInt(); + if (m_clipType != UNKNOWN) slotSetToolTip(); + setText(1, name); + setText(2, m_clip->description()); + if ((m_clip->clipType() == AV || m_clip->clipType() == AUDIO) && KdenliveSettings::audiothumbnails()) m_clip->askForAudioThumbs(); + GenTime duration = m_clip->duration(); + if (duration != GenTime()) setData(1, DurationRole, Timecode::getEasyTimecode(duration, KdenliveSettings::project_fps())); + //setFlags(Qt::NoItemFlags); + //kDebug() << "Constructed with clipId: " << m_clipId; } -ProjectItem::ProjectItem(QTreeWidget * parent, const QStringList & strings, int clipId) - : QTreeWidgetItem(parent, strings, QTreeWidgetItem::UserType), m_element(QDomElement()), m_clipType(DocClipBase::NONE), m_clipId(clipId), m_isGroup(true), m_groupName(strings.at(1)) +ProjectItem::ProjectItem(QTreeWidgetItem * parent, DocClipBase *clip) : + QTreeWidgetItem(parent) { - setSizeHint(0, QSize(65, 45)); - setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled); - setIcon(0, KIcon("folder")); + setSizeHint(0, QSize(65, 45)); + setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled | Qt::ItemIsEditable); + m_clip = clip; + m_clipId = clip->getId(); + QString name = m_clip->getProperty("name"); + if (name.isEmpty()) name = KUrl(m_clip->getProperty("resource")).fileName(); + m_clipType = (CLIPTYPE) m_clip->getProperty("type").toInt(); + setText(1, name); + setText(2, m_clip->description()); + if ((m_clip->clipType() == AV || m_clip->clipType() == AUDIO) && KdenliveSettings::audiothumbnails()) m_clip->askForAudioThumbs(); + GenTime duration = m_clip->duration(); + if (duration != GenTime()) setData(1, DurationRole, Timecode::getEasyTimecode(duration, KdenliveSettings::project_fps())); + //setFlags(Qt::NoItemFlags); + //kDebug() << "Constructed with clipId: " << m_clipId; } + ProjectItem::~ProjectItem() { } -int ProjectItem::clipId() const +int ProjectItem::numReferences() const { - return m_clipId; + if (!m_clip) return 0; + return m_clip->numReferences(); } -int ProjectItem::clipMaxDuration() const +const QString &ProjectItem::clipId() const { - return m_element.attribute("duration").toInt(); + return m_clipId; } -bool ProjectItem::isGroup() const +CLIPTYPE ProjectItem::clipType() const { - return m_isGroup; + return m_clipType; } -const QString ProjectItem::groupName() const +int ProjectItem::clipMaxDuration() const { - return m_groupName; + return m_clip->getProperty("duration").toInt(); +} + +bool ProjectItem::isGroup() const +{ + return m_clipType == FOLDER; } QStringList ProjectItem::names() const { - QStringList result; - result.append(text(0)); - result.append(text(1)); - result.append(text(2)); - return result; + QStringList result; + result.append(text(0)); + result.append(text(1)); + result.append(text(2)); + return result; } QDomElement ProjectItem::toXml() const { - return m_element; + return m_clip->toXML(); } const KUrl ProjectItem::clipUrl() const { - if (m_clipType != DocClipBase::COLOR && m_clipType != DocClipBase::VIRTUAL && m_clipType != DocClipBase::NONE) - return KUrl(m_element.attribute("resouce")); + if (m_clipType != COLOR && m_clipType != VIRTUAL && m_clipType != UNKNOWN && m_clipType != FOLDER) + return KUrl(m_clip->getProperty("resource")); else return KUrl(); } +void ProjectItem::changeDuration(int frames) +{ + setData(1, DurationRole, Timecode::getEasyTimecode(GenTime(frames, KdenliveSettings::project_fps()), KdenliveSettings::project_fps())); +} + +void ProjectItem::setProperties(QMap props) +{ + if (m_clip == NULL) return; + m_clip->setProperties(props); +} + +QString ProjectItem::getClipHash() const +{ + if (m_clip == NULL) return QString(); + return m_clip->getClipHash(); +} + +void ProjectItem::setProperty(const QString &key, const QString &value) +{ + if (m_clip == NULL) return; + m_clip->setProperty(key, value); +} + +void ProjectItem::clearProperty(const QString &key) +{ + if (m_clip == NULL) return; + m_clip->clearProperty(key); +} + +const QString ProjectItem::groupName() const +{ + return m_groupname; +} + +void ProjectItem::setGroupName(const QString name) +{ + m_groupname = name; + setText(1, name); +} + +DocClipBase *ProjectItem::referencedClip() +{ + return m_clip; +} void ProjectItem::slotSetToolTip() { - QString tip = ""; - switch (m_clipType) { - case 1: - tip.append(i18n("Audio clip")); - break; - case 2: - tip.append(i18n("Mute video clip")); - break; - case 3: - tip.append(i18n("Video clip")); - break; - case 4: - tip.append(i18n("Color clip")); - setData(1, DurationRole, Timecode::getEasyTimecode(GenTime(m_element.attribute("out", "250").toInt(), 25), 25)); - break; - case 5: - tip.append(i18n("Image clip")); - break; - case 6: - tip.append(i18n("Text clip")); - break; - case 7: - tip.append(i18n("Slideshow clip")); - break; - case 8: - tip.append(i18n("Virtual clip")); - break; - case 9: - tip.append(i18n("Playlist clip")); - break; + QString tip = ""; + 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: + 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(i18n("Unknown clip")); + break; + } - setToolTip(1, tip); + setToolTip(1, tip); } + void ProjectItem::setProperties(const QMap < QString, QString > &attributes, const QMap < QString, QString > &metadata) { - if (attributes.contains("duration")) { - if (m_clipType == DocClipBase::AUDIO || m_clipType == DocClipBase::VIDEO || m_clipType == DocClipBase::AV) m_element.setAttribute("duration", attributes["duration"].toInt()); - m_duration = GenTime(attributes["duration"].toInt(), 25); - setData(1, DurationRole, Timecode::getEasyTimecode(m_duration, 25)); - m_durationKnown = true; - } else { - // No duration known, use an arbitrary one until it is. - m_duration = GenTime(0.0); - m_durationKnown = false; - } - - - //extend attributes -reh - - if (m_clipType == DocClipBase::NONE) { - if (attributes.contains("type")) { - if (attributes["type"] == "audio") - m_clipType = DocClipBase::AUDIO; - else if (attributes["type"] == "video") - m_clipType = DocClipBase::VIDEO; - else if (attributes["type"] == "av") - m_clipType = DocClipBase::AV; - else if (attributes["type"] == "playlist") - m_clipType = DocClipBase::PLAYLIST; - } else { - m_clipType = DocClipBase::AV; - } - } - slotSetToolTip(); - - if (m_element.isNull()) { - QDomDocument doc; - m_element = doc.createElement("producer"); - m_element.setAttribute("duration", attributes["duration"].toInt()); - } - m_element.setAttribute("resource", attributes["filename"]); - m_element.setAttribute("type", (int) m_clipType); -/* - if (attributes.contains("height")) { - m_height = attributes["height"].toInt(); - } else { - m_height = 0; - } - if (attributes.contains("width")) { - m_width = attributes["width"].toInt(); - } else { - m_width = 0; - } - //decoder name - if (attributes.contains("name")) { - m_decompressor = attributes["name"]; - } else { - m_decompressor = "n/a"; - } - //video type ntsc/pal - if (attributes.contains("system")) { - m_system = attributes["system"]; - } else { - m_system = "n/a"; - } - if (attributes.contains("fps")) { - m_framesPerSecond = attributes["fps"].toInt(); - } else { - // No frame rate known. - m_framesPerSecond = 0; - } - //audio attributes -reh - if (attributes.contains("channels")) { - m_channels = attributes["channels"].toInt(); - } else { - m_channels = 0; - } - if (attributes.contains("format")) { - m_format = attributes["format"]; - } else { - m_format = "n/a"; - } - if (attributes.contains("frequency")) { - m_frequency = attributes["frequency"].toInt(); - } else { - m_frequency = 0; - } - if (attributes.contains("videocodec")) { - m_videoCodec = attributes["videocodec"]; - } - if (attributes.contains("audiocodec")) { - m_audioCodec = attributes["audiocodec"]; - } - - m_metadata = metadata; - - if (m_metadata.contains("description")) { - setDescription (m_metadata["description"]); - } - else if (m_metadata.contains("comment")) { - setDescription (m_metadata["comment"]); - } -*/ + if (m_clip == NULL) return; + //setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled); + if (attributes.contains("duration")) { + GenTime duration = GenTime(attributes.value("duration").toInt(), KdenliveSettings::project_fps()); + setData(1, DurationRole, Timecode::getEasyTimecode(duration, KdenliveSettings::project_fps())); + m_clip->setDuration(duration); + //kDebug() << "//// LOADED CLIP, DURATION SET TO: " << duration.frames(KdenliveSettings::project_fps()); + } else { + // No duration known, use an arbitrary one until it is. + } + + //extend attributes -reh + + if (m_clipType == UNKNOWN) { + QString cliptype = attributes.value("type"); + 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 m_clipType = AV; + + m_clip->setClipType(m_clipType); + slotSetToolTip(); + } + m_clip->setProperties(attributes); + m_clip->setMetadata(metadata); + if ((m_clipType == AV || m_clipType == AUDIO) && KdenliveSettings::audiothumbnails()) m_clip->askForAudioThumbs(); + + if (m_clip->description().isEmpty()) { + if (metadata.contains("description")) { + m_clip->setProperty("description", metadata.value("description")); + setText(2, m_clip->description()); + } else if (metadata.contains("comment")) { + m_clip->setProperty("description", metadata.value("comment")); + setText(2, m_clip->description()); + } + } } -#include "projectitem.moc"