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 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
\r
117 Qt::ItemFlags flags(const QModelIndex &index) const;
\r
118 bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
\r
119 Qt::DropActions supportedDropActions() const;
\r
120 QStringList mimeTypes() const;
\r
123 inline QString FolderModel::error() const
\r
128 inline QFileInfo FolderModel::fileInfo(const QModelIndex &index) const
\r
130 Q_ASSERT(index.isValid());
\r
131 return m_fileInfoList[index.row()];
\r
134 inline QString FolderModel::fileName(const QModelIndex &index) const
\r
136 Q_ASSERT(index.isValid());
\r
137 return m_fileInfoList[index.row()].fileName();
\r
140 inline QString FolderModel::filePath(const QModelIndex &index) const
\r
142 Q_ASSERT(index.isValid());
\r
143 return m_fileInfoList[index.row()].absoluteFilePath();
\r
146 inline QDir::Filters FolderModel::filter() const
\r
148 return m_dir.filter();
\r
151 inline const FolderModel::History &FolderModel::history() const
\r
156 inline bool FolderModel::isActive() const
\r
158 return m_activeModel == this;
\r
161 inline bool FolderModel::isDir(const QModelIndex &index) const
\r
163 return m_fileInfoList[index.row()].isDir();
\r
166 inline bool FolderModel::isHistoryBegin() const
\r
168 return m_historyPos == 0;
\r
171 inline bool FolderModel::isHistoryEnd() const
\r
173 return m_historyPos == m_history.size() - 1;
\r
176 inline bool FolderModel::isDotFile(const QModelIndex &index) const
\r
178 return fileName(index).lastIndexOf(".") == 0;
\r
181 inline QStringList FolderModel::nameFilters() const
\r
183 return m_dir.nameFilters();
\r
186 inline void FolderModel::refresh()
\r
188 setRootPath(rootPath());
\r
191 inline QString FolderModel::rootPath() const
\r
193 return m_dir.absolutePath();
\r
196 inline void FolderModel::setActive()
\r
198 m_activeModel = this;
\r
201 inline void FolderModel::setError(const QString &error)
\r
206 inline void FolderModel::setFilter(QDir::Filters filters)
\r
208 m_dir.setFilter(filters);
\r
211 inline void FolderModel::setSorting(QDir::SortFlags sort)
\r
213 m_dir.setSorting(sort);
\r
216 inline void FolderModel::setNameFilters(const QStringList &nameFiltes)
\r
218 m_dir.setNameFilters(nameFiltes);
\r
221 inline QDir::SortFlags FolderModel::sorting() const
\r
223 return m_dir.sorting();
\r
226 inline void FolderModel::fsWatcher_directoryChanged(const QString &path)
\r
232 inline const QBrush& FolderModel::base() const
\r
234 return m_Palette.base();
\r
236 inline const QBrush& FolderModel::text() const
\r
238 return m_Palette.text();
\r
240 inline const QBrush& FolderModel::marked() const
\r
242 return m_Palette.highlight();
\r
244 inline const QBrush& FolderModel::markedText() const
\r
246 return m_Palette.highlightedText();
\r
248 inline const QBrush& FolderModel::hidden() const
\r
250 return m_Palette.dark();
\r
252 inline const QBrush& FolderModel::readOnly() const
\r
254 return m_Palette.light();
\r
256 inline const QBrush& FolderModel::system() const
\r
258 return m_Palette.mid();
\r
260 #endif // FOLDERMODEL_H
\r