1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
/*
* SPDX-FileCopyrightText: 2011 Peter Penz <[email protected]>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#ifndef KFILEITEMLISTVIEW_H
#define KFILEITEMLISTVIEW_H
#include "dolphin_export.h"
#include "kitemviews/kstandarditemlistview.h"
#include <KFileItem>
class KFileItemModelRolesUpdater;
class QTimer;
/**
* @brief View that allows to show the content of file-items.
*
* The corresponding model set by the controller must be an instance
* of KFileItemModel. Per default KFileItemListWidget is set as widget creator
* value and KItemListGroupHeader as group-header creator value. Use
* KItemListView::setWidgetCreator() and KItemListView::setGroupHeaderCreator()
* to apply customized generators.
*/
class DOLPHIN_EXPORT KFileItemListView : public KStandardItemListView
{
Q_OBJECT
public:
explicit KFileItemListView(QGraphicsWidget *parent = nullptr);
~KFileItemListView() override;
void setPreviewsShown(bool show);
bool previewsShown() 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 KIO::PreviewJob::availableThumbnailerPlugins().
*
* @see enabledPlugins
*/
void setEnabledPlugins(const QStringList &list);
/**
* Returns the list of enabled thumbnail plugins.
* @see setEnabledPlugins
*/
QStringList enabledPlugins() 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;
/**
* Notifies the view of a change in the hover state on an item.
*
* @param itemUrl URL of the item that is hovered, or an empty URL if no item is hovered.
* @param seqIdx The current hover sequence index. While an item is hovered,
* this method will be called repeatedly with increasing values
* for this parameter.
*/
void setHoverSequenceState(const QUrl &itemUrl, int seqIdx);
protected:
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 ¤t, const QSizeF &previous) override;
void onScrollOffsetChanged(qreal current, qreal previous) override;
void onVisibleRolesChanged(const QList<QByteArray> ¤t, const QList<QByteArray> &previous) override;
void onStyleOptionChanged(const KItemListStyleOption ¤t, const KItemListStyleOption &previous) override;
void onSupportsItemExpandingChanged(bool supportsExpanding) override;
void onTransactionBegin() override;
void onTransactionEnd() override;
void resizeEvent(QGraphicsSceneResizeEvent *event) override;
void focusInEvent(QFocusEvent *event) override;
void focusOutEvent(QFocusEvent *event) override;
protected Q_SLOTS:
void slotItemsRemoved(const KItemRangeList &itemRanges) override;
void slotSortRoleChanged(const QByteArray ¤t, const QByteArray &previous) override;
private Q_SLOTS:
void triggerVisibleIndexRangeUpdate();
void updateVisibleIndexRange();
void triggerIconSizeUpdate();
void updateIconSize();
private:
/**
* 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:
void updateSelectedWidgets();
KFileItemModelRolesUpdater *m_modelRolesUpdater;
QTimer *m_updateVisibleIndexRangeTimer;
QTimer *m_updateIconSizeTimer;
friend class KFileItemListViewTest; // For unit testing
friend class DolphinMainWindowTest; // For unit testing
};
#endif
|