diff options
Diffstat (limited to 'plugins/autotest/testtreemodel.cpp')
-rw-r--r-- | plugins/autotest/testtreemodel.cpp | 62 |
1 files changed, 61 insertions, 1 deletions
diff --git a/plugins/autotest/testtreemodel.cpp b/plugins/autotest/testtreemodel.cpp index bccabf898a..cc54b6969a 100644 --- a/plugins/autotest/testtreemodel.cpp +++ b/plugins/autotest/testtreemodel.cpp @@ -31,6 +31,8 @@ #include <projectexplorer/session.h> #include <projectexplorer/target.h> +#include <qmljs/qmljsmodelmanagerinterface.h> + #include <texteditor/texteditor.h> #include <utils/fileutils.h> @@ -46,7 +48,9 @@ TestTreeModel::TestTreeModel(QObject *parent) : m_rootItem(new TestTreeItem(QString(), QString(), TestTreeItem::ROOT)), m_autoTestRootItem(new TestTreeItem(tr("Auto Tests"), QString(), TestTreeItem::ROOT, m_rootItem)), m_quickTestRootItem(new TestTreeItem(tr("Qt Quick Tests"), QString(), TestTreeItem::ROOT, m_rootItem)), - m_parser(new TestCodeParser(this)) + m_parser(new TestCodeParser(this)), + m_connectionsInitialized(false), + m_initializationCounter(0) { m_rootItem->appendChild(m_autoTestRootItem); m_rootItem->appendChild(m_quickTestRootItem); @@ -90,6 +94,62 @@ TestTreeModel::~TestTreeModel() m_instance = 0; } +void TestTreeModel::enableParsing() +{ + ++m_initializationCounter; + + if (m_connectionsInitialized) + return; + + m_parser->setState(TestCodeParser::Idle); + + ProjectExplorer::SessionManager *sm = ProjectExplorer::SessionManager::instance(); + connect(sm, &ProjectExplorer::SessionManager::startupProjectChanged, + m_parser, &TestCodeParser::emitUpdateTestTree); + + CppTools::CppModelManager *cppMM = CppTools::CppModelManager::instance(); + connect(cppMM, &CppTools::CppModelManager::documentUpdated, + m_parser, &TestCodeParser::onCppDocumentUpdated, Qt::QueuedConnection); + connect(cppMM, &CppTools::CppModelManager::aboutToRemoveFiles, + m_parser, &TestCodeParser::removeFiles, Qt::QueuedConnection); + + QmlJS::ModelManagerInterface *qmlJsMM = QmlJS::ModelManagerInterface::instance(); + connect(qmlJsMM, &QmlJS::ModelManagerInterface::documentUpdated, + m_parser, &TestCodeParser::onQmlDocumentUpdated, Qt::QueuedConnection); + connect(qmlJsMM, &QmlJS::ModelManagerInterface::aboutToRemoveFiles, + m_parser, &TestCodeParser::removeFiles, Qt::QueuedConnection); + m_connectionsInitialized = true; + m_parser->updateTestTree(); +} + +void TestTreeModel::disableParsing() +{ + if (!m_connectionsInitialized) + return; + if (--m_initializationCounter != 0) + return; + + ProjectExplorer::SessionManager *sm = ProjectExplorer::SessionManager::instance(); + disconnect(sm, &ProjectExplorer::SessionManager::startupProjectChanged, + m_parser, &TestCodeParser::emitUpdateTestTree); + + CppTools::CppModelManager *cppMM = CppTools::CppModelManager::instance(); + disconnect(cppMM, &CppTools::CppModelManager::documentUpdated, + m_parser, &TestCodeParser::onCppDocumentUpdated); + disconnect(cppMM, &CppTools::CppModelManager::aboutToRemoveFiles, + m_parser, &TestCodeParser::removeFiles); + + QmlJS::ModelManagerInterface *qmlJsMM = QmlJS::ModelManagerInterface::instance(); + disconnect(qmlJsMM, &QmlJS::ModelManagerInterface::documentUpdated, + m_parser, &TestCodeParser::onQmlDocumentUpdated); + disconnect(qmlJsMM, &QmlJS::ModelManagerInterface::aboutToRemoveFiles, + m_parser, &TestCodeParser::removeFiles); + + m_parser->setState(TestCodeParser::Disabled); + + m_connectionsInitialized = false; +} + QModelIndex TestTreeModel::index(int row, int column, const QModelIndex &parent) const { if (!hasIndex(row, column, parent)) |