]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kfileitemlistview.h
Merge branch 'master' into frameworks
[dolphin.git] / src / kitemviews / kfileitemlistview.h
index 0f0c5e85a52a2f13a3de5bd517b48f93f1a2f4cf..2fd21edbfdda12e0c5e7b045f3774eb510191731 100644 (file)
@@ -22,7 +22,7 @@
 
 #include <libdolphin_export.h>
 
-#include <kitemviews/kitemlistview.h>
+#include <kitemviews/kstandarditemlistview.h>
 
 class KFileItemModelRolesUpdater;
 class QTimer;
@@ -36,50 +36,64 @@ class QTimer;
  * KItemListView::setWidgetCreator() and KItemListView::setGroupHeaderCreator()
  * to apply customized generators.
  */
-class LIBDOLPHINPRIVATE_EXPORT KFileItemListView : public KItemListView
+class LIBDOLPHINPRIVATE_EXPORT KFileItemListView : public KStandardItemListView
 {
     Q_OBJECT
 
 public:
-    enum Layout
-    {
-        IconsLayout,
-        CompactLayout,
-        DetailsLayout
-    };
-
     KFileItemListView(QGraphicsWidget* parent = 0);
     virtual ~KFileItemListView();
 
     void setPreviewsShown(bool show);
     bool previewsShown() const;
 
-    void setItemLayout(Layout layout);
-    Layout itemLayout() const;
-
-    /** @reimp */
-    virtual QSizeF itemSizeHint(int index) 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;
+
+    /**
+     * 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);
+
+    /**
+     * Returns the list of enabled thumbnail plugins.
+     * @see setEnabledPlugins
+     */
+    QStringList enabledPlugins() const;
 
     /** @reimp */
-    virtual QHash<QByteArray, QSizeF> visibleRoleSizes() const;
-
-    /** @reimp */
-    virtual QPixmap createDragPixmap(const QSet<int>& indexes) const;
+    virtual QPixmap createDragPixmap(const KItemSet& indexes) const;
 
 protected:
+    virtual KItemListWidgetCreatorBase* defaultWidgetCreator() const;
     virtual void initializeItemListWidget(KItemListWidget* item);
+    virtual void onPreviewsShownChanged(bool shown);
+    virtual void onItemLayoutChanged(ItemLayout current, ItemLayout previous);
     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 onOffsetChanged(qreal current, qreal 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 onSupportsItemExpandingChanged(bool supportsExpanding);
     virtual void onTransactionBegin();
     virtual void onTransactionEnd();
     virtual void resizeEvent(QGraphicsSceneResizeEvent* event);
 
 protected slots:
     virtual void slotItemsRemoved(const KItemRangeList& itemRanges);
+    virtual void slotSortRoleChanged(const QByteArray& current, const QByteArray& previous);
 
 private slots:
     void triggerVisibleIndexRangeUpdate();
@@ -89,21 +103,26 @@ 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
+     * distinct between visible and invisible roles also internal roles
+     * are applied that are mandatory for having a working KFileItemModel.
+     */
+    void applyRolesToModel();
+
+    /**
+     * @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:
-    Layout m_itemLayout;
-
     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
 };