]> git.sesse.net Git - kdenlive/blobdiff - src/projectitem.cpp
Fix audio thumbs progress info when window was not focused
[kdenlive] / src / projectitem.cpp
index db4c4ca7f76d4411ab7b37a7eb676b80a1b98ea0..287c27ba3a1f753c0b9f2c7c6d7afee7866a0181 100644 (file)
 #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;
+  const int UsageRole = NameRole + 2;
+
 
 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)
+    : QTreeWidgetItem(parent, strings, QTreeWidgetItem::UserType), m_clipType(UNKNOWN), m_clipId(clipId), m_isGroup(false), m_groupName(QString::null)
 {
   m_element = xml.cloneNode().toElement();
   setSizeHint(0, QSize(65, 45));
-  setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled);
+  setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled | Qt::ItemIsEditable);
   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();
+      m_clipType = (CLIPTYPE) cType.toInt();
       slotSetToolTip();
     }
+
+    if (m_clipType == COLOR || m_clipType == IMAGE) m_element.setAttribute("duration", MAXCLIPDURATION);
+    else if (m_element.attribute("duration").isEmpty() && !m_element.attribute("out").isEmpty()) {
+      m_element.setAttribute("duration", m_element.attribute("out").toInt() - m_element.attribute("in").toInt());
+    }
   }
 }
 
 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)
+    : QTreeWidgetItem(parent, strings, QTreeWidgetItem::UserType), m_clipType(UNKNOWN), m_clipId(clipId), m_isGroup(false), m_groupName(QString::null)
 {
   m_element = xml.cloneNode().toElement();
   setSizeHint(0, QSize(65, 45));
-  setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled);
+  setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled | Qt::ItemIsEditable);
   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();
+      m_clipType = (CLIPTYPE) cType.toInt();
       slotSetToolTip();
     }
   }
 }
 
 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)
+    : QTreeWidgetItem(parent, strings, QTreeWidgetItem::UserType), m_element(QDomElement()), m_clipType(UNKNOWN), m_clipId(clipId), m_isGroup(true), m_groupName(strings.at(1))
 {
   setSizeHint(0, QSize(65, 45));
-  setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled);
+  setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled | Qt::ItemIsEditable);
   setIcon(0, KIcon("folder"));
 }
 
+ProjectItem::ProjectItem(QTreeWidget * parent, DocClipBase *clip)
+    : QTreeWidgetItem(parent, QStringList(), QTreeWidgetItem::UserType), m_isGroup(false)
+{
+  setSizeHint(0, QSize(65, 45));
+  setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled | Qt::ItemIsEditable);
+  m_clip = clip;
+  m_element = clip->toXML();
+  m_clipId = clip->getId();
+  QString name = m_element.attribute("name");
+  if (name.isEmpty()) name = KUrl(m_element.attribute("resource")).fileName();
+  m_clipType = (CLIPTYPE) m_element.attribute("type").toInt();
+  m_groupName = m_element.attribute("group");
+  setText(1, name);
+  kDebug()<<"PROJECT ITE;. ADDING LCIP: "<< m_clipId;
+}
+
+
 ProjectItem::~ProjectItem()
 {
 }
 
-ProjectItem *ProjectItem::clone() const
+int ProjectItem::numReferences() const
 {
-  ProjectItem *item = (ProjectItem *) this->QTreeWidgetItem::clone();
-  /*if (isGroup())
-  {
-    item = new ProjectItem(new QTreeWidget(), names(), clipId());
-  }  
-  else {
-    if (parent())
-      item = new ProjectItem(new QTreeWidgetItem(), names(), toXml().cloneNode().toElement(), clipId());
-    else 
-      item = new ProjectItem(new QTreeWidget(), names(), toXml().cloneNode().toElement(), clipId());
-  }*/
-  return item;
+  if (!m_clip) return 0;
+  return m_clip->numReferences();
 }
 
 int ProjectItem::clipId() const
