X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/32564f92be07ff3f18a2357aaf08040d8fdfb040..e8f247159e1fbacfd74dbce6c81f4e4855fad293:/src/iconmanager.cpp diff --git a/src/iconmanager.cpp b/src/iconmanager.cpp index 4c5c802cd..03dd70cf9 100644 --- a/src/iconmanager.cpp +++ b/src/iconmanager.cpp @@ -56,11 +56,7 @@ IconManager::IconManager(QAbstractItemView* parent, DolphinSortFilterProxyModel* IconManager::~IconManager() { - foreach (KJob* job, m_previewJobs) { - Q_ASSERT(job != 0); - job->kill(); - } - m_previewJobs.clear(); + killJobs(); } @@ -70,47 +66,43 @@ void IconManager::setShowPreview(bool show) m_showPreview = show; m_cutItemsCache.clear(); updateCutItems(); + if (show) { + updatePreviews(); + } } } -void IconManager::updateIcons(const KFileItemList& items) +void IconManager::updatePreviews() { - // make the icons of all hidden files semitransparent - foreach (KFileItem item, items) { - if (item.isHidden()) { - applyHiddenItemEffect(item); - } - } - if (!m_showPreview) { return; } - // generate previews - const QRect visibleArea = m_view->viewport()->rect(); + killJobs(); + KFileItemList itemList; - // Order the items in a way that the preview for the visible items - // is generated first, as this improves the feeled performance a lot. - KFileItemList orderedItems; + const int rowCount = m_dolphinModel->rowCount(); + for (int row = 0; row < rowCount; ++row) { + const QModelIndex index = m_dolphinModel->index(row, 0); + KFileItem item = m_dolphinModel->itemForIndex(index); + itemList.append(item); + } + + generatePreviews(itemList); +} + +void IconManager::updateIcons(const KFileItemList& items) +{ + // make the icons of all hidden files semitransparent foreach (KFileItem item, items) { - const QModelIndex dirIndex = m_dolphinModel->indexForItem(item); - const QModelIndex proxyIndex = m_proxyModel->mapFromSource(dirIndex); - const QRect itemRect = m_view->visualRect(proxyIndex); - if (itemRect.intersects(visibleArea)) { - orderedItems.insert(0, item); - } else { - orderedItems.append(item); + if (item.isHidden()) { + applyHiddenItemEffect(item); } } - const QSize size = m_view->iconSize(); - KIO::PreviewJob* job = KIO::filePreview(orderedItems, 128, 128); - connect(job, SIGNAL(gotPreview(const KFileItem&, const QPixmap&)), - this, SLOT(replaceIcon(const KFileItem&, const QPixmap&))); - connect(job, SIGNAL(finished(KJob*)), - this, SLOT(slotPreviewJobFinished(KJob*))); - - m_previewJobs.append(job); + if (m_showPreview) { + generatePreviews(items); + } } void IconManager::replaceIcon(const KFileItem& item, const QPixmap& pixmap) @@ -190,6 +182,35 @@ void IconManager::updateCutItems() applyCutItemEffect(); } +void IconManager::generatePreviews(const KFileItemList &items) +{ + Q_ASSERT(m_showPreview); + const QRect visibleArea = m_view->viewport()->rect(); + + // Order the items in a way that the preview for the visible items + // is generated first, as this improves the feeled performance a lot. + KFileItemList orderedItems; + foreach (KFileItem item, items) { + const QModelIndex dirIndex = m_dolphinModel->indexForItem(item); + const QModelIndex proxyIndex = m_proxyModel->mapFromSource(dirIndex); + const QRect itemRect = m_view->visualRect(proxyIndex); + if (itemRect.intersects(visibleArea)) { + orderedItems.insert(0, item); + } else { + orderedItems.append(item); + } + } + + const QSize size = m_view->iconSize(); + KIO::PreviewJob* job = KIO::filePreview(orderedItems, 128, 128); + connect(job, SIGNAL(gotPreview(const KFileItem&, const QPixmap&)), + this, SLOT(replaceIcon(const KFileItem&, const QPixmap&))); + connect(job, SIGNAL(finished(KJob*)), + this, SLOT(slotPreviewJobFinished(KJob*))); + + m_previewJobs.append(job); +} + bool IconManager::isCutItem(const KFileItem& item) const { const QMimeData* mimeData = QApplication::clipboard()->mimeData(); @@ -249,7 +270,8 @@ void IconManager::applyHiddenItemEffect(const KFileItem& hiddenItem) const QVariant value = m_dolphinModel->data(index, Qt::DecorationRole); if (value.type() == QVariant::Icon) { const QIcon icon(qvariant_cast(value)); - QPixmap pixmap = icon.pixmap(m_view->iconSize()); + const QSize maxSize = m_view->iconSize(); + QPixmap pixmap = icon.pixmap(maxSize.height(), maxSize.height()); // ignore the width KIconEffect::semiTransparent(pixmap); m_dolphinModel->setData(index, QIcon(pixmap), Qt::DecorationRole); } @@ -322,4 +344,13 @@ void IconManager::limitToSize(QPixmap& icon, const QSize& maxSize) } } +void IconManager::killJobs() +{ + foreach (KJob* job, m_previewJobs) { + Q_ASSERT(job != 0); + job->kill(); + } + m_previewJobs.clear(); +} + #include "iconmanager.moc"