]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kfileitemlistwidget.h
Fix selection rect after porting from QFontMetrics::width()
[dolphin.git] / src / kitemviews / kfileitemlistwidget.h
index 44451360b343164b41e42e32d304899bb09b1790..7ce415dbee2986421d9c2ca0973feaa0998a5b6f 100644 (file)
 #ifndef KFILEITEMLISTWIDGET_H
 #define KFILEITEMLISTWIDGET_H
 
-#include <libdolphin_export.h>
+#include "dolphin_export.h"
+#include "kitemviews/kstandarditemlistwidget.h"
 
-#include <kitemviews/kitemlistwidget.h>
-
-#include <QPixmap>
-#include <QPointF>
-#include <QStaticText>
+class DOLPHIN_EXPORT KFileItemListWidgetInformant : public KStandardItemListWidgetInformant
+{
+public:
+    KFileItemListWidgetInformant();
+    ~KFileItemListWidgetInformant() override;
 
-class KItemListView;
-class KItemListStyleOption;
+protected:
+    QString itemText(int index, const KItemListView* view) const override;
+    bool itemIsLink(int index, const KItemListView* view) const override;
+    QString roleText(const QByteArray& role, const QHash<QByteArray, QVariant>& values) const override;
+    QFont customizedFontForLinks(const QFont& baseFont) const override;
+};
 
-class LIBDOLPHINPRIVATE_EXPORT KFileItemListWidget : public KItemListWidget
+class DOLPHIN_EXPORT KFileItemListWidget : public KStandardItemListWidget
 {
     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 textFocusRect() const;
-    virtual QRectF expansionToggleRect() const;
-    virtual QRectF selectionToggleRect() const;
+    KFileItemListWidget(KItemListWidgetInformant* informant, QGraphicsItem* parent);
+    ~KFileItemListWidget() override;
 
-    /**
-     * 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);
+    static KItemListWidgetInformant* createInformant();
 
 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();
-
-    void setTextColor(const QColor& color);
-    QColor textColor() const;
-
-    void setOverlay(const QPixmap& overlay);
-    QPixmap overlay() const;
-
-    virtual void dataChanged(const QHash<QByteArray, QVariant>& current, const QSet<QByteArray>& roles = QSet<QByteArray>());
-    virtual void visibleRolesChanged(const QList<QByteArray>& current, const QList<QByteArray>& 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();
-
-private:
-    enum RoleType {
-        Name,
-        Size,
-        Date,
-        Generic  // Mandatory last entry
-    };
-
-    void triggerCacheRefreshing();
-    void updateExpansionArea();
-    void updatePixmapCache();
-
-    void updateTextsCache();
-    void updateIconsLayoutTextCache();
-    void updateCompactLayoutTextCache();
-    void updateDetailsLayoutTextCache();
-
-    void updateAdditionalInfoTextColor();
-
-    void drawPixmap(QPainter* painter, const QPixmap& pixmap);
-    void drawSiblingsInformation(QPainter* painter);
-
-    static QPixmap pixmapForIcon(const QString& name, int size);
-    static void applyCutEffect(QPixmap& pixmap);
-    static void applyHiddenEffect(QPixmap& pixmap);
-    static RoleType roleType(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
      */
-    static QString roleText(const QByteArray& role, const QHash<QByteArray, QVariant>& values);
-
-private:
-    bool m_isCut;
-    bool m_isHidden;
-    bool m_isExpandable;
-    bool m_supportsItemExpanding;
-
-    bool m_dirtyLayout;
-    bool m_dirtyContent;
-    QSet<QByteArray> 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
-
-    struct TextInfo
-    {
-        QPointF pos;
-        QStaticText staticText;
-    };
-    QHash<QByteArray, TextInfo*> m_textInfo;
-
-    QRectF m_textRect;
-
-    QList<QByteArray> m_sortedVisibleRoles;
-
-    QRectF m_expansionArea;
-
-    QColor m_customTextColor;
-    QColor m_additionalInfoTextColor;
-
-    QPixmap m_overlay;
+    int selectionLength(const QString& text) const override;
 };
 
 #endif