]> 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 ccf12a737d55fb986f701a80e81eea21943bd237..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,16 +91,18 @@ 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);
 
-    m_font = QFont(settings->fontFamily(), settings->fontSize());
-    m_font.setItalic(settings->italicFont());
-    m_font.setBold(settings->boldFont());
+    if (settings->useSystemFont()) {
+        m_font = KGlobalSettings::generalFont();
+    } else {
+        m_font = QFont(settings->fontFamily(),
+                       settings->fontSize(),
+                       settings->fontWeight(),
+                       settings->italicFont());
+    }
 
     setWordWrap(settings->numberOfTextlines() > 1);
     updateGridSize(view->showPreview(), 0);
@@ -119,6 +121,9 @@ DolphinIconsView::DolphinIconsView(QWidget* parent, DolphinController* controlle
     setCategoryDrawer(m_categoryDrawer);
 
     setFocus();
+
+    connect(KGlobalSettings::self(), SIGNAL(kdisplayFontChanged()),
+            this, SLOT(updateFont()));
 }
 
 DolphinIconsView::~DolphinIconsView()
@@ -214,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);
 }
 
@@ -236,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 {
@@ -257,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);
@@ -266,73 +267,37 @@ 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) {
+        event->ignore();
+        return;
+    }
     KCategorizedView::wheelEvent(event);
-
-    if ((event->modifiers() & Qt::ControlModifier) == Qt::ControlModifier) {
-        int d = event->delta();
-        if (d > 0) {
-            zoomIn();
-        } else if (d < 0) {
-            zoomOut();
-        }
-    } else {
-        // if the icons are aligned left to right, the vertical wheel event should
-        // be applied to the horizontal scrollbar
-        const IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings();
-        const bool scrollHorizontal = (event->orientation() == Qt::Vertical) &&
-                                      (settings->arrangement() == QListView::LeftToRight);
-        if (scrollHorizontal) {
-            QWheelEvent horizEvent(event->pos(),
-                                   event->delta(),
-                                   event->buttons(),
-                                   event->modifiers(),
-                                   Qt::Horizontal);
-            QApplication::sendEvent(horizontalScrollBar(), &horizEvent);
-        }
+    // if the icons are aligned left to right, the vertical wheel event should
+    // be applied to the horizontal scrollbar
+    const IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings();
+    const bool scrollHorizontal = (event->orientation() == Qt::Vertical) &&
+                                  (settings->arrangement() == QListView::LeftToRight);
+    if (scrollHorizontal) {
+        QWheelEvent horizEvent(event->pos(),
+                               event->delta(),
+                               event->buttons(),
+                               event->modifiers(),
+                               Qt::Horizontal);
+        QApplication::sendEvent(horizontalScrollBar(), &horizEvent);
     }
 }
 
-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();
@@ -361,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
@@ -388,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);
@@ -412,6 +368,16 @@ void DolphinIconsView::requestActivation()
     m_controller->requestActivation();
 }
 
+void DolphinIconsView::updateFont()
+{
+    const IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings();
+    Q_ASSERT(settings != 0);
+
+    if (settings->useSystemFont()) {
+        m_font = KGlobalSettings::generalFont();
+    }
+}
+
 bool DolphinIconsView::isZoomInPossible() const
 {
     IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings();
@@ -468,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;
@@ -484,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);
@@ -497,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();