diff options
| author | Peter Penz <[email protected]> | 2008-01-11 11:37:28 +0000 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2008-01-11 11:37:28 +0000 |
| commit | 87dc8352d448126f4d7f1e93c574277845cf4bef (patch) | |
| tree | c35f6293a7142e872c456923f1526ffdb5c5c7b0 /src/dolphincolumnwidget.cpp | |
| parent | 09c62f7c6a4f13659fb87cf2e4e8f23ca4125710 (diff) | |
Up to now DolphinView and ColumnWidget contained a lot of code duplication regarding generating previews and the dimming of cut items. This has been refactored by introducing an IconManager which takes care itself about generating a preview and dimming cut items. This also allows improving the speed of previews in (near) future (at the moment showing previews from the cache is a lot slower than in KDE 3...).
svn path=/trunk/KDE/kdebase/apps/; revision=759864
Diffstat (limited to 'src/dolphincolumnwidget.cpp')
| -rw-r--r-- | src/dolphincolumnwidget.cpp | 95 |
1 files changed, 10 insertions, 85 deletions
diff --git a/src/dolphincolumnwidget.cpp b/src/dolphincolumnwidget.cpp index 002c2cf28..a51e3ef9f 100644 --- a/src/dolphincolumnwidget.cpp +++ b/src/dolphincolumnwidget.cpp @@ -37,6 +37,8 @@ #include <kmimetyperesolver.h> #include <konqmimedata.h> +#include "iconmanager.h" + #include <QApplication> #include <QClipboard> #include <QPainter> @@ -47,7 +49,6 @@ DolphinColumnWidget::DolphinColumnWidget(QWidget* parent, const KUrl& url) : QListView(parent), m_active(true), - m_showPreview(false), m_view(columnView), m_url(url), m_childUrl(), @@ -56,7 +57,7 @@ DolphinColumnWidget::DolphinColumnWidget(QWidget* parent, m_dirLister(0), m_dolphinModel(0), m_proxyModel(0), - m_previewJob(0), + m_iconManager(0), m_dragging(false), m_dropRect() { @@ -107,8 +108,6 @@ DolphinColumnWidget::DolphinColumnWidget(QWidget* parent, m_dirLister->setDelayedMimeTypes(true); const bool showHiddenFiles = m_view->m_controller->dolphinView()->showHiddenFiles(); m_dirLister->setShowingDotFiles(showHiddenFiles); - connect(m_dirLister, SIGNAL(newItems(const KFileItemList&)), - this, SLOT(generatePreviews(const KFileItemList&))); m_dolphinModel = new DolphinModel(this); m_dolphinModel->setDirLister(m_dirLister); @@ -120,6 +119,8 @@ DolphinColumnWidget::DolphinColumnWidget(QWidget* parent, setModel(m_proxyModel); new KMimeTypeResolver(this, m_dolphinModel); + m_iconManager = new IconManager(this, m_dolphinModel); + m_iconManager->setShowPreview(m_view->m_controller->dolphinView()->showPreview()); m_dirLister->openUrl(url, KDirLister::NoFlags); } @@ -131,11 +132,6 @@ DolphinColumnWidget::~DolphinColumnWidget() delete m_dolphinModel; m_dolphinModel = 0; m_dirLister = 0; // deleted by m_dolphinModel - - if (m_previewJob != 0) { - m_previewJob->kill(); - m_previewJob = 0; - } } void DolphinColumnWidget::setDecorationSize(const QSize& size) @@ -176,10 +172,11 @@ void DolphinColumnWidget::setShowHiddenFiles(bool show) void DolphinColumnWidget::setShowPreview(bool show) { - if (show != m_showPreview) { - m_dirLister->stop(); - m_dirLister->openUrl(m_url, KDirLister::Reload); - } + kDebug() << "-------------- column widget: show" << show; + m_iconManager->setShowPreview(show); + + m_dirLister->stop(); + m_dirLister->openUrl(m_url, KDirLister::Reload); } void DolphinColumnWidget::updateBackground() @@ -363,51 +360,6 @@ void DolphinColumnWidget::triggerItem(const QModelIndex& index) m_view->m_controller->triggerItem(item); } -void DolphinColumnWidget::generatePreviews(const KFileItemList& items) -{ - // TODO: same implementation as in DolphinView; create helper class - // for generatePreviews(), showPreview() and isCutItem() - - if (m_view->m_controller->dolphinView()->showPreview()) { - if (m_previewJob != 0) { - m_previewJob->kill(); - m_previewJob = 0; - } - - m_previewJob = KIO::filePreview(items, 128); - connect(m_previewJob, SIGNAL(gotPreview(const KFileItem&, const QPixmap&)), - this, SLOT(replaceIcon(const KFileItem&, const QPixmap&))); - connect(m_previewJob, SIGNAL(finished(KJob*)), - this, SLOT(slotPreviewJobFinished(KJob*))); - } -} - -void DolphinColumnWidget::replaceIcon(const KFileItem& item, const QPixmap& pixmap) -{ - // TODO: same implementation as in DolphinView; create helper class - // for generatePreviews(), showPreview() and isCutItem() - - Q_ASSERT(!item.isNull()); - const bool showPreview = m_view->m_controller->dolphinView()->showPreview(); - if (!showPreview || (item.url().directory() != m_dirLister->url().path())) { - // the preview job is still working on items of an older URL, hence - // the item is not part of the directory model anymore - return; - } - - const QModelIndex idx = m_dolphinModel->indexForItem(item); - if (idx.isValid() && (idx.column() == 0)) { - 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); - } else { - m_dolphinModel->setData(idx, QIcon(pixmap), Qt::DecorationRole); - } - } -} - void DolphinColumnWidget::slotEntered(const QModelIndex& index) { const QModelIndex dirIndex = m_proxyModel->mapToSource(index); @@ -415,12 +367,6 @@ void DolphinColumnWidget::slotEntered(const QModelIndex& index) m_view->m_controller->emitItemEntered(item); } -void DolphinColumnWidget::slotPreviewJobFinished(KJob* job) -{ - Q_ASSERT(job == m_previewJob); - m_previewJob = 0; -} - void DolphinColumnWidget::activate() { setFocus(Qt::OtherFocusReason); @@ -466,27 +412,6 @@ void DolphinColumnWidget::deactivate() updateBackground(); } -bool DolphinColumnWidget::isCutItem(const KFileItem& item) const -{ - // TODO: same implementation as in DolphinView; create helper class - // for generatePreviews(), showPreview() and isCutItem() - - const QMimeData* mimeData = QApplication::clipboard()->mimeData(); - const KUrl::List cutUrls = KUrl::List::fromMimeData(mimeData); - - const KUrl& itemUrl = item.url(); - KUrl::List::const_iterator it = cutUrls.begin(); - const KUrl::List::const_iterator end = cutUrls.end(); - while (it != end) { - if (*it == itemUrl) { - return true; - } - ++it; - } - - return false; -} - KFileItem DolphinColumnWidget::itemForIndex(const QModelIndex& index) const { const QModelIndex dirIndex = m_proxyModel->mapToSource(index); |
