From ffe6ed7a1c4cd6aa74f4f4e4772e5a11244bd029 Mon Sep 17 00:00:00 2001 From: Uwe Risse <dg2ycb@gmx.de> Date: Tue, 6 Dec 2022 14:54:24 +0100 Subject: [PATCH] Ensure that "Start new period decodes at top" still works after several hours. Patch from Mike W9MDB. --- widgets/displaytext.cpp | 21 +++++++++++++++++++-- widgets/displaytext.h | 2 +- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/widgets/displaytext.cpp b/widgets/displaytext.cpp index bdbad0e69..48b914d12 100644 --- a/widgets/displaytext.cpp +++ b/widgets/displaytext.cpp @@ -19,6 +19,7 @@ #include "Network/LotWUsers.hpp" #include "models/DecodeHighlightingModel.hpp" #include "logbook/logbook.h" +#include "Logger.hpp" #include "qt_helpers.hpp" #include "moc_displaytext.cpp" @@ -212,9 +213,25 @@ void DisplayText::insertText(QString const& text, QColor bg, QColor fg void DisplayText::extend_vertical_scrollbar (int min, int max) { - if (high_volume_ - && m_config && m_config->decodes_from_top ()) + static int mod_last; + static int height; + if (high_volume_ && m_config && m_config->decodes_from_top ()) { + auto m = modified_vertical_scrollbar_max_; + if (m != mod_last) { height = m - mod_last;mod_last = m; } + //auto vp_margins2 = viewportMargins (); + if (height == 0 && m > viewport()->height()) height = abs( - viewport()->height()); + //LOG_INFO ("scrollbar min=" << min << " max=" << max << " mod=" << modified_vertical_scrollbar_max_ << " height=" << viewport()->height() << " top=" << vp_margins2.top() << " bottom=" << vp_margins2.bottom()) << " height=" << height << " mod_last=" << mod_last; + if (max > 60000) + { + QString tmp = toPlainText(); + while (tmp != NULL && tmp.length() > 100 && max > 50000) + { + tmp.remove(0, tmp.indexOf("\n")+1); + max -= height; + } + setPlainText(tmp); + } if (max && max != modified_vertical_scrollbar_max_) { auto vp_margins = viewportMargins (); diff --git a/widgets/displaytext.h b/widgets/displaytext.h index b0db7ca8b..9ceeeeffd 100644 --- a/widgets/displaytext.h +++ b/widgets/displaytext.h @@ -66,7 +66,7 @@ private: QHash<QString, QPair<QColor, QColor>> highlighted_calls_; bool high_volume_; QMetaObject::Connection vertical_scroll_connection_; - int modified_vertical_scrollbar_max_; + long long modified_vertical_scrollbar_max_; }; #endif // DISPLAYTEXT_H