if (m_dropItem) {
AddTimelineClipCommand *command = new AddTimelineClipCommand(this, m_dropItem->xml(), m_dropItem->clipProducer(), m_dropItem->track(), m_dropItem->startPos(), m_dropItem->rect(), m_dropItem->duration(), false);
m_commandStack->push(command);
+ m_dropItem->baseClip()->addReference();
+ m_document->updateClip(m_dropItem->baseClip()->getId());
kDebug()<<"IIIIIIIIIIIIIIIIIIIIIIII TRAX CNT: "<<m_tracksCount<<", DROP: "<<m_dropItem->track();
m_document->renderer()->mltInsertClip(m_tracksCount - m_dropItem->track(), GenTime(m_dropItem->startPos(), 25), m_dropItem->xml());
}
kDebug()<<"---------------- ERROR, CANNOT find clip to move at: "<<rect.x();
return;
}
+ item->baseClip()->removeReference();
+ m_document->updateClip(item->baseClip()->getId());
delete item;
m_document->renderer()->mltRemoveClip(m_tracksCount - track, GenTime(startpos, 25));
}
DocClipBase *baseclip = m_document->clipManager()->getClipById(clipId);
ClipItem *item = new ClipItem(baseclip, track, startpos, r, duration);
scene()->addItem(item);
+ baseclip->addReference();
+ m_document->updateClip(baseclip->getId());
m_document->renderer()->mltInsertClip(m_tracksCount - track, GenTime(startpos, 25), xml);
}
return m_render;
}
+void KdenliveDoc::updateClip(int id)
+{
+ emit updateClipDisplay(id);
+}
+
int KdenliveDoc::getFramePos(QString duration)
{
return m_timecode.getFrameCount(duration, m_fps);
void deleteClip(const uint clipId);
int getFramePos(QString duration);
DocClipBase *getBaseClip(int clipId);
+ void updateClip(int id);
private:
KUrl m_url;
signals:
void addProjectClip(DocClipBase *);
+ void updateClipDisplay(int);
};
#endif
connect(trackView, SIGNAL(mousePosition(int)), this, SLOT(slotUpdateMousePosition(int)));
connect(m_projectMonitor, SIGNAL(renderPosition(int)), trackView, SLOT(moveCursorPos(int)));
connect(doc, SIGNAL(addProjectClip(DocClipBase *)), m_projectList, SLOT(slotAddClip(DocClipBase *)));
+ connect(doc, SIGNAL(updateClipDisplay(int)), m_projectList, SLOT(slotUpdateClip(int)));
+
m_projectList->setDocument(doc);
m_monitorManager->setTimecode(doc->timecode());
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(UNKNOWN), m_clipId(clipId), m_isGroup(false), m_groupName(QString::null)
{
}
+int ProjectItem::numReferences() const
+{
+ if (!m_clip) return 0;
+ return m_clip->numReferences();
+}
+
int ProjectItem::clipId() const
{
return m_clipId;
ProjectItem(QTreeWidget * parent, DocClipBase *clip);
virtual ~ProjectItem();
QDomElement toXml() const;
+ int numReferences() const;
void setProperties(const QMap < QString, QString > &attributes, const QMap < QString, QString > &metadata);
int clipId() const;
if (groupItem) item = new ProjectItem(groupItem, name, elem, clipId);
else item = new ProjectItem(listView, name, elem, clipId);
if (!url.isEmpty()) {
- item->setData(1, FullPathRole, url.path());
// if file has Nepomuk comment, use it
Nepomuk::Resource f( url.path() );
QString annotation = f.description();
{
ProjectItem *item = new ProjectItem(listView, clip);
listView->setCurrentItem(item);
- /*
- if (clip->clipType() != COLOR) {
- Nepomuk::Resource f( clip->fileURL().path() );
- QString annotation = f.description();
- if (!annotation.isEmpty()) item->setText(2, annotation);
- }*/
emit getFileProperties(clip->toXML(), clip->getId());
}
+void ProjectList::slotUpdateClip(int id)
+{
+ ProjectItem *item = getItemById(id);
+ item->setData(1, UsageRole, QString::number(item->numReferences()));
+}
+
void ProjectList::slotAddClip(QUrl givenUrl, const QString &group)
{
if (!m_commandStack) kDebug()<<"!!!!!!!!!!!!!!!! NO CMD STK";
QStringList itemEntry;
itemEntry.append(QString::null);
itemEntry.append(resource.fileName());
- addClip(itemEntry, producer, id, resource, groupName, parentId);
- /*AddClipCommand *command = new AddClipCommand(this, itemEntry, producer, id, resource, true);
- m_commandStack->push(command);*/
-
-
- /*ProjectItem *item = new ProjectItem(listView, itemEntry, producer);
- item->setData(1, FullPathRole, resource.path());
- item->setData(1, ClipTypeRole, (int) type);*/
-
+ addClip(itemEntry, producer, id, resource, groupName, parentId);
}
}
else if (type == COLOR) {
itemEntry.append(QString::null);
itemEntry.append(producer.attribute("name", i18n("Color clip")));
addClip(itemEntry, producer, id, KUrl(), groupName, parentId);
- /*AddClipCommand *command = new AddClipCommand(this, itemEntry, producer, id, KUrl(), true);
- m_commandStack->push(command);*/
- //ProjectItem *item = new ProjectItem(listView, itemEntry, producer);
- /*item->setIcon(0, QIcon(pix));
- item->setData(1, ClipTypeRole, (int) type);*/
}
}
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;
class ItemDelegate: public KExtendableItemDelegate
{
//painter->setPen(Qt::green);
font.setBold(false);
painter->setFont(font);
- painter->drawText(r2, Qt::AlignLeft | Qt::AlignVCenter , index.data(DurationRole).toString());
+ QString subText = index.data(DurationRole).toString();
+ QString usage = index.data(UsageRole).toString();
+ if (!usage.isEmpty()) subText.append(QString(" (%1)").arg(usage));
+ painter->drawText(r2, Qt::AlignLeft | Qt::AlignVCenter , subText);
painter->restore();
}
else
void slotReplyGetImage(int clipId, int pos, const QPixmap &pix, int w, int h);
void slotReplyGetFileProperties(int clipId, const QMap < QString, QString > &properties, const QMap < QString, QString > &metadata);
void slotAddClip(DocClipBase *clip);
+ void slotUpdateClip(int id);
private: