+ m_listView->clearSelection();
+ QTreeWidgetItemIterator it(m_listView);
+ ProjectItem *item;
+ while (*it) {
+ item = static_cast <ProjectItem *>(*it);
+ if (!item->isGroup() && item->numReferences() == 0) item->setSelected(true);
+ it++;
+ }
+ slotRemoveClip();
+}
+
+void ProjectList::trashUnusedClips()
+{
+ QTreeWidgetItemIterator it(m_listView);
+ ProjectItem *item;
+ QStringList ids;
+ QStringList urls;
+ while (*it) {
+ item = static_cast <ProjectItem *>(*it);
+ if (!item->isGroup() && item->numReferences() == 0) {
+ ids << item->clipId();
+ KUrl url = item->clipUrl();
+ if (!url.isEmpty()) urls << url.path();
+ }
+ it++;
+ }
+ urls.removeDuplicates();
+ // Check that we don't use the URL in another clip
+ QTreeWidgetItemIterator it2(m_listView);
+ while (*it2) {
+ item = static_cast <ProjectItem *>(*it2);
+ if (item->numReferences() > 0) {
+ KUrl url = item->clipUrl();
+ if (!url.isEmpty() && urls.contains(url.path())) urls.removeAll(url.path());
+ }
+ it2++;
+ }
+
+ m_doc->deleteProjectClip(ids);
+ for (int i = 0; i < urls.count(); i++) {
+ KIO::NetAccess::del(KUrl(urls.at(i)), this);
+ }
+}
+
+void ProjectList::slotReloadClip(const QString &id)
+{
+ QList<QTreeWidgetItem *> selected;
+ if (id.isEmpty()) selected = m_listView->selectedItems();
+ else selected.append(getItemById(id));
+ ProjectItem *item;
+ for (int i = 0; i < selected.count(); i++) {
+ item = static_cast <ProjectItem *>(selected.at(i));
+ if (item && !item->isGroup()) {
+ if (item->clipType() == IMAGE) {
+ item->referencedClip()->producer()->set("force_reload", 1);
+ } else if (item->clipType() == TEXT) {
+ if (!item->referencedClip()->getProperty("xmltemplate").isEmpty()) regenerateTemplate(item);
+ }
+ //requestClipInfo(item->toXml(), item->clipId(), true);
+ // Clear the file_hash value, which will cause a complete reload of the clip
+ emit getFileProperties(item->toXml(), item->clipId(), true);