OSDN Git Service

Merge remote branch 'origin/2.1'
[qt-creator-jp/qt-creator-jp.git] / src / plugins / qmlprojectmanager / fileformat / filefilteritems.h
1 #ifndef FILEFILTERITEMS_H
2 #define FILEFILTERITEMS_H
3
4 #include <QDir>
5 #include <QObject>
6 #include <QSet>
7 #include <qdeclarative.h>
8 #include <QFileSystemWatcher>
9
10 #include "qmlprojectitem.h"
11 #include "filesystemwatcher.h"
12
13 namespace QmlProjectManager {
14
15 class FileFilterBaseItem : public QmlProjectContentItem {
16     Q_OBJECT
17
18     Q_PROPERTY(QString directory READ directory WRITE setDirectory NOTIFY directoryChanged)
19     Q_PROPERTY(bool recursive READ recursive WRITE setRecursive NOTIFY recursiveChanged)
20     Q_PROPERTY(QStringList paths READ pathsProperty WRITE setPathsProperty)
21
22     Q_PROPERTY(QStringList files READ files NOTIFY filesChanged DESIGNABLE false)
23
24 public:
25     FileFilterBaseItem(QObject *parent = 0);
26
27     QString directory() const;
28     void setDirectory(const QString &directoryPath);
29
30     void setDefaultDirectory(const QString &directoryPath);
31
32     QString filter() const;
33     void setFilter(const QString &filter);
34
35     bool recursive() const;
36     void setRecursive(bool recursive);
37
38     QStringList pathsProperty() const;
39     void setPathsProperty(const QStringList &paths);
40
41     virtual QStringList files() const;
42     bool matchesFile(const QString &filePath) const;
43
44 signals:
45     void directoryChanged();
46     void recursiveChanged();
47     void pathsChanged();
48     void filesChanged(const QSet<QString> &added, const QSet<QString> &removed);
49
50 private slots:
51     void updateFileList();
52
53 private:
54     QString absolutePath(const QString &path) const;
55     QString absoluteDir() const;
56
57     bool fileMatches(const QString &fileName) const;
58     QSet<QString> filesInSubTree(const QDir &rootDir, const QDir &dir, QSet<QString> *parsedDirs = 0);
59
60     QString m_rootDir;
61     QString m_defaultDir;
62
63     QString m_filter;
64     // simple "*.png" patterns are stored in m_fileSuffixes, otherwise store in m_regExpList
65     QList<QString> m_fileSuffixes;
66     QList<QRegExp> m_regExpList;
67
68     enum RecursiveOption {
69         Recurse,
70         DoNotRecurse,
71         RecurseDefault // not set explicitly
72     };
73
74     RecursiveOption m_recurse;
75
76     QStringList m_explicitFiles;
77
78     QSet<QString> m_files;
79     FileSystemWatcher m_dirWatcher;
80
81
82     friend class ProjectItem;
83 };
84
85 class QmlFileFilterItem : public FileFilterBaseItem {
86     Q_OBJECT
87
88 public:
89     QmlFileFilterItem(QObject *parent = 0);
90 };
91
92 class JsFileFilterItem : public FileFilterBaseItem {
93     Q_OBJECT
94     Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged)
95
96     void setFilter(const QString &filter);
97
98 signals:
99     void filterChanged();
100
101 public:
102     JsFileFilterItem(QObject *parent = 0);
103 };
104
105 class ImageFileFilterItem : public FileFilterBaseItem {
106     Q_OBJECT
107     Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged)
108
109     void setFilter(const QString &filter);
110
111 signals:
112     void filterChanged();
113
114 public:
115     ImageFileFilterItem(QObject *parent = 0);
116 };
117
118 class CssFileFilterItem : public FileFilterBaseItem {
119     Q_OBJECT
120     Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged)
121
122     void setFilter(const QString &filter);
123
124 signals:
125     void filterChanged();
126
127 public:
128     CssFileFilterItem(QObject *parent = 0);
129 };
130
131 } // namespace QmlProjectManager
132
133 QML_DECLARE_TYPE(QmlProjectManager::QmlFileFilterItem)
134 QML_DECLARE_TYPE(QmlProjectManager::JsFileFilterItem)
135 QML_DECLARE_TYPE(QmlProjectManager::ImageFileFilterItem)
136 QML_DECLARE_TYPE(QmlProjectManager::CssFileFilterItem)
137
138 #endif // FILEFILTERITEMS_HPROJECTITEM_H