diff --git a/src/plugins/autotest/gtest/gtesttreeitem.cpp b/src/plugins/autotest/gtest/gtesttreeitem.cpp index 95bdf35eb28..aab040a3107 100644 --- a/src/plugins/autotest/gtest/gtesttreeitem.cpp +++ b/src/plugins/autotest/gtest/gtesttreeitem.cpp @@ -47,6 +47,14 @@ static QString gtestFilter(GTestTreeItem::TestStates states) return QString("%1.%2"); } +TestTreeItem *GTestTreeItem::copyWithoutChildren() +{ + GTestTreeItem *copied = new GTestTreeItem; + copied->copyBasicDataFrom(this); + copied->m_state = m_state; + return copied; +} + QVariant GTestTreeItem::data(int column, int role) const { switch (role) { diff --git a/src/plugins/autotest/gtest/gtesttreeitem.h b/src/plugins/autotest/gtest/gtesttreeitem.h index 81a89e45ec8..08378a0718f 100644 --- a/src/plugins/autotest/gtest/gtesttreeitem.h +++ b/src/plugins/autotest/gtest/gtesttreeitem.h @@ -49,6 +49,7 @@ public: explicit GTestTreeItem(const QString &name = QString(), const QString &filePath = QString(), Type type = Root) : TestTreeItem(name, filePath, type), m_state(Enabled) {} + TestTreeItem *copyWithoutChildren() override; QVariant data(int column, int role) const override; bool canProvideTestConfiguration() const override { return type() != Root; } bool canProvideDebugConfiguration() const override { return type() != Root; } diff --git a/src/plugins/autotest/qtest/qttesttreeitem.cpp b/src/plugins/autotest/qtest/qttesttreeitem.cpp index 1502a0954bc..8035c934e50 100644 --- a/src/plugins/autotest/qtest/qttesttreeitem.cpp +++ b/src/plugins/autotest/qtest/qttesttreeitem.cpp @@ -41,6 +41,14 @@ QtTestTreeItem::QtTestTreeItem(const QString &name, const QString &filePath, Tes setData(0, Qt::Checked, Qt::CheckStateRole); } +TestTreeItem *QtTestTreeItem::copyWithoutChildren() +{ + QtTestTreeItem *copied = new QtTestTreeItem; + copied->copyBasicDataFrom(this); + copied->m_inherited = m_inherited; + return copied; +} + QVariant QtTestTreeItem::data(int column, int role) const { switch (role) { diff --git a/src/plugins/autotest/qtest/qttesttreeitem.h b/src/plugins/autotest/qtest/qttesttreeitem.h index a1ea02ace4a..2d6d443db5e 100644 --- a/src/plugins/autotest/qtest/qttesttreeitem.h +++ b/src/plugins/autotest/qtest/qttesttreeitem.h @@ -36,6 +36,7 @@ public: explicit QtTestTreeItem(const QString &name = QString(), const QString &filePath = QString(), Type type = Root); + TestTreeItem *copyWithoutChildren() override; QVariant data(int column, int role) const override; Qt::ItemFlags flags(int column) const override; bool canProvideTestConfiguration() const override; diff --git a/src/plugins/autotest/quick/quicktesttreeitem.cpp b/src/plugins/autotest/quick/quicktesttreeitem.cpp index 6d3a2b99f48..da0978c149d 100644 --- a/src/plugins/autotest/quick/quicktesttreeitem.cpp +++ b/src/plugins/autotest/quick/quicktesttreeitem.cpp @@ -35,6 +35,13 @@ namespace Autotest { namespace Internal { +TestTreeItem *QuickTestTreeItem::copyWithoutChildren() +{ + QuickTestTreeItem *copied = new QuickTestTreeItem; + copied->copyBasicDataFrom(this); + return copied; +} + QVariant QuickTestTreeItem::data(int column, int role) const { switch (role) { diff --git a/src/plugins/autotest/quick/quicktesttreeitem.h b/src/plugins/autotest/quick/quicktesttreeitem.h index 30b5efd317b..88d21bf637c 100644 --- a/src/plugins/autotest/quick/quicktesttreeitem.h +++ b/src/plugins/autotest/quick/quicktesttreeitem.h @@ -36,6 +36,7 @@ public: explicit QuickTestTreeItem(const QString &name = QString(), const QString &filePath = QString(), Type type = Root) : TestTreeItem(name, filePath, type) {} + TestTreeItem *copyWithoutChildren() override; QVariant data(int column, int role) const override; Qt::ItemFlags flags(int column) const override; bool canProvideTestConfiguration() const override; diff --git a/src/plugins/autotest/testtreeitem.cpp b/src/plugins/autotest/testtreeitem.cpp index d415feaa723..694e8e278a4 100644 --- a/src/plugins/autotest/testtreeitem.cpp +++ b/src/plugins/autotest/testtreeitem.cpp @@ -314,6 +314,20 @@ QSet TestTreeItem::internalTargets() const return targets; } +void TestTreeItem::copyBasicDataFrom(const TestTreeItem *other) +{ + if (!other) + return; + m_name = other->m_name; + m_filePath = other->m_filePath; + m_type = other->m_type; + m_checked = other->m_checked; + m_line = other->m_line; + m_column = other->m_column; + m_proFile = other->m_proFile; + m_status = other->m_status; +} + inline bool TestTreeItem::modifyFilePath(const QString &filePath) { if (m_filePath != filePath) { diff --git a/src/plugins/autotest/testtreeitem.h b/src/plugins/autotest/testtreeitem.h index 6e8c7de87ea..1a0c25e9bf0 100644 --- a/src/plugins/autotest/testtreeitem.h +++ b/src/plugins/autotest/testtreeitem.h @@ -72,6 +72,7 @@ public: explicit TestTreeItem(const QString &name = QString(), const QString &filePath = QString(), Type type = Root); + virtual TestTreeItem *copyWithoutChildren() = 0; virtual QVariant data(int column, int role) const override; virtual bool setData(int column, const QVariant &data, int role) override; virtual Qt::ItemFlags flags(int column) const override; @@ -119,6 +120,7 @@ public: virtual TestTreeItem *createParentGroupNode() const = 0; virtual QSet internalTargets() const; protected: + void copyBasicDataFrom(const TestTreeItem *other); typedef std::function CompareFunction; TestTreeItem *findChildBy(CompareFunction compare) const; static QSet dependingInternalTargets(CppTools::CppModelManager *cppMM,