X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/b7ad5fb99d32d43fe4e083a8ffc2ebfbd046d2db..e9bd295b:/src/kitemviews/kstandarditemlistwidget.h diff --git a/src/kitemviews/kstandarditemlistwidget.h b/src/kitemviews/kstandarditemlistwidget.h index e6ba4bb3f..3edec0db5 100644 --- a/src/kitemviews/kstandarditemlistwidget.h +++ b/src/kitemviews/kstandarditemlistwidget.h @@ -1,28 +1,14 @@ -/*************************************************************************** - * Copyright (C) 2012 by Peter Penz * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - ***************************************************************************/ +/* + * SPDX-FileCopyrightText: 2012 Peter Penz + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ #ifndef KSTANDARDITEMLISTWIDGET_H #define KSTANDARDITEMLISTWIDGET_H #include "dolphin_export.h" - -#include +#include "kitemviews/kitemlistwidget.h" #include #include @@ -36,13 +22,14 @@ class DOLPHIN_EXPORT KStandardItemListWidgetInformant : public KItemListWidgetIn { public: KStandardItemListWidgetInformant(); - virtual ~KStandardItemListWidgetInformant(); + ~KStandardItemListWidgetInformant() override; + + void calculateItemSizeHints(QVector>& logicalHeightHints, qreal& logicalWidthHint, const KItemListView* view) const override; - virtual void calculateItemSizeHints(QVector& logicalHeightHints, qreal& logicalWidthHint, const KItemListView* view) const Q_DECL_OVERRIDE; - - virtual qreal preferredRoleColumnWidth(const QByteArray& role, + qreal preferredRoleColumnWidth(const QByteArray& role, int index, - const KItemListView* view) const Q_DECL_OVERRIDE; + const KItemListView* view) const override; + protected: /** * @return The value of the "text" role. The default implementation returns @@ -73,15 +60,15 @@ protected: */ virtual QFont customizedFontForLinks(const QFont& baseFont) const; - void calculateIconsLayoutItemSizeHints(QVector& logicalHeightHints, qreal& logicalWidthHint, const KItemListView* view) const; - void calculateCompactLayoutItemSizeHints(QVector& logicalHeightHints, qreal& logicalWidthHint, const KItemListView* view) const; - void calculateDetailsLayoutItemSizeHints(QVector& logicalHeightHints, qreal& logicalWidthHint, const KItemListView* view) const; + void calculateIconsLayoutItemSizeHints(QVector>& logicalHeightHints, qreal& logicalWidthHint, const KItemListView* view) const; + void calculateCompactLayoutItemSizeHints(QVector>& logicalHeightHints, qreal& logicalWidthHint, const KItemListView* view) const; + void calculateDetailsLayoutItemSizeHints(QVector>& logicalHeightHints, qreal& logicalWidthHint, const KItemListView* view) const; friend class KStandardItemListWidget; // Accesses roleText() }; /** - * @brief Itemlist widget implementation for KStandardItemView and KStandardItemModel. + * @brief ItemList widget implementation for KStandardItemListView and KStandardItemModel. */ class DOLPHIN_EXPORT KStandardItemListWidget : public KItemListWidget { @@ -96,23 +83,26 @@ public: }; KStandardItemListWidget(KItemListWidgetInformant* informant, QGraphicsItem* parent); - virtual ~KStandardItemListWidget(); + ~KStandardItemListWidget() override; void setLayout(Layout layout); Layout layout() const; + void setHighlightEntireRow(bool highlightEntireRow); + bool highlightEntireRow() const; + void setSupportsItemExpanding(bool supportsItemExpanding); bool supportsItemExpanding() const; - virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0) override; + void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = nullptr) override; - virtual QRectF iconRect() const Q_DECL_OVERRIDE; - virtual QRectF textRect() const Q_DECL_OVERRIDE; - virtual QRectF textFocusRect() const Q_DECL_OVERRIDE; - virtual QRectF selectionRect() const Q_DECL_OVERRIDE; - virtual QRectF expansionToggleRect() const Q_DECL_OVERRIDE; - virtual QRectF selectionToggleRect() const Q_DECL_OVERRIDE; - virtual QPixmap createDragPixmap(const QStyleOptionGraphicsItem* option, QWidget* widget = 0) Q_DECL_OVERRIDE; + QRectF iconRect() const override; + QRectF textRect() const override; + QRectF textFocusRect() const override; + QRectF selectionRect() const override; + QRectF expansionToggleRect() const override; + QRectF selectionToggleRect() const override; + QPixmap createDragPixmap(const QStyleOptionGraphicsItem* option, QWidget* widget = nullptr) override; static KItemListWidgetInformant* createInformant(); @@ -123,6 +113,12 @@ protected: */ void invalidateCache(); + /** + * Invalidates the icon cache which results in calling KStandardItemListWidget::refreshCache() as + * soon as the item needs to get repainted. + */ + void invalidateIconCache(); + /** * Is called if the cache got invalidated by KStandardItemListWidget::invalidateCache(). * The default implementation is empty. @@ -172,20 +168,30 @@ protected: */ virtual int selectionLength(const QString& text) const; - virtual void dataChanged(const QHash& current, const QSet& roles = QSet()) Q_DECL_OVERRIDE; - virtual void visibleRolesChanged(const QList& current, const QList& previous) Q_DECL_OVERRIDE; - virtual void columnWidthChanged(const QByteArray& role, qreal current, qreal previous) Q_DECL_OVERRIDE; - virtual void styleOptionChanged(const KItemListStyleOption& current, const KItemListStyleOption& previous) Q_DECL_OVERRIDE; - virtual void hoveredChanged(bool hovered) Q_DECL_OVERRIDE; - virtual void selectedChanged(bool selected) Q_DECL_OVERRIDE; - virtual void siblingsInformationChanged(const QBitArray& current, const QBitArray& previous) Q_DECL_OVERRIDE; - virtual void editedRoleChanged(const QByteArray& current, const QByteArray& previous) Q_DECL_OVERRIDE; - virtual void resizeEvent(QGraphicsSceneResizeEvent* event) Q_DECL_OVERRIDE; - virtual void showEvent(QShowEvent* event) Q_DECL_OVERRIDE; - virtual void hideEvent(QHideEvent* event) Q_DECL_OVERRIDE; - bool event(QEvent *event) Q_DECL_OVERRIDE; - -private slots: + void dataChanged(const QHash& current, const QSet& roles = QSet()) override; + void visibleRolesChanged(const QList& current, const QList& previous) override; + void columnWidthChanged(const QByteArray& role, qreal current, qreal previous) override; + void leadingPaddingChanged(qreal width) override; + void styleOptionChanged(const KItemListStyleOption& current, const KItemListStyleOption& previous) override; + void hoveredChanged(bool hovered) override; + void selectedChanged(bool selected) override; + void siblingsInformationChanged(const QBitArray& current, const QBitArray& previous) override; + void editedRoleChanged(const QByteArray& current, const QByteArray& previous) override; + void resizeEvent(QGraphicsSceneResizeEvent* event) override; + void showEvent(QShowEvent* event) override; + void hideEvent(QHideEvent* event) override; + bool event(QEvent *event) override; + + struct TextInfo + { + QPointF pos; + QStaticText staticText; + }; + +public Q_SLOTS: + void finishRoleEditing(); + +private Q_SLOTS: void slotCutItemsChanged(); void slotRoleEditingCanceled(const QByteArray& role, const QVariant& value); void slotRoleEditingFinished(const QByteArray& role, const QVariant& value); @@ -207,6 +213,8 @@ private: QRectF roleEditingRect(const QByteArray &role) const; + QString elideRightKeepExtension(const QString &text, int elidingWidth) const; + /** * Closes the role editor and returns the focus back * to the KItemListContainer. @@ -228,12 +236,16 @@ private: */ static qreal columnPadding(const KItemListStyleOption& option); +protected: + QHash m_textInfo; // PlacesItemListWidget needs to access this + private: bool m_isCut; bool m_isHidden; QFont m_customizedFont; QFontMetrics m_customizedFontMetrics; bool m_isExpandable; + bool m_highlightEntireRow; bool m_supportsItemExpanding; bool m_dirtyLayout; @@ -245,16 +257,10 @@ private: QPixmap m_pixmap; QSize m_scaledPixmapSize; //Size of the pixmap in device independent pixels + qreal m_columnWidthSum; QRectF m_iconRect; // Cache for KItemListWidget::iconRect() QPixmap m_hoverPixmap; // Cache for modified m_pixmap when hovering the item - struct TextInfo - { - QPointF pos; - QStaticText staticText; - }; - QHash m_textInfo; - QRectF m_textRect; QList m_sortedVisibleRoles;