1
/***************************************************************************
2
* Copyright (C) 2008 by Peter Penz <peter.penz@gmx.at> *
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. *
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. *
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
***************************************************************************/
23
#include <kfileitem.h>
31
class DolphinSortFilterProxyModel;
33
class QAbstractItemView;
36
* @brief Manages the icon state of a directory model.
38
* Per default a preview is generated for each item.
39
* Additionally the clipboard is checked for cut items.
40
* The icon state for cut items gets dimmed automatically.
42
class IconManager : public QObject
47
IconManager(QAbstractItemView* parent, DolphinSortFilterProxyModel* model);
48
virtual ~IconManager();
49
void setShowPreview(bool show);
50
bool showPreview() const;
51
void updatePreviews();
55
* Generates previews for the items \a items asynchronously.
57
void generatePreviews(const KFileItemList &items);
60
* Adds the preview \a pixmap for the item \a item to the preview
61
* queue and starts a timer which will dispatch the preview queue
64
void addToPreviewQueue(const KFileItem& item, const QPixmap& pixmap);
67
* Is invoked when the preview job has been finished and
68
* set m_previewJob to 0.
70
void slotPreviewJobFinished(KJob* job);
72
/** Synchronizes the item icon with the clipboard of cut items. */
73
void updateCutItems();
76
* Dispatches the preview queue m_previews block by block within
79
void dispatchPreviewQueue();
83
* Replaces the icon of the item with the \a url by the preview pixmap
86
void replaceIcon(const KUrl& url, const QPixmap& pixmap);
89
* Returns true, if the item \a item has been cut into
92
bool isCutItem(const KFileItem& item) const;
94
/** Applies an item effect to all cut items. */
95
void applyCutItemEffect();
98
* Applies a frame around the icon. False is returned if
99
* no frame has been added because the icon is too small.
101
bool applyImageFrame(QPixmap& icon);
104
* Resizes the icon to \a maxSize if the icon size does not
105
* fit into the maximum size. The aspect ratio of the icon
108
void limitToSize(QPixmap& icon, const QSize& maxSize);
110
/** Kills all ongoing preview jobs. */
115
* Remembers the pixmap for an item specified by an URL.
125
QAbstractItemView* m_view;
126
QTimer* m_previewTimer;
127
QList<KJob*> m_previewJobs;
128
DolphinModel* m_dolphinModel;
129
DolphinSortFilterProxyModel* m_proxyModel;
131
QList<ItemInfo> m_cutItemsCache;
132
QList<ItemInfo> m_previews;
135
inline bool IconManager::showPreview() const
137
return m_showPreview;