]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kitemlistview.h
First version of a unit test for KItemListController
[dolphin.git] / src / kitemviews / kitemlistview.h
index 4969d01b704c839174001441694bb1bf8f5c165a..9c34daba3fa5e3459bbd4497bde0f28ad746943b 100644 (file)
@@ -344,23 +344,31 @@ private:
 
     void doLayout(LayoutAnimationHint hint, int changedIndex = 0, int changedCount = 0);
 
+    /**
+     * Helper method for doLayout: Returns a list of items that can be reused for the visible
+     * area. Invisible group headers get recycled. The reusable items are items that are
+     * invisible. If the animation hint is 'Animation' then items that are currently animated
+     * won't be reused. Reusing items is faster in comparison to deleting invisible
+     * items and creating a new instance for visible items.
+     */
+    QList<int> recycleInvisibleItems(int firstVisibleIndex,
+                                     int lastVisibleIndex,
+                                     LayoutAnimationHint hint);
+
+    /**
+     * Helper method for doLayout: Starts a moving-animation for the widget to the given
+     * new position. The moving-animation is only started if the new position is within
+     * the same row or column, otherwise the create-animation is used instead.
+     * @return True if the moving-animation has been applied.
+     */
+    bool moveWidget(KItemListWidget* widget, const QRectF& itemBounds);
+
     void emitOffsetChanges();
 
     KItemListWidget* createWidget(int index);
     void recycleWidget(KItemListWidget* widget);
     void setWidgetIndex(KItemListWidget* widget, int index);
 
-    /**
-     * Helper method for setGeometry() and setItemSize(): Calling both methods might result
-     * in a changed number of visible items. To assure that currently invisible items can
-     * get animated from the old position to the new position prepareLayoutForIncreasedItemCount()
-     * takes care to create all item widgets that are visible with the old or the new size.
-     * @param size     Size of the layouter or the item dependent on \p sizeType.
-     * @param sizeType LayouterSize: KItemListLayouter::setSize() is used.
-     *                 ItemSize: KItemListLayouter::setItemSize() is used.
-     */
-    void prepareLayoutForIncreasedItemCount(const QSizeF& size, SizeType sizeType);
-
     /**
      * Helper method for prepareLayoutForIncreasedItemCount().
      */
@@ -437,6 +445,21 @@ private:
      *         if no header is shown.
      */
     QRectF headerBoundaries() const;
+    
+    /**
+     * @return True if the number of columns or rows will be changed when applying
+     *         the new grid- and item-size. Used to determine whether an animation
+     *         should be done when applying the new layout.
+     */
+    bool changesItemGridLayout(const QSizeF& newGridSize, const QSizeF& newItemSize) const;
+    
+    /**
+     * @param changedItemCount Number of inserted  or removed items.
+     * @return                 True if the inserting or removing of items should be animated.
+     *                         No animation should be done if the number of items is too large
+     *                         to provide a pleasant animation.
+     */
+    bool animateChangedItemCount(int changedItemCount) const;
 
     /**
      * Helper function for triggerAutoScrolling().
@@ -490,6 +513,7 @@ private:
     bool m_useHeaderWidths;
 
     friend class KItemListController;
+    friend class KItemListControllerTest;
 };
 
 /**