def __init__(self, *args, **kwargs): QDialog.__init__(self, *args, **kwargs) self.ui = Ui_Settings() self.ui.setupUi(self) self.autoUpdate = False self.ui.newServer.clicked.connect(self.addServer) self.settings = QSettings(QSettings.IniFormat, QSettings.UserScope, VENDOR, APP) mac_re = QRegExp("([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}") self.ui.macText.setValidator(QRegExpValidator(mac_re, self.ui.macText)) self.ui.aliasText.textChanged.connect(self.enableSave) self.ui.portText.textChanged.connect(self.enableSave) self.ui.macText.textChanged.connect(self.enableSave) self.ui.macText.textChanged.connect(self.dropStyle) self.ui.asBroadcastCheck.stateChanged.connect(self.enableSave) self.ui.saveServer.clicked.connect(self.updateServer) self.ui.resetServer.clicked.connect(self.resetServer) self.ui.deleteServer.clicked.connect(self.deleteServer) self.ui.wakeServer.clicked.connect(self.wakeServer) self.serversModel = ServersModel() self.ui.serversView.setModel(self.serversModel) self.ui.serversView.selectionModel().selectionChanged.connect(self.serverChanged) servers = self.settings.beginReadArray("servers") for d in range(servers): self.settings.setArrayIndex(d) s = Server.fromSettings(self.settings, self.alias(d)) self.serversModel.append(s) self.settings.endArray()
class ConfigDialog(QDialog): wake = pyqtSignal(object) serversChanged = pyqtSignal() def __init__(self, *args, **kwargs): QDialog.__init__(self, *args, **kwargs) self.ui = Ui_Settings() self.ui.setupUi(self) self.autoUpdate = False self.ui.newServer.clicked.connect(self.addServer) self.settings = QSettings(QSettings.IniFormat, QSettings.UserScope, VENDOR, APP) mac_re = QRegExp("([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}") self.ui.macText.setValidator(QRegExpValidator(mac_re, self.ui.macText)) self.ui.aliasText.textChanged.connect(self.enableSave) self.ui.portText.textChanged.connect(self.enableSave) self.ui.macText.textChanged.connect(self.enableSave) self.ui.macText.textChanged.connect(self.dropStyle) self.ui.asBroadcastCheck.stateChanged.connect(self.enableSave) self.ui.saveServer.clicked.connect(self.updateServer) self.ui.resetServer.clicked.connect(self.resetServer) self.ui.deleteServer.clicked.connect(self.deleteServer) self.ui.wakeServer.clicked.connect(self.wakeServer) self.serversModel = ServersModel() self.ui.serversView.setModel(self.serversModel) self.ui.serversView.selectionModel().selectionChanged.connect(self.serverChanged) servers = self.settings.beginReadArray("servers") for d in range(servers): self.settings.setArrayIndex(d) s = Server.fromSettings(self.settings, self.alias(d)) self.serversModel.append(s) self.settings.endArray() def dropStyle(self): self.sender().setStyleSheet('color: auto') @classmethod def alias(cls, d): return 'New server %d' % d def addServer(self): d = 1 while True: alias = self.alias(d) if not self.serversModel.contains(alias): break d += 1 alias = self.alias(d) index = self.serversModel.append(Server(alias)) self.saveServers() if index.isValid(): self.ui.serversView.setFocus() sm = self.ui.serversView.selectionModel() sm.clear() sm.select(index, QItemSelectionModel.Rows|QItemSelectionModel.Select) def serverSelected(self): selected = [x for x in self.ui.serversView.selectionModel().selectedIndexes() if x.column() == 0 and x.isValid()] if not selected: return None return selected[0] def serverChanged(self, set, unset): selection = self.serverSelected() if not selection: self.ui.aliasText.setText('') self.ui.portText.setText('') self.ui.macText.setText('') self.ui.asBroadcastCheck.setChecked(False) self.ui.groupBox.setEnabled(False) self.ui.saveServer.setEnabled(False) self.ui.resetServer.setEnabled(False) self.ui.deleteServer.setEnabled(False) self.ui.wakeServer.setEnabled(False) return self.ui.groupBox.setEnabled(True) self.ui.saveServer.setEnabled(False) self.ui.resetServer.setEnabled(False) self.ui.deleteServer.setEnabled(True) self.ui.wakeServer.setEnabled(True) server = selection.internalPointer() self.setServer(server) def setServer(self, server): self.autoUpdate = True self.ui.aliasText.setText(server.alias) self.ui.portText.setText('%d' % server.port) self.ui.macText.setText(server.mac) self.ui.asBroadcastCheck.setChecked(server.broadcast) self.autoUpdate = False def enableSave(self): if not self.autoUpdate and self.serverSelected(): self.ui.saveServer.setEnabled(True) self.ui.resetServer.setEnabled(True) def deleteServer(self): selection = self.serverSelected() if not selection: return server = selection.internalPointer() if QMessageBox.Yes != QMessageBox.question(self, 'Confirm action', 'Do you want to remove server "%s" from the list?' % server.alias, QMessageBox.Yes|QMessageBox.No): return self.ui.deleteServer.setEnabled(False) self.ui.serversView.model().delete(selection) self.saveServers() def wakeServer(self): selection = self.serverSelected() if not selection: return server = selection.internalPointer() self.wake.emit(server) def updateServer(self): selection = self.serverSelected() if not selection: return validator = self.ui.macText.validator() mac = self.ui.macText.text() state, pos = validator.validate(mac, 0) if state != QValidator.Acceptable: self.ui.macText.setStyleSheet('color: red') self.ui.macText.setFocus() self.ui.macText.setCursorPosition(len(mac)) return self.ui.saveServer.setEnabled(False) self.ui.resetServer.setEnabled(False) def updateServer(server): server.alias = self.ui.aliasText.text() server.port = int(self.ui.portText.text()) server.mac = mac server.broadcast = bool(self.ui.asBroadcastCheck.isChecked()) self.ui.serversView.model().update(selection, updateServer) self.saveServers() def resetServer(self): selection = self.serverSelected() if not selection: return self.ui.saveServer.setEnabled(False) self.ui.resetServer.setEnabled(False) server = selection.internalPointer() self.setServer(server) def saveServers(self): self.settings.beginWriteArray("servers") model = self.ui.serversView.model() for d in range(model.rowCount()): self.settings.setArrayIndex(d) server = model.index(d).internalPointer() server.save(self.settings) self.settings.endArray() self.serversChanged.emit()