OSDN Git Service

QmlProjectManager: Make sure project tree updates after in project file change
authorKai Koehne <kai.koehne@nokia.com>
Thu, 15 Sep 2011 11:05:36 +0000 (13:05 +0200)
committerKai Koehne <kai.koehne@nokia.com>
Mon, 19 Sep 2011 15:01:53 +0000 (17:01 +0200)
Use FileManager instead of our own FileSystemWatcher, since this one only signals
the first file change (cause Qt Creator apparently removes the file and creates
a new one on each change).

Change-Id: Idacd545e41cd3ee29bfbc122526b9097039c65d0
Reviewed-on: http://codereview.qt-project.org/4975
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
src/plugins/qmlprojectmanager/qmlproject.cpp
src/plugins/qmlprojectmanager/qmlproject.h
src/plugins/qmlprojectmanager/qmlprojectfile.cpp

index 508ed62..9da413a 100644 (file)
@@ -42,6 +42,7 @@
 
 #include <coreplugin/icore.h>
 #include <coreplugin/messagemanager.h>
+#include <coreplugin/filemanager.h>
 #include <extensionsystem/pluginmanager.h>
 #include <qtsupport/qmldumptool.h>
 #include <qtsupport/baseqtversion.h>
@@ -60,10 +61,8 @@ namespace QmlProjectManager {
 QmlProject::QmlProject(Internal::Manager *manager, const QString &fileName)
     : m_manager(manager),
       m_fileName(fileName),
-      m_modelManager(ExtensionSystem::PluginManager::instance()->getObject<QmlJS::ModelManagerInterface>()),
-      m_fileWatcher(new Utils::FileSystemWatcher(this))
+      m_modelManager(ExtensionSystem::PluginManager::instance()->getObject<QmlJS::ModelManagerInterface>())
 {
-    m_fileWatcher->setObjectName(QLatin1String("QmlProjectWatcher"));
     setProjectContext(Core::Context(QmlProjectManager::Constants::PROJECTCONTEXT));
     setProjectLanguage(Core::Context(QmlProjectManager::Constants::LANG_QML));
 
@@ -73,9 +72,7 @@ QmlProject::QmlProject(Internal::Manager *manager, const QString &fileName)
     m_file = new Internal::QmlProjectFile(this, fileName);
     m_rootNode = new Internal::QmlProjectNode(this, m_file);
 
-    m_fileWatcher->addFile(fileName, Utils::FileSystemWatcher::WatchModifiedDate);
-    connect(m_fileWatcher, SIGNAL(fileChanged(QString)),
-            this, SLOT(refreshProjectFile()));
+    Core::FileManager::instance()->addFile(m_file, true);
 
     m_manager->registerProject(this);
 }
@@ -84,6 +81,8 @@ QmlProject::~QmlProject()
 {
     m_manager->unregisterProject(this);
 
+    Core::FileManager::instance()->removeFile(m_file);
+
     delete m_projectItem.data();
     delete m_rootNode;
 }
index f163a9d..caa4a75 100644 (file)
@@ -100,8 +100,9 @@ public:
 
     bool addFiles(const QStringList &filePaths);
 
-private slots:
     void refreshProjectFile();
+
+private slots:
     void refreshFiles(const QSet<QString> &added, const QSet<QString> &removed);
 
 protected:
@@ -124,7 +125,6 @@ private:
     // qml based, new format
     QDeclarativeEngine m_engine;
     QWeakPointer<QmlProjectItem> m_projectItem;
-    Utils::FileSystemWatcher *m_fileWatcher;
 
     Internal::QmlProjectNode *m_rootNode;
 };
index 44189f1..4fd10bb 100644 (file)
@@ -33,6 +33,7 @@
 #include "qmlprojectfile.h"
 #include "qmlproject.h"
 #include "qmlprojectconstants.h"
+#include <utils/qtcassert.h>
 
 namespace QmlProjectManager {
 namespace Internal {
@@ -41,10 +42,14 @@ QmlProjectFile::QmlProjectFile(QmlProject *parent, QString fileName)
     : Core::IFile(parent),
       m_project(parent),
       m_fileName(fileName)
-{ }
+{
+    QTC_CHECK(m_project);
+    QTC_CHECK(!fileName.isEmpty());
+}
 
 QmlProjectFile::~QmlProjectFile()
-{ }
+{
+}
 
 bool QmlProjectFile::save(QString *, const QString &, bool)
 {
@@ -104,7 +109,10 @@ bool QmlProjectFile::reload(QString *errorString, ReloadFlag flag, ChangeType ty
 {
     Q_UNUSED(errorString)
     Q_UNUSED(flag)
-    Q_UNUSED(type)
+
+    if (type == TypeContents)
+        m_project->refreshProjectFile();
+
     return true;
 }