X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/4d9ea4261a1f24e299595b897ea790eab1748fe9..c68f1f6f8d6c24123c9c5df4d2e91a9d2462ceb6:/src/kitemviews/kitemlistview.h diff --git a/src/kitemviews/kitemlistview.h b/src/kitemviews/kitemlistview.h index 5453d851f..2aedf5832 100644 --- a/src/kitemviews/kitemlistview.h +++ b/src/kitemviews/kitemlistview.h @@ -9,6 +9,8 @@ #ifndef KITEMLISTVIEW_H #define KITEMLISTVIEW_H +#include + #include "dolphin_export.h" #include "kitemviews/kitemliststyleoption.h" #include "kitemviews/kitemlistwidget.h" @@ -160,10 +162,10 @@ public: * @return Index of the item that is below the point \a pos. * The position is relative to the upper right of * the visible area. Only (at least partly) visible - * items are considered. -1 is returned if no item is - * below the position. + * items are considered. std::nullopt is returned if + * no item is below the position. */ - int itemAt(const QPointF& pos) const; + std::optional itemAt(const QPointF& pos) const; bool isAboveSelectionToggle(int index, const QPointF& pos) const; bool isAboveExpansionToggle(int index, const QPointF& pos) const; bool isAboveText(int index, const QPointF& pos) const; @@ -189,7 +191,7 @@ public: * @note the logical height (width) is actually the * width (height) if the scroll orientation is Qt::Vertical! */ - void calculateItemSizeHints(QVector& logicalHeightHints, qreal& logicalWidthHint) const; + void calculateItemSizeHints(QVector>& logicalHeightHints, qreal& logicalWidthHint) const; /** * If set to true, items having child-items can be expanded to show the child-items as @@ -203,6 +205,12 @@ public: void setSupportsItemExpanding(bool supportsExpanding); bool supportsItemExpanding() const; + void setHighlightEntireRow(bool highlightEntireRow); + bool highlightEntireRow() const; + + void setAlternateBackgrounds(bool alternate); + bool alternateBackgrounds() const; + /** * @return The rectangle of the item relative to the top/left of * the currently visible area (see KItemListView::offset()). @@ -221,6 +229,12 @@ public: */ QRectF itemContextRect(int index) const; + /** + * @return Whether or not the name of the file has been elided. At present this will + * only ever be true when in icons view. + */ + bool isElided(int index) const; + /** * Scrolls to the item with the index \a index so that the item * will be fully visible. @@ -366,6 +380,7 @@ protected: virtual void onScrollOffsetChanged(qreal current, qreal previous); virtual void onVisibleRolesChanged(const QList& current, const QList& previous); virtual void onStyleOptionChanged(const KItemListStyleOption& current, const KItemListStyleOption& previous); + virtual void onHighlightEntireRowChanged(bool highlightEntireRow); virtual void onSupportsItemExpandingChanged(bool supportsExpanding); virtual void onTransactionBegin(); @@ -384,6 +399,8 @@ protected: virtual void updateFont(); virtual void updatePalette(); + KItemListSizeHintResolver* m_sizeHintResolver; + protected Q_SLOTS: virtual void slotItemsInserted(const KItemRangeList& itemRanges); virtual void slotItemsRemoved(const KItemRangeList& itemRanges); @@ -401,7 +418,6 @@ protected Q_SLOTS: private Q_SLOTS: void slotAnimationFinished(QGraphicsWidget* widget, KItemListViewAnimation::AnimationType type); - void slotLayoutTimerFinished(); void slotRubberBandPosChanged(); void slotRubberBandActivationChanged(bool active); @@ -416,6 +432,8 @@ private Q_SLOTS: qreal currentWidth, qreal previousWidth); + void slotLeadingPaddingChanged(qreal width); + /** * Is invoked if a column has been moved by the user. Applies * the moved role to the view. @@ -597,7 +615,7 @@ private: /** * Resizes the column-widths of m_headerWidget based on the preferred widths - * and the vailable view-size. + * and the available view-size. */ void applyAutomaticColumnWidths(); @@ -697,6 +715,8 @@ private: private: bool m_enabledSelectionToggles; bool m_grouped; + bool m_highlightEntireRow; + bool m_alternateBackgrounds; bool m_supportsItemExpanding; bool m_editingRole; int m_activeTransactions; // Counter for beginTransaction()/endTransaction() @@ -723,11 +743,9 @@ private: QHash m_visibleCells; int m_scrollBarExtent; - KItemListSizeHintResolver* m_sizeHintResolver; KItemListViewLayouter* m_layouter; KItemListViewAnimation* m_animation; - QTimer* m_layoutTimer; // Triggers an asynchronous doLayout() call. qreal m_oldScrollOffset; qreal m_oldMaximumScrollOffset; qreal m_oldItemOffset; @@ -803,7 +821,7 @@ public: virtual void recycle(KItemListWidget* widget); - virtual void calculateItemSizeHints(QVector& logicalHeightHints, qreal& logicalWidthHint, const KItemListView* view) const = 0; + virtual void calculateItemSizeHints(QVector>& logicalHeightHints, qreal& logicalWidthHint, const KItemListView* view) const = 0; virtual qreal preferredRoleColumnWidth(const QByteArray& role, int index, @@ -822,7 +840,7 @@ public: KItemListWidget* create(KItemListView* view) override; - void calculateItemSizeHints(QVector& logicalHeightHints, qreal& logicalWidthHint, const KItemListView* view) const override; + void calculateItemSizeHints(QVector>& logicalHeightHints, qreal& logicalWidthHint, const KItemListView* view) const override; qreal preferredRoleColumnWidth(const QByteArray& role, int index, @@ -851,11 +869,12 @@ KItemListWidget* KItemListWidgetCreator::create(KItemListView* view) widget = new T(m_informant, view); addCreatedWidget(widget); } + widget->setParentItem(view); return widget; } template -void KItemListWidgetCreator::calculateItemSizeHints(QVector& logicalHeightHints, qreal& logicalWidthHint, const KItemListView* view) const +void KItemListWidgetCreator::calculateItemSizeHints(QVector>& logicalHeightHints, qreal& logicalWidthHint, const KItemListView* view) const { return m_informant->calculateItemSizeHints(logicalHeightHints, logicalWidthHint, view); } @@ -872,7 +891,7 @@ qreal KItemListWidgetCreator::preferredRoleColumnWidth(const QByteArray& role * @brief Base class for creating KItemListGroupHeaders. * * It is recommended that applications simply use the KItemListGroupHeaderCreator-template class. - * For a custom implementation the methods create() and recyle() must be reimplemented. + * For a custom implementation the methods create() and recycle() must be reimplemented. * The intention of the group-header creator is to prevent repetitive and expensive instantiations and * deletions of KItemListGroupHeaders by recycling existing header instances. */