From 0afd504748f49ae6c6d77403fd1d6f6604b6eaa8 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Thu, 16 Apr 2015 08:54:41 +0200 Subject: Add auto-scroll feature for results pane Change-Id: Iff209384c2bf30b3ce2b9241ce1c719a44592e65 Reviewed-by: David Schulz Reviewed-by: Christian Stenger --- plugins/autotest/testresultspane.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'plugins/autotest/testresultspane.cpp') diff --git a/plugins/autotest/testresultspane.cpp b/plugins/autotest/testresultspane.cpp index 0d6b9052b8..9ebb1c09fb 100644 --- a/plugins/autotest/testresultspane.cpp +++ b/plugins/autotest/testresultspane.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include #include @@ -46,7 +47,8 @@ namespace Internal { TestResultsPane::TestResultsPane(QObject *parent) : Core::IOutputPane(parent), m_context(new Core::IContext(this)), - m_wasVisibleBefore(false) + m_wasVisibleBefore(false), + m_autoScroll(false) { m_outputWidget = new QWidget; QVBoxLayout *outputLayout = new QVBoxLayout; @@ -144,6 +146,9 @@ TestResultsPane::~TestResultsPane() void TestResultsPane::addTestResult(const TestResult &result) { + const QScrollBar *scrollBar = m_treeView->verticalScrollBar(); + m_atEnd = scrollBar ? scrollBar->value() == scrollBar->maximum() : true; + m_model->addTestResult(result); if (!m_treeView->isVisible()) popup(Core::IOutputPane::NoModeSwitch); @@ -181,6 +186,9 @@ void TestResultsPane::clearContents() m_filterModel->clearTestResults(); navigateStateChanged(); m_summaryWidget->setVisible(false); + m_autoScroll = AutotestPlugin::instance()->settings()->autoScroll; + connect(m_treeView->verticalScrollBar(), &QScrollBar::rangeChanged, + this, &TestResultsPane::onScrollBarRangeChanged, Qt::UniqueConnection); } void TestResultsPane::visibilityChanged(bool visible) @@ -381,6 +389,14 @@ void TestResultsPane::onTestRunFinished() updateSummaryLabel(); m_summaryWidget->setVisible(true); m_model->removeCurrentTestMessage(); + disconnect(m_treeView->verticalScrollBar(), &QScrollBar::rangeChanged, + this, &TestResultsPane::onScrollBarRangeChanged); +} + +void TestResultsPane::onScrollBarRangeChanged(int, int max) +{ + if (m_autoScroll && m_atEnd) + m_treeView->verticalScrollBar()->setValue(max); } void TestResultsPane::onTestTreeModelChanged() -- cgit v1.2.1