connect(this, SIGNAL(processNextThumbnail()), this, SLOT(slotProcessNextThumbnail()));
connect(m_listView, SIGNAL(projectModified()), this, SIGNAL(projectModified()));
connect(m_listView, SIGNAL(itemSelectionChanged()), this, SLOT(slotClipSelected()));
- connect(m_listView, SIGNAL(focusMonitor()), this, SLOT(slotClipSelected()));
+ connect(m_listView, SIGNAL(focusMonitor()), this, SIGNAL(raiseClipMonitor()));
connect(m_listView, SIGNAL(pauseMonitor()), this, SLOT(slotPauseMonitor()));
connect(m_listView, SIGNAL(requestMenu(const QPoint &, QTreeWidgetItem *)), this, SLOT(slotContextMenu(const QPoint &, QTreeWidgetItem *)));
connect(m_listView, SIGNAL(addClip()), this, SLOT(slotAddClip()));
item = static_cast <ProjectItem *>(selected.at(i));
if (item && !item->isProxyRunning()) {
DocClipBase *clip = item->referencedClip();
- if (!clip->isClean()) {
- // The clip is currently under processing (replacement in timeline), we cannot reload it now.
+ if (!clip || !clip->isClean() || m_render->isProcessing(item->clipId())) {
+ kDebug()<<"//// TRYING TO RELOAD: "<<item->clipId()<<", but it is busy";
continue;
}
CLIPTYPE t = item->clipType();
e.setAttribute("length", length);
}
}
- if (clip) {
- clip->clearThumbProducer();
- }
m_render->getFileProperties(e, item->clipId(), m_listView->iconSize().height(), true);
+ resetThumbsProducer(clip);
}
}
}
}
item->referencedClip()->setProducer(newProd, true);
item->slotSetToolTip();
- emit clipNeedsReload(id, true);
+ emit clipNeedsReload(id);
}
}
update();
m_listView->processLayout();
QDomElement e = clip->toXML().cloneNode().toElement();
e.removeAttribute("file_hash");
- clip->clearThumbProducer();
m_render->getFileProperties(e, clip->getId(), m_listView->iconSize().height(), true);
+ resetThumbsProducer(clip);
}
else if (item->hasProxy() && !item->isProxyRunning()) {
slotCreateProxy(clip->getId());
{
if (item == NULL || !m_refreshed) return;
DocClipBase *clip = item->referencedClip();
- if (!clip->isClean()) {
- //WARNING: might result in clip said marked as proxy but not using proxy?
- // The clip is currently under processing (replacement in timeline), we cannot reload it now.
- return;
- }
// Proxy clip successfully created
QDomElement e = clip->toXML().cloneNode().toElement();
e.setAttribute("length", length);
}
}
- clip->clearThumbProducer();
m_render->getFileProperties(e, clip->getId(), m_listView->iconSize().height(), true);
}
xml.removeAttribute("proxy_out");
}
bool replace = xml.attribute("replace") == "1";
- if (replace) clip->clearThumbProducer();
m_render->getFileProperties(xml, clip->getId(), m_listView->iconSize().height(), replace);
+ if (replace) resetThumbsProducer(clip);
}
else {
item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDropEnabled);
slotProcessNextThumbnail();
}
+void ProjectList::resetThumbsProducer(DocClipBase *clip)
+{
+ if (!clip) return;
+ clip->clearThumbProducer();
+ m_thumbnailQueue.removeAll(clip->getId());
+}
+
void ProjectList::slotProcessNextThumbnail()
{
if (m_render->processingItems() > 0) {
if (m_listView->currentItem() && m_listView->currentItem()->type() != PROJECTFOLDERTYPE) {
ProjectItem *item = static_cast <ProjectItem*>(m_listView->currentItem());
DocClipBase *clip = item->referencedClip();
- if (clip && clip->isClean()) emit clipSelected(clip);
+ if (clip && clip->isClean() && !m_render->isProcessing(item->clipId())) emit clipSelected(clip);
}
}
}
}
item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsDropEnabled);
}
- clip->setProducer(producer, replace);
item->setProperties(properties, metadata);
+ clip->setProducer(producer, replace);
clip->askForAudioThumbs();
if (refreshThumbnail) getCachedThumbnail(item);
// Proxy stuff
processNextThumbnail();
}
if (replace && item) {
- if (item->numReferences() > 0) toReload = clipId;
- else item->referencedClip()->cleanupProducers();
+ toReload = clipId;
// update clip in clip monitor
- if (queue == 0 && item->isSelected() && m_listView->selectedItems().count() == 1)
- m_refreshMonitorTimer.start();
+ /*if (queue == 0 && item->isSelected() && m_listView->selectedItems().count() == 1)
+ m_refreshMonitorTimer.start();*/
}
if (!item) {
// no item for producer, delete it
delete producer;
}
if (!toReload.isEmpty())
- emit clipNeedsReload(toReload, true);
+ emit clipNeedsReload(toReload);
}
bool ProjectList::adjustProjectProfileToItem(ProjectItem *item)
CLIPTYPE t = item->clipType();
if ((t == VIDEO || t == AV || t == UNKNOWN || t == IMAGE || t == PLAYLIST) && item->referencedClip()) {
if ((doProxy && item->hasProxy()) || (!doProxy && !item->hasProxy())) continue;
- oldProps = item->referencedClip()->properties();
+ DocClipBase *clip = item->referencedClip();
+ if (!clip->isClean() || m_render->isProcessing(item->clipId())) continue;
+ resetThumbsProducer(clip);
+ oldProps = clip->properties();
if (doProxy) {
newProps.clear();
- QString path = proxydir + item->referencedClip()->getClipHash() + "." + (t == IMAGE ? "png" : m_doc->getDocumentProperty("proxyextension"));
+ QString path = proxydir + clip->getClipHash() + "." + (t == IMAGE ? "png" : m_doc->getDocumentProperty("proxyextension"));
// insert required duration for proxy
- newProps.insert("proxy_out", item->referencedClip()->producerProperty("out"));
+ newProps.insert("proxy_out", clip->producerProperty("out"));
newProps.insert("proxy", path);
// We need to insert empty proxy so that undo will work
oldProps.insert("proxy", QString());