From c85d62d9f9a479468827fd7f09ded2fa878a4188 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sun, 15 Mar 2009 17:20:27 +0100 Subject: settings_win->settings_wg for consistency reasons. --- nephilim/settings_wg.py | 166 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 nephilim/settings_wg.py (limited to 'nephilim/settings_wg.py') diff --git a/nephilim/settings_wg.py b/nephilim/settings_wg.py new file mode 100644 index 0000000..6936548 --- /dev/null +++ b/nephilim/settings_wg.py @@ -0,0 +1,166 @@ +from PyQt4 import QtGui, QtCore +from PyQt4.QtCore import QVariant +import os + +from misc import Button +import plugin + + +class SettingsWidget(QtGui.QWidget): + save_btn = None + close_btn = None + pluginlist = None + main_win = None + settings = None + settings_wg = [] + + class SettingsWidgetMPD(plugin.Plugin.SettingsWidget): + mpclient = None + host_txt = None + port_txt = None + pass_txt = None + lib_txt = None + update = None + outputs = None + + def __init__(self, mpclient): + plugin.Plugin.SettingsWidget.__init__(self, None) + self.mpclient = mpclient + + self.settings().beginGroup('MPD') + self.host_txt = QtGui.QLineEdit(self.settings().value('host', QVariant('localhost')).toString()) + self.port_txt = QtGui.QLineEdit(self.settings().value('port', QVariant('6600')).toString()) + self.pass_txt = QtGui.QLineEdit(self.settings().value('password').toString()) + self.pass_txt.setEchoMode(QtGui.QLineEdit.Password) + self.lib_txt = QtGui.QLineEdit(self.settings().value('music_dir', QVariant(os.path.expanduser('~/music/'))).toString()) + self.settings().endGroup() + + self.update = QtGui.QPushButton('Update MPD database') + self.connect(self.update, QtCore.SIGNAL('clicked()'), self.update_db) + + self.outputs = QtGui.QGroupBox('Audio outputs') + self.outputs.setLayout(QtGui.QVBoxLayout()) + class Output(QtGui.QCheckBox): + id = None + mpclient = None + def __init__(self, text, mpclient, id): + QtGui.QCheckBox.__init__(self, text) + self.mpclient = mpclient + self.id = id + self.connect(self, QtCore.SIGNAL('stateChanged(int)'), self.change_state) + + def change_state(self, state): + self.mpclient.set_output(self.id, state) + + for output in self.mpclient.outputs(): + box = Output(output['outputname'], self.mpclient, output['outputid']) + if output['outputenabled'] == '1': + box.setChecked(True) + else: + box.setChecked(False) + self.outputs.layout().addWidget(box) + + self.setLayout(QtGui.QVBoxLayout()) + self._add_widget(self.host_txt, 'Host', 'Host or socket to connect to') + self._add_widget(self.port_txt, 'Port', 'Port to use (empty when using sockets)') + self._add_widget(self.pass_txt, 'Password', 'Password') + self._add_widget(self.lib_txt, 'Music library', 'Path to music library') + self.layout().addWidget(self.update) + self.layout().addWidget(self.outputs) + + def save_settings(self): + reconnect = False + + self.settings().beginGroup('MPD') + if self.host_txt.text() != self.settings().value('host').toString(): + self.settings().setValue('host', QVariant(self.host_txt.text())) + reconnect = True + if self.port_txt.text() != self.settings().value('port').toString(): + self.settings().setValue('port', QVariant(self.port_txt.text())) + reconnect = True + if self.pass_txt.text() != self.settings().value('password').toString(): + self.settings().setValue('password', QVariant(self.pass_txt.text())) + if self.pass_txt.text(): + self.mpclient.password(self.pass_txt.text()) + self.settings().setValue('music_dir', QVariant(self.lib_txt.text())) + self.settings().endGroup() + + if reconnect: + self.mpclient.disconnect_mpd() + self.mpclient.connect_mpd(str(self.host_txt.text()), str(self.port_txt.text()), str(self.pass_txt.text())) + + def update_db(self): + self.mpclient.update_db() + + def __init__(self, main_win): + QtGui.QWidget.__init__(self, main_win, QtCore.Qt.Window) + self.settings = QtCore.QSettings() + self.main_win = main_win + + self.save_btn = Button('save all', self.save_clicked) + self.close_btn = Button('close', self.close_clicked) + + tab_wg = QtGui.QTabWidget(self) + self.settings_wg.append(self.SettingsWidgetMPD(self.main_win.mpclient)) + tab_wg.addTab(self.settings_wg[-1], 'MPD settings') + + self.pluginlist = QtGui.QListWidget(self) + self.fill_pluginlist() + tab_wg.addTab(self.pluginlist, 'Plugins') + + for plugin in self.main_win.plugins.loaded_plugins(): + wg = plugin.get_settings_widget() + if wg: + self.settings_wg.append(wg) + tab_wg.addTab(self.settings_wg[-1], plugin.name()) + + self.setLayout(QtGui.QGridLayout()) + self.layout().addWidget(tab_wg, 0, 0, 1, 2) + self.layout().addWidget(self.save_btn, 1, 0) + self.layout().addWidget(self.close_btn, 1, 1) + + self.connect(self.pluginlist, QtCore.SIGNAL('itemChanged(QListWidgetItem*)'), self.plugin_checked) + + self.setWindowTitle('Settings') + self.setAttribute(QtCore.Qt.WA_DeleteOnClose) + self.center() + self.resize(800,400) + + def fill_pluginlist(self): + self.pluginlist.clear() + for plugin in self.main_win.plugins.plugins(): + item = QtGui.QListWidgetItem("%s\t%s"%(plugin.name(), plugin.info())) + if plugin.is_loaded(): + item.setCheckState(QtCore.Qt.Checked) + else: + item.setCheckState(QtCore.Qt.Unchecked) + + self.pluginlist.addItem(item) + + def center(self): + screen = QtGui.QDesktopWidget().screenGeometry() + size = self.geometry() + self.move((screen.width()-size.width())/2, (screen.height()-size.height())/2+100) + + def save_clicked(self): + for wg in self.settings_wg: + wg.save_settings() + + def close_clicked(self): + self.close() + + def plugin_checked(self, item): + toload = (item.checkState() == QtCore.Qt.Checked) + name = str(item.text()[0:str(item.text()).find('\t')]) + if toload: + # refresh the plugin file + self.main_win.plugins.load(name) + self.fill_pluginlist() + self.main_win.restoreLayout() + else: + self.main_win.plugins.unload(name) + self.settings.setValue(name + '/load', QtCore.QVariant(toload)) + + def closeEvent(self, event): + self.settings_wg = None + self.main_win.wSettings = None -- cgit v1.2.3