┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/dolphincolumnwidget.cpp
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2008-01-11 11:37:28 +0000
committerPeter Penz <[email protected]>2008-01-11 11:37:28 +0000
commit87dc8352d448126f4d7f1e93c574277845cf4bef (patch)
treec35f6293a7142e872c456923f1526ffdb5c5c7b0 /src/dolphincolumnwidget.cpp
parent09c62f7c6a4f13659fb87cf2e4e8f23ca4125710 (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.cpp95
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);