Exemplo n.º 1
0
 def saveSettings(self):
     s = QSettings(OrganizationName, ApplicationName)
     s.beginWriteArray('ChannelSettings')
     t = self.channelTable
     for ch in range( t.rowCount() ) :
         s.setArrayIndex(ch)
         gainCombo = t.cellWidget(ch, self.columns['gain'])
         couplingCombo = t.cellWidget(ch, self.columns['coupling'])
         modeCombo = t.cellWidget(ch, self.columns['mode'])
         squidCombo = t.cellWidget(ch, self.columns['squid'])
         s.setValue('enabled', t.cellWidget(ch, self.columns['enabled']).isChecked())
         s.setValue('save', t.cellWidget(ch, self.columns['save']).isChecked())
         s.setValue('coupling', couplingCombo.currentText())
         s.setValue('mode', modeCombo.currentText())
         s.setValue('gain', gainCombo.itemData(gainCombo.currentIndex()))
         s.setValue('squid', squidCombo.currentText())
         s.setValue('reset', t.cellWidget(ch, self.columns['reset']).value())
         s.setValue('label', t.cellWidget(ch, self.columns['label']).text())
     s.endArray()            
     s.setValue('sampleRate', self.sampleRateSb.value())
     s.setValue('chunkTime', self.chunkTimeSb.value())
     s.setValue('name', self.nameLe.text())
     s.setValue('comment', self.commentLe.text())
     s.setValue('lpfOrder', self.lpfOrderSb.value())
     s.setValue('lpfFrequency', self.lpfFrequencySb.value())
     s.setValue('resampleRateSb', self.resampleRateSb.value())
     s.setValue('enablePlotting', self.enablePlottingCb.isChecked())
Exemplo n.º 2
0
    def initGui(self):
        """Create the menu entries and toolbar icons inside the QGIS GUI."""
        settings = QSettings(
            os.path.join(QgsApplication.qgisSettingsDirPath(),
                         "scriptassistant", "config.ini"),
            QSettings.IniFormat,
        )
        config_size = settings.value("script_assistant/size")
        if config_size is None:
            if gui.settings_manager.load_setting("current_configuration"):
                pass
            else:
                gui.settings_manager.save_setting("current_configuration",
                                                  "Script Assistant")
                gui.settings_manager.save_setting("script_folder", "")
                gui.settings_manager.save_setting(
                    "test_folder", os.path.join(__location__, "tests"))
                gui.settings_manager.save_setting("test_data_folder", "")
                gui.settings_manager.save_setting("no_reload", "N")
                gui.settings_manager.save_setting("current_test", "$ALL")

                settings.beginWriteArray("script_assistant")
                settings.setArrayIndex(0)
                settings.setValue("configuration", "Script Assistant")
                settings.setValue("script_folder", "")
                settings.setValue("test_data_folder", "")
                settings.setValue("test_folder",
                                  os.path.join(__location__, "tests"))
                settings.setValue("no_reload", "N")
                settings.endArray()

        self.create_reload_action()
        self.create_test_tool_button()
        self.create_add_test_data_action()
        self.create_settings_action()
Exemplo n.º 3
0
def saveinfos():
    """Saves the info's."""
    s = QSettings()
    s.beginWriteArray("lilypondinfo")
    for i, info in enumerate(infos()):
        s.setArrayIndex(i)
        info.write(s)
    s.endArray()
Exemplo n.º 4
0
def saveinfos():
    """Saves the info's."""
    s = QSettings()
    s.beginWriteArray("lilypondinfo")
    for i, info in enumerate(infos()):
        s.setArrayIndex(i)
        info.write(s)
    s.endArray()
Exemplo n.º 5
0
 def saveSettings(self):
     s = QSettings()
     s.beginWriteArray('EMailList')
     for row in range(self.emailListWidget.count()):
         s.setArrayIndex(row)
         item = self.emailListWidget.item(row)
         print row, item.checkState(), item.text()
         s.setValue('Email', item.text())
         s.setValue('Checked', item.checkState())
     s.endArray()
