void ProjectItem::slotSetToolTip()
{
- QString tip = "<b>";
+ QString tip;
if (m_clip->isPlaceHolder()) tip.append(i18n("Missing") + " | ");
+ if (isProxyRunning()) {
+ tip.append(i18n("Building proxy clip") + " | ");
+ }
+ else if (hasProxy()) {
+ tip.append(i18n("Proxy clip") + " | ");
+ }
+ tip.append("<b>");
switch (m_clipType) {
case AUDIO:
tip.append(i18n("Audio clip") + "</b><br />" + clipUrl().path());
tip.append(i18n("Unknown clip"));
break;
}
-
setToolTip(0, tip);
}
void ProjectItem::setProxyStatus(PROXYSTATUS status, int progress)
{
if (progress > 0) setData(0, ProxyRole, progress);
- else setData(0, ProxyRole, status);
+ else {
+ setData(0, ProxyRole, status);
+ slotSetToolTip();
+ }
}
bool ProjectItem::hasProxy() const
item = new ProjectItem(m_listView, clip);
}
if (item->data(0, DurationRole).isNull()) item->setData(0, DurationRole, i18n("Loading"));
- QString proxy = clip->getProperty("proxy");
- if (!proxy.isEmpty() && proxy != "-") slotCreateProxy(clip->getId());
connect(clip, SIGNAL(createProxy(const QString &)), this, SLOT(slotCreateProxy(const QString &)));
connect(clip, SIGNAL(abortProxy(const QString &, const QString &)), this, SLOT(slotAbortProxy(const QString, const QString)));
if (getProperties) {
resetThumbsProducer(clip);
m_render->getFileProperties(e, clip->getId(), m_listView->iconSize().height(), true);
}
- else if (item->hasProxy() && !item->isProxyRunning()) {
+ // WARNING: code below triggers unnecessary reload of all proxy clips on document loading... is it useful in some cases?
+ /*else if (item->hasProxy() && !item->isProxyRunning()) {
slotCreateProxy(clip->getId());
- }
+ }*/
KUrl url = clip->fileURL();
#ifdef NEPOMUK
KIO::NetAccess::del(KUrl(cachedPixmap), this);
requestClipThumbnail(item->clipId());
}
- else item->setData(0, Qt::DecorationRole, pix);
+ else {
+ processThumbOverlays(item, pix);
+ item->setData(0, Qt::DecorationRole, pix);
+ }
}
else {
requestClipThumbnail(item->clipId());
xml.removeAttribute("proxy_out");
}
if (!replace) replace = xml.attribute("replace") == "1";
- if (replace) resetThumbsProducer(clip);
+ if (replace) {
+ resetThumbsProducer(clip);
+ }
m_render->getFileProperties(xml, clip->getId(), m_listView->iconSize().height(), replace);
}
else if (clip->isPlaceHolder()) {
}
}
} else {
- if (displayRatioChanged)
+ if (displayRatioChanged) {
requestClipThumbnail(clip->getId());
+ }
else if (item->data(0, Qt::DecorationRole).isNull()) {
getCachedThumbnail(item);
}
if (!pix.isNull() || !img.isNull()) {
monitorItemEditing(false);
- if (!img.isNull()) pix = QPixmap::fromImage(img);
+ if (!img.isNull()) {
+ pix = QPixmap::fromImage(img);
+ processThumbOverlays(item, pix);
+ }
it->setData(0, Qt::DecorationRole, pix);
monitorItemEditing(true);
ProjectItem *item = getItemById(clipId);
if (item && !img.isNull()) {
QPixmap pix = QPixmap::fromImage(img);
+ processThumbOverlays(item, pix);
monitorItemEditing(false);
item->setData(0, Qt::DecorationRole, pix);
monitorItemEditing(true);
return result;
}
+void ProjectList::processThumbOverlays(ProjectItem *item, QPixmap &pix)
+{
+ if (item->hasProxy()) {
+ QPainter p(&pix);
+ QColor c = QPalette().base().color();
+ c.setAlpha(160);
+ QBrush br(c);
+ p.setBrush(br);
+ p.setPen(Qt::NoPen);
+ QRect r(1, 1, 10, 10);
+ p.drawRect(r);
+ p.setPen(QPalette().text().color());
+ p.drawText(r, Qt::AlignCenter, i18nc("The first letter of Proxy, used as abbreviation", "P"));
+ }
+}
+
#include "projectlist.moc"
public:
ItemDelegate(QAbstractItemView* parent = 0): QStyledItemDelegate(parent) {
}
-
+
/*void drawFocus(QPainter *, const QStyleOptionViewItem &, const QRect &) const {
}*/
}
const int textMargin = style->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1;
QPixmap pixmap = qVariantValue<QPixmap>(index.data(Qt::DecorationRole));
- painter->drawPixmap(r1.left() + textMargin, r1.top() + (r1.height() - pixmap.height()) / 2, pixmap);
+ QPoint pixmapPoint(r1.left() + textMargin, r1.top() + (r1.height() - pixmap.height()) / 2);
+ painter->drawPixmap(pixmapPoint, pixmap);
int decoWidth = pixmap.width() + 2 * textMargin;
QFont font = painter->font();
r1.adjust(decoWidth, 0, 0, -mid);
QRect r2 = option.rect;
r2.adjust(decoWidth, mid, 0, 0);
- painter->drawText(r1, Qt::AlignLeft | Qt::AlignBottom , index.data().toString());
+ painter->drawText(r1, Qt::AlignLeft | Qt::AlignBottom, index.data().toString());
font.setBold(false);
painter->setFont(font);
QString subText = index.data(DurationRole).toString();
painter->drawText(r2, Qt::AlignLeft | Qt::AlignVCenter , subText, &bounding);
int proxy = index.data(Qt::UserRole + 5).toInt();
- if (proxy != 0) {
- QRectF txtBounding;
+ if (proxy != 0 && proxy != PROXYDONE) {
QString proxyText;
- QBrush brush;
QColor color;
if (proxy > 0) {
- proxyText = i18n("Proxy %1\%", proxy);
- brush = option.palette.highlight();
- color = option.palette.color(QPalette::HighlightedText);
-
- }
- else if (proxy == PROXYDONE) {
- proxyText = i18n("Proxy");
- brush = option.palette.mid();
- color = option.palette.color(QPalette::WindowText);
+ // Draw proxy progress bar
+ color = option.palette.alternateBase().color();
+ painter->setPen(Qt::NoPen);
+ color.setAlpha(180);
+ painter->setBrush(QBrush(color));
+ QRect progress(pixmapPoint.x() + 1, pixmapPoint.y() + pixmap.height() - 5, pixmap.width() - 2, 4);
+ painter->drawRect(progress);
+ painter->setBrush(option.palette.text());
+ progress.adjust(1, 1, 0, -1);
+ progress.setWidth((pixmap.width() - 4) * proxy / 100);
+ painter->drawRect(progress);
}
else {
switch (proxy) {
default:
proxyText = i18n("Proxy crashed");
}
- brush = option.palette.highlight();
- color = option.palette.color(QPalette::HighlightedText);
+ QRectF txtBounding = painter->boundingRect(r2, Qt::AlignRight | Qt::AlignVCenter, " " + proxyText + " ");
+ painter->setPen(Qt::NoPen);
+ painter->setBrush(option.palette.highlight());
+ painter->drawRoundedRect(txtBounding, 2, 2);
+ painter->setPen(option.palette.highlightedText().color());
+ painter->drawText(txtBounding, Qt::AlignHCenter | Qt::AlignVCenter , proxyText);
}
-
- txtBounding = painter->boundingRect(r2, Qt::AlignRight | Qt::AlignVCenter, " " + proxyText + " ");
- painter->setPen(Qt::NoPen);
- painter->setBrush(brush);
- painter->drawRoundedRect(txtBounding, 2, 2);
- painter->setPen(option.palette.highlightedText().color());
- painter->drawText(txtBounding, Qt::AlignHCenter | Qt::AlignVCenter , proxyText);
}
painter->restore();
QStringList expandedFolders() const;
/** @brief Deselect all clips in project tree. */
void clearSelection();
+ /** @brief Print required overlays over clip thumb (proxy, stabilized,...). */
+ void processThumbOverlays(ProjectItem *item, QPixmap &pix);
public slots:
void setDocument(KdenliveDoc *doc);
Mlt::Frame *frame = producer->get_frame();
if (frame && frame->is_valid()) {
QImage img = KThumb::getFrame(frame, imageWidth, fullWidth, info.imageHeight);
- delete frame;
emit replyGetImage(info.clipId, img);
}
+ if (frame) delete frame;
}
m_processingClipId.clear();
emit replyGetFileProperties(info.clipId, producer, stringMap(), stringMap(), info.replaceProducer);