OSDN Git Service

80d7268a925b3a32267cd7e0012466d33574f0a1
[qt-creator-jp/qt-creator-jp.git] / src / plugins / qmlprojectmanager / fileformat / filefilteritems.h
1 /**************************************************************************
2 **
3 ** This file is part of Qt Creator
4 **
5 ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
6 **
7 ** Contact: Nokia Corporation (qt-info@nokia.com)
8 **
9 ** No Commercial Usage
10 **
11 ** This file contains pre-release code and may not be distributed.
12 ** You may use this file in accordance with the terms and conditions
13 ** contained in the Technology Preview License Agreement accompanying
14 ** this package.
15 **
16 ** GNU Lesser General Public License Usage
17 **
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file.  Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 **
25 ** In addition, as a special exception, Nokia gives you certain additional
26 ** rights.  These rights are described in the Nokia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 **
29 ** If you have questions regarding the use of this file, please contact
30 ** Nokia at qt-info@nokia.com.
31 **
32 **************************************************************************/
33
34 #ifndef FILEFILTERITEMS_H
35 #define FILEFILTERITEMS_H
36
37 #include "qmlprojectitem.h"
38 #include "filesystemwatcher.h"
39
40 #include <QtCore/QObject>
41 #include <QtCore/QSet>
42 #include <QtCore/QTimer>
43
44 #include <QtDeclarative/qdeclarative.h>
45
46 QT_FORWARD_DECLARE_CLASS(QDir)
47
48 namespace QmlProjectManager {
49
50 class FileFilterBaseItem : public QmlProjectContentItem {
51     Q_OBJECT
52
53     Q_PROPERTY(QString directory READ directory WRITE setDirectory NOTIFY directoryChanged)
54     Q_PROPERTY(bool recursive READ recursive WRITE setRecursive NOTIFY recursiveChanged)
55     Q_PROPERTY(QStringList paths READ pathsProperty WRITE setPathsProperty)
56
57     Q_PROPERTY(QStringList files READ files NOTIFY filesChanged DESIGNABLE false)
58
59 public:
60     FileFilterBaseItem(QObject *parent = 0);
61
62     QString directory() const;
63     void setDirectory(const QString &directoryPath);
64
65     void setDefaultDirectory(const QString &directoryPath);
66
67     QString filter() const;
68     void setFilter(const QString &filter);
69
70     bool recursive() const;
71     void setRecursive(bool recursive);
72
73     QStringList pathsProperty() const;
74     void setPathsProperty(const QStringList &paths);
75
76     virtual QStringList files() const;
77     bool matchesFile(const QString &filePath) const;
78
79 signals:
80     void directoryChanged();
81     void recursiveChanged();
82     void pathsChanged();
83     void filesChanged(const QSet<QString> &added, const QSet<QString> &removed);
84
85 private slots:
86     void updateFileList();
87     void updateFileListNow();
88
89 private:
90     QString absolutePath(const QString &path) const;
91     QString absoluteDir() const;
92
93     bool fileMatches(const QString &fileName) const;
94     QSet<QString> filesInSubTree(const QDir &rootDir, const QDir &dir, QSet<QString> *parsedDirs = 0);
95
96     QString m_rootDir;
97     QString m_defaultDir;
98
99     QString m_filter;
100     // simple "*.png" patterns are stored in m_fileSuffixes, otherwise store in m_regExpList
101     QList<QString> m_fileSuffixes;
102     QList<QRegExp> m_regExpList;
103
104     enum RecursiveOption {
105         Recurse,
106         DoNotRecurse,
107         RecurseDefault // not set explicitly
108     };
109
110     RecursiveOption m_recurse;
111
112     QStringList m_explicitFiles;
113
114     QSet<QString> m_files;
115     FileSystemWatcher m_dirWatcher;
116     QTimer m_updateFileListTimer;
117
118
119     friend class ProjectItem;
120 };
121
122 class QmlFileFilterItem : public FileFilterBaseItem {
123     Q_OBJECT
124
125 public:
126     QmlFileFilterItem(QObject *parent = 0);
127 };
128
129 class JsFileFilterItem : public FileFilterBaseItem {
130     Q_OBJECT
131     Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged)
132
133     void setFilter(const QString &filter);
134
135 signals:
136     void filterChanged();
137
138 public:
139     JsFileFilterItem(QObject *parent = 0);
140 };
141
142 class ImageFileFilterItem : public FileFilterBaseItem {
143     Q_OBJECT
144     Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged)
145
146     void setFilter(const QString &filter);
147
148 signals:
149     void filterChanged();
150
151 public:
152     ImageFileFilterItem(QObject *parent = 0);
153 };
154
155 class CssFileFilterItem : public FileFilterBaseItem {
156     Q_OBJECT
157     Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged)
158
159     void setFilter(const QString &filter);
160
161 signals:
162     void filterChanged();
163
164 public:
165     CssFileFilterItem(QObject *parent = 0);
166 };
167
168 class OtherFileFilterItem : public FileFilterBaseItem {
169     Q_OBJECT
170     Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged)
171
172     void setFilter(const QString &filter);
173
174 signals:
175     void filterChanged();
176
177 public:
178     OtherFileFilterItem(QObject *parent = 0);
179 };
180
181 } // namespace QmlProjectManager
182
183 QML_DECLARE_TYPE(QmlProjectManager::QmlFileFilterItem)
184 QML_DECLARE_TYPE(QmlProjectManager::JsFileFilterItem)
185 QML_DECLARE_TYPE(QmlProjectManager::ImageFileFilterItem)
186 QML_DECLARE_TYPE(QmlProjectManager::CssFileFilterItem)
187 QML_DECLARE_TYPE(QmlProjectManager::OtherFileFilterItem)
188
189 #endif // FILEFILTERITEMS_HPROJECTITEM_H