Exemplo n.º 6
0
 def save(self):
     # truncate list if necessary
     self.__recent_files = self.__recent_files[:MAX_SIZE]
     s = QSettings()
     s.beginWriteArray("RecentFiles")
     cnt = 0
     for f in self.__recent_files:
         s.setArrayIndex(cnt)
         s.setValue("Filename", f)
         cnt += 1
     s.sync()
Exemplo n.º 7
0
	def saveConnections(self):
		settings = QSettings(self)
		settings.beginWriteArray("connections")
		for i in range(len(self.connections)):
			spojenie = self.connections[i]
			settings.setArrayIndex(i)
			settings.setValue("local", QVariant(bool(spojenie.local())))
			settings.setValue("path",  QVariant(str(spojenie.path())))
			settings.setValue("host",  QVariant(str(spojenie.host())))
			settings.setValue("port",  QVariant(int(spojenie.port())))
			settings.setValue("password", QVariant(str(spojenie.password())))
		settings.endArray()
Exemplo n.º 8
0
 def _saveSettings(self):
     settings = QSettings()
     settings.remove(self._group)
     settings.setValue(self._group + '/' + 'Name', self.name)
     settings.beginWriteArray(self._group)
     i = 0
     for clause in self._clauses:
         settings.setArrayIndex(i)
         clause.saveSettings(settings)
         i += 1
     settings.endArray()
     self.status = 'loaded'
Exemplo n.º 9
0
 def _saveSettings(self):
     settings = QSettings()
     settings.remove(self._group)
     settings.setValue(self._group + '/' + 'Name', self.name)
     settings.beginWriteArray(self._group)
     i = 0
     for clause in self._clauses:
         settings.setArrayIndex(i)
         clause.saveSettings(settings)
         i += 1
     settings.endArray()
     self.status = 'loaded'
Exemplo n.º 10
0
def store_profiles(profiles):
    settings = QSettings()
    settings.beginWriteArray("database_profiles")

    for index, info in enumerate(profiles):
        settings.setArrayIndex(index)
        settings.setValue("profilename", QVariant(encode_setting(info["profilename"])))
        settings.setValue("dialect", QVariant(encode_setting(info["dialect"])))
        settings.setValue("host", QVariant(encode_setting(info["host"])))
        settings.setValue("port", QVariant(encode_setting(info["port"])))
        settings.setValue("database", QVariant(encode_setting(info["database"])))
        settings.setValue("user", QVariant(encode_setting(info["user"])))
        settings.setValue("pass", QVariant(encode_setting(info["pass"])))
    settings.endArray()
Exemplo n.º 11
0
    def saveSettings(self):
        s = QSettings()

        table = self.currentTable

        nRows = table.rowCount()
        s.beginWriteArray('currentTable', nRows)
        for row in range(nRows):
            s.setArrayIndex(row)
            s.setValue('enabled', table.cellWidget(row,0).isChecked())
            s.setValue('rampRate', table.cellWidget(row,1).value())
            s.setValue('target', table.cellWidget(row,2).value())
            s.setValue('holdTime', table.cellWidget(row,3).value())
        s.endArray()
