From 2eb1472cacdf23bb5fa1e981fc07e23cff60a0d4 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Mon, 2 Sep 2024 15:46:37 +0200 Subject: [PATCH] AutoTest: Add sessions settings Store the settings for showing durations and the current active result filters. Change-Id: I5d7a8e5ccea3da89593d940b3bf87928a7209625 Reviewed-by: David Schulz --- src/plugins/autotest/testresultmodel.cpp | 20 ++++++++++ src/plugins/autotest/testresultmodel.h | 9 +++-- src/plugins/autotest/testresultspane.cpp | 48 +++++++++++++++++++----- src/plugins/autotest/testresultspane.h | 3 ++ 4 files changed, 66 insertions(+), 14 deletions(-) diff --git a/src/plugins/autotest/testresultmodel.cpp b/src/plugins/autotest/testresultmodel.cpp index 7a1295a4391..0b35da12242 100644 --- a/src/plugins/autotest/testresultmodel.cpp +++ b/src/plugins/autotest/testresultmodel.cpp @@ -464,6 +464,8 @@ TestResultFilterModel::TestResultFilterModel(TestResultModel *sourceModel, QObje { setSourceModel(sourceModel); enableAllResultTypes(true); + if (!testSettings().omitInternalMsg()) + toggleTestResultType(ResultType::MessageInternal); } void TestResultFilterModel::enableAllResultTypes(bool enabled) @@ -527,6 +529,24 @@ TestResultItem *TestResultFilterModel::itemForIndex(const QModelIndex &index) co return index.isValid() ? m_sourceModel->itemForIndex(mapToSource(index)) : nullptr; } +const QVariantList TestResultFilterModel::enabledFiltersAsSetting() const +{ + return Utils::transform(Utils::toList(m_enabled), + [](ResultType rt) { return QVariant::fromValue(int(rt)); }); +} + +void TestResultFilterModel::setEnabledFiltersFromSetting(const QVariantList &enabled) +{ + m_enabled.clear(); + if (!enabled.isEmpty()) { + for (const QVariant &variant : enabled) + m_enabled << ResultType(variant.value()); + } + // when misused: ensure non-discardable filters are enabled + m_enabled << ResultType::MessageFatal << ResultType::MessageSystem << ResultType::MessageError; + invalidateFilter(); +} + bool TestResultFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { QModelIndex index = m_sourceModel->index(sourceRow, 0, sourceParent); diff --git a/src/plugins/autotest/testresultmodel.h b/src/plugins/autotest/testresultmodel.h index 07569bd6809..3c0ec5f8bad 100644 --- a/src/plugins/autotest/testresultmodel.h +++ b/src/plugins/autotest/testresultmodel.h @@ -14,8 +14,7 @@ #include -namespace Autotest { -namespace Internal { +namespace Autotest::Internal { class TestResultItem : public Utils::TypedTreeItem { @@ -101,6 +100,9 @@ public: bool hasResults(); TestResult testResult(const QModelIndex &index) const; TestResultItem *itemForIndex(const QModelIndex &index) const; + const QSet enabledFilters() const { return m_enabled; } + const QVariantList enabledFiltersAsSetting() const; + void setEnabledFiltersFromSetting(const QVariantList &enabled); protected: bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override; @@ -110,5 +112,4 @@ private: QSet m_enabled; }; -} // namespace Internal -} // namespace Autotest +} // namespace Autotest::Internal diff --git a/src/plugins/autotest/testresultspane.cpp b/src/plugins/autotest/testresultspane.cpp index 96e6fd61185..3ea4b503ef8 100644 --- a/src/plugins/autotest/testresultspane.cpp +++ b/src/plugins/autotest/testresultspane.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -30,6 +31,7 @@ #include #include +#include #include #include #include @@ -51,8 +53,7 @@ using namespace Core; using namespace Utils; -namespace Autotest { -namespace Internal { +namespace Autotest::Internal { ResultsTreeView::ResultsTreeView(QWidget *parent) : TreeView(parent) @@ -158,6 +159,10 @@ TestResultsPane::TestResultsPane(QObject *parent) : connect(TestRunner::instance(), &TestRunner::hadDisabledTests, m_model, &TestResultModel::raiseDisabledTests); visualOutputWidget->installEventFilter(this); + connect(SessionManager::instance(), &SessionManager::sessionLoaded, + this, &TestResultsPane::onSessionLoaded); + connect(SessionManager::instance(), &SessionManager::aboutToSaveSession, + this, &TestResultsPane::onAboutToSaveSession); } void TestResultsPane::createToolButtons() @@ -438,11 +443,6 @@ void TestResultsPane::onItemActivated(const QModelIndex &index) void TestResultsPane::initializeFilterMenu() { - const bool omitIntern = testSettings().omitInternalMsg(); - // FilterModel has all messages enabled by default - if (omitIntern) - m_filterModel->toggleTestResultType(ResultType::MessageInternal); - QMap textAndType; textAndType.insert(ResultType::Pass, Tr::tr("Pass")); textAndType.insert(ResultType::Fail, Tr::tr("Fail")); @@ -453,12 +453,13 @@ void TestResultsPane::initializeFilterMenu() textAndType.insert(ResultType::MessageDebug, Tr::tr("Debug Messages")); textAndType.insert(ResultType::MessageWarn, Tr::tr("Warning Messages")); textAndType.insert(ResultType::MessageInternal, Tr::tr("Internal Messages")); + const QSet enabled = m_filterModel->enabledFilters(); for (auto it = textAndType.cbegin(); it != textAndType.cend(); ++it) { const ResultType &result = it.key(); QAction *action = new QAction(m_filterMenu); action->setText(it.value()); action->setCheckable(true); - action->setChecked(result != ResultType::MessageInternal || !omitIntern); + action->setChecked(enabled.contains(result)); action->setData(int(result)); m_filterMenu->addAction(action); } @@ -734,6 +735,34 @@ void TestResultsPane::clearMarks() m_marks.clear(); } +static constexpr char SV_SHOW_DURATIONS[] = "AutoTest.ShowDurations"; +static constexpr char SV_MESSAGE_FILTER[] = "AutoTest.MessageFilter"; + +void TestResultsPane::onSessionLoaded() +{ + const bool showDurations = SessionManager::sessionValue(SV_SHOW_DURATIONS, true).toBool(); + m_showDurationButton->setChecked(showDurations); + const QVariantList enabledFilters = SessionManager::sessionValue(SV_MESSAGE_FILTER).toList(); + + if (enabledFilters.isEmpty()) { + m_filterModel->enableAllResultTypes(true); + if (testSettings().omitInternalMsg()) + m_filterModel->toggleTestResultType(ResultType::MessageInternal); + } else { + m_filterModel->setEnabledFiltersFromSetting(enabledFilters); + } + + m_filterMenu->clear(); + initializeFilterMenu(); +} + + +void TestResultsPane::onAboutToSaveSession() +{ + SessionManager::setSessionValue(SV_SHOW_DURATIONS, m_showDurationButton->isChecked()); + SessionManager::setSessionValue(SV_MESSAGE_FILTER, m_filterModel->enabledFiltersAsSetting()); +} + void TestResultsPane::showTestResult(const QModelIndex &index) { QModelIndex mapped = m_filterModel->mapFromSource(index); @@ -743,5 +772,4 @@ void TestResultsPane::showTestResult(const QModelIndex &index) } } -} // namespace Internal -} // namespace Autotest +} // namespace Autotest::Internal diff --git a/src/plugins/autotest/testresultspane.h b/src/plugins/autotest/testresultspane.h index b8785d25eb2..c18af1a2681 100644 --- a/src/plugins/autotest/testresultspane.h +++ b/src/plugins/autotest/testresultspane.h @@ -100,6 +100,9 @@ private: void createMarks(const QModelIndex &parent = QModelIndex()); void clearMarks(); + void onSessionLoaded(); + void onAboutToSaveSession(); + QStackedWidget *m_outputWidget; QFrame *m_summaryWidget; QLabel *m_summaryLabel;