diff -r f75a385e9127 -r 7e0e921dc7ea MqttMonitor/MqttConnectionOptionsDialog.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MqttMonitor/MqttConnectionOptionsDialog.py Sat Sep 01 20:18:11 2018 +0200 @@ -0,0 +1,94 @@ +# -*- coding: utf-8 -*- + +""" +Module implementing a dialog to enter MQTT connection options. +""" + +from __future__ import unicode_literals + +from PyQt5.QtCore import pyqtSlot +from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QAbstractButton + +from .Ui_MqttConnectionOptionsDialog import Ui_MqttConnectionOptionsDialog + + +class MqttConnectionOptionsDialog(QDialog, Ui_MqttConnectionOptionsDialog): + """ + Class implementing a dialog to enter MQTT connection options. + """ + def __init__(self, client, options=None, parent=None): + """ + Constructor + + @param client reference to the MQTT client object + @type MqttClient + @param options dictionary containing the connection options to + populate the dialog with + @@type dict + @param parent reference to the parent widget + @type QWidget + """ + super(MqttConnectionOptionsDialog, self).__init__(parent) + self.setupUi(self) + + self.__client = client + + self.__populateDefaults(options=options) + + + @pyqtSlot(QAbstractButton) + def on_buttonBox_clicked(self, button): + """ + Private slot to handle the press of a button box button. + + @param button button that has been pressed + @type QAbstractButton + """ + if button == self.buttonBox.button(QDialogButtonBox.RestoreDefaults): + self.__populateDefaults(options=None) + + def __populateDefaults(self, options=None): + """ + Private method to populate the dialog. + + If no options dictionary is given, the dialog will be populated with + default values. + """ + if options is None: + options = self.__client.defaultConnectionOptions() + + # general + self.clientIdEdit.setText(options["ClientId"]) + self.keepaliveSpinBox.setValue(options["Keepalive"]) + self.cleanSessionCheckBox.setChecked(options["CleanSession"]) + + # user credentials + self.usernameEdit.setText(options["Username"]) + self.passwordEdit.setText(options["Password"]) + + # last will and testament + self.willQosSpinBox.setValue(options["WillQos"]) + self.willRetainCheckBox.setChecked(options["WillRetain"]) + self.willTopicEdit.setText(options["WillTopic"]) + self.willMessageEdit.setPlainText(options["WillMessage"]) + + def getConnectionOptions(self): + """ + Public method get the entered connection options. + + @return dictionary containing the connection options. It has the keys + "ClientId", "Keepalive", "CleanSession", "Username", "Password", + "WillTopic", "WillMessage", "WillQos", "WillRetain" + @rtype tuple of (int, dict) + """ + return { + "ClientId": self.clientIdEdit.text(), + "Keepalive": self.keepaliveSpinBox.value(), + "CleanSession": self.cleanSessionCheckBox.isChecked(), + "Username": self.usernameEdit.text(), + "Password": self.passwordEdit.text(), + "WillTopic": self.willTopicEdit.text(), + "WillMessage": self.willMessageEdit.toPlainText(), + "WillQos": self.willQosSpinBox.value(), + "WillRetain": self.willRetainCheckBox.isChecked(), + }