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/kstandarditemlistview.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 KStandardItemListView |
40 | { |
41 | Q_OBJECT |
42 | |
43 | public: |
44 | KFileItemListView(QGraphicsWidget* parent = 0); |
45 | virtual ~KFileItemListView(); |
46 | |
47 | void setPreviewsShown(bool show); |
48 | bool previewsShown() const; |
49 | |
50 | /** |
51 | * If enabled a small preview gets upscaled to the icon size in case where |
52 | * the icon size is larger than the preview. Per default enlarging is |
53 | * enabled. |
54 | */ |
55 | void setEnlargeSmallPreviews(bool enlarge); |
56 | bool enlargeSmallPreviews() const; |
57 | |
58 | /** |
59 | * Sets the list of enabled thumbnail plugins that are used for previews. |
60 | * Per default all plugins enabled in the KConfigGroup "PreviewSettings" |
61 | * are used. |
62 | * |
63 | * For a list of available plugins, call KServiceTypeTrader::self()->query("ThumbCreator"). |
64 | * |
65 | * @see enabledPlugins |
66 | */ |
67 | void setEnabledPlugins(const QStringList& list); |
68 | |
69 | /** |
70 | * Returns the list of enabled thumbnail plugins. |
71 | * @see setEnabledPlugins |
72 | */ |
73 | QStringList enabledPlugins() const; |
74 | |
75 | /** @reimp */ |
76 | virtual QPixmap createDragPixmap(const KItemSet& indexes) const; |
77 | |
78 | protected: |
79 | virtual KItemListWidgetCreatorBase* defaultWidgetCreator() const; |
80 | virtual void initializeItemListWidget(KItemListWidget* item); |
81 | virtual void onPreviewsShownChanged(bool shown); |
82 | virtual void onItemLayoutChanged(ItemLayout current, ItemLayout previous); |
83 | virtual void onModelChanged(KItemModelBase* current, KItemModelBase* previous); |
84 | virtual void onScrollOrientationChanged(Qt::Orientation current, Qt::Orientation previous); |
85 | virtual void onItemSizeChanged(const QSizeF& current, const QSizeF& previous); |
86 | virtual void onScrollOffsetChanged(qreal current, qreal previous); |
87 | virtual void onVisibleRolesChanged(const QList<QByteArray>& current, const QList<QByteArray>& previous); |
88 | virtual void onStyleOptionChanged(const KItemListStyleOption& current, const KItemListStyleOption& previous); |
89 | virtual void onSupportsItemExpandingChanged(bool supportsExpanding); |
90 | virtual void onTransactionBegin(); |
91 | virtual void onTransactionEnd(); |
92 | virtual void resizeEvent(QGraphicsSceneResizeEvent* event); |
93 | |
94 | protected slots: |
95 | virtual void slotItemsRemoved(const KItemRangeList& itemRanges); |
96 | virtual void slotSortRoleChanged(const QByteArray& current, const QByteArray& previous); |
97 | |
98 | private slots: |
99 | void triggerVisibleIndexRangeUpdate(); |
100 | void updateVisibleIndexRange(); |
101 | |
102 | void triggerIconSizeUpdate(); |
103 | void updateIconSize(); |
104 | |
105 | private: |
106 | /** |
107 | * Applies the roles defined by KItemListView::visibleRoles() to the |
108 | * KFileItemModel and KFileItemModelRolesUpdater. As the model does not |
109 | * distinct between visible and invisible roles also internal roles |
110 | * are applied that are mandatory for having a working KFileItemModel. |
111 | */ |
112 | void applyRolesToModel(); |
113 | |
114 | /** |
115 | * @return Size that is available for the icons. The size might be larger than specified by |
116 | * KItemListStyleOption::iconSize: With the IconsLayout also the empty left area left |
117 | * and right of an icon will be included. |
118 | */ |
119 | QSize availableIconSize() const; |
120 | |
121 | private: |
122 | KFileItemModelRolesUpdater* m_modelRolesUpdater; |
123 | QTimer* m_updateVisibleIndexRangeTimer; |
124 | QTimer* m_updateIconSizeTimer; |
125 | |
126 | friend class KFileItemListViewTest; // For unit testing |
127 | }; |
128 | |
129 | #endif |
130 | |
131 | |
132 | |