Exemplo n.º 12
0
    def writeSettings(self):
        settings = QSettings()

        settings.beginGroup("MainWindow")
        settings.setValue("Size", QVariant(self.size()))
        settings.setValue("Pos", QVariant(self.pos()))
        settings.endGroup()

        settings.beginGroup("BrowsePanel")
        settings.setValue("Visible", QVariant(self.browsePanel.isVisible()))
        settings.setValue("Floating", QVariant(self.browsePanel.isFloating()))
        settings.setValue("Size", QVariant(self.browsePanel.size()))
        settings.setValue("Pos", QVariant(self.browsePanel.pos()))
        settings.endGroup()

        settings.beginGroup("FilterPanel")
        settings.setValue("Visible", QVariant(self.filterPanel.isVisible()))
        settings.setValue("Floating", QVariant(self.filterPanel.isFloating()))
        settings.setValue("Size", QVariant(self.filterPanel.size()))
        settings.setValue("Pos", QVariant(self.filterPanel.pos()))
        settings.endGroup()

        settings.beginGroup("DataView")
        settings.setValue("FixedWidthFont", QVariant(self.dataView.isFixedWidthFont()))
        settings.endGroup()

        settings.beginGroup("FindDialog")
        d = self.dataView.findDialog
        settings.setValue("Visible", QVariant(d.isVisible()))
        settings.setValue("Pos", QVariant(d.pos()))
        settings.setValue("Flags", QVariant(d.getFindFlags()))
        settings.setValue("WrappedSearch", QVariant(d.getWrappedSearch()))
        settings.endGroup()

        settings.setValue("IOVs/UTC", QVariant(self.iovUTCCheckBox.isChecked()))

        settings.beginWriteArray("Recent")
        recents = self.menuRecent.actions()
        i = 0
        for action in recents:
            settings.setArrayIndex(i)
            settings.setValue("ConnString", QVariant(action.text()))
            i += 1
        settings.endArray()

        settings.beginGroup("Misc")
        settings.setValue("ShowWelcome", QVariant(self._showWelcome))
        settings.setValue("ExternalEditor", QVariant(self._externalEditor))
        settings.endGroup()
Exemplo n.º 13
0
    def save_configuration(self):
        """Save configuration (overwrite if config name already exists)."""
        new_config = self.cmb_config.lineEdit().text()

        if self.chk_reload.isChecked():
            no_reload_value = "Y"
        else:
            no_reload_value = "N"

        # Save to system
        settings = QSettings(
            os.path.join(QgsApplication.qgisSettingsDirPath(),
                         "scriptassistant", "config.ini"),
            QSettings.IniFormat,
        )
        # First get the current size of the config array in QSettings.
        size = settings.beginReadArray("script_assistant")

        # Check if the config already exists. If it does, overwrite it.
        for i in xrange(size):
            settings.setArrayIndex(i)
            if settings.value("configuration") == new_config:
                config_index = i
                break
        else:  # no break
            config_index = size

        settings.endArray()
        # Now create new entry / overwrite (depending on index value).
        settings.beginWriteArray("script_assistant")
        settings.setArrayIndex(config_index)
        settings.setValue("configuration", new_config)
        settings.setValue("script_folder", self.lne_script.text())
        settings.setValue("test_data_folder", self.lne_test_data.text())
        settings.setValue("test_folder", self.lne_test.text())
        settings.setValue("no_reload", no_reload_value)
        settings.endArray()

        config_names = [
            self.cmb_config.itemText(i) for i in range(self.cmb_config.count())
        ]
        if new_config not in config_names:
            self.cmb_config.addItem(new_config)

        self.setWindowTitle("Script Assistant Configuration")
        self.btn_save.setEnabled(False)

        if self.cmb_config.count() > 0:
            self.btn_delete.setEnabled(True)
Exemplo n.º 14
0
def store_profiles(profiles):
    settings = QSettings()
    settings.beginWriteArray('database_profiles')

    for index, info in enumerate(profiles):
        settings.setArrayIndex(index)
        settings.setValue('profilename',
                          QVariant(encode_setting(info['profilename'])))
        settings.setValue('dialect', QVariant(encode_setting(info['dialect'])))
        settings.setValue('host', QVariant(encode_setting(info['host'])))
        settings.setValue('port', QVariant(encode_setting(info['port'])))
        settings.setValue('database',
                          QVariant(encode_setting(info['database'])))
        settings.setValue('user', QVariant(encode_setting(info['user'])))
        settings.setValue('pass', QVariant(encode_setting(info['pass'])))
    settings.endArray()
Exemplo n.º 15
0
 def saveSettings(self, s=None):
     '''Save table contents to QSettings'''
     if s is None:
         s = QSettings()
     name = self.objectName()
     if len(name) == 0:
         raise Exception(
             'Cannot save settings without objectName property set.')
     s.beginWriteArray(name)
     for row in range(self.rowCount()):
         s.setArrayIndex(row)
         for columnName in self.columnNames:
             w = self.cellValue(row, columnName)
             print row, columnName, w
             s.setValue(columnName, w)
     s.endArray()
