]> cloud.milkyroute.net Git - dolphin.git/blob - src/kitemviews/kfileitemlistview.h
Allow to specify whether an upscaling of images should be done
[dolphin.git] / src / kitemviews / kfileitemlistview.h
1 /***************************************************************************
2 * Copyright (C) 2011 by Peter Penz <peter.penz19@gmail.com> *
3 * *
4 * This program is free software; you can redistribute it and/or modify *
5 * it under the terms of the GNU General Public License as published by *
6 * the Free Software Foundation; either version 2 of the License, or *
7 * (at your option) any later version. *
8 * *
9 * This program is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 * GNU General Public License for more details. *
13 * *
14 * You should have received a copy of the GNU General Public License *
15 * along with this program; if not, write to the *
16 * Free Software Foundation, Inc., *
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
18 ***************************************************************************/
19
20 #ifndef KFILEITEMLISTVIEW_H
21 #define KFILEITEMLISTVIEW_H
22
23 #include <libdolphin_export.h>
24
25 #include <kitemviews/kitemlistview.h>
26
27 class KFileItemModelRolesUpdater;
28 class QTimer;
29
30 /**
31 * @brief View that allows to show the content of file-items.
32 *
33 * The corresponding model set by the controller must be an instance
34 * of KFileItemModel. Per default KFileItemListWidget is set as widget creator
35 * value and KItemListGroupHeader as group-header creator value. Use
36 * KItemListView::setWidgetCreator() and KItemListView::setGroupHeaderCreator()
37 * to apply customized generators.
38 */
39 class LIBDOLPHINPRIVATE_EXPORT KFileItemListView : public KItemListView
40 {
41 Q_OBJECT
42
43 public:
44 enum Layout
45 {
46 IconsLayout,
47 CompactLayout,
48 DetailsLayout
49 };
50
51 KFileItemListView(QGraphicsWidget* parent = 0);
52 virtual ~KFileItemListView();
53
54 void setPreviewsShown(bool show);
55 bool previewsShown() const;
56
57 /**
58 * If enabled a small preview gets upscaled to the icon size in case where
59 * the icon size is larger than the preview. Per default enlarging is
60 * enabled.
61 */
62 void setEnlargeSmallPreviews(bool enlarge);
63 bool enlargeSmallPreviews() const;
64
65 void setItemLayout(Layout layout);
66 Layout itemLayout() const;
67
68 /**
69 * Sets the list of enabled thumbnail plugins that are used for previews.
70 * Per default all plugins enabled in the KConfigGroup "PreviewSettings"
71 * are used.
72 *
73 * For a list of available plugins, call KServiceTypeTrader::self()->query("ThumbCreator").
74 *
75 * @see enabledPlugins
76 */
77 void setEnabledPlugins(const QStringList& list);
78
79 /**
80 * Returns the list of enabled thumbnail plugins.
81 * @see setEnabledPlugins
82 */
83 QStringList enabledPlugins() const;
84
85 /** @reimp */
86 virtual QPixmap createDragPixmap(const QSet<int>& indexes) const;
87
88 protected:
89 virtual void initializeItemListWidget(KItemListWidget* item);
90 virtual bool itemSizeHintUpdateRequired(const QSet<QByteArray>& changedRoles) const;
91 virtual void onModelChanged(KItemModelBase* current, KItemModelBase* previous);
92 virtual void onScrollOrientationChanged(Qt::Orientation current, Qt::Orientation previous);
93 virtual void onItemSizeChanged(const QSizeF& current, const QSizeF& previous);
94 virtual void onScrollOffsetChanged(qreal current, qreal previous);
95 virtual void onVisibleRolesChanged(const QList<QByteArray>& current, const QList<QByteArray>& previous);
96 virtual void onStyleOptionChanged(const KItemListStyleOption& current, const KItemListStyleOption& previous);
97 virtual void onSupportsItemExpandingChanged(bool supportsExpanding);
98 virtual void onTransactionBegin();
99 virtual void onTransactionEnd();
100 virtual void resizeEvent(QGraphicsSceneResizeEvent* event);
101
102 protected slots:
103 virtual void slotItemsRemoved(const KItemRangeList& itemRanges);
104 virtual void slotSortRoleChanged(const QByteArray& current, const QByteArray& previous);
105
106 private slots:
107 void triggerVisibleIndexRangeUpdate();
108 void updateVisibleIndexRange();
109
110 void triggerIconSizeUpdate();
111 void updateIconSize();
112
113 private:
114 void updateLayoutOfVisibleItems();
115 void updateTimersInterval();
116
117 /**
118 * Applies the roles defined by KItemListView::visibleRoles() to the
119 * KFileItemModel and KFileItemModelRolesUpdater. As the model does not
120 * distinct between visible and invisible roles also internal roles
121 * are applied that are mandatory for having a working KFileItemModel.
122 */
123 void applyRolesToModel();
124
125 /**
126 * @return Size that is available for the icons. The size might be larger than specified by
127 * KItemListStyleOption::iconSize: With the IconsLayout also the empty left area left
128 * and right of an icon will be included.
129 */
130 QSize availableIconSize() const;
131
132 private:
133 Layout m_itemLayout;
134
135 KFileItemModelRolesUpdater* m_modelRolesUpdater;
136 QTimer* m_updateVisibleIndexRangeTimer;
137 QTimer* m_updateIconSizeTimer;
138
139 friend class KFileItemListViewTest; // For unit testing
140 };
141
142 #endif
143
144