1 #ifndef FOLDERMODEL_H
\r
2 #define FOLDERMODEL_H
\r
4 #include <QAbstractTableModel>
\r
6 #include <QFileIconProvider>
\r
7 #include <QFileSystemWatcher>
\r
13 class ThumbnailWorker;
\r
15 class FolderModel : public QAbstractTableModel
\r
26 typedef QVector<QString> History;
\r
28 explicit FolderModel(QObject *parent = 0);
\r
31 void clearPixmapCache();
\r
32 QString error() const;
\r
33 QIcon fileIcon(const QModelIndex &index) const;
\r
34 QFileInfo fileInfo(const QModelIndex &index) const;
\r
35 QString fileName(const QModelIndex &index) const;
\r
36 QString filePath(const QModelIndex &index) const;
\r
37 QDir::Filters filter() const;
\r
38 const History& history() const;
\r
39 bool isActive() const;
\r
40 bool isDir(const QModelIndex &index) const;
\r
41 bool isHistoryBegin() const;
\r
42 bool isHistoryEnd() const;
\r
43 bool isMarked(const QModelIndex &index) const;
\r
44 QFileInfoList markedItems() const;
\r
45 QModelIndex mkdir(const QString &name);
\r
46 QStringList nameFilters() const;
\r
47 QPixmap pixmap(const QModelIndex &index, const QSize &size) const;
\r
48 QString rootPath() const;
\r
49 QModelIndex search(const QString &value, const QModelIndex &start = QModelIndex(), int step = 1);
\r
51 void setFilter(QDir::Filters filters);
\r
52 void setHistoryAt(const QString &path);
\r
53 void setNameFilters(const QStringList &nameFiltes);
\r
54 void setRootPath(const QString &path, bool addHistory = true);
\r
55 void setSorting(QDir::SortFlags sort);
\r
56 QDir::SortFlags sorting() const;
\r
57 QModelIndex touch(const QString &name);
\r
58 void updateAppearance(const Preferences &prefs);
\r
60 static FolderModel* activeModel();
\r
65 void fsWatcher_directoryChanged(const QString &path);
\r
69 void onHistoryBack();
\r
70 void onHistoryForward();
\r
72 void onMarkAllFiles();
\r
73 void onMarkAllOff();
\r
74 void onMarkInvert();
\r
76 void thumbnail_Ready(const QString &path, const QPixmap &pixmap);
\r
79 static FolderModel* m_activeModel;
\r
81 typedef QMap<QString, int> CheckContainer;
\r
82 typedef QMap<QString, QPixmap> PixmapContainer;
\r
83 typedef QMap<QString, QDateTime> DateTimeContainer;
\r
87 QFileInfoList m_fileInfoList;
\r
88 CheckContainer m_checkStates;
\r
89 QFileIconProvider m_IconProvider;
\r
90 QFileSystemWatcher m_fsWatcher;
\r
93 ThumbnailWorker* m_worker;
\r
94 PixmapContainer m_pixmapCache;
\r
95 DateTimeContainer m_lastModifiedCache;
\r
96 QMutex m_pixmapCacheMutex;
\r
100 bool isDotFile(const QModelIndex &index) const;
\r
101 void setError(const QString &error = QString());
\r
103 const QBrush& base() const;
\r
104 const QBrush& text() const;
\r
105 const QBrush& marked() const;
\r
106 const QBrush& markedText() const;
\r
107 const QBrush& hidden() const;
\r
108 const QBrush& readOnly() const;
\r
109 const QBrush& system() const;
\r
111 // QAbstractItemModel interface
\r
113 int rowCount(const QModelIndex &parent = QModelIndex()) const;
\r
114 int columnCount(const QModelIndex &parent = QModelIndex()) const;
\r
115 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
\r
116 Qt::ItemFlags flags(const QModelIndex &index) const;
\r
117 bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
\r
118 Qt::DropActions supportedDropActions() const;
\r
119 QStringList mimeTypes() const;
\r
122 inline QString FolderModel::error() const
\r
127 inline QFileInfo FolderModel::fileInfo(const QModelIndex &index) const
\r
129 Q_ASSERT(index.isValid());
\r
130 return m_fileInfoList[index.row()];
\r
133 inline QString FolderModel::fileName(const QModelIndex &index) const
\r
135 Q_ASSERT(index.isValid());
\r
136 return m_fileInfoList[index.row()].fileName();
\r
139 inline QString FolderModel::filePath(const QModelIndex &index) const
\r
141 Q_ASSERT(index.isValid());
\r
142 return m_fileInfoList[index.row()].absoluteFilePath();
\r
145 inline QDir::Filters FolderModel::filter() const
\r
147 return m_dir.filter();
\r
150 inline const FolderModel::History &FolderModel::history() const
\r
155 inline bool FolderModel::isActive() const
\r
157 return m_activeModel == this;
\r
160 inline bool FolderModel::isDir(const QModelIndex &index) const
\r
162 return m_fileInfoList[index.row()].isDir();
\r
165 inline bool FolderModel::isHistoryBegin() const
\r
167 return m_historyPos == 0;
\r
170 inline bool FolderModel::isHistoryEnd() const
\r
172 return m_historyPos == m_history.size() - 1;
\r
175 inline bool FolderModel::isDotFile(const QModelIndex &index) const
\r
177 return fileName(index).lastIndexOf(".") == 0;
\r
180 inline QStringList FolderModel::nameFilters() const
\r
182 return m_dir.nameFilters();
\r
185 inline void FolderModel::refresh()
\r
187 setRootPath(rootPath());
\r
190 inline QString FolderModel::rootPath() const
\r
192 return m_dir.absolutePath();
\r
195 inline void FolderModel::setActive()
\r
197 m_activeModel = this;
\r
200 inline void FolderModel::setError(const QString &error)
\r
205 inline void FolderModel::setFilter(QDir::Filters filters)
\r
207 m_dir.setFilter(filters);
\r
210 inline void FolderModel::setSorting(QDir::SortFlags sort)
\r
212 m_dir.setSorting(sort);
\r
215 inline void FolderModel::setNameFilters(const QStringList &nameFiltes)
\r
217 m_dir.setNameFilters(nameFiltes);
\r
220 inline QDir::SortFlags FolderModel::sorting() const
\r
222 return m_dir.sorting();
\r
225 inline void FolderModel::fsWatcher_directoryChanged(const QString &path)
\r
231 inline const QBrush& FolderModel::base() const
\r
233 return m_Palette.base();
\r
235 inline const QBrush& FolderModel::text() const
\r
237 return m_Palette.text();
\r
239 inline const QBrush& FolderModel::marked() const
\r
241 return m_Palette.highlight();
\r
243 inline const QBrush& FolderModel::markedText() const
\r
245 return m_Palette.highlightedText();
\r
247 inline const QBrush& FolderModel::hidden() const
\r
249 return m_Palette.dark();
\r
251 inline const QBrush& FolderModel::readOnly() const
\r
253 return m_Palette.light();
\r
255 inline const QBrush& FolderModel::system() const
\r
257 return m_Palette.mid();
\r
259 #endif // FOLDERMODEL_H
\r