Exemplo n.º 16
0
    def store(self, iniFile=None, properties=None):
        if iniFile is not None:
            s = QSettings(iniFile, QSettings.IniFormat)
        else:
            s = QSettings()

        if properties is None:
            properties = self.properties()

        s.beginGroup('PosiView')
        s.remove('Mobiles')
        s.remove('DataProvider')
        idx = 0
        s.beginWriteArray('Mobiles')
        try:
            for v in properties['Mobiles'].values():
                s.setArrayIndex(idx)
                for k1, v1 in v.items():
                    s.setValue(k1, str(v1))
                idx += 1
        except KeyError:
            pass
        s.endArray()
        idx = 0
        s.beginWriteArray('DataProvider')
        try:
            for v in properties['Provider'].values():
                s.setArrayIndex(idx)
                for k1, v1 in v.items():
                    s.setValue(k1, str(v1))
                idx += 1
        except KeyError:
            pass
        s.endArray()
        s.setValue('Mission/Cruise', properties['Mission']['cruise'])
        s.setValue('Mission/Dive', properties['Mission']['dive'])
        s.setValue('Mission/Station', properties['Mission']['station'])
        s.setValue('Recorder/Path', properties['RecorderPath'])
        s.setValue('Recorder/AutoRecord', properties['AutoRecord'])
        s.setValue('Misc/NotifyDuration', properties['NotifyDuration'])
        s.setValue('Misc/ShowUtcClock', properties['ShowUtcClock'])
        s.endGroup()
Exemplo n.º 17
0
    def store(self, iniFile=None, properties=None):
        if iniFile is not None:
            s = QSettings(iniFile, QSettings.IniFormat)
        else:
            s = QSettings()

        if properties is None:
            properties = self.properties()

        s.beginGroup('PosiView')
        s.remove('Mobiles')
        s.remove('DataProvider')
        idx = 0
        s.beginWriteArray('Mobiles')
        try:
            for v in properties['Mobiles'].values():
                s.setArrayIndex(idx)
                for k1, v1 in v.items():
                    s.setValue(k1, str(v1))
                idx += 1
        except KeyError:
            pass
        s.endArray()
        idx = 0
        s.beginWriteArray('DataProvider')
        try:
            for v in properties['Provider'].values():
                s.setArrayIndex(idx)
                for k1, v1 in v.items():
                    s.setValue(k1, str(v1))
                idx += 1
        except KeyError:
            pass
        s.endArray()
        s.setValue('Mission/Cruise', properties['Mission']['cruise'])
        s.setValue('Mission/Dive', properties['Mission']['dive'])
        s.setValue('Mission/Station', properties['Mission']['station'])
        s.setValue('Recorder/Path', properties['RecorderPath'])
        s.setValue('Recorder/AutoRecord', properties['AutoRecord'])
        s.setValue('Misc/NotifyDuration', properties['NotifyDuration'])
        s.setValue('Misc/ShowUtcClock', properties['ShowUtcClock'])
        s.endGroup()
Exemplo n.º 18
0
    def delete_configuration(self):
        """Remove configuration."""
        config = self.load_configuration()
        delete_config = self.cmb_config.lineEdit().text()
        for i in config:
            if config[i]["configuration"] == delete_config:
                config.pop(i)
                self.cmb_config.removeItem(self.cmb_config.currentIndex())
                break
        else:
            self.cmb_config.lineEdit().clear()

        settings = QSettings(
            os.path.join(QgsApplication.qgisSettingsDirPath(),
                         "scriptassistant", "config.ini"),
            QSettings.IniFormat,
        )
        settings.beginGroup("script_assistant")
        settings.remove("")
        settings.endGroup()

        settings.beginWriteArray("script_assistant")
        for i, item in enumerate(config):
            settings.setArrayIndex(i)
            settings.setValue("configuration", config[item]["configuration"])
            settings.setValue("script_folder", config[item]["script_folder"])
            settings.setValue("test_data_folder",
                              config[item]["test_data_folder"])
            settings.setValue("test_folder", config[item]["test_folder"])
            settings.setValue("no_reload", config[item]["no_reload"])
        settings.endArray()

        if self.cmb_config.count() == 0:
            self.btn_delete.setEnabled(False)
            self.lne_script.setText("")
            self.lne_test.setText("")
            self.lne_test_data.setText("")
            self.chk_reload.setChecked(False)
        else:
            self.show_configuration()
