1 /**************************************************************************
3 ** This file is part of Qt Creator
5 ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
7 ** Contact: Nokia Corporation (info@qt.nokia.com)
10 ** GNU Lesser General Public License Usage
12 ** This file may be used under the terms of the GNU Lesser General Public
13 ** License version 2.1 as published by the Free Software Foundation and
14 ** appearing in the file LICENSE.LGPL included in the packaging of this file.
15 ** Please review the following information to ensure the GNU Lesser General
16 ** Public License version 2.1 requirements will be met:
17 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
19 ** In addition, as a special exception, Nokia gives you certain additional
20 ** rights. These rights are described in the Nokia Qt LGPL Exception
21 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
25 ** Alternatively, this file may be used in accordance with the terms and
26 ** conditions contained in a signed written agreement between you and Nokia.
28 ** If you have questions regarding the use of this file, please contact
29 ** Nokia at qt-info@nokia.com.
31 **************************************************************************/
33 #ifndef FILEFILTERITEMS_H
34 #define FILEFILTERITEMS_H
36 #include "qmlprojectitem.h"
37 #include "filesystemwatcher.h"
39 #include <QtCore/QObject>
40 #include <QtCore/QSet>
41 #include <QtCore/QTimer>
43 #include <QtDeclarative/qdeclarative.h>
45 QT_FORWARD_DECLARE_CLASS(QDir)
47 namespace QmlProjectManager {
49 class FileFilterBaseItem : public QmlProjectContentItem {
52 Q_PROPERTY(QString directory READ directory WRITE setDirectory NOTIFY directoryChanged)
53 Q_PROPERTY(bool recursive READ recursive WRITE setRecursive NOTIFY recursiveChanged)
54 Q_PROPERTY(QStringList paths READ pathsProperty WRITE setPathsProperty)
56 Q_PROPERTY(QStringList files READ files NOTIFY filesChanged DESIGNABLE false)
59 FileFilterBaseItem(QObject *parent = 0);
61 QString directory() const;
62 void setDirectory(const QString &directoryPath);
64 void setDefaultDirectory(const QString &directoryPath);
66 QString filter() const;
67 void setFilter(const QString &filter);
69 bool recursive() const;
70 void setRecursive(bool recursive);
72 QStringList pathsProperty() const;
73 void setPathsProperty(const QStringList &paths);
75 virtual QStringList files() const;
76 bool matchesFile(const QString &filePath) const;
79 void directoryChanged();
80 void recursiveChanged();
82 void filesChanged(const QSet<QString> &added, const QSet<QString> &removed);
85 void updateFileList();
86 void updateFileListNow();
89 QString absolutePath(const QString &path) const;
90 QString absoluteDir() const;
92 bool fileMatches(const QString &fileName) const;
93 QSet<QString> filesInSubTree(const QDir &rootDir, const QDir &dir, QSet<QString> *parsedDirs = 0);
99 // simple "*.png" patterns are stored in m_fileSuffixes, otherwise store in m_regExpList
100 QList<QString> m_fileSuffixes;
101 QList<QRegExp> m_regExpList;
103 enum RecursiveOption {
106 RecurseDefault // not set explicitly
109 RecursiveOption m_recurse;
111 QStringList m_explicitFiles;
113 QSet<QString> m_files;
114 FileSystemWatcher m_dirWatcher;
115 QTimer m_updateFileListTimer;
118 friend class ProjectItem;
121 class QmlFileFilterItem : public FileFilterBaseItem {
125 QmlFileFilterItem(QObject *parent = 0);
128 class JsFileFilterItem : public FileFilterBaseItem {
130 Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged)
132 void setFilter(const QString &filter);
135 void filterChanged();
138 JsFileFilterItem(QObject *parent = 0);
141 class ImageFileFilterItem : public FileFilterBaseItem {
143 Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged)
145 void setFilter(const QString &filter);
148 void filterChanged();
151 ImageFileFilterItem(QObject *parent = 0);
154 class CssFileFilterItem : public FileFilterBaseItem {
156 Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged)
158 void setFilter(const QString &filter);
161 void filterChanged();
164 CssFileFilterItem(QObject *parent = 0);
167 class OtherFileFilterItem : public FileFilterBaseItem {
169 Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged)
171 void setFilter(const QString &filter);
174 void filterChanged();
177 OtherFileFilterItem(QObject *parent = 0);
180 } // namespace QmlProjectManager
182 QML_DECLARE_TYPE(QmlProjectManager::QmlFileFilterItem)
183 QML_DECLARE_TYPE(QmlProjectManager::JsFileFilterItem)
184 QML_DECLARE_TYPE(QmlProjectManager::ImageFileFilterItem)
185 QML_DECLARE_TYPE(QmlProjectManager::CssFileFilterItem)
186 QML_DECLARE_TYPE(QmlProjectManager::OtherFileFilterItem)
188 #endif // FILEFILTERITEMS_HPROJECTITEM_H