aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmlprojectmanager/qmlproject.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qmlprojectmanager/qmlproject.cpp')
-rw-r--r--src/plugins/qmlprojectmanager/qmlproject.cpp42
1 files changed, 32 insertions, 10 deletions
diff --git a/src/plugins/qmlprojectmanager/qmlproject.cpp b/src/plugins/qmlprojectmanager/qmlproject.cpp
index 04458845c9e..8b1c28f289e 100644
--- a/src/plugins/qmlprojectmanager/qmlproject.cpp
+++ b/src/plugins/qmlprojectmanager/qmlproject.cpp
@@ -76,7 +76,8 @@ enum {
QmlProject::QmlProject(Manager *manager, const QString &fileName)
: m_manager(manager),
m_fileName(fileName),
- m_modelManager(ExtensionSystem::PluginManager::instance()->getObject<QmlJSEditor::QmlModelManagerInterface>())
+ m_modelManager(ExtensionSystem::PluginManager::instance()->getObject<QmlJSEditor::QmlModelManagerInterface>()),
+ m_fileWatcher(new ProjectExplorer::FileWatcher(this))
{
QFileInfo fileInfo(m_fileName);
m_projectName = fileInfo.completeBaseName();
@@ -84,6 +85,10 @@ QmlProject::QmlProject(Manager *manager, const QString &fileName)
m_file = new QmlProjectFile(this, fileName);
m_rootNode = new QmlProjectNode(this, m_file);
+ m_fileWatcher->addFile(fileName),
+ connect(m_fileWatcher, SIGNAL(fileChanged(QString)),
+ this, SLOT(refreshProjectFile()));
+
m_manager->registerProject(this);
}
@@ -129,16 +134,23 @@ static QStringList readLines(const QString &absoluteFileName)
void QmlProject::parseProject(RefreshOptions options)
{
if (options & Files) {
+ if (options & ProjectFile)
+ delete m_projectItem.data();
if (!m_projectItem) {
- QmlComponent *component = new QmlComponent(&m_engine, m_fileName, this);
- if (component->isReady()
- && qobject_cast<QmlProjectItem*>(component->create())) {
- m_projectItem = qobject_cast<QmlProjectItem*>(component->create());
- } else {
- qWarning() << m_fileName << "is not valid qml file, falling back to old format ...";
- m_files = convertToAbsoluteFiles(readLines(filesFileName()));
- m_files.removeDuplicates();
- m_modelManager->updateSourceFiles(m_files);
+ QFile file(m_fileName);
+ if (file.open(QFile::ReadOnly)) {
+ QmlComponent *component = new QmlComponent(&m_engine, this);
+ component->setData(file.readAll(), QUrl::fromLocalFile(m_fileName));
+ if (component->isReady()
+ && qobject_cast<QmlProjectItem*>(component->create())) {
+ m_projectItem = qobject_cast<QmlProjectItem*>(component->create());
+ connect(m_projectItem.data(), SIGNAL(qmlFilesChanged()), this, SLOT(refreshFiles()));
+ } else {
+ qWarning() << m_fileName << "is not valid qml file, falling back to old format ...";
+ m_files = convertToAbsoluteFiles(readLines(filesFileName()));
+ m_files.removeDuplicates();
+ m_modelManager->updateSourceFiles(m_files);
+ }
}
}
if (m_projectItem) {
@@ -191,6 +203,16 @@ QStringList QmlProject::files() const
return files;
}
+void QmlProject::refreshProjectFile()
+{
+ refresh(QmlProject::ProjectFile | Files);
+}
+
+void QmlProject::refreshFiles()
+{
+ refresh(Files);
+}
+
QString QmlProject::displayName() const
{
return m_projectName;