]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphiniconsview.cpp
differ between pasting one folder, pasting one file and pasting n items
[dolphin.git] / src / dolphiniconsview.cpp
index 96f69436d1d0f2e56bb72acc68b1dbef5383a1e2..45fbf25b2888f80b83bbadaf020f08f299721df1 100644 (file)
@@ -46,7 +46,6 @@ DolphinIconsView::DolphinIconsView(QWidget* parent, DolphinController* controlle
     m_decorationPosition(QStyleOptionViewItem::Top),
     m_displayAlignment(Qt::AlignHCenter),
     m_itemSize(),
-    m_dragging(false),
     m_dropRect()
 {
     Q_ASSERT(controller != 0);
@@ -58,7 +57,6 @@ DolphinIconsView::DolphinIconsView(QWidget* parent, DolphinController* controlle
     viewport()->setAcceptDrops(true);
 
     setMouseTracking(true);
-    viewport()->setAttribute(Qt::WA_Hover);
 
     // TODO: Connecting to the signal 'activated()' is not possible, as kstyle
     // does not forward the single vs. doubleclick to it yet (KDE 4.1?). Hence it is
@@ -66,7 +64,7 @@ DolphinIconsView::DolphinIconsView(QWidget* parent, DolphinController* controlle
     // RETURN-key in keyPressEvent().
     if (KGlobalSettings::singleClick()) {
         connect(this, SIGNAL(clicked(const QModelIndex&)),
-                this, SLOT(triggerItem(const QModelIndex&)));
+                controller, SLOT(triggerItem(const QModelIndex&)));
         if (DolphinSettings::instance().generalSettings()->showSelectionToggle()) {
             SelectionManager* selManager = new SelectionManager(this);
             connect(selManager, SIGNAL(selectionChanged()),
@@ -76,8 +74,10 @@ DolphinIconsView::DolphinIconsView(QWidget* parent, DolphinController* controlle
         }
     } else {
         connect(this, SIGNAL(doubleClicked(const QModelIndex&)),
-                this, SLOT(triggerItem(const QModelIndex&)));
+                controller, SLOT(triggerItem(const QModelIndex&)));
     }
+    connect(this, SIGNAL(entered(const QModelIndex&)),
+            controller, SLOT(emitItemEntered(const QModelIndex&)));
     connect(this, SIGNAL(viewportEntered()),
             controller, SLOT(emitViewportEntered()));
     connect(controller, SIGNAL(zoomIn()),
@@ -91,9 +91,6 @@ DolphinIconsView::DolphinIconsView(QWidget* parent, DolphinController* controlle
     connect(view, SIGNAL(additionalInfoChanged()),
             this, SLOT(slotAdditionalInfoChanged()));
 
-    connect(this, SIGNAL(entered(const QModelIndex&)),
-            this, SLOT(slotEntered(const QModelIndex&)));
-
     // apply the icons mode settings to the widget
     const IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings();
     Q_ASSERT(settings != 0);
@@ -222,15 +219,11 @@ void DolphinIconsView::dragEnterEvent(QDragEnterEvent* event)
     if (event->mimeData()->hasUrls()) {
         event->acceptProposedAction();
     }
-    m_dragging = true;
 }
 
 void DolphinIconsView::dragLeaveEvent(QDragLeaveEvent* event)
 {
     KCategorizedView::dragLeaveEvent(event);
-
-    // TODO: remove this code when the issue #160611 is solved in Qt 4.4
-    m_dragging = false;
     setDirtyRegion(m_dropRect);
 }
 
@@ -244,7 +237,7 @@ void DolphinIconsView::dragMoveEvent(QDragMoveEvent* event)
 
     m_dropRect.setSize(QSize()); // set as invalid
     if (index.isValid()) {
-        const KFileItem item = itemForIndex(index);
+        const KFileItem item = m_controller->itemForIndex(index);
         if (!item.isNull() && item.isDir()) {
             m_dropRect = visualRect(index);
         } else {
@@ -265,7 +258,7 @@ void DolphinIconsView::dropEvent(QDropEvent* event)
         const KUrl::List urls = KUrl::List::fromMimeData(event->mimeData());
         if (!urls.isEmpty()) {
             const QModelIndex index = indexAt(event->pos());
-            const KFileItem item = itemForIndex(index);
+            const KFileItem item = m_controller->itemForIndex(index);
             m_controller->indicateDroppedUrls(urls,
                                               m_controller->url(),
                                               item);
@@ -274,41 +267,20 @@ void DolphinIconsView::dropEvent(QDropEvent* event)
     }
 
     KCategorizedView::dropEvent(event);
-
-    m_dragging = false;
-}
-
-void DolphinIconsView::paintEvent(QPaintEvent* event)
-{
-    KCategorizedView::paintEvent(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);
-        DragAndDropHelper::drawHoverIndication(this, m_dropRect, brush);
-    }
 }
 
 void DolphinIconsView::keyPressEvent(QKeyEvent* event)
 {
     KCategorizedView::keyPressEvent(event);
-
-    const QItemSelectionModel* selModel = selectionModel();
-    const QModelIndex currentIndex = selModel->currentIndex();
-    const bool trigger = currentIndex.isValid()
-                         && (event->key() == Qt::Key_Return)
-                         && (selModel->selectedIndexes().count() <= 1);
-    if (trigger) {
-        triggerItem(currentIndex);
-    }
+    m_controller->handleKeyPressEvent(event);
 }
 
 void DolphinIconsView::wheelEvent(QWheelEvent* event)
 {
     // let Ctrl+wheel events propagate to the DolphinView for icon zooming
-    if ((event->modifiers() & Qt::ControlModifier) == Qt::ControlModifier) {
+    if (event->modifiers() & Qt::ControlModifier) {
         event->ignore();
-       return;
+        return;
     }
     KCategorizedView::wheelEvent(event);
     // if the icons are aligned left to right, the vertical wheel event should
@@ -326,16 +298,6 @@ void DolphinIconsView::wheelEvent(QWheelEvent* event)
     }
 }
 
-void DolphinIconsView::triggerItem(const QModelIndex& index)
-{
-    m_controller->triggerItem(itemForIndex(index));
-}
-
-void DolphinIconsView::slotEntered(const QModelIndex& index)
-{
-    m_controller->emitItemEntered(itemForIndex(index));
-}
-
 void DolphinIconsView::slotShowPreviewChanged()
 {
     const DolphinView* view = m_controller->dolphinView();
@@ -364,10 +326,6 @@ void DolphinIconsView::zoomIn()
         } else {
             newIconSize = increasedIconSize(oldIconSize);
             settings->setIconSize(newIconSize);
-            if (settings->previewSize() < newIconSize) {
-                // assure that the preview size is always >= the icon size
-                settings->setPreviewSize(newIconSize);
-            }
         }
 
         // increase also the grid size
@@ -391,11 +349,6 @@ void DolphinIconsView::zoomOut()
         if (showPreview) {
             const int previewSize = decreasedIconSize(settings->previewSize());
             settings->setPreviewSize(previewSize);
-            if (settings->iconSize() > previewSize) {
-                // assure that the icon size is always <= the preview size
-                newIconSize = previewSize;
-                settings->setIconSize(newIconSize);
-            }
         } else {
             newIconSize = decreasedIconSize(settings->iconSize());
             settings->setIconSize(newIconSize);
@@ -481,13 +434,11 @@ void DolphinIconsView::updateGridSize(bool showPreview, int additionalInfoCount)
     if (showPreview) {
         const int previewSize = settings->previewSize();
         const int diff = previewSize - size;
-        Q_ASSERT(diff >= 0);
         itemWidth  += diff;
         itemHeight += diff;
 
         size = previewSize;
     }
-    setIconSize(QSize(size, size));
 
     Q_ASSERT(additionalInfoCount >= 0);
     itemHeight += additionalInfoCount * m_font.pointSize() * 2;
@@ -497,8 +448,10 @@ void DolphinIconsView::updateGridSize(bool showPreview, int additionalInfoCount)
         // width for the text wrapping. To use the maximum item width
         // for text wrapping, it is used as decoration width.
         m_decorationSize = QSize(itemWidth, size);
+        setIconSize(QSize(itemWidth, size));
     } else {
         m_decorationSize = QSize(size, size);
+        setIconSize(QSize(size, size));
     }
 
     m_itemSize = QSize(itemWidth, itemHeight);
@@ -510,14 +463,6 @@ void DolphinIconsView::updateGridSize(bool showPreview, int additionalInfoCount)
     m_controller->setZoomOutPossible(isZoomOutPossible());
 }
 
-KFileItem DolphinIconsView::itemForIndex(const QModelIndex& index) const
-{
-    QAbstractProxyModel* proxyModel = static_cast<QAbstractProxyModel*>(model());
-    KDirModel* dirModel = static_cast<KDirModel*>(proxyModel->sourceModel());
-    const QModelIndex dirIndex = proxyModel->mapToSource(index);
-    return dirModel->itemForIndex(dirIndex);
-}
-
 int DolphinIconsView::additionalInfoCount() const
 {
     const DolphinView* view = m_controller->dolphinView();