]> cloud.milkyroute.net Git - dolphin.git/blob - src/kitemviews/kfileitemlistview.h
Build with QT_NO_KEYWORDS
[dolphin.git] / src / kitemviews / kfileitemlistview.h
1 /*
2 * SPDX-FileCopyrightText: 2011 Peter Penz <peter.penz19@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 #ifndef KFILEITEMLISTVIEW_H
8 #define KFILEITEMLISTVIEW_H
9
10 #include "dolphin_export.h"
11 #include "kitemviews/kstandarditemlistview.h"
12
13 class KFileItemModelRolesUpdater;
14 class QTimer;
15
16 /**
17 * @brief View that allows to show the content of file-items.
18 *
19 * The corresponding model set by the controller must be an instance
20 * of KFileItemModel. Per default KFileItemListWidget is set as widget creator
21 * value and KItemListGroupHeader as group-header creator value. Use
22 * KItemListView::setWidgetCreator() and KItemListView::setGroupHeaderCreator()
23 * to apply customized generators.
24 */
25 class DOLPHIN_EXPORT KFileItemListView : public KStandardItemListView
26 {
27 Q_OBJECT
28
29 public:
30 explicit KFileItemListView(QGraphicsWidget* parent = nullptr);
31 ~KFileItemListView() override;
32
33 void setPreviewsShown(bool show);
34 bool previewsShown() const;
35
36 /**
37 * If enabled a small preview gets upscaled to the icon size in case where
38 * the icon size is larger than the preview. Per default enlarging is
39 * enabled.
40 */
41 void setEnlargeSmallPreviews(bool enlarge);
42 bool enlargeSmallPreviews() const;
43
44 /**
45 * Sets the list of enabled thumbnail plugins that are used for previews.
46 * Per default all plugins enabled in the KConfigGroup "PreviewSettings"
47 * are used.
48 *
49 * For a list of available plugins, call KServiceTypeTrader::self()->query("ThumbCreator").
50 *
51 * @see enabledPlugins
52 */
53 void setEnabledPlugins(const QStringList& list);
54
55 /**
56 * Returns the list of enabled thumbnail plugins.
57 * @see setEnabledPlugins
58 */
59 QStringList enabledPlugins() const;
60
61 /**
62 * Sets the maximum file size of local files for which
63 * previews will be generated (if enabled). A value of 0
64 * indicates no file size limit.
65 * Per default the value from KConfigGroup "PreviewSettings"
66 * MaximumSize is used, 0 otherwise.
67 * @param size
68 */
69 void setLocalFileSizePreviewLimit(qlonglong size);
70 qlonglong localFileSizePreviewLimit() const;
71
72 /**
73 * If set to true, directories contents are scanned to determine their size
74 * Default true
75 */
76 void setScanDirectories(bool enabled);
77 bool scanDirectories();
78
79 QPixmap createDragPixmap(const KItemSet& indexes) const override;
80
81 protected:
82 KItemListWidgetCreatorBase* defaultWidgetCreator() const override;
83 void initializeItemListWidget(KItemListWidget* item) override;
84 virtual void onPreviewsShownChanged(bool shown);
85 void onItemLayoutChanged(ItemLayout current, ItemLayout previous) override;
86 void onModelChanged(KItemModelBase* current, KItemModelBase* previous) override;
87 void onScrollOrientationChanged(Qt::Orientation current, Qt::Orientation previous) override;
88 void onItemSizeChanged(const QSizeF& current, const QSizeF& previous) override;
89 void onScrollOffsetChanged(qreal current, qreal previous) override;
90 void onVisibleRolesChanged(const QList<QByteArray>& current, const QList<QByteArray>& previous) override;
91 void onStyleOptionChanged(const KItemListStyleOption& current, const KItemListStyleOption& previous) override;
92 void onSupportsItemExpandingChanged(bool supportsExpanding) override;
93 void onTransactionBegin() override;
94 void onTransactionEnd() override;
95 void resizeEvent(QGraphicsSceneResizeEvent* event) override;
96
97 protected Q_SLOTS:
98 void slotItemsRemoved(const KItemRangeList& itemRanges) override;
99 void slotSortRoleChanged(const QByteArray& current, const QByteArray& previous) override;
100
101 private Q_SLOTS:
102 void triggerVisibleIndexRangeUpdate();
103 void updateVisibleIndexRange();
104
105 void triggerIconSizeUpdate();
106 void updateIconSize();
107
108 private:
109 /**
110 * Applies the roles defined by KItemListView::visibleRoles() to the
111 * KFileItemModel and KFileItemModelRolesUpdater. As the model does not
112 * distinct between visible and invisible roles also internal roles
113 * are applied that are mandatory for having a working KFileItemModel.
114 */
115 void applyRolesToModel();
116
117 /**
118 * @return Size that is available for the icons. The size might be larger than specified by
119 * KItemListStyleOption::iconSize: With the IconsLayout also the empty left area left
120 * and right of an icon will be included.
121 */
122 QSize availableIconSize() const;
123
124 private:
125 KFileItemModelRolesUpdater* m_modelRolesUpdater;
126 QTimer* m_updateVisibleIndexRangeTimer;
127 QTimer* m_updateIconSizeTimer;
128 bool m_scanDirectories;
129
130 friend class KFileItemListViewTest; // For unit testing
131 };
132
133 #endif
134
135