Beispiel #1
0
    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()
Beispiel #2
0
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()