Exemplo n.º 19
0
    def saveSettings(self):
        s = QSettings(OrganizationName, ApplicationName)
        s.setValue('geometry', self.saveGeometry())
        for w in self.settingsWidgets:
            saveWidgetToSettings(s, w)

        s.setValue('splitter1State', self.splitter1.saveState())
        s.setValue('splitter2State', self.splitter2.saveState())
        
        table = self.table
        nRows = table.rowCount()
        s.beginWriteArray('frequencyTable', nRows)
        w = self.tableCellWidget
        for row in range(nRows):
            s.setArrayIndex(row)
            s.setValue('active', w(row,'active').isChecked())
            s.setValue('f', w(row,'f').value())
            s.setValue('A', w(row,'A').value())
            s.setValue('phase', w(row,'phase').value())
            s.setValue('bw', w(row, 'bw').value())
            s.setValue('rollOff', w(row, 'order').value())
        s.endArray()
Exemplo n.º 20
0
def store_settings():
    global name, email, place
    global ROS_PKGS, ROS_MSGS, ROS_SRVS
    settings = QSettings('semCo', 'ROSLab IDE')
    # store user information
    settings.setValue('name', name)
    settings.setValue('email', email)
    settings.setValue('place', place)
    # store message packages
    size = len(ROS_MSGS)
    settings.beginWriteArray('msg_packages', size)
    for i in range(size):
        settings.setArrayIndex(i)
        settings.setValue('name', ROS_MSGS[i])
    settings.endArray()
    # store service packages
    size = len(ROS_SRVS)
    settings.beginWriteArray('srv_packages', size)
    for i in range(size):
        settings.setArrayIndex(i)
        settings.setValue('name', ROS_SRVS[i])
    settings.endArray()
