diff options
Diffstat (limited to 'src/plugins/qmlprojectmanager/qmlproject.cpp')
| -rw-r--r-- | src/plugins/qmlprojectmanager/qmlproject.cpp | 42 |
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; |
