Wed, 12 Sep 2018 19:59:06 +0200
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>