]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kitemlistview.h
Ported KIcon to QIcon
[dolphin.git] / src / kitemviews / kitemlistview.h
index dd67b941bbdb027d999d675622759b5d76c16091..cf6f27c03ce3a9a2403a4a82d2c4185d34ab66b5 100644 (file)
@@ -92,6 +92,8 @@ public:
 
     qreal maximumItemOffset() const;
 
+    int maximumVisibleItems() const;
+
     void setVisibleRoles(const QList<QByteArray>& roles);
     QList<QByteArray> visibleRoles() const;
 
@@ -151,6 +153,10 @@ public:
     void setGroupHeaderCreator(KItemListGroupHeaderCreatorBase* groupHeaderCreator);
     KItemListGroupHeaderCreatorBase* groupHeaderCreator() const;
 
+    /**
+     * @return The basic size of all items. The size of an item may be larger than
+     *         the basic size (see KItemListView::itemSizeHint() and KItemListView::itemRect()).
+     */
     QSizeF itemSize() const;
 
     const KItemListStyleOption& styleOption() const;
@@ -158,6 +164,12 @@ public:
     /** @reimp */
     virtual void setGeometry(const QRectF& rect);
 
+    /**
+     * @return The page step which should be used by the vertical scroll bar.
+     *         This is the height of the view except for the header widget.
+     */
+    qreal verticalPageStep() const;
+
     /**
      * @return Index of the item that is below the point \a pos.
      *         The position is relative to the upper right of
@@ -182,12 +194,14 @@ public:
     int lastVisibleIndex() const;
 
     /**
-     * @return Required size for the item with the index \p index.
-     *         The returned value might be larger than KItemListView::itemSize().
+     * @return Calculates the required size for all items in the model.
+     *         It might be larger than KItemListView::itemSize().
      *         In this case the layout grid will be stretched to assure an
      *         unclipped item.
+     *         NOTE: the logical height (width) is actually the
+     *         width (height) if the scroll orientation is Qt::Vertical!
      */
-    QSizeF itemSizeHint(int index) const;
+    void calculateItemSizeHints(QVector<qreal>& logicalHeightHints, qreal& logicalWidthHint) const;
 
     /**
      * If set to true, items having child-items can be expanded to show the child-items as
@@ -257,10 +271,9 @@ public:
 
     /**
      * @return Pixmap that is used for a drag operation based on the
-     *         items given by \a indexes. The default implementation returns
-     *         a null-pixmap.
+     *         items given by \a indexes.
      */
-    virtual QPixmap createDragPixmap(const QSet<int>& indexes) const;
+    virtual QPixmap createDragPixmap(const KItemSet& indexes) const;
 
     /**
      * Lets the user edit the role \a role for item with the index \a index.
@@ -310,6 +323,7 @@ signals:
     void roleEditingFinished(int index, const QByteArray& role, const QVariant& value);
 
 protected:
+    virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value);
     void setItemSize(const QSizeF& size);
     void setStyleOption(const KItemListStyleOption& option);
 
@@ -376,18 +390,22 @@ protected:
 
     QList<KItemListWidget*> visibleItemListWidgets() const;
 
+    virtual void updateFont();
+    virtual void updatePalette();
+
 protected slots:
     virtual void slotItemsInserted(const KItemRangeList& itemRanges);
     virtual void slotItemsRemoved(const KItemRangeList& itemRanges);
     virtual void slotItemsMoved(const KItemRange& itemRange, const QList<int>& movedToIndexes);
     virtual void slotItemsChanged(const KItemRangeList& itemRanges,
                                   const QSet<QByteArray>& roles);
+    virtual void slotGroupsChanged();
 
     virtual void slotGroupedSortingChanged(bool current);
     virtual void slotSortOrderChanged(Qt::SortOrder current, Qt::SortOrder previous);
     virtual void slotSortRoleChanged(const QByteArray& current, const QByteArray& previous);
     virtual void slotCurrentChanged(int current, int previous);
-    virtual void slotSelectionChanged(const QSet<int>& current, const QSet<int>& previous);
+    virtual void slotSelectionChanged(const KItemSet& current, const KItemSet& previous);
 
 private slots:
     void slotAnimationFinished(QGraphicsWidget* widget,
@@ -627,6 +645,16 @@ private:
      */
     bool scrollBarRequired(const QSizeF& size) const;
 
+    /**
+     * Shows a drop-indicator between items dependent on the given
+     * cursor position. The cursor position is relative the the upper left
+     * edge of the view.
+     * @return Index of the item where the dropping is done. An index of -1
+     *         indicates that the item has been dropped after the last item.
+     */
+    int showDropIndicator(const QPointF& pos);
+    void hideDropIndicator();
+
     /**
      * Applies the height of the group header to the layouter. The height
      * depends on the used scroll orientation.
@@ -649,6 +677,13 @@ private:
      */
     bool hasSiblingSuccessor(int index) const;
 
+    /**
+     * Helper method for slotRoleEditingCanceled() and slotRoleEditingFinished().
+     * Disconnects the two Signals "roleEditingCanceled" and
+     * "roleEditingFinished"
+     */
+    void disconnectRoleEditingSignals(int index);
+
     /**
      * Helper function for triggerAutoScrolling().
      * @param pos    Logical position of the mouse relative to the range.
@@ -717,10 +752,20 @@ private:
     KItemListHeader* m_header;
     KItemListHeaderWidget* m_headerWidget;
 
+    // When dragging items into the view where the sort-role of the model
+    // is empty, a visual indicator should be shown during dragging where
+    // the dropping will happen. This indicator is specified by an index
+    // of the item. -1 means that no indicator will be shown at all.
+    // The m_dropIndicator is set by the KItemListController
+    // by KItemListView::showDropIndicator() and KItemListView::hideDropIndicator().
+    QRectF m_dropIndicator;
+
     friend class KItemListContainer; // Accesses scrollBarRequired()
     friend class KItemListHeader;    // Accesses m_headerWidget
     friend class KItemListController;
     friend class KItemListControllerTest;
+    friend class KItemListViewAccessible;
+    friend class KItemListAccessibleCell;
 };
 
 /**
@@ -762,7 +807,7 @@ public:
 
     virtual void recycle(KItemListWidget* widget);
 
-    virtual QSizeF itemSizeHint(int index, const KItemListView* view) const = 0;
+    virtual void calculateItemSizeHints(QVector<qreal>& logicalHeightHints, qreal& logicalWidthHint, const KItemListView* view) const = 0;
 
     virtual qreal preferredRoleColumnWidth(const QByteArray& role,
                                            int index,
@@ -781,7 +826,7 @@ public:
 
     virtual KItemListWidget* create(KItemListView* view);
 
-    virtual QSizeF itemSizeHint(int index, const KItemListView* view) const;
+    virtual void calculateItemSizeHints(QVector<qreal>& logicalHeightHints, qreal& logicalWidthHint, const KItemListView* view) const;
 
     virtual qreal preferredRoleColumnWidth(const QByteArray& role,
                                            int index,
@@ -814,9 +859,9 @@ KItemListWidget* KItemListWidgetCreator<T>::create(KItemListView* view)
 }
 
 template<class T>
-QSizeF KItemListWidgetCreator<T>::itemSizeHint(int index, const KItemListView* view) const
+void KItemListWidgetCreator<T>::calculateItemSizeHints(QVector<qreal>& logicalHeightHints, qreal& logicalWidthHint, const KItemListView* view) const
 {
-    return m_informant->itemSizeHint(index, view);
+    return m_informant->calculateItemSizeHints(logicalHeightHints, logicalWidthHint, view);
 }
 
 template<class T>