OSDN Git Service

Ver0.26
[gefu/Gefu.git] / foldermodel.h
1 #ifndef FOLDERMODEL_H\r
2 #define FOLDERMODEL_H\r
3 \r
4 #include <QAbstractTableModel>\r
5 #include <QDir>\r
6 #include <QFileIconProvider>\r
7 #include <QFileSystemWatcher>\r
8 #include <QBrush>\r
9 #include <QFont>\r
10 #include <QMutex>\r
11 #include <QPalette>\r
12 class Preferences;\r
13 class ThumbnailWorker;\r
14 \r
15 class FolderModel : public QAbstractTableModel\r
16 {\r
17     Q_OBJECT\r
18 public:\r
19     enum Column {\r
20         Name = 0,\r
21         Extension,\r
22         Size,\r
23         LastModified,\r
24         ColumnCount,\r
25     };\r
26     typedef QVector<QString> History;\r
27 \r
28     explicit FolderModel(QObject *parent = 0);\r
29     ~FolderModel();\r
30 \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
50     void            setActive();\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
59 \r
60     static FolderModel* activeModel();\r
61 \r
62 signals:\r
63 \r
64 public slots:\r
65     void    fsWatcher_directoryChanged(const QString &path);\r
66     void    onCdHome();\r
67     void    onCdRoot();\r
68     void    onCdUp();\r
69     void    onHistoryBack();\r
70     void    onHistoryForward();\r
71     void    onMarkAll();\r
72     void    onMarkAllFiles();\r
73     void    onMarkAllOff();\r
74     void    onMarkInvert();\r
75     void    refresh();\r
76     void    thumbnail_Ready(const QString &path, const QPixmap &pixmap);\r
77 \r
78 private:\r
79     static FolderModel* m_activeModel;\r
80 \r
81     typedef QMap<QString, int> CheckContainer;\r
82     typedef QMap<QString, QPixmap> PixmapContainer;\r
83     typedef QMap<QString, QDateTime> DateTimeContainer;\r
84 \r
85     QString             m_error;\r
86     QDir                m_dir;\r
87     QFileInfoList       m_fileInfoList;\r
88     CheckContainer      m_checkStates;\r
89     QFileIconProvider   m_IconProvider;\r
90     QFileSystemWatcher  m_fsWatcher;\r
91     History             m_history;\r
92     int                 m_historyPos;\r
93     ThumbnailWorker*    m_worker;\r
94     PixmapContainer     m_pixmapCache;\r
95     DateTimeContainer   m_lastModifiedCache;\r
96     QMutex              m_pixmapCacheMutex;\r
97     QPalette            m_Palette;\r
98     QFont               m_font;\r
99 \r
100     bool    isDotFile(const QModelIndex &index) const;\r
101     void    setError(const QString &error = QString());\r
102 \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
110 \r
111     // QAbstractItemModel interface\r
112 public:\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
120 };\r
121 \r
122 inline QString FolderModel::error() const\r
123 {\r
124     return m_error;\r
125 }\r
126 \r
127 inline QFileInfo FolderModel::fileInfo(const QModelIndex &index) const\r
128 {\r
129     Q_ASSERT(index.isValid());\r
130     return m_fileInfoList[index.row()];\r
131 }\r
132 \r
133 inline QString FolderModel::fileName(const QModelIndex &index) const\r
134 {\r
135     Q_ASSERT(index.isValid());\r
136     return m_fileInfoList[index.row()].fileName();\r
137 }\r
138 \r
139 inline QString FolderModel::filePath(const QModelIndex &index) const\r
140 {\r
141     Q_ASSERT(index.isValid());\r
142     return m_fileInfoList[index.row()].absoluteFilePath();\r
143 }\r
144 \r
145 inline QDir::Filters FolderModel::filter() const\r
146 {\r
147     return m_dir.filter();\r
148 }\r
149 \r
150 inline const FolderModel::History &FolderModel::history() const\r
151 {\r
152     return m_history;\r
153 }\r
154 \r
155 inline bool FolderModel::isActive() const\r
156 {\r
157     return m_activeModel == this;\r
158 }\r
159 \r
160 inline bool FolderModel::isDir(const QModelIndex &index) const\r
161 {\r
162     return m_fileInfoList[index.row()].isDir();\r
163 }\r
164 \r
165 inline bool FolderModel::isHistoryBegin() const\r
166 {\r
167     return m_historyPos == 0;\r
168 }\r
169 \r
170 inline bool FolderModel::isHistoryEnd() const\r
171 {\r
172     return m_historyPos == m_history.size() - 1;\r
173 }\r
174 \r
175 inline bool FolderModel::isDotFile(const QModelIndex &index) const\r
176 {\r
177     return fileName(index).lastIndexOf(".") == 0;\r
178 }\r
179 \r
180 inline QStringList FolderModel::nameFilters() const\r
181 {\r
182     return m_dir.nameFilters();\r
183 }\r
184 \r
185 inline void FolderModel::refresh()\r
186 {\r
187     setRootPath(rootPath());\r
188 }\r
189 \r
190 inline QString FolderModel::rootPath() const\r
191 {\r
192     return m_dir.absolutePath();\r
193 }\r
194 \r
195 inline void FolderModel::setActive()\r
196 {\r
197     m_activeModel = this;\r
198 }\r
199 \r
200 inline void FolderModel::setError(const QString &error)\r
201 {\r
202     m_error = error;\r
203 }\r
204 \r
205 inline void FolderModel::setFilter(QDir::Filters filters)\r
206 {\r
207     m_dir.setFilter(filters);\r
208 }\r
209 \r
210 inline void FolderModel::setSorting(QDir::SortFlags sort)\r
211 {\r
212     m_dir.setSorting(sort);\r
213 }\r
214 \r
215 inline void FolderModel::setNameFilters(const QStringList &nameFiltes)\r
216 {\r
217     m_dir.setNameFilters(nameFiltes);\r
218 }\r
219 \r
220 inline QDir::SortFlags FolderModel::sorting() const\r
221 {\r
222     return m_dir.sorting();\r
223 }\r
224 \r
225 inline void FolderModel::fsWatcher_directoryChanged(const QString &path)\r
226 {\r
227     Q_UNUSED(path);\r
228     refresh();\r
229 }\r
230 \r
231 inline const QBrush& FolderModel::base() const\r
232 {\r
233     return m_Palette.base();\r
234 }\r
235 inline const QBrush& FolderModel::text() const\r
236 {\r
237     return m_Palette.text();\r
238 }\r
239 inline const QBrush& FolderModel::marked() const\r
240 {\r
241     return m_Palette.highlight();\r
242 }\r
243 inline const QBrush& FolderModel::markedText() const\r
244 {\r
245     return m_Palette.highlightedText();\r
246 }\r
247 inline const QBrush& FolderModel::hidden() const\r
248 {\r
249     return m_Palette.dark();\r
250 }\r
251 inline const QBrush& FolderModel::readOnly() const\r
252 {\r
253     return m_Palette.light();\r
254 }\r
255 inline const QBrush& FolderModel::system() const\r
256 {\r
257     return m_Palette.mid();\r
258 }\r
259 #endif // FOLDERMODEL_H\r