Exemplo n.º 21
0
class KhtSettings(QMainWindow):
    def __init__(self, parent=None):
        global isMAEMO
        QMainWindow.__init__(self,parent)
        self.parent = parent

        try:
            self.setAttribute(Qt.WA_Maemo5AutoOrientation, True)
            self.setAttribute(Qt.WA_Maemo5StackedWindow, True)
            isMAEMO = True
        except:
            isMAEMO = False
        self.setWindowTitle("KhtSync Config")

        #Resize window if not maemo
        if not isMAEMO:
            self.resize(800, 600)
            
        self.settings = QSettings()
        
        self.setupGUI()        
        self.loadPrefs()
        self.setupMenu()
        self.accounts_model.set(self.accounts)
        self.show()        

    def isRunning(self):
        return os.path.isfile('/tmp/khtsync.pid')

    def runorstop(self):
        if self.isRunning():
            os.system('/usr/bin/python ' + DAEMON_PATH + ' stop')
            self.daemon_button.setText('Run')
        else:
            os.system('/usr/bin/python ' + DAEMON_PATH + ' start')
            self.daemon_button.setText('Stop')
            
    def loadPrefs(self):
        if self.settings.contains('refresh_interval'):
            self.refresh_interval.setValue(int(self.settings.value('refresh_interval')))
        #Load account
        self.accounts = []
        nb_accounts = self.settings.beginReadArray('accounts')
        for index in range(nb_accounts):
            self.settings.setArrayIndex(index)
            self.accounts.append(SSHSyncAccount(hostname=self.settings.value('hostname'), \
                port=int(self.settings.value('port')), \
                username=self.settings.value('username'), \
                password=self.settings.value('password'), \
                local_dir=self.settings.value('local_dir'), \
                remote_dir=self.settings.value('remote_dir')))
        self.settings.endArray()
    
    def savePrefs(self):
        self.settings.setValue('refresh_interval',self.refresh_interval.value())
        self.settings.beginWriteArray("accounts")
        for index,account in enumerate(self.accounts):
            self.settings.setArrayIndex(index)
            self.settings.setValue("hostname", account.hostname)
            self.settings.setValue("port", account.port )
            self.settings.setValue("username", account.username )
            self.settings.setValue("password",  account.password )
            self.settings.setValue("local_dir", account.local_dir )
            self.settings.setValue("remote_dir", account.remote_dir )
        self.settings.endArray()
        self.settings.sync()
     
    def closeEvent(self,widget,*args):
        self.savePrefs()
                     
    def setupGUI(self):
        global isMAEMO
        self.aWidget = QWidget(self)
        self._rmain_layout = QVBoxLayout(self.aWidget)
        
        self._main_layout = QGridLayout()
        self.aWidget.setSizePolicy( QSizePolicy.Expanding, QSizePolicy.Expanding)

        gridIndex = 0

        if self.isRunning():
            self.daemon_button = QPushButton('Stop')
        else:
            self.daemon_button = QPushButton('Run')
        self.daemon_button.clicked.connect(self.runorstop)
        
        self._main_layout.addWidget(self.daemon_button,gridIndex,0)

        self.show_log = QPushButton('Show logs')
        self.show_log.clicked.connect(self.showlog)
        self._main_layout.addWidget(self.show_log,gridIndex,1)
        gridIndex += 1                

        self._main_layout.addWidget(QLabel('Refresh interval (min)'),gridIndex,0)

        self.refresh_interval = QSpinBox()
        self.refresh_interval.setMinimum(5)
        self.refresh_interval.setMaximum(99999)
        self._main_layout.addWidget(self.refresh_interval,gridIndex,1)
        gridIndex += 1

        self.accounts_model = AccountsModel()
        self.accounts_view = AccountsView()
        self.accounts_view.clicked.connect(self.edit_account)
        self.accounts_view.setModel(self.accounts_model)
        self._rmain_layout.addLayout(self._main_layout)
        self.add_acc_button = QPushButton('Add account')
        self.add_acc_button.clicked.connect(self.add_account)
        self._rmain_layout.addWidget(self.add_acc_button)
        self._rmain_layout.addWidget(self.accounts_view)
        
        self.aWidget.setLayout(self._rmain_layout)
        self.setCentralWidget(self.aWidget)

    def showlog(self):
        import commands
        fileHandle = open('/tmp/khtsync.sh', 'wb')
        fileHandle.write('#!/bin/sh\n/usr/bin/tail -f /home/user/.khtsync.log\n')
        fileHandle.close()
        commands.getoutput("chmod +x /tmp/khtsync.sh")
        
        os.system('/usr/bin/osso-xterm /tmp/khtsync.sh')
        
    def add_account(self):
        self.accounts.append(SSHSyncAccount())
        self.accounts_model.set(self.accounts)
    
    def edit_account(self):
        for index in self.accounts_view.selectedIndexes():
            account_index = index.row()
        self.accountDlg = AccountDialog(self,account_index,self.accounts[account_index])
        self.accountDlg.save.connect(self.save_account)
        self.accountDlg.delete.connect(self.delete_account)
        self.accountDlg.show()

    def delete_account(self, index):
        del self.accounts[index]
        self.accounts_model.set(self.accounts)
        
    def save_account(self, index, hostname, port, username, password, local_dir, remote_dir):
        self.accounts[index].hostname = hostname
        self.accounts[index].username = username
        self.accounts[index].port = port
        self.accounts[index].password = password
        self.accounts[index].local_dir = local_dir
        self.accounts[index].remote_dir = remote_dir
        self.accounts_model.set(self.accounts)
        self.savePrefs()

    def setupMenu(self):
        helpMenu =  QMenu(self.tr("&Help"), self)
        self.menuBar().addMenu(helpMenu)
        helpMenu.addAction(self.tr("&About"), self.do_about)

    def do_about(self):
        self.about_win = KhtEditorAbout(self)
Exemplo n.º 22
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()