X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/793311dac163592a8b63fc4859fdc054d7a22022..1e5bc5b3d6ba344da09369802d822f6cd6da7c4c:/src/kitemviews/kfileitemlistwidget.h diff --git a/src/kitemviews/kfileitemlistwidget.h b/src/kitemviews/kfileitemlistwidget.h index 76d090040..e2db43178 100644 --- a/src/kitemviews/kfileitemlistwidget.h +++ b/src/kitemviews/kfileitemlistwidget.h @@ -1,183 +1,76 @@ -/*************************************************************************** - * Copyright (C) 2011 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: 2011 Peter Penz + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ #ifndef KFILEITEMLISTWIDGET_H #define KFILEITEMLISTWIDGET_H -#include +#include "dolphin_export.h" +#include "kitemviews/kstandarditemlistwidget.h" -#include +class KFileItemListView; -#include -#include -#include - -class KItemListView; -class KItemListStyleOption; - -class LIBDOLPHINPRIVATE_EXPORT KFileItemListWidget : public KItemListWidget +/** + * @brief ItemList widget informant implementation for use with KFileItems. + * + * Code that does not expect KFileItems specifically should go to KStandardItemListWidgetInformant. + * + * @see KItemListWidgetInformant + */ +class DOLPHIN_EXPORT KFileItemListWidgetInformant : public KStandardItemListWidgetInformant { - Q_OBJECT - public: - enum Layout - { - IconsLayout, - CompactLayout, - DetailsLayout - }; - - KFileItemListWidget(QGraphicsItem* parent); - virtual ~KFileItemListWidget(); - - void setLayout(Layout layout); - Layout layout() const; - - void setSupportsItemExpanding(bool supportsItemExpanding); - bool supportsItemExpanding() const; - - virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0); - - virtual QRectF iconRect() const; - virtual QRectF textRect() const; - virtual QRectF expansionToggleRect() const; - virtual QRectF selectionToggleRect() const; - - /** - * Implementation of KItemListWidgetCreatorBase::itemSizeHint() when - * using the KItemListWidgetCreator-template. - * - * @see KItemListView - */ - static QSizeF itemSizeHint(int index, const KItemListView* view); - - /** - * Implementation of KItemListWidgetCreatorBase::preferredRoleColumnWidth() when - * using the KItemListWidgetCreator-template. - * - * @see KItemListView - */ - static qreal preferredRoleColumnWidth(const QByteArray& role, int index, const KItemListView* view); + KFileItemListWidgetInformant(); + ~KFileItemListWidgetInformant() override; protected: - /** - * Invalidates the cache which results in calling KFileItemListWidget::refreshCache() as - * soon as the item need to gets repainted. - */ - void invalidateCache(); - - /** - * Is called if the cache got invalidated by KFileItemListWidget::invalidateCache(). - * The default implementation is empty. - */ - virtual void refreshCache(); + QString itemText(int index, const KItemListView *view) const override; + bool itemIsLink(int index, const KItemListView *view) const override; + /** @see KStandardItemListWidget::roleText(). */ + QString roleText(const QByteArray &role, const QHash &values, ForUsageAs forUsageAs = ForUsageAs::DisplayedText) const override; + QFont customizedFontForLinks(const QFont &baseFont) const override; - void setTextColor(const QColor& color); - QColor textColor() const; - - void setOverlay(const QPixmap& overlay); - QPixmap overlay() const; - - virtual void dataChanged(const QHash& current, const QSet& roles = QSet()); - virtual void visibleRolesChanged(const QList& current, const QList& previous); - virtual void columnWidthChanged(const QByteArray& role, qreal current, qreal previous); - virtual void styleOptionChanged(const KItemListStyleOption& current, const KItemListStyleOption& previous); - virtual void hoveredChanged(bool hovered); - virtual void selectedChanged(bool selected); - virtual void siblingsInformationChanged(const QBitArray& current, const QBitArray& previous); - virtual void resizeEvent(QGraphicsSceneResizeEvent* event); - virtual void showEvent(QShowEvent* event); - virtual void hideEvent(QHideEvent* event); - -private slots: - void slotCutItemsChanged(); + friend class KItemListDelegateAccessible; +}; -private: - enum TextId { - Name, - Size, - Date, - Permissions, - Owner, - Group, - Type, - Destination, - Path, - TextIdCount // Mandatory last entry - }; +/** + * @brief ItemList widget implementation for use with KFileItems. + * + * Code that does not expect KFileItems specifically should go to KStandardItemListWidget. + * + * @see KItemListWidget + */ +class DOLPHIN_EXPORT KFileItemListWidget : public KStandardItemListWidget +{ + Q_OBJECT - void triggerCacheRefreshing(); - void updateExpansionArea(); - void updatePixmapCache(); +public: + KFileItemListWidget(KItemListWidgetInformant *informant, QGraphicsItem *parent); + ~KFileItemListWidget() override; - void updateTextsCache(); - void updateIconsLayoutTextCache(); - void updateCompactLayoutTextCache(); - void updateDetailsLayoutTextCache(); + static KItemListWidgetInformant *createInformant(); - void updateAdditionalInfoTextColor(); + /// Force-update the displayed icon + void forceUpdate(); - void drawPixmap(QPainter* painter, const QPixmap& pixmap); - void drawSiblingsInformation(QPainter* painter); +protected: + virtual void hoverSequenceStarted() override; + virtual void hoverSequenceIndexChanged(int sequenceIndex) override; + virtual void hoverSequenceEnded() override; - static QPixmap pixmapForIcon(const QString& name, int size); - static void applyCutEffect(QPixmap& pixmap); - static void applyHiddenEffect(QPixmap& pixmap); - static TextId roleTextId(const QByteArray& role); + bool isRoleRightAligned(const QByteArray &role) const override; + bool isHidden() const override; + QFont customizedFont(const QFont &baseFont) const override; /** - * @return Shown string for the role \p role of the item with the values \p values. + * @return Selection length without MIME-type extension in number of unicode characters, which might be different from number of QChars. */ - static QString roleText(const QByteArray& role, const QHash& values); + int selectionLength(const QString &text) const override; private: - bool m_isCut; - bool m_isHidden; - bool m_isExpandable; - bool m_supportsItemExpanding; - - bool m_dirtyLayout; - bool m_dirtyContent; - QSet m_dirtyContentRoles; - - Layout m_layout; - QPointF m_pixmapPos; - QPixmap m_pixmap; - QSize m_scaledPixmapSize; - - QRectF m_iconRect; // Cache for KItemListWidget::iconRect() - QPixmap m_hoverPixmap; // Cache for modified m_pixmap when hovering the item - - QPointF m_textPos[TextIdCount]; - QStaticText m_text[TextIdCount]; - QRectF m_textRect; - - QList m_sortedVisibleRoles; - - QRectF m_expansionArea; - - QColor m_customTextColor; - QColor m_additionalInfoTextColor; - - QPixmap m_overlay; + KFileItemListView *listView(); }; #endif - -