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