X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/2aa5477ccfaf9aeb9e0d6241f62da94b08f363ea..9281664e5b1e492087604264b145b390e8880e81:/src/kitemviews/kstandarditemlistwidget.h diff --git a/src/kitemviews/kstandarditemlistwidget.h b/src/kitemviews/kstandarditemlistwidget.h index ca3cf52e1..18f86dbcb 100644 --- a/src/kitemviews/kstandarditemlistwidget.h +++ b/src/kitemviews/kstandarditemlistwidget.h @@ -11,13 +11,20 @@ #include "kitemviews/kitemlistwidget.h" #include +#include #include #include class KItemListRoleEditor; class KItemListStyleOption; class KItemListView; +class QVariantAnimation; +/** + * @brief standard implementation of the ItemList widget informant for use with KStandardItemListView and KStandardItemModel. + * + * @see KItemListWidgetInformant + */ class DOLPHIN_EXPORT KStandardItemListWidgetInformant : public KItemListWidgetInformant { public: @@ -47,12 +54,19 @@ protected: */ virtual bool itemIsLink(int index, const KItemListView *view) const; + /** Configure whether the requested text should be optimized for viewing on a screen or for being read out aloud by a text-to-speech engine. */ + enum class ForUsageAs { DisplayedText, SpokenText }; + /** + * @param role The role the text is being requested for. + * @param values The data of the item. All the data is passed because the text might depend on multiple data points. + * @param forUsageAs Whether the roleText should be optimized for displaying (i.e. kept somewhat short) or optimized for speaking e.g. by screen readers + * or text-to-speech in general (i.e. by prefering announcing a month as July instead of as the number 7). * @return String representation of the role \a role. The representation of * a role might depend on other roles, so the values of all roles * are passed as parameter. */ - virtual QString roleText(const QByteArray &role, const QHash &values) const; + virtual QString roleText(const QByteArray &role, const QHash &values, ForUsageAs forUsageAs = ForUsageAs::DisplayedText) const; /** * @return A font based on baseFont which is customized for symlinks. @@ -67,7 +81,9 @@ protected: }; /** - * @brief ItemList widget implementation for KStandardItemListView and KStandardItemModel. + * @brief standard implementation of an ItemList widget for KStandardItemListView and KStandardItemModel. + * + * @see KItemListWidget */ class DOLPHIN_EXPORT KStandardItemListWidget : public KItemListWidget { @@ -96,6 +112,8 @@ public: QRectF expansionToggleRect() const override; QRectF selectionToggleRect() const override; QPixmap createDragPixmap(const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; + /** @see KItemListWidget::startActivateSoonAnimation() */ + void startActivateSoonAnimation(int timeUntilActivation) override; static KItemListWidgetInformant *createInformant(); @@ -140,31 +158,25 @@ protected: void setTextColor(const QColor &color); QColor textColor(const QWidget &widget) const; - void setOverlay(const QPixmap &overlay); - QPixmap overlay() const; + void setOverlays(QHash &overlay); + QHash overlays() const; /** * @see KStandardItemListWidgetInformant::roleText(). */ QString roleText(const QByteArray &role, const QHash &values) const; + static int numberOfUnicodeCharactersIn(const QString &text); + /** - * Fixes: - * Select the text without MIME-type extension - * This is file-item-specific and should be moved - * into KFileItemListWidget. - * - * Inherited classes can define, if the MIME-type extension - * should be selected or not. - * - * @return Selection length (with or without MIME-type extension) + * @return Selection length (with or without MIME-type extension) in number of unicode characters, which might be different from number of QChars. */ virtual int selectionLength(const QString &text) const; void dataChanged(const QHash ¤t, const QSet &roles = QSet()) override; void visibleRolesChanged(const QList ¤t, const QList &previous) override; void columnWidthChanged(const QByteArray &role, qreal current, qreal previous) override; - void sidePaddingChanged(qreal width) override; + void sidePaddingChanged(qreal leftPaddingWidth, qreal rightPaddingWidth) override; void styleOptionChanged(const KItemListStyleOption ¤t, const KItemListStyleOption &previous) override; void hoveredChanged(bool hovered) override; void selectedChanged(bool selected) override; @@ -200,13 +212,18 @@ private: void updateCompactLayoutTextCache(); void updateDetailsLayoutTextCache(); + QPixmap addOverlays(const QPixmap &pixmap, + const QHash &overlays, + const QSize &size, + qreal devicePixelRatioF, + QIcon::Mode mode = QIcon::Normal) const; + void drawPixmap(QPainter *painter, const QPixmap &pixmap); + /** Draw the lines and arrows that visualize the expanded state and level of this row. */ void drawSiblingsInformation(QPainter *painter); QRectF roleEditingRect(const QByteArray &role) const; - QString elideRightKeepExtension(const QString &text, int elidingWidth) const; - /** * Escapes text for display purposes. * @@ -220,7 +237,7 @@ private: */ void closeRoleEditor(); - QPixmap pixmapForIcon(const QString &name, const QStringList &overlays, int size, QIcon::Mode mode) const; + QPixmap pixmapForIcon(const QString &name, const QSize &size, QIcon::Mode mode) const; /** * @return Preferred size of the rating-image based on the given @@ -235,6 +252,9 @@ private: */ static qreal columnPadding(const KItemListStyleOption &option); + /** @returns whether the usual icon should be shown or not. */ + bool isIconControlledByActivateSoonAnimation() const; + protected: QHash m_textInfo; // PlacesItemListWidget needs to access this @@ -269,12 +289,15 @@ private: QColor m_customTextColor; QColor m_additionalInfoTextColor; - QPixmap m_overlay; + QHash m_overlays; QPixmap m_rating; KItemListRoleEditor *m_roleEditor; KItemListRoleEditor *m_oldRoleEditor; + /** @see startActivateSoonAnimation() */ + QPointer m_activateSoonAnimation; + friend class KStandardItemListWidgetInformant; // Accesses private static methods to be able to // share a common layout calculation };