QWidget *vbox = new QWidget;
listView = new ProjectListView(this);;
QVBoxLayout *layout = new QVBoxLayout;
+ layout->setContentsMargins(0, 0, 0, 0);
m_clipIdCounter = 0;
// setup toolbar
searchView = new KTreeWidgetSearchLine(this);
}
void ProjectList::requestClipInfo(const QDomElement xml, const QString id) {
+ kDebug() << " PRG LISTÂ REQUEST CLP INFO: " << id;
m_infoQueue.insert(id, xml);
listView->setEnabled(false);
if (m_infoQueue.count() == 1) QTimer::singleShot(300, this, SLOT(slotProcessNextClipInQueue()));
}
requestClipInfo(clip->toXML(), clip->getId());
} else {
- requestClipThumbnail(item->clipId());
+ QString cachedPixmap = m_doc->projectFolder().path() + "/thumbs/" + item->getClipHash() + ".png";
+ if (QFile::exists(cachedPixmap)) {
+ //kDebug()<<"// USING CACHED PIX: "<<cachedPixmap;
+ item->setIcon(0, QPixmap(cachedPixmap));
+ } else requestClipThumbnail(item->clipId());
item->changeDuration(item->referencedClip()->producer()->get_playtime());
}
item->setData(1, UsageRole, QString::number(item->numReferences()));
ProjectItem *item = getItemById(id);
if (item) {
const QString path = item->referencedClip()->fileURL().path();
- //if (!path.isEmpty()) KMessageBox::sorry(this, i18n("<qt>Clip <b>%1</b><br>is invalid, will be removed from project.", path));
- KMessageBox::ButtonCode action;
- if (!path.isEmpty()) {
- action = (KMessageBox::ButtonCode)KMessageBox::messageBox(this, KMessageBox::WarningYesNoCancel, i18n("<qt>Clip <b>%1</b><br>is invalid, what do you want to do?", path), i18n("File not found"), KGuiItem(i18n("Search automatically")), KGuiItem(i18n("Remove from project")), KGuiItem(i18n("Keep as placeholder")));
- } else
- action = KMessageBox::No; // then remove
- if (action == KMessageBox::Yes) { // search
- QString foundFileName;
- if (!item->referencedClip()->getProperty("file_size").isEmpty() && !item->referencedClip()->getProperty("file_hash").isEmpty()) { // both hash and file size were registered
- QString rootDir = KFileDialog::getExistingDirectory(KUrl("kfiledialog:///clipfolder"), this);
- if (!rootDir.isEmpty()) {
- foundFileName = Render::searchFileRecursively(QDir(rootDir), item->referencedClip()->getProperty("file_size"), item->referencedClip()->getProperty("file_hash"));
- }
- }
- if (foundFileName.isEmpty())
- KMessageBox::sorry(this, i18n("<qt>Cannot find a match for clip<br><b>%1</b>,<br>leaving in project as a placeholder.", path));
- else {
- QMap <QString, QString> properties;
- properties["resource"] = foundFileName;
- kDebug() << "CLIP ID:" << item->referencedClip()->getId() << "--- setting 'resource' to" << foundFileName;
- slotUpdateClipProperties(item->referencedClip()->getId(), properties);
- }
- } else if (action == KMessageBox::No) { // remove
- QList <QString> ids;
- ids << id;
- m_doc->deleteProjectClip(ids);
- } // else keep it (last choice to be automatically bound to ESC)
+ if (!path.isEmpty()) KMessageBox::sorry(this, i18n("<qt>Clip <b>%1</b><br>is invalid, will be removed from project.", path));
+ QList <QString> ids;
+ ids << id;
+ m_doc->deleteProjectClip(ids);
}
if (!m_infoQueue.isEmpty()) QTimer::singleShot(300, this, SLOT(slotProcessNextClipInQueue()));
}
if (clip->clipType() == AUDIO) pix = KIcon("audio-x-generic").pixmap(QSize(width, height));
else pix = item->referencedClip()->thumbProducer()->extractImage(item->referencedClip()->getClipThumbFrame(), width, height);
item->setIcon(0, pix);
+ m_doc->cachePixmap(item->getClipHash(), pix);
if (update) emit projectModified();
if (!m_thumbnailQueue.isEmpty()) QTimer::singleShot(300, this, SLOT(slotProcessNextThumbnail()));
}
void ProjectList::slotReplyGetImage(const QString &clipId, int pos, const QPixmap &pix, int w, int h) {
ProjectItem *item = getItemById(clipId);
- if (item) item->setIcon(0, pix);
+ if (item) {
+ item->setIcon(0, pix);
+ m_doc->cachePixmap(item->getClipHash(), pix);
+ }
}
ProjectItem *ProjectList::getItemById(const QString &id) {