]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kitemlistview.cpp
KItemList: fix warnings
[dolphin.git] / src / kitemviews / kitemlistview.cpp
index 86583db1ec958a25ed5b3fa7e1ea3febec725f76..eb74b96558c8de617e33d88c5f0c6e279762c789 100644 (file)
@@ -77,10 +77,8 @@ KItemListView::KItemListView(QGraphicsWidget* parent) :
     m_visibleItems(),
     m_visibleGroups(),
     m_visibleCells(),
-    m_sizeHintResolver(nullptr),
     m_layouter(nullptr),
     m_animation(nullptr),
-    m_layoutTimer(nullptr),
     m_oldScrollOffset(0),
     m_oldMaximumScrollOffset(0),
     m_oldItemOffset(0),
@@ -94,7 +92,8 @@ KItemListView::KItemListView(QGraphicsWidget* parent) :
     m_header(nullptr),
     m_headerWidget(nullptr),
     m_indicatorAnimation(nullptr),
-    m_dropIndicator()
+    m_dropIndicator(),
+    m_sizeHintResolver(nullptr)
 {
     setAcceptHoverEvents(true);
     setAcceptTouchEvents(true);
@@ -107,11 +106,6 @@ KItemListView::KItemListView(QGraphicsWidget* parent) :
     connect(m_animation, &KItemListViewAnimation::finished,
             this, &KItemListView::slotAnimationFinished);
 
-    m_layoutTimer = new QTimer(this);
-    m_layoutTimer->setInterval(300);
-    m_layoutTimer->setSingleShot(true);
-    connect(m_layoutTimer, &QTimer::timeout, this, &KItemListView::slotLayoutTimerFinished);
-
     m_rubberBand = new KItemListRubberBand(this);
     connect(m_rubberBand, &KItemListRubberBand::activationChanged, this, &KItemListView::slotRubberBandActivationChanged);
 
@@ -1335,10 +1329,6 @@ void KItemListView::slotItemsChanged(const KItemRangeList& itemRanges,
         if (updateSizeHints) {
             m_sizeHintResolver->itemsChanged(index, count, roles);
             m_layouter->markAsDirty();
-
-            if (!m_layoutTimer->isActive()) {
-                m_layoutTimer->start();
-            }
         }
 
         // Apply the changed roles to the visible item-widgets
@@ -1362,6 +1352,8 @@ void KItemListView::slotItemsChanged(const KItemRangeList& itemRanges,
         ev.setLastRow(itemRange.index + itemRange.count);
         QAccessible::updateAccessibility(&ev);
     }
+
+    doLayout(NoAnimation);
 }
 
 void KItemListView::slotGroupsChanged()
@@ -1462,8 +1454,7 @@ void KItemListView::slotAnimationFinished(QGraphicsWidget* widget,
     KItemListWidget* itemListWidget = qobject_cast<KItemListWidget*>(widget);
     Q_ASSERT(itemListWidget);
 
-    switch (type) {
-    case KItemListViewAnimation::DeleteAnimation: {
+    if (type == KItemListViewAnimation::DeleteAnimation) {
         // As we recycle the widget in this case it is important to assure that no
         // other animation has been started. This is a convention in KItemListView and
         // not a requirement defined by KItemListViewAnimation.
@@ -1474,31 +1465,16 @@ void KItemListView::slotAnimationFinished(QGraphicsWidget* widget,
         // been finished.
         recycleGroupHeaderForWidget(itemListWidget);
         widgetCreator()->recycle(itemListWidget);
-        break;
-    }
-
-    case KItemListViewAnimation::CreateAnimation:
-    case KItemListViewAnimation::MovingAnimation:
-    case KItemListViewAnimation::ResizeAnimation: {
+    } else {
         const int index = itemListWidget->index();
         const bool invisible = (index < m_layouter->firstVisibleIndex()) ||
                                (index > m_layouter->lastVisibleIndex());
         if (invisible && !m_animation->isStarted(itemListWidget)) {
             recycleWidget(itemListWidget);
         }
-        break;
-    }
-
-    default: break;
     }
 }
 
-void KItemListView::slotLayoutTimerFinished()
-{
-    m_layouter->setSize(geometry().size());
-    doLayout(Animation);
-}
-
 void KItemListView::slotRubberBandPosChanged()
 {
     update();
@@ -1756,10 +1732,6 @@ KItemListRubberBand* KItemListView::rubberBand() const
 
 void KItemListView::doLayout(LayoutAnimationHint hint, int changedIndex, int changedCount)
 {
-    if (m_layoutTimer->isActive()) {
-        m_layoutTimer->stop();
-    }
-
     if (m_activeTransactions > 0) {
         if (hint == NoAnimation) {
             // As soon as at least one property change should be done without animation,
@@ -1886,6 +1858,8 @@ void KItemListView::doLayout(LayoutAnimationHint hint, int changedIndex, int cha
         Q_ASSERT(widget->index() == i);
         widget->setVisible(true);
 
+        bool animateIconResizing = animate;
+
         if (widget->size() != itemBounds.size()) {
             // Resize the widget for the item to the changed size.
             if (animate) {
@@ -1902,6 +1876,17 @@ void KItemListView::doLayout(LayoutAnimationHint hint, int changedIndex, int cha
             } else {
                 widget->resize(itemBounds.size());
             }
+        } else {
+            animateIconResizing = false;
+        }
+
+        const int newIconSize = widget->styleOption().iconSize;
+        if (widget->iconSize() != newIconSize) {
+            if (animateIconResizing) {
+                m_animation->start(widget, KItemListViewAnimation::IconResizeAnimation, newIconSize);
+            } else {
+                widget->setIconSize(newIconSize);
+            }
         }
 
         // Updating the cell-information must be done as last step: The decision whether the
@@ -2424,7 +2409,9 @@ void KItemListView::applyAutomaticColumnWidths()
     qreal firstColumnWidth = m_headerWidget->columnWidth(firstRole);
     QSizeF dynamicItemSize = m_itemSize;
 
-    qreal requiredWidth = columnWidthsSum() + m_headerWidget->leadingPadding();
+    qreal requiredWidth = columnWidthsSum() + m_headerWidget->leadingPadding()
+        + m_headerWidget->leadingPadding(); // Adding the padding a second time so we have the same padding symmetrically on both sides of the view.
+        // This improves UX, looks better and increases the chances of users figuring out that the padding area can be used for deselecting and dropping files.
     const qreal availableWidth = size().width();
     if (requiredWidth < availableWidth) {
         // Stretch the first column to use the whole remaining width