@@ -101,15 +114,24 @@ int ProjectItem::clipId() const
   return m_clipId;
 }
 
+CLIPTYPE ProjectItem::clipType() const
+{
+ return m_clipType;
+}
+
+int ProjectItem::clipMaxDuration() const
+{
+  return m_element.attribute("duration").toInt();
+}
+
 bool ProjectItem::isGroup() const
 {
   return m_isGroup;
 }
 
-const QString &ProjectItem::groupName() const
+const QString ProjectItem::groupName() const
 {
-  if (isGroup()) return text(1);
-  else return QString::null;
+  return m_groupName;
 }
 
 QStringList ProjectItem::names() const
@@ -126,6 +148,14 @@ QDomElement ProjectItem::toXml() const
     return m_element;
 }
 
+const KUrl ProjectItem::clipUrl() const
+{
+    if (m_clipType != COLOR && m_clipType != VIRTUAL && m_clipType != UNKNOWN)
+      return KUrl(m_element.attribute("resource"));
+    else return KUrl();
+}
+
+
 void ProjectItem::slotSetToolTip()
 {
   QString tip = "<qt><b>";
@@ -168,11 +198,14 @@ void ProjectItem::slotSetToolTip()
 
 void ProjectItem::setProperties(const QMap < QString, QString > &attributes, const QMap < QString, QString > &metadata)
 {
-       if (attributes.contains("duration")) {
-           m_duration = GenTime(attributes["duration"].toInt(), 25);
-           setData(1, DurationRole, Timecode::getEasyTimecode(m_duration, 25));
-           m_durationKnown = true;
-       } else {
+  if (attributes.contains("duration")) {
+    if (m_clipType == AUDIO || m_clipType == VIDEO || m_clipType == 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;
+    m_clip->setDuration(m_duration);
+    kDebug()<<"//// LOADED CLIP, DURATION SET TO: "<<m_duration.frames(25);
+  } else {
            // No duration known, use an arbitrary one until it is.
            m_duration = GenTime(0.0);
            m_durationKnown = false;
@@ -181,28 +214,31 @@ void ProjectItem::setProperties(const QMap < QString, QString > &attributes, con
 
        //extend attributes -reh
 
-       if (m_clipType == DocClipBase::NONE) {
+  if (m_clipType == UNKNOWN) {
          if (attributes.contains("type")) {
            if (attributes["type"] == "audio")
-               m_clipType = DocClipBase::AUDIO;
+               m_clipType = AUDIO;
            else if (attributes["type"] == "video")
-               m_clipType = DocClipBase::VIDEO;
+               m_clipType = VIDEO;
            else if (attributes["type"] == "av")
-               m_clipType = DocClipBase::AV;
+               m_clipType = AV;
            else if (attributes["type"] == "playlist")
-               m_clipType = DocClipBase::PLAYLIST;
+               m_clipType = PLAYLIST;
          } else {
-           m_clipType = DocClipBase::AV;
+           m_clipType = AV;
          }
+       m_clip->setClipType(m_clipType);
        }
-       slotSetToolTip();
+  slotSetToolTip();
+  if (m_element.isNull()) {
+    QDomDocument doc;
+    m_element = doc.createElement("producer");
+  }
+  if (m_element.attribute("duration") == QString::null) m_element.setAttribute("duration", attributes["duration"].toInt());
+  m_element.setAttribute("resource", attributes["filename"]);
+  m_element.setAttribute("type", (int) m_clipType);
 
-       if (m_element.isNull()) {
-         QDomDocument doc;
-         m_element = doc.createElement("producer");
-       }
-       m_element.setAttribute("resource", attributes["filename"]);
-       m_element.setAttribute("type", (int) m_clipType);
+  m_clip->slotRequestAudioThumbs();
 /*
        if (attributes.contains("height")) {
            m_height = attributes["height"].toInt();