#include <KFileDialog>
#include <KInputDialog>
#include <KMessageBox>
+#include <KIO/NetAccess>
+#include <KFileItem>
#include <nepomuk/global.h>
#include <nepomuk/resourcemanager.h>
}
}
+void ProjectList::cleanup()
+{
+ m_listView->clearSelection();
+ QTreeWidgetItemIterator it(m_listView);
+ ProjectItem *item;
+ while (*it) {
+ item = static_cast <ProjectItem *>(*it);
+ if (item->numReferences() == 0) item->setSelected(true);
+ it++;
+ }
+ slotRemoveClip();
+}
+
+void ProjectList::trashUnusedClips()
+{
+ QTreeWidgetItemIterator it(m_listView);
+ ProjectItem *item;
+ QStringList ids;
+ KUrl::List urls;
+ while (*it) {
+ item = static_cast <ProjectItem *>(*it);
+ if (item->numReferences() == 0) {
+ ids << item->clipId();
+ KUrl url = item->clipUrl();
+ if (!url.isEmpty()) urls << url;
+ }
+ it++;
+ }
+ m_doc->deleteProjectClip(ids);
+ for (int i = 0; i < urls.count(); i++) {
+ KIO::NetAccess::del(urls.at(i), this);
+ }
+}
+
void ProjectList::slotReloadClip(const QString &id)
{
QList<QTreeWidgetItem *> selected;
ProjectItem *item = getItemById(id);
if (item) {
slotUpdateClipProperties(item, properties);
- if (properties.contains("colour") || properties.contains("resource") || properties.contains("xmldata") || properties.contains("force_aspect_ratio") || properties.contains("templatetext")) {
+ if (properties.contains("out")) {
+ slotReloadClip(id);
+ //item->changeDuration(properties.value("out").toInt());
+ }
+ else if (properties.contains("colour") || properties.contains("resource") || properties.contains("xmldata") || properties.contains("force_aspect_ratio") || properties.contains("templatetext")) {
slotRefreshClipThumbnail(item);
emit refreshClip();
}
- if (properties.contains("out")) item->changeDuration(properties.value("out").toInt());
}
}
oldprops.insert("templatetext", clip->referencedClip()->getProperty("templatetext"));
newprops.insert("templatetext", item->text(2));
}
-
slotUpdateClipProperties(clip->clipId(), newprops);
EditClipCommand *command = new EditClipCommand(this, clip->clipId(), oldprops, newprops, false);
m_commandStack->push(command);
void ProjectList::slotRemoveClip()
{
if (!m_listView->currentItem()) return;
- QList <QString> ids;
+ QStringList ids;
QMap <QString, QString> folderids;
QList<QTreeWidgetItem *> selected = m_listView->selectedItems();
ProjectItem *item;
//m_render->getFileProperties(clip->toXML(), clip->getId(), true);
}
const QString parent = clip->getProperty("groupid");
- kDebug() << "Adding clip with groupid: " << parent;
ProjectItem *item = NULL;
if (!parent.isEmpty()) {
ProjectItem *parentitem = getFolderItemById(parent);
m_infoQueue.remove(j.key());
emit getFileProperties(dom, id, false);
}
-
- if (!m_infoQueue.isEmpty() && !m_queueTimer.isActive()) m_queueTimer.start();
+ //if (!m_infoQueue.isEmpty() && !m_queueTimer.isActive()) m_queueTimer.start();
}
void ProjectList::slotUpdateClip(const QString &id)
if (KMessageBox::questionYesNo(this, i18n("Clip <b>%1</b><br>is missing or invalid. Remove it from project?", path), i18n("Invalid clip")) == KMessageBox::Yes) replace = true;
}
}
- QList <QString> ids;
+ QStringList ids;
ids << id;
if (replace) m_doc->deleteProjectClip(ids);
}
if (!m_refreshed && m_thumbnailQueue.isEmpty() && m_infoQueue.isEmpty()) {
m_refreshed = true;
emit loadingIsOver();
- emit displayMessage(QString(), DefaultMessage);
+ emit displayMessage(QString(), -1);
m_listView->blockSignals(false);
m_listView->setEnabled(true);
} else if (!m_refreshed) QTimer::singleShot(300, this, SLOT(slotCheckForEmptyQueue()));
void ProjectList::reloadClipThumbnails()
{
+ kDebug() << "////////////// RELOAD CLIPS THUMBNAILS!!!";
m_thumbnailQueue.clear();
QTreeWidgetItemIterator it(m_listView);
while (*it) {
void ProjectList::requestClipThumbnail(const QString id)
{
- m_thumbnailQueue.append(id);
+ if (!m_thumbnailQueue.contains(id)) m_thumbnailQueue.append(id);
}
void ProjectList::slotProcessNextThumbnail()
//QTimer::singleShot(300, this, SLOT(slotProcessNextThumbnail()));
return;
}
- slotRefreshClipThumbnail(m_thumbnailQueue.takeFirst(), false);
if (m_thumbnailQueue.count() > 1) {
- emit displayMessage(i18n("Loading clips (%1)", m_thumbnailQueue.count()), InformationMessage);
- qApp->processEvents();
+ int max = m_doc->clipManager()->clipsCount();
+ emit displayMessage(i18n("Loading thumbnails"), (int)(100 * (max - m_thumbnailQueue.count()) / max));
}
+ slotRefreshClipThumbnail(m_thumbnailQueue.takeFirst(), false);
}
void ProjectList::slotRefreshClipThumbnail(const QString &clipId, bool update)
m_doc->cachePixmap(item->getClipHash(), pix);
}
if (update) emit projectModified();
- QTimer::singleShot(100, this, SLOT(slotProcessNextThumbnail()));
+ QTimer::singleShot(30, this, SLOT(slotProcessNextThumbnail()));
}
}
item->setProperties(properties, metadata);
Q_ASSERT_X(item->referencedClip(), "void ProjectList::slotReplyGetFileProperties", QString("Item with groupName %1 does not have a clip associated").arg(item->groupName()).toLatin1());
item->referencedClip()->setProducer(producer, replace);
- emit receivedClipDuration(clipId);
+ //emit receivedClipDuration(clipId);
if (m_listView->isEnabled() && replace) {
// update clip in clip monitor
emit clipSelected(NULL);
requestClipThumbnail(clipId);
}
} else kDebug() << "//////// COULD NOT FIND CLIP TO UPDATE PRPS...";
-
- slotProcessNextClipInQueue();
+ int max = m_doc->clipManager()->clipsCount();
+ emit displayMessage(i18n("Loading clips"), (int)(100 * (max - m_infoQueue.count()) / max));
+ // small delay so that the app can display the progress info
+ QTimer::singleShot(30, this, SLOT(slotProcessNextClipInQueue()));
}
void ProjectList::slotReplyGetImage(const QString &clipId, const QPixmap &pix)