OSDN Git Service

Merge remote branch 'origin/2.1'
[qt-creator-jp/qt-creator-jp.git] / src / plugins / qmlprojectmanager / fileformat / filefilteritems.h
index ef85d58..9c69c31 100644 (file)
@@ -6,8 +6,10 @@
 #include <QSet>
 #include <qdeclarative.h>
 #include <QFileSystemWatcher>
+#include <QTimer>
 
 #include "qmlprojectitem.h"
+#include "filesystemwatcher.h"
 
 namespace QmlProjectManager {
 
@@ -16,7 +18,7 @@ class FileFilterBaseItem : public QmlProjectContentItem {
 
     Q_PROPERTY(QString directory READ directory WRITE setDirectory NOTIFY directoryChanged)
     Q_PROPERTY(bool recursive READ recursive WRITE setRecursive NOTIFY recursiveChanged)
-    Q_PROPERTY(QStringList paths READ pathsProperty WRITE setPathsProperty NOTIFY pathsPropertyChanged)
+    Q_PROPERTY(QStringList paths READ pathsProperty WRITE setPathsProperty)
 
     Q_PROPERTY(QStringList files READ files NOTIFY filesChanged DESIGNABLE false)
 
@@ -44,29 +46,41 @@ signals:
     void directoryChanged();
     void recursiveChanged();
     void pathsChanged();
-    void filesChanged();
-    void filterChanged();
+    void filesChanged(const QSet<QString> &added, const QSet<QString> &removed);
 
 private slots:
     void updateFileList();
+    void updateFileListNow();
 
 private:
     QString absolutePath(const QString &path) const;
     QString absoluteDir() const;
 
+    bool fileMatches(const QString &fileName) const;
     QSet<QString> filesInSubTree(const QDir &rootDir, const QDir &dir, QSet<QString> *parsedDirs = 0);
 
     QString m_rootDir;
     QString m_defaultDir;
 
     QString m_filter;
+    // simple "*.png" patterns are stored in m_fileSuffixes, otherwise store in m_regExpList
+    QList<QString> m_fileSuffixes;
     QList<QRegExp> m_regExpList;
-    bool m_recursive;
-    QStringList m_explicitFiles;
 
-    QFileSystemWatcher m_fsWatcher;
+    enum RecursiveOption {
+        Recurse,
+        DoNotRecurse,
+        RecurseDefault // not set explicitly
+    };
+
+    RecursiveOption m_recurse;
+
+    QStringList m_explicitFiles;
 
     QSet<QString> m_files;
+    FileSystemWatcher m_dirWatcher;
+    QTimer m_updateFileListTimer;
+
 
     friend class ProjectItem;
 };
@@ -80,7 +94,12 @@ public:
 
 class JsFileFilterItem : public FileFilterBaseItem {
     Q_OBJECT
-    Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged())
+    Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged)
+
+    void setFilter(const QString &filter);
+
+signals:
+    void filterChanged();
 
 public:
     JsFileFilterItem(QObject *parent = 0);
@@ -88,7 +107,12 @@ public:
 
 class ImageFileFilterItem : public FileFilterBaseItem {
     Q_OBJECT
-    Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged())
+    Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged)
+
+    void setFilter(const QString &filter);
+
+signals:
+    void filterChanged();
 
 public:
     ImageFileFilterItem(QObject *parent = 0);
@@ -96,7 +120,12 @@ public:
 
 class CssFileFilterItem : public FileFilterBaseItem {
     Q_OBJECT
-    Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged())
+    Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged)
+
+    void setFilter(const QString &filter);
+
+signals:
+    void filterChanged();
 
 public:
     CssFileFilterItem(QObject *parent = 0);