]> cloud.milkyroute.net Git - dolphin.git/commitdiff
* increase the performance of item previews: each item view provides an icon size...
authorPeter Penz <peter.penz19@gmail.com>
Sat, 26 Jan 2008 12:48:03 +0000 (12:48 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Sat, 26 Jan 2008 12:48:03 +0000 (12:48 +0000)
* make the icons of hidden files semitransparent like in KDE3

svn path=/trunk/KDE/kdebase/apps/; revision=766659

src/dolphincolumnview.cpp
src/dolphincolumnwidget.cpp
src/dolphindetailsview.cpp
src/dolphiniconsview.cpp
src/dolphinview.cpp
src/iconmanager.cpp
src/iconmanager.h

index 82d571724183d07d14f7d5e577e030638a3c4c7e..7e74b7e3452e86b8efbe6da71f17eb2360ad5733 100644 (file)
@@ -370,11 +370,13 @@ void DolphinColumnView::updateDecorationSize()
 {
     ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings();
     const int iconSize = settings->iconSize();
+    const QSize size(iconSize, iconSize);
+    setIconSize(size);
 
     foreach (QObject* object, viewport()->children()) {
         if (object->inherits("QListView")) {
             DolphinColumnWidget* widget = static_cast<DolphinColumnWidget*>(object);
-            widget->setDecorationSize(QSize(iconSize, iconSize));
+            widget->setDecorationSize(size);
         }
     }
 
index 3bb1f36c2104c322fcf31e881073597a32a2dc3a..ae5f32fcfbe857879b6cf32242d476127e3069c0 100644 (file)
@@ -89,7 +89,7 @@ DolphinColumnWidget::DolphinColumnWidget(QWidget* parent,
     m_font.setBold(settings->boldFont());
 
     const int iconSize = settings->iconSize();
-    m_decorationSize = QSize(iconSize, iconSize);
+    setDecorationSize(QSize(iconSize, iconSize));
 
     KFileItemDelegate* delegate = new KFileItemDelegate(this);
     setItemDelegate(delegate);
@@ -136,6 +136,7 @@ DolphinColumnWidget::~DolphinColumnWidget()
 
 void DolphinColumnWidget::setDecorationSize(const QSize& size)
 {
+    setIconSize(size);
     m_decorationSize = size;
     doItemsLayout();
 }
index 7661ce88d4aacd28dd5788f6ebdb0e54cef646b3..c5852fa683564a920d76681dec898be79bc81333 100644 (file)
@@ -524,6 +524,7 @@ void DolphinDetailsView::updateDecorationSize()
 {
     DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings();
     const int iconSize = settings->iconSize();
+    setIconSize(QSize(iconSize, iconSize));
     m_decorationSize = QSize(iconSize, iconSize);
 
     m_controller->setZoomInPossible(isZoomInPossible());
index 8f59922194e8844cdc464fbf0ec6f96e57541b8e..c867ce61109ab1459a19d90a17741d0c49429258 100644 (file)
@@ -451,6 +451,7 @@ void DolphinIconsView::updateGridSize(bool showPreview, int additionalInfoCount)
 
         size = previewSize;
     }
+    setIconSize(QSize(size, size));
 
     Q_ASSERT(additionalInfoCount >= 0);
     itemHeight += additionalInfoCount * m_font.pointSize() * 2;
index a2d56f4742a6facea010898345ad177dc87b66fc..a424bcbb509847aca6a9b9f02c7f93ce3d0135bf 100644 (file)
@@ -410,11 +410,13 @@ QPoint DolphinView::contentsPosition() const
 void DolphinView::zoomIn()
 {
     m_controller->triggerZoomIn();
+    reload();
 }
 
 void DolphinView::zoomOut()
 {
     m_controller->triggerZoomOut();
+    reload();
 }
 
 bool DolphinView::isZoomInPossible() const
index a5e72eabf2cf679d9926e6e600e2ed0fffb7d97d..a1ab96307d590aefe07de3a24b700aa211640ead 100644 (file)
@@ -31,6 +31,7 @@
 #include <QApplication>
 #include <QAbstractItemView>
 #include <QClipboard>
+#include <QColor>
 #include <QIcon>
 
 IconManager::IconManager(QAbstractItemView* parent, DolphinSortFilterProxyModel* model) :
@@ -42,9 +43,11 @@ IconManager::IconManager(QAbstractItemView* parent, DolphinSortFilterProxyModel*
     m_proxyModel(model),
     m_cutItemsCache()
 {
+    Q_ASSERT(m_view->iconSize().isValid());  // each view must provide its current icon size
+
     m_dolphinModel = static_cast<DolphinModel*>(m_proxyModel->sourceModel());
     connect(m_dolphinModel->dirLister(), SIGNAL(newItems(const KFileItemList&)),
-            this, SLOT(generatePreviews(const KFileItemList&)));
+            this, SLOT(updateIcons(const KFileItemList&)));
 
     QClipboard* clipboard = QApplication::clipboard();
     connect(clipboard, SIGNAL(dataChanged()),
@@ -70,18 +73,30 @@ void IconManager::setShowPreview(bool show)
     }
 }
 
-void IconManager::generatePreviews(const KFileItemList& items)
+void IconManager::updateIcons(const KFileItemList& items)
 {
+    // make the icons of all hidden files semitransparent
+    foreach (KFileItem item, items) {
+        if (item.name().startsWith('.')) {
+            applyHiddenItemEffect(item);
+        }
+    }
+
     if (!m_showPreview) {
         return;
     }
 
+    // generate previews
     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) {
+        if (item.name().startsWith('.')) {
+            applyHiddenItemEffect(item);
+        }
+
         const QModelIndex dirIndex = m_dolphinModel->indexForItem(item);
         const QModelIndex proxyIndex = m_proxyModel->mapFromSource(dirIndex);
         const QRect itemRect = m_view->visualRect(proxyIndex);
@@ -92,7 +107,8 @@ void IconManager::generatePreviews(const KFileItemList& items)
         }
     }
 
-    KIO::PreviewJob* job = KIO::filePreview(orderedItems, 128);
+    const QSize size = m_view->iconSize();
+    KIO::PreviewJob* job = KIO::filePreview(orderedItems, size.width(), size.height());
     connect(job, SIGNAL(gotPreview(const KFileItem&, const QPixmap&)),
             this, SLOT(replaceIcon(const KFileItem&, const QPixmap&)));
     connect(job, SIGNAL(finished(KJob*)),
@@ -114,13 +130,18 @@ void IconManager::replaceIcon(const KFileItem& item, const QPixmap& pixmap)
 
     const QModelIndex idx = m_dolphinModel->indexForItem(item);
     if (idx.isValid() && (idx.column() == 0)) {
+        QPixmap newPixmap = pixmap;
+        if (item.name().startsWith('.')) {
+            KIconEffect::semiTransparent(newPixmap);
+        }
+
         const QMimeData* mimeData = QApplication::clipboard()->mimeData();
         if (KonqMimeData::decodeIsCutSelection(mimeData) && isCutItem(item)) {
             KIconEffect iconEffect;
-            const QPixmap cutPixmap = iconEffect.apply(pixmap, KIconLoader::Desktop, KIconLoader::DisabledState);
-            m_dolphinModel->setData(idx, QIcon(cutPixmap), Qt::DecorationRole);
+            newPixmap = iconEffect.apply(newPixmap, KIconLoader::Desktop, KIconLoader::DisabledState);
+            m_dolphinModel->setData(idx, QIcon(newPixmap), Qt::DecorationRole);
         } else {
-            m_dolphinModel->setData(idx, QIcon(pixmap), Qt::DecorationRole);
+            m_dolphinModel->setData(idx, QIcon(newPixmap), Qt::DecorationRole);
         }
     }
 }
@@ -176,7 +197,7 @@ void IconManager::applyCutItemEffect()
             const QVariant value = m_dolphinModel->data(index, Qt::DecorationRole);
             if (value.type() == QVariant::Icon) {
                 const QIcon icon(qvariant_cast<QIcon>(value));
-                QPixmap pixmap = icon.pixmap(128, 128);
+                QPixmap pixmap = icon.pixmap(m_view->iconSize());
 
                 // remember current pixmap for the item to be able
                 // to restore it when other items get cut
@@ -194,4 +215,16 @@ void IconManager::applyCutItemEffect()
     }
 }
 
+void IconManager::applyHiddenItemEffect(const KFileItem& hiddenItem)
+{
+    const QModelIndex index = m_dolphinModel->indexForItem(hiddenItem);
+    const QVariant value = m_dolphinModel->data(index, Qt::DecorationRole);
+    if (value.type() == QVariant::Icon) {
+        const QIcon icon(qvariant_cast<QIcon>(value));
+        QPixmap pixmap = icon.pixmap(m_view->iconSize());
+        KIconEffect::semiTransparent(pixmap);
+        m_dolphinModel->setData(index, QIcon(pixmap), Qt::DecorationRole);
+    }
+}
+
 #include "iconmanager.moc"
index 2636c81c63874c458257fbe7ee3834cb8e5dcef0..d6cf5332b6fef16d25208eb1fa9032e266436ae8 100644 (file)
@@ -51,11 +51,11 @@ public:
 
 private slots:
     /**
-     * Generates a preview image for each file item in \a items.
-     * The current preview settings (maximum size, 'Show Preview' menu)
-     * are respected.
+     * Updates the icons of for each item in \a items by making hidden
+     * items semitransparent and generating previews. The current preview
+     * settings (maximum size, 'Show Preview' menu) are respected.
      */
-    void generatePreviews(const KFileItemList& items);
+    void updateIcons(const KFileItemList& items);
 
     /**
      * Replaces the icon of the item \a item by the preview pixmap
@@ -82,6 +82,9 @@ private:
     /** Applies an item effect to all cut items. */
     void applyCutItemEffect();
 
+    /** Applies an item effect to the hidden item \a hiddenItem. */
+    void applyHiddenItemEffect(const KFileItem& hiddenItem);
+
 private:
     /**
      * Remembers the original pixmap for an item before