MqttMonitorWidget: added code to keep the scrollbar position while appending new messages or log messages.

Wed, 12 Sep 2018 19:59:06 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 12 Sep 2018 19:59:06 +0200
changeset 48
41dd2bfee4e4
parent 47
185fac480ed2
child 49
a7e370d20ab3

MqttMonitorWidget: added code to keep the scrollbar position while appending new messages or log messages.

MqttMonitor/MqttMonitorWidget.py file | annotate | diff | comparison | revisions
MqttMonitor/MqttMonitorWidget.ui file | annotate | diff | comparison | revisions
--- a/MqttMonitor/MqttMonitorWidget.py	Wed Sep 12 19:36:33 2018 +0200
+++ b/MqttMonitor/MqttMonitorWidget.py	Wed Sep 12 19:59:06 2018 +0200
@@ -72,12 +72,10 @@
         self.__messagesQosFormat.setFontItalic(True)
         
         self.__isAlternate = False
-        self.__followLatestMessage = True
         
         # TODO: Messages Edit improvements:
-        #   1. add check box for self.__followLatestMessage
-        #   2. add capability to search
-        #   3. add capability to save contents to a file
+        #   1. add capability to search
+        #   2. add capability to save contents to a file
         
         for logLevel in (MqttClient.LogDisabled,
                          MqttClient.LogDebug,
@@ -91,9 +89,8 @@
             self.logLevelComboBox.count() - 1)
         
         # TODO: Log Edit improvements:
-        #   1. add check box for self.__followLatestLogMessage
-        #   2. add capability to search
-        #   3. add configuration capability for colors
+        #   1. add capability to search
+        #   2. add configuration capability for colors
         
         self.__logMessagesBackgrounds = {
             MqttClient.LogDebug: QBrush(Qt.white),
@@ -104,7 +101,6 @@
             MqttClient.LogDisabled: QBrush(Qt.magenta)
             # reuse LogDisabled for unknown log levels
         }
-        self.__followLatestLogMessage = True
         
         self.brokerWidget.setCurrentIndex(0)
         
@@ -292,6 +288,8 @@
             # always show unknown log levels
             pass
         
+        scrollbarValue = self.logEdit.verticalScrollBar().value()
+        
         textCursor = self.logEdit.textCursor()
         if not self.logEdit.document().isEmpty():
             textCursor.movePosition(QTextCursor.End)
@@ -311,8 +309,11 @@
         
         txt = self.tr("{0}: {1}").format(mqttLogLevelString(level), message)
         self.logEdit.insertPlainText(Utilities.filterAnsiSequences(txt))
-        if self.__followLatestLogMessage:
+        
+        if self.followLogMessagesCheckBox.isChecked():
             self.logEdit.ensureCursorVisible()
+        else:
+            self.logEdit.verticalScrollBar().setValue(scrollbarValue)
     
     @pyqtSlot(str, bytes, int, bool)
     def __messageReceived(self, topic, payload, qos, retain):
@@ -749,6 +750,8 @@
         @param qos quality of service indicator (0, 1, 2)
         @type int
         """
+        scrollbarValue = self.messagesEdit.verticalScrollBar().value()
+        
         textCursor = self.messagesEdit.textCursor()
         if not self.messagesEdit.document().isEmpty():
             textCursor.movePosition(QTextCursor.End)
@@ -777,8 +780,10 @@
         self.messagesEdit.insertPlainText(
             Utilities.filterAnsiSequences(payloadStr))
         
-        if self.__followLatestMessage:
+        if self.followMessagesCheckBox.isChecked():
             self.messagesEdit.ensureCursorVisible()
+        else:
+            self.messagesEdit.verticalScrollBar().setValue(scrollbarValue)
         
         self.__isAlternate = not self.__isAlternate
     
--- a/MqttMonitor/MqttMonitorWidget.ui	Wed Sep 12 19:36:33 2018 +0200
+++ b/MqttMonitor/MqttMonitorWidget.ui	Wed Sep 12 19:59:06 2018 +0200
@@ -144,7 +144,7 @@
    <item>
     <widget class="QTabWidget" name="brokerWidget">
      <property name="currentIndex">
-      <number>1</number>
+      <number>3</number>
      </property>
      <widget class="QWidget" name="pubSubTab">
       <attribute name="title">
@@ -459,6 +459,19 @@
          </item>
         </layout>
        </item>
+       <item>
+        <widget class="QCheckBox" name="followMessagesCheckBox">
+         <property name="toolTip">
+          <string>Select to scroll to the most recently received message</string>
+         </property>
+         <property name="text">
+          <string>Follow received messages</string>
+         </property>
+         <property name="checked">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
       </layout>
      </widget>
      <widget class="QWidget" name="statusTab">
@@ -1296,6 +1309,19 @@
          </item>
         </layout>
        </item>
+       <item>
+        <widget class="QCheckBox" name="followLogMessagesCheckBox">
+         <property name="toolTip">
+          <string>Select to scroll to the most recently received log message</string>
+         </property>
+         <property name="text">
+          <string>Follow received messages</string>
+         </property>
+         <property name="checked">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
       </layout>
      </widget>
     </widget>
@@ -1343,11 +1369,13 @@
   <tabstop>clearPublishCheckBox</tabstop>
   <tabstop>messagesEdit</tabstop>
   <tabstop>messagesClearButton</tabstop>
+  <tabstop>followMessagesCheckBox</tabstop>
   <tabstop>brokerStatusButton</tabstop>
   <tabstop>scrollArea</tabstop>
   <tabstop>logLevelComboBox</tabstop>
   <tabstop>logEdit</tabstop>
   <tabstop>logClearButton</tabstop>
+  <tabstop>followLogMessagesCheckBox</tabstop>
  </tabstops>
  <resources/>
  <connections>

eric ide

mercurial