]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kfileitemlistview.h
Fix selection rect after porting from QFontMetrics::width()
[dolphin.git] / src / kitemviews / kfileitemlistview.h
index d90d8ecf9fd8bffebbccad92f7d922100b298e50..92005c2df5105742e3b476ba4fe21a9a99515765 100644 (file)
@@ -20,9 +20,8 @@
 #ifndef KFILEITEMLISTVIEW_H
 #define KFILEITEMLISTVIEW_H
 
-#include <libdolphin_export.h>
-
-#include <kitemviews/kitemlistview.h>
+#include "dolphin_export.h"
+#include "kitemviews/kstandarditemlistview.h"
 
 class KFileItemModelRolesUpdater;
 class QTimer;
@@ -36,52 +35,74 @@ class QTimer;
  * KItemListView::setWidgetCreator() and KItemListView::setGroupHeaderCreator()
  * to apply customized generators.
  */
-class LIBDOLPHINPRIVATE_EXPORT KFileItemListView : public KItemListView
+class DOLPHIN_EXPORT KFileItemListView : public KStandardItemListView
 {
     Q_OBJECT
 
 public:
-    enum Layout
-    {
-        IconsLayout,
-        CompactLayout,
-        DetailsLayout
-    };
-
-    KFileItemListView(QGraphicsWidget* parent = 0);
-    virtual ~KFileItemListView();
+    explicit KFileItemListView(QGraphicsWidget* parent = nullptr);
+    ~KFileItemListView() override;
 
     void setPreviewsShown(bool show);
     bool previewsShown() const;
 
-    void setItemLayout(Layout layout);
-    Layout itemLayout() const;
+    /**
+     * If enabled a small preview gets upscaled to the icon size in case where
+     * the icon size is larger than the preview. Per default enlarging is
+     * enabled.
+     */
+    void setEnlargeSmallPreviews(bool enlarge);
+    bool enlargeSmallPreviews() const;
 
-    /** @reimp */
-    virtual QSizeF itemSizeHint(int index) const;
+    /**
+     * Sets the list of enabled thumbnail plugins that are used for previews.
+     * Per default all plugins enabled in the KConfigGroup "PreviewSettings"
+     * are used.
+     *
+     * For a list of available plugins, call KServiceTypeTrader::self()->query("ThumbCreator").
+     *
+     * @see enabledPlugins
+     */
+    void setEnabledPlugins(const QStringList& list);
 
-    /** @reimp */
-    virtual QHash<QByteArray, QSizeF> visibleRolesSizes(const KItemRangeList& itemRanges) const;
+    /**
+     * Returns the list of enabled thumbnail plugins.
+     * @see setEnabledPlugins
+     */
+    QStringList enabledPlugins() const;
 
-    /** @reimp */
-    virtual QPixmap createDragPixmap(const QSet<int>& indexes) const;
+    /**
+     * Sets the maximum file size of local files for which
+     * previews will be generated (if enabled). A value of 0
+     * indicates no file size limit.
+     * Per default the value from KConfigGroup "PreviewSettings"
+     * MaximumSize is used, 0 otherwise.
+     * @param size
+     */
+    void setLocalFileSizePreviewLimit(qlonglong size);
+    qlonglong localFileSizePreviewLimit() const;
+
+    QPixmap createDragPixmap(const KItemSet& indexes) const override;
 
 protected:
-    virtual void initializeItemListWidget(KItemListWidget* item);
-    virtual bool itemSizeHintUpdateRequired(const QSet<QByteArray>& changedRoles) const;
-    virtual void onModelChanged(KItemModelBase* current, KItemModelBase* previous);
-    virtual void onScrollOrientationChanged(Qt::Orientation current, Qt::Orientation previous);
-    virtual void onItemSizeChanged(const QSizeF& current, const QSizeF& previous);
-    virtual void onScrollOffsetChanged(qreal current, qreal previous);
-    virtual void onVisibleRolesChanged(const QList<QByteArray>& current, const QList<QByteArray>& previous);
-    virtual void onStyleOptionChanged(const KItemListStyleOption& current, const KItemListStyleOption& previous);
-    virtual void onTransactionBegin();
-    virtual void onTransactionEnd();
-    virtual void resizeEvent(QGraphicsSceneResizeEvent* event);
+    KItemListWidgetCreatorBase* defaultWidgetCreator() const override;
+    void initializeItemListWidget(KItemListWidget* item) override;
+    virtual void onPreviewsShownChanged(bool shown);
+    void onItemLayoutChanged(ItemLayout current, ItemLayout previous) override;
+    void onModelChanged(KItemModelBase* current, KItemModelBase* previous) override;
+    void onScrollOrientationChanged(Qt::Orientation current, Qt::Orientation previous) override;
+    void onItemSizeChanged(const QSizeF& current, const QSizeF& previous) override;
+    void onScrollOffsetChanged(qreal current, qreal previous) override;
+    void onVisibleRolesChanged(const QList<QByteArray>& current, const QList<QByteArray>& previous) override;
+    void onStyleOptionChanged(const KItemListStyleOption& current, const KItemListStyleOption& previous) override;
+    void onSupportsItemExpandingChanged(bool supportsExpanding) override;
+    void onTransactionBegin() override;
+    void onTransactionEnd() override;
+    void resizeEvent(QGraphicsSceneResizeEvent* event) override;
 
 protected slots:
-    virtual void slotItemsRemoved(const KItemRangeList& itemRanges);
-    virtual void slotSortRoleChanged(const QByteArray& current, const QByteArray& previous);
+    void slotItemsRemoved(const KItemRangeList& itemRanges) override;
+    void slotSortRoleChanged(const QByteArray& current, const QByteArray& previous) override;
 
 private slots:
     void triggerVisibleIndexRangeUpdate();
@@ -91,11 +112,6 @@ private slots:
     void updateIconSize();
 
 private:
-    QSizeF visibleRoleSizeHint(int index, const QByteArray& role) const;
-    void updateLayoutOfVisibleItems();
-    void updateTimersInterval();
-    void updateMinimumRolesWidths();
-
     /**
      * Applies the roles defined by KItemListView::visibleRoles() to the
      * KFileItemModel and KFileItemModelRolesUpdater. As the model does not
@@ -104,16 +120,18 @@ private:
      */
     void applyRolesToModel();
 
-private:
-    Layout m_itemLayout;
+    /**
+     * @return Size that is available for the icons. The size might be larger than specified by
+     *         KItemListStyleOption::iconSize: With the IconsLayout also the empty left area left
+     *         and right of an icon will be included.
+     */
+    QSize availableIconSize() const;
 
+private:
     KFileItemModelRolesUpdater* m_modelRolesUpdater;
     QTimer* m_updateVisibleIndexRangeTimer;
     QTimer* m_updateIconSizeTimer;
 
-    // Cache for calculating visibleRoleSizes() in a fast way
-    QHash<QByteArray, int> m_minimumRolesWidths;
-
     friend class KFileItemListViewTest; // For unit testing
 };