]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphincolumnwidget.cpp
So I guess that is the behaviour that we really want :)
[dolphin.git] / src / dolphincolumnwidget.cpp
index a559e3098b0b9d8b5ef6dcd7271b9b9043b0e7fe..75d83bd0f9e7dd3278ea3c07e5f0a8e34575b26c 100644 (file)
 #include "dolphincolumnview.h"
 #include "dolphincontroller.h"
 #include "dolphindirlister.h"
 #include "dolphincolumnview.h"
 #include "dolphincontroller.h"
 #include "dolphindirlister.h"
-#include "dolphinmodel.h"
 #include "dolphinsortfilterproxymodel.h"
 #include "dolphinsettings.h"
 #include "dolphin_columnmodesettings.h"
 #include "draganddrophelper.h"
 
 #include "dolphinsortfilterproxymodel.h"
 #include "dolphinsettings.h"
 #include "dolphin_columnmodesettings.h"
 #include "draganddrophelper.h"
 
-#include <kcolorutils.h>
 #include <kcolorscheme.h>
 #include <kdirlister.h>
 #include <kfileitem.h>
 #include <kio/previewjob.h>
 #include <kiconeffect.h>
 #include <kcolorscheme.h>
 #include <kdirlister.h>
 #include <kfileitem.h>
 #include <kio/previewjob.h>
 #include <kiconeffect.h>
+#include <kjob.h>
 #include <kmimetyperesolver.h>
 #include <konqmimedata.h>
 
 #include <kmimetyperesolver.h>
 #include <konqmimedata.h>
 
-#include <QAbstractProxyModel>
 #include <QApplication>
 #include <QClipboard>
 #include <QApplication>
 #include <QClipboard>
+#include <QPainter>
 #include <QPoint>
 #include <QPoint>
-#include <QScrollBar>
-#include <QTimer>
-#include <QTimeLine>
 
 DolphinColumnWidget::DolphinColumnWidget(QWidget* parent,
                                          DolphinColumnView* columnView,
 
 DolphinColumnWidget::DolphinColumnWidget(QWidget* parent,
                                          DolphinColumnView* columnView,
@@ -60,6 +56,7 @@ DolphinColumnWidget::DolphinColumnWidget(QWidget* parent,
     m_dirLister(0),
     m_dolphinModel(0),
     m_proxyModel(0),
     m_dirLister(0),
     m_dolphinModel(0),
     m_proxyModel(0),
+    m_previewJob(0),
     m_dragging(false),
     m_dropRect()
 {
     m_dragging(false),
     m_dropRect()
 {
@@ -127,9 +124,16 @@ DolphinColumnWidget::DolphinColumnWidget(QWidget* parent,
 
 DolphinColumnWidget::~DolphinColumnWidget()
 {
 
 DolphinColumnWidget::~DolphinColumnWidget()
 {
+    delete m_proxyModel;
+    m_proxyModel = 0;
     delete m_dolphinModel;
     m_dolphinModel = 0;
     m_dirLister = 0; // deleted by m_dolphinModel
     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)
 }
 
 void DolphinColumnWidget::setDecorationSize(const QSize& size)
@@ -243,6 +247,11 @@ void DolphinColumnWidget::dragMoveEvent(QDragMoveEvent* event)
         }
     }
     setDirtyRegion(m_dropRect);
         }
     }
     setDirtyRegion(m_dropRect);
+
+    if (event->mimeData()->hasUrls()) {
+        // accept url drops, independently from the destination item
+        event->acceptProposedAction();
+    }
 }
 
 void DolphinColumnWidget::dropEvent(QDropEvent* event)
 }
 
 void DolphinColumnWidget::dropEvent(QDropEvent* event)
@@ -286,7 +295,7 @@ void DolphinColumnWidget::paintEvent(QPaintEvent* event)
     // TODO: remove this code when the issue #160611 is solved in Qt 4.4
     if (m_dragging) {
         const QBrush& brush = viewOptions().palette.brush(QPalette::Normal, QPalette::Highlight);
     // TODO: remove this code when the issue #160611 is solved in Qt 4.4
     if (m_dragging) {
         const QBrush& brush = viewOptions().palette.brush(QPalette::Normal, QPalette::Highlight);
-        DragAndDropHelper::drawHoverIndication(viewport(), m_dropRect, brush);
+        DragAndDropHelper::drawHoverIndication(this, m_dropRect, brush);
     }
 }
 
     }
 }
 
@@ -354,19 +363,27 @@ void DolphinColumnWidget::generatePreviews(const KFileItemList& items)
     // for generatePreviews(), showPreview() and isCutItem()
 
     if (m_view->m_controller->dolphinView()->showPreview()) {
     // for generatePreviews(), showPreview() and isCutItem()
 
     if (m_view->m_controller->dolphinView()->showPreview()) {
-        KIO::PreviewJob* job = KIO::filePreview(items, 128);
-        connect(job, SIGNAL(gotPreview(const KFileItem&, const QPixmap&)),
-                this, SLOT(showPreview(const KFileItem&, const QPixmap&)));
+        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::showPreview(const KFileItem& item, const QPixmap& pixmap)
+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());
 {
     // TODO: same implementation as in DolphinView; create helper class
     // for generatePreviews(), showPreview() and isCutItem()
 
     Q_ASSERT(!item.isNull());
-    if (item.url().directory() != m_dirLister->url().path()) {
+    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;
         // the preview job is still working on items of an older URL, hence
         // the item is not part of the directory model anymore
         return;
@@ -392,6 +409,12 @@ void DolphinColumnWidget::slotEntered(const QModelIndex& index)
     m_view->m_controller->emitItemEntered(item);
 }
 
     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);
 void DolphinColumnWidget::activate()
 {
     setFocus(Qt::OtherFocusReason);