def __init__(self, *args, **kwargs): super(BrokerDialog, self).__init__(*args, **kwargs) self.setWindowTitle("MQTT Broker") self.settings = QSettings("{}/TDM/tdm.cfg".format(QDir.homePath()), QSettings.IniFormat) gbHost = QGroupBox("Hostname and port") hfl = QFormLayout() self.hostname = QLineEdit() self.hostname.setText(self.settings.value("hostname", "localhost")) self.port = SpinBox(maximum=65535) self.port.setValue(self.settings.value("port", 1883, int)) hfl.addRow("Hostname", self.hostname) hfl.addRow("Port", self.port) gbHost.setLayout(hfl) gbLogin = QGroupBox("Credentials [optional]") lfl = QFormLayout() self.username = QLineEdit() self.username.setText(self.settings.value("username", "")) self.password = QLineEdit() self.password.setEchoMode(QLineEdit.PasswordEchoOnEdit) self.password.setText(self.settings.value("password", "")) lfl.addRow("Username", self.username) lfl.addRow("Password", self.password) gbLogin.setLayout(lfl) gbClientId = QGroupBox("Client ID [optional]") cfl = QFormLayout() self.clientId = QLineEdit() self.clientId.setText( self.settings.value("client_id", "tdm-" + self.random_generator())) cfl.addRow("Client ID", self.clientId) gbClientId.setLayout(cfl) self.cbConnectStartup = QCheckBox("Connect on startup") self.cbConnectStartup.setChecked( self.settings.value("connect_on_startup", False, bool)) hlBtn = HLayout() btnSave = QPushButton("Save") btnCancel = QPushButton("Cancel") hlBtn.addWidgets([btnSave, btnCancel]) vl = VLayout() vl.addWidgets([gbHost, gbLogin, self.cbConnectStartup]) vl.addLayout(hlBtn) self.setLayout(vl) btnSave.clicked.connect(self.accept) btnCancel.clicked.connect(self.reject)
def __init__(self, *args, **kwargs): super(PatternsDialog, self).__init__(*args, **kwargs) self.setMinimumHeight(400) self.setMinimumWidth(400) self.setWindowTitle("Autodiscovery patterns") self.settings = QSettings("{}/TDM/tdm.cfg".format(QDir.homePath()), QSettings.IniFormat) self.settings.beginGroup("Patterns") vl = VLayout() cols = ["Pattern"] self.tw = QTableWidget(0, 1) self.tw.setHorizontalHeaderLabels(cols) self.tw.verticalHeader().hide() self.tw.horizontalHeader().setSectionResizeMode(0, QHeaderView.Stretch) for k in self.settings.childKeys(): row = self.tw.rowCount() self.tw.insertRow(row) self.tw.setItem(row, 0, QTableWidgetItem(self.settings.value(k))) vl.addWidgets([ QLabel( "Add your modified FullTopic patterns to enable auto-discovery of such devices\n" "Patterns MUST include %prefix%, %topic% and trailing /\n" "Default Tasmota FullTopics are built-in\n\n" "You have to reconnect to your Broker after topic changes."), self.tw ]) hl_btns = HLayout([0, 3, 0, 3]) btnAdd = QPushButton("Add") btnDel = QPushButton("Delete") btnCancel = QPushButton("Cancel") btnSave = QPushButton("Save") hl_btns.addWidgets([btnAdd, btnDel, btnSave, btnCancel]) hl_btns.insertStretch(2) vl.addLayout(hl_btns) self.setLayout(vl) self.idx = None self.tw.clicked.connect(self.select) btnAdd.clicked.connect(self.add) btnDel.clicked.connect(self.delete) btnSave.clicked.connect(self.accept) btnCancel.clicked.connect(self.reject)
def __init__(self, *args, **kwargs): super(BSSIdDialog, self).__init__(*args, **kwargs) self.setMinimumHeight(400) self.setMinimumWidth(400) self.setWindowTitle("BSSId aliases") self.settings = QSettings("{}/TDM/tdm.cfg".format(QDir.homePath()), QSettings.IniFormat) self.settings.beginGroup("BSSId") vl = VLayout() cols = ["BSSId", "Alias"] self.tw = QTableWidget(0, 2) self.tw.setHorizontalHeaderLabels(cols) self.tw.verticalHeader().hide() for c in range(2): self.tw.horizontalHeader().setSectionResizeMode( c, QHeaderView.Stretch) for k in self.settings.childKeys(): row = self.tw.rowCount() self.tw.insertRow(row) self.tw.setItem(row, 0, QTableWidgetItem(k)) self.tw.setItem(row, 1, QTableWidgetItem(self.settings.value(k))) vl.addWidget(self.tw) hl_btns = HLayout([0, 3, 0, 3]) btnAdd = QPushButton("Add") btnDel = QPushButton("Delete") btnCancel = QPushButton("Cancel") btnSave = QPushButton("Save") hl_btns.addWidgets([btnAdd, btnDel, btnSave, btnCancel]) hl_btns.insertStretch(2) vl.addLayout(hl_btns) self.setLayout(vl) self.idx = None self.tw.clicked.connect(self.select) btnAdd.clicked.connect(self.add) btnDel.clicked.connect(self.delete) btnSave.clicked.connect(self.accept) btnCancel.clicked.connect(self.reject)
def __init__(self, model, row, *args, **kwargs): super(DeviceEditDialog, self).__init__(*args, **kwargs) self.setMinimumWidth(400) self.setWindowTitle("Edit device") self.settings = QSettings() self.settings.beginGroup("Devices") self.mapper = QDataWidgetMapper() self.mapper.setModel(model) self.mapper.setSubmitPolicy(QDataWidgetMapper.ManualSubmit) vl = VLayout() gbTopic = QGroupBox("MQTT Topic") self.topic = QLineEdit() self.topic.setPlaceholderText("unique name of your device") self.mapper.addMapping(self.topic, DevMdl.TOPIC) self.full_topic = QLineEdit() self.full_topic.setPlaceholderText("must contain %prefix% and %topic%") self.mapper.addMapping(self.full_topic, DevMdl.FULL_TOPIC) tfl = QFormLayout() tfl.addRow("Topic", self.topic) tfl.addRow("Full topic", self.full_topic) gbTopic.setLayout(tfl) btnSave = QPushButton("Save") btnCancel = QPushButton("Cancel") hl_btns = HLayout() hl_btns.addStretch(1) hl_btns.addWidgets([btnSave, btnCancel]) vl.addWidgets([gbTopic]) vl.addLayout(hl_btns) self.setLayout(vl) self.mapper.setCurrentIndex(row) btnSave.clicked.connect(self.accept) btnCancel.clicked.connect(self.reject)
def __init__(self, *args, **kwargs): super(BrokerDialog, self).__init__(*args, **kwargs) self.setWindowTitle("MQTT Broker") self.settings = QSettings() gbHost = QGroupBox("Hostname and port") hfl = QFormLayout() self.hostname = QLineEdit() self.hostname.setText(self.settings.value("hostname", "localhost")) self.port = SpinBox(maximum=65535) self.port.setValue(self.settings.value("port", 1883, int)) hfl.addRow("Hostname", self.hostname) hfl.addRow("Port", self.port) gbHost.setLayout(hfl) gbLogin = QGroupBox("Credentials [optional]") lfl = QFormLayout() self.username = QLineEdit() self.username.setText(self.settings.value("username", "")) self.password = QLineEdit() self.password.setEchoMode(QLineEdit.PasswordEchoOnEdit) self.password.setText(self.settings.value("password", "")) lfl.addRow("Username", self.username) lfl.addRow("Password", self.password) gbLogin.setLayout(lfl) hlBtn = HLayout() btnSave = QPushButton("Save") btnCancel = QPushButton("Cancel") hlBtn.addWidgets([btnSave, btnCancel]) vl = VLayout() vl.addWidgets([gbHost, gbLogin]) vl.addLayout(hlBtn) self.setLayout(vl) btnSave.clicked.connect(self.accept) btnCancel.clicked.connect(self.reject)
def build_detail_row(self): frDetails = QFrame() frDetails.setFrameStyle(QFrame.StyledPanel | QFrame.Plain) hl_details = HLayout() leTopic = DetailLE(self.topic) hl_details.addWidgets([QLabel("Topic"), leTopic]) leFTopic = DetailLE(self.full_topic) hl_details.addWidgets([QLabel("FullTopic"), leFTopic]) # self.leMAC = DetailLE("") # hl_details.addWidgets([QLabel("MAC"), self.leMAC]) # self.leIP = DetailLE("") # hl_details.addWidgets([QLabel("IP"), self.leIP]) self.leGTopic = DetailLE("") hl_details.addWidgets([QLabel("GroupTopic"), self.leGTopic]) frDetails.setLayout(hl_details) self.layout().addWidget(frDetails)
def __init__(self, device, *args, **kwargs): super().__init__() self.setAllowedAreas(Qt.BottomDockWidgetArea) self.setWindowTitle("Console [{}]".format(device.name)) self.device = device self.settings = QSettings("{}/TDM/tdm.cfg".format(QDir.homePath()), QSettings.IniFormat) console_font_size = self.settings.value("console_font_size", 9, int) console_font.setPointSize(console_font_size) console_word_wrap = self.settings.value("console_word_wrap", True, bool) w = QWidget() vl = VLayout() self.console = QPlainTextEdit() self.console.setTabChangesFocus(True) self.console.setWordWrapMode(console_word_wrap) self.console.setReadOnly(True) self.console.setFont(console_font) self.console_hl = JSONHighLighter(self.console.document()) hl_command_mqttlog = HLayout(0) self.command = QLineEdit() self.command.setFont(console_font) self.command.setPlaceholderText( "Type the command and press ENTER to send.") self.command.returnPressed.connect(self.command_enter) self.command.textChanged.connect(self.command_changed) self.command.installEventFilter(self) command_cpl = QCompleter(sorted(commands)) command_cpl.setCaseSensitivity(Qt.CaseInsensitive) command_cpl.setCompletionMode(QCompleter.UnfilteredPopupCompletion) self.command.setCompleter(command_cpl) # command_cpl.popup().installEventFilter(self) command_cpl.activated.connect(self.command.clear, Qt.QueuedConnection) pbSave = QPushButton(QIcon("GUI/icons/save.png"), "") pbSave.setFlat(True) pbSave.setToolTip("Save console") pbSave.clicked.connect(self.save_console) pbClear = QPushButton(QIcon("GUI/icons/clear.png"), "") pbClear.setFlat(True) pbClear.setToolTip("Clear console") pbClear.clicked.connect(self.clear_console) self.cbMQTTLog = QComboBox() self.cbMQTTLog.addItems([ "Disabled", "Error", "Error/Info (default)", "Error/Info/Debug", "Error/Info/More debug", "All" ]) mqttlog = self.device.p.get("MqttLog", -1) if mqttlog != -1: self.cbMQTTLog.setCurrentIndex(int(mqttlog)) else: self.cbMQTTLog.setEnabled(False) self.cbMQTTLog.currentIndexChanged.connect(self.change_mqttlog) hl_command_mqttlog.addWidgets([ self.command, pbSave, pbClear, QLabel("MQTT Log level"), self.cbMQTTLog ]) vl.addWidget(self.console) vl.addLayout(hl_command_mqttlog) w.setLayout(vl) self.setWidget(w)
def __init__(self, device, *args, **kwargs): super(TimersDialog, self).__init__(*args, **kwargs) self.device = device self.timers = {} self.setWindowTitle("Timers [{}]".format( self.device.p['FriendlyName1'])) vl = VLayout() self.gbTimers = GroupBoxV("Enabled", spacing=5) self.gbTimers.setCheckable(True) self.gbTimers.toggled.connect(self.toggleTimers) self.cbTimer = QComboBox() self.cbTimer.addItems(["Timer{}".format(nr + 1) for nr in range(16)]) self.cbTimer.currentTextChanged.connect(self.loadTimer) hl_tmr_arm_rpt = HLayout(0) self.cbTimerArm = QCheckBox("Arm") self.cbTimerArm.clicked.connect(lambda x: self.describeTimer()) self.cbTimerRpt = QCheckBox("Repeat") self.cbTimerRpt.clicked.connect(lambda x: self.describeTimer()) hl_tmr_arm_rpt.addWidgets([self.cbTimerArm, self.cbTimerRpt]) hl_tmr_out_act = HLayout(0) self.cbxTimerOut = QComboBox() self.cbxTimerOut.addItems(self.device.power().keys()) self.cbxTimerOut.currentIndexChanged.connect( lambda x: self.describeTimer()) self.cbxTimerAction = QComboBox() self.cbxTimerAction.addItems(["Off", "On", "Toggle", "Rule"]) self.cbxTimerAction.currentIndexChanged.connect( lambda x: self.describeTimer()) hl_tmr_out_act.addWidgets([self.cbxTimerOut, self.cbxTimerAction]) self.TimerMode = QButtonGroup() rbTime = QRadioButton("Time") rbSunrise = QRadioButton("Sunrise ({})".format( self.device.p['Sunrise'])) rbSunset = QRadioButton("Sunset ({})".format(self.device.p['Sunset'])) self.TimerMode.addButton(rbTime, 0) self.TimerMode.addButton(rbSunrise, 1) self.TimerMode.addButton(rbSunset, 2) self.TimerMode.buttonClicked.connect(lambda x: self.describeTimer()) gbTimerMode = GroupBoxH("Mode") gbTimerMode.addWidgets(self.TimerMode.buttons()) hl_tmr_time = HLayout(0) self.cbxTimerPM = QComboBox() self.cbxTimerPM.addItems(["+", "-"]) self.cbxTimerPM.currentIndexChanged.connect( lambda x: self.describeTimer()) self.TimerMode.buttonClicked[int].connect( lambda x: self.cbxTimerPM.setEnabled(x != 0)) self.teTimerTime = QTimeEdit() self.teTimerTime.setButtonSymbols(QTimeEdit.NoButtons) self.teTimerTime.setAlignment(Qt.AlignCenter) self.teTimerTime.timeChanged.connect(lambda x: self.describeTimer()) lbWnd = QLabel("Window:") lbWnd.setAlignment(Qt.AlignVCenter | Qt.AlignRight) self.cbxTimerWnd = QComboBox() self.cbxTimerWnd.addItems([str(x).zfill(2) for x in range(0, 16)]) self.cbxTimerWnd.currentIndexChanged.connect( lambda x: self.describeTimer()) hl_tmr_days = HLayout(0) self.TimerWeekday = QButtonGroup() self.TimerWeekday.setExclusive(False) for i, wd in enumerate( ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]): cb = QCheckBox(wd) cb.clicked.connect(lambda x: self.describeTimer()) hl_tmr_days.addWidget(cb) self.TimerWeekday.addButton(cb, i) gbTimerDesc = GroupBoxV("Timer description", 5) gbTimerDesc.setMinimumHeight(200) self.lbTimerDesc = QLabel() self.lbTimerDesc.setAlignment(Qt.AlignCenter) self.lbTimerDesc.setWordWrap(True) gbTimerDesc.layout().addWidget(self.lbTimerDesc) hl_tmr_time.addWidgets( [self.cbxTimerPM, self.teTimerTime, lbWnd, self.cbxTimerWnd]) self.gbTimers.layout().addWidget(self.cbTimer) self.gbTimers.layout().addLayout(hl_tmr_arm_rpt) self.gbTimers.layout().addLayout(hl_tmr_out_act) self.gbTimers.layout().addWidget(gbTimerMode) self.gbTimers.layout().addLayout(hl_tmr_time) self.gbTimers.layout().addLayout(hl_tmr_days) btns = QDialogButtonBox(QDialogButtonBox.Save | QDialogButtonBox.Close) reload = btns.addButton("Reload", QDialogButtonBox.ResetRole) btns.accepted.connect(self.saveTimer) btns.rejected.connect(self.reject) reload.clicked.connect( lambda: self.loadTimer(self.cbTimer.currentText())) vl.addWidgets([self.gbTimers, gbTimerDesc, btns]) self.setLayout(vl)
def tabRules(self): rules = QWidget() rules.setLayout(VLayout()) hl = HLayout(0) vl_l = VLayout(0) self.rg = RuleGroupBox(rules, "Rule editor") self.rg.setFlat(True) self.rg.cbRule.currentIndexChanged.connect(self.loadRule) vl_l.addWidget(self.rg) gRT = GroupBoxH("Rule timers") vl_RT_func = VLayout(margin=[0, 0, 3, 0]) self.pbRTPoll = QPushButton("Poll") self.pbRTPoll.setCheckable(True) self.pbRTSet = QPushButton("Set") vl_RT_func.addWidgets([self.pbRTPoll, self.pbRTSet]) vl_RT_func.addStretch(1) gRT.layout().addLayout(vl_RT_func) self.twRT = QTableWidget(1, 8) self.twRT.setHorizontalHeaderLabels( ["T{}".format(i) for i in range(1, 9)]) for c in range(8): self.twRT.horizontalHeader().setSectionResizeMode( c, QHeaderView.Stretch) self.twRT.setCellWidget(0, c, SpinBox(minimum=0, maximum=32766)) self.twRT.verticalHeader().hide() self.twRT.verticalHeader().setDefaultSectionSize( self.twRT.horizontalHeader().height() * 2 + 1) self.twRT.setMaximumHeight(self.twRT.horizontalHeader().height() + self.twRT.rowHeight(0)) gRT.layout().addWidget(self.twRT) gVM = GroupBoxH("VAR/MEM") vl_VM_func = VLayout(margin=[3, 0, 0, 0]) self.pbVMPoll = QPushButton("Poll") self.pbVMPoll.setCheckable(True) self.pbVMSet = QPushButton("Set") vl_VM_func.addWidgets([self.pbVMPoll, self.pbVMSet]) vl_VM_func.addStretch(1) gVM.layout().addLayout(vl_VM_func) self.twVM = QTableWidget(2, 5) self.twVM.setHorizontalHeaderLabels( ["{}".format(i) for i in range(1, 9)]) self.twVM.setVerticalHeaderLabels(["VAR", "MEM"]) self.twVM.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) for c in range(5): self.twVM.horizontalHeader().setSectionResizeMode( c, QHeaderView.Stretch) for r in range(2): for c in range(5): self.twVM.setCellWidget(r, c, QLineEdit()) self.twVM.verticalHeader().setDefaultSectionSize( self.twVM.horizontalHeader().height()) self.twVM.setMaximumHeight(self.twVM.horizontalHeader().height() + self.twVM.rowHeight(0) * 2) gVM.layout().addWidget(self.twVM) hl_rt_vm = HLayout(0) hl_rt_vm.addWidgets([gRT, gVM]) hl.addLayout(vl_l) vl_r = VLayout(0) self.gbTimers = GroupBoxV("Timers", spacing=5) self.gbTimers.setCheckable(True) self.gbTimers.setChecked(False) self.gbTimers.toggled.connect(self.toggleTimers) self.cbTimer = QComboBox() self.cbTimer.addItems(["Timer{}".format(nr + 1) for nr in range(16)]) self.cbTimer.currentIndexChanged.connect(self.loadTimer) hl_tmr_arm_rpt = HLayout(0) self.cbTimerArm = QCheckBox("Arm") self.cbTimerArm.clicked.connect(lambda x: self.describeTimer()) self.cbTimerRpt = QCheckBox("Repeat") self.cbTimerRpt.clicked.connect(lambda x: self.describeTimer()) hl_tmr_arm_rpt.addWidgets([self.cbTimerArm, self.cbTimerRpt]) hl_tmr_out_act = HLayout(0) self.cbxTimerOut = QComboBox() self.cbxTimerOut.currentIndexChanged.connect( lambda x: self.describeTimer()) self.cbxTimerAction = QComboBox() self.cbxTimerAction.addItems(["Off", "On", "Toggle", "Rule"]) self.cbxTimerAction.currentIndexChanged.connect( lambda x: self.describeTimer()) hl_tmr_out_act.addWidgets([self.cbxTimerOut, self.cbxTimerAction]) self.TimerMode = QButtonGroup() rbTime = QRadioButton("Time") rbSunrise = QRadioButton("Sunrise ({})") rbSunset = QRadioButton("Sunset ({})") self.TimerMode.addButton(rbTime, 0) self.TimerMode.addButton(rbSunrise, 1) self.TimerMode.addButton(rbSunset, 2) self.TimerMode.buttonClicked.connect(lambda x: self.describeTimer()) gbTimerMode = GroupBoxH("Mode") gbTimerMode.addWidgets(self.TimerMode.buttons()) hl_tmr_time = HLayout(0) self.cbxTimerPM = QComboBox() self.cbxTimerPM.addItems(["+", "-"]) self.cbxTimerPM.currentIndexChanged.connect( lambda x: self.describeTimer()) self.TimerMode.buttonClicked[int].connect( lambda x: self.cbxTimerPM.setEnabled(x != 0)) self.teTimerTime = QTimeEdit() self.teTimerTime.setButtonSymbols(QTimeEdit.NoButtons) self.teTimerTime.setAlignment(Qt.AlignCenter) self.teTimerTime.timeChanged.connect(lambda x: self.describeTimer()) lbWnd = QLabel("Window:") lbWnd.setAlignment(Qt.AlignVCenter | Qt.AlignRight) self.cbxTimerWnd = QComboBox() self.cbxTimerWnd.addItems([str(x).zfill(2) for x in range(0, 16)]) self.cbxTimerWnd.currentIndexChanged.connect( lambda x: self.describeTimer()) hl_tmr_days = HLayout(0) self.TimerWeekday = QButtonGroup() self.TimerWeekday.setExclusive(False) for i, wd in enumerate( ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]): cb = QCheckBox(wd) cb.clicked.connect(lambda x: self.describeTimer()) hl_tmr_days.addWidget(cb) self.TimerWeekday.addButton(cb, i) gbTimerDesc = GroupBoxV("Timer description", 5) gbTimerDesc.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding) self.lbTimerDesc = QLabel() self.lbTimerDesc.setAlignment(Qt.AlignCenter) self.lbTimerDesc.setWordWrap(True) gbTimerDesc.layout().addWidget(self.lbTimerDesc) hl_tmr_btns = HLayout(0) btnCopyTrigger = QPushButton("Copy trigger") btnTimerSave = QPushButton("Save") hl_tmr_btns.addWidgets([btnCopyTrigger, btnTimerSave]) hl_tmr_btns.insertStretch(1) btnTimerSave.clicked.connect(self.saveTimer) btnCopyTrigger.clicked.connect(self.copyTrigger) hl_tmr_time.addWidgets( [self.cbxTimerPM, self.teTimerTime, lbWnd, self.cbxTimerWnd]) self.gbTimers.layout().addWidget(self.cbTimer) self.gbTimers.layout().addLayout(hl_tmr_arm_rpt) self.gbTimers.layout().addLayout(hl_tmr_out_act) self.gbTimers.layout().addWidget(gbTimerMode) self.gbTimers.layout().addLayout(hl_tmr_time) self.gbTimers.layout().addLayout(hl_tmr_days) self.gbTimers.layout().addWidget(gbTimerDesc) self.gbTimers.layout().addLayout(hl_tmr_btns) vl_r.addWidget(self.gbTimers) hl.addLayout(vl_r) hl.setStretch(0, 2) hl.setStretch(1, 1) rules.layout().addLayout(hl) rules.layout().addLayout(hl_rt_vm) rules.layout().setStretch(0, 3) rules.layout().setStretch(1, 0) return rules
def __init__(self, device, *args, **kwargs): super().__init__() self.setAllowedAreas(Qt.BottomDockWidgetArea) self.setWindowTitle("Console [{}]".format(device.p["FriendlyName1"])) self.device = device w = QWidget() vl = VLayout() self.console = QPlainTextEdit() self.console.setTabChangesFocus(True) fnt_mono = QFont("asd") fnt_mono.setStyleHint(QFont.TypeWriter) self.console.setFont(fnt_mono) self.console.setReadOnly(True) self.console_hl = JSONHighLighter(self.console.document()) hl_command_mqttlog = HLayout(0) self.command = QLineEdit() self.command.setFont(fnt_mono) self.command.setPlaceholderText( "Type the command and press ENTER to send.") self.command.returnPressed.connect(self.command_enter) self.command.textChanged.connect(self.command_changed) self.command.installEventFilter(self) command_cpl = QCompleter(sorted(commands)) command_cpl.setCaseSensitivity(Qt.CaseInsensitive) command_cpl.setCompletionMode(QCompleter.UnfilteredPopupCompletion) self.command.setCompleter(command_cpl) # command_cpl.popup().installEventFilter(self) command_cpl.activated.connect(self.command.clear, Qt.QueuedConnection) self.cbMQTTLog = QComboBox() self.cbMQTTLog.addItems([ "Disabled", "Error", "Error/Info (default)", "Error/Info/Debug", "Error/Info/More debug", "All" ]) mqttlog = self.device.p.get("MqttLog", -1) if mqttlog != -1: self.cbMQTTLog.setCurrentIndex(int(mqttlog)) else: self.cbMQTTLog.setEnabled(False) self.cbMQTTLog.currentIndexChanged.connect(self.change_mqttlog) hl_command_mqttlog.addWidgets( [self.command, QLabel("MQTT Log level"), self.cbMQTTLog]) vl.addWidget(self.console) vl.addLayout(hl_command_mqttlog) w.setLayout(vl) self.setWidget(w)
def tabRules(self): rules = QWidget() rules.setLayout(VLayout()) for r in range(3): rg = RuleGroupBox(rules, "Rule buffer {}".format(r + 1)) rg.pbLoad.clicked.connect(lambda x, r=r + 1: self.loadRule(r)) self.rule_grps.append(rg) rules.layout().addWidget(rg) rules.layout().setStretch(r, 1) gRT = GroupBoxH("Rule timers") vl_RT_func = VLayout(margin=[0, 0, 3, 0]) self.pbRTPoll = QPushButton("Poll") self.pbRTPoll.setCheckable(True) self.pbRTSet = QPushButton("Set") vl_RT_func.addWidgets([self.pbRTPoll, self.pbRTSet]) vl_RT_func.addStretch(1) gRT.layout().addLayout(vl_RT_func) self.twRT = QTableWidget(1, 8) self.twRT.setHorizontalHeaderLabels( ["T{}".format(i) for i in range(1, 9)]) for c in range(8): self.twRT.horizontalHeader().setSectionResizeMode( c, QHeaderView.Stretch) self.twRT.setCellWidget(0, c, SpinBox(minimum=0, maximum=32766)) self.twRT.verticalHeader().hide() self.twRT.verticalHeader().setDefaultSectionSize( self.twRT.horizontalHeader().height() * 2 + 1) self.twRT.setMaximumHeight(self.twRT.horizontalHeader().height() + self.twRT.rowHeight(0)) gRT.layout().addWidget(self.twRT) gVM = GroupBoxH("VAR/MEM") vl_VM_func = VLayout(margin=[3, 0, 0, 0]) self.pbVMPoll = QPushButton("Poll") self.pbVMPoll.setCheckable(True) self.pbVMSet = QPushButton("Set") vl_VM_func.addWidgets([self.pbVMPoll, self.pbVMSet]) vl_VM_func.addStretch(1) gVM.layout().addLayout(vl_VM_func) self.twVM = QTableWidget(2, 5) self.twVM.setHorizontalHeaderLabels( ["{}".format(i) for i in range(1, 9)]) self.twVM.setVerticalHeaderLabels(["VAR", "MEM"]) self.twVM.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) for c in range(5): self.twVM.horizontalHeader().setSectionResizeMode( c, QHeaderView.Stretch) for r in range(2): for c in range(5): self.twVM.setCellWidget(r, c, QLineEdit()) self.twVM.verticalHeader().setDefaultSectionSize( self.twVM.horizontalHeader().height()) self.twVM.setMaximumHeight(self.twVM.horizontalHeader().height() + self.twVM.rowHeight(0) * 2) gVM.layout().addWidget(self.twVM) hl_rt_vm = HLayout() hl_rt_vm.addWidgets([gRT, gVM]) rules.layout().addLayout(hl_rt_vm) rules.layout().setStretch(3, 0) return rules