diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp index f9990c522fb4d6a8e2748c4b66c17139c3a96c8d..5d05003e8ce88e048a5851d59c0e8a3adc4fa044 100644 --- a/src/plugins/qt4projectmanager/qt4nodes.cpp +++ b/src/plugins/qt4projectmanager/qt4nodes.cpp @@ -845,7 +845,7 @@ void Qt4ProFileNode::updateUiFiles() } addFileNodes(toAdd, this); } - modelManager->updateSourceFiles(toUpdate); + m_project->addUiFilesToCodeModel(toUpdate); } ProFileReader *Qt4PriFileNode::createProFileReader() const diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index a8fdc907cd0bb1a24a4fdb4fab2092a45f443310..9885221c0c4e2fdc45519d7d12bf72a424caa9e2 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -255,6 +255,10 @@ Qt4Project::Qt4Project(Qt4Manager *manager, const QString& fileName) : m_updateCodeModelTimer.setSingleShot(true); m_updateCodeModelTimer.setInterval(20); connect(&m_updateCodeModelTimer, SIGNAL(timeout()), this, SLOT(updateCodeModel())); + + m_addUiFilesTimer.setSingleShot(true); + m_addUiFilesTimer.setInterval(20); + connect(&m_addUiFilesTimer, SIGNAL(timeout()), this, SLOT(addUiFiles())); } Qt4Project::~Qt4Project() @@ -370,6 +374,27 @@ namespace { }; } +void Qt4Project::addUiFilesToCodeModel(const QStringList &files) +{ + // if we already have a full updateCodeModel() scheduled + // then we don't need to this seperately + // since that one will add also all the ui files + if (m_updateCodeModelTimer.isActive()) + return; + m_addUiFilesTimer.start(); + m_uiFilesToAdd << files; +} + +void Qt4Project::addUiFiles() +{ + if (m_updateCodeModelTimer.isActive()) + return; + CppTools::CppModelManagerInterface *modelManager = + ExtensionSystem::PluginManager::instance()->getObject<CppTools::CppModelManagerInterface>(); + modelManager->updateSourceFiles(m_uiFilesToAdd); + m_uiFilesToAdd.clear(); +} + void Qt4Project::scheduleUpdateCodeModel() { m_updateCodeModelTimer.start(); diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h index 24b7e45d6e8dc8e4ee648925e678c89fdc8117a0..0c4a5fb57dcaf1ebe9b8edcab745c0957c39fb6a 100644 --- a/src/plugins/qt4projectmanager/qt4project.h +++ b/src/plugins/qt4projectmanager/qt4project.h @@ -182,6 +182,9 @@ public: void notifyChanged(const QString &name); + // called by qt4ProjectNode to add ui_*.h files to the codemodel + void addUiFilesToCodeModel(const QStringList &files); + public slots: void update(); void proFileParseError(const QString &errorMessage); @@ -200,6 +203,7 @@ private slots: const Qt4ProjectManager::Internal::Qt4ProjectType oldType, const Qt4ProjectManager::Internal::Qt4ProjectType newType); void proFileUpdated(Qt4ProjectManager::Internal::Qt4ProFileNode *node); + void addUiFiles(); protected: virtual void restoreSettingsImpl(ProjectExplorer::PersistentSettingsReader &settingsReader); @@ -232,6 +236,8 @@ private: Internal::Qt4ProjectFiles *m_projectFiles; QTimer m_updateCodeModelTimer; + QTimer m_addUiFilesTimer; + QStringList m_uiFilesToAdd; Internal::GCCPreprocessor m_preproc; friend class Qt4ProjectFile;