winSettings: get rid of camelcase.
[nephilim.git] / nephilim / winSettings.py
blob8986a1c7a948044240e83922a9c4ee96b8e5eec2
1 from PyQt4 import QtGui, QtCore
2 from PyQt4.QtCore import QVariant
3 import os
5 from misc import ORGNAME, APPNAME, Button, appIcon
6 import plugin
9 class SettingsWindow(QtGui.QWidget):
10 save_btn = None
11 close_btn = None
12 pluginlist = None
13 main_win = None
14 settings = None
15 settings_wg = []
17 class SettingsWidgetMPD(plugin.Plugin.SettingsWidget):
18 mpclient = None
19 host_txt = None
20 port_txt = None
21 lib_txt = None
22 update = None
23 outputs = None
25 def __init__(self, mpclient):
26 plugin.Plugin.SettingsWidget.__init__(self, None)
27 self.mpclient = mpclient
29 self.settings().beginGroup('MPD')
30 self.host_txt = QtGui.QLineEdit(self.settings().value('host', QVariant('localhost')).toString())
31 self.port_txt = QtGui.QLineEdit(self.settings().value('port', QVariant('6600')).toString())
32 self.lib_txt = QtGui.QLineEdit(self.settings().value('music_dir', QVariant(os.path.expanduser('~/music/'))).toString())
33 self.settings().endGroup()
35 self.update = QtGui.QPushButton('Update MPD database')
36 self.connect(self.update, QtCore.SIGNAL('clicked()'), self.update_db)
38 self.outputs = QtGui.QGroupBox('Audio outputs')
39 self.outputs.setLayout(QtGui.QVBoxLayout())
40 class Output(QtGui.QCheckBox):
41 id = None
42 mpclient = None
43 def __init__(self, text, mpclient, id):
44 QtGui.QCheckBox.__init__(self, text)
45 self.mpclient = mpclient
46 self.id = id
47 self.connect(self, QtCore.SIGNAL('stateChanged(int)'), self.change_state)
49 def change_state(self, state):
50 self.mpclient.set_output(self.id, state)
52 for output in self.mpclient.outputs():
53 box = Output(output['outputname'], self.mpclient, output['outputid'])
54 if output['outputenabled'] == '1':
55 box.setChecked(True)
56 else:
57 box.setChecked(False)
58 self.outputs.layout().addWidget(box)
60 self.setLayout(QtGui.QVBoxLayout())
61 self._add_widget(self.host_txt, 'Host', 'Host or socket to connect to')
62 self._add_widget(self.port_txt, 'Port', 'Port to use (empty when using sockets)')
63 self._add_widget(self.lib_txt, 'Music library', 'Path to music library')
64 self.layout().addWidget(self.update)
65 self.layout().addWidget(self.outputs)
67 def save_settings(self):
68 self.settings().beginGroup('MPD')
69 self.settings().setValue('host', QVariant(self.host_txt.text()))
70 self.settings().setValue('port', QVariant(self.port_txt.text()))
71 self.settings().setValue('music_dir', QVariant(self.lib_txt.text()))
72 self.settings().endGroup()
74 def update_db(self):
75 self.mpclient.update_db()
77 def __init__(self, main_win):
78 QtGui.QWidget.__init__(self, main_win, QtCore.Qt.Window)
79 self.settings = QtCore.QSettings(ORGNAME, APPNAME)
80 self.main_win = main_win
82 self.save_btn = Button('save all', self.save_clicked)
83 self.close_btn = Button('close', self.close_clicked)
85 tab_wg = QtGui.QTabWidget(self)
86 self.settings_wg.append(self.SettingsWidgetMPD(self.main_win.mpclient))
87 tab_wg.addTab(self.settings_wg[-1], 'MPD settings')
89 self.pluginlist = QtGui.QListWidget(self)
90 self.fill_pluginlist()
91 tab_wg.addTab(self.pluginlist, 'Plugins')
93 for plugin in self.main_win.plugins.loaded_plugins():
94 wg = plugin.get_settings_widget()
95 if wg:
96 self.settings_wg.append(wg)
97 tab_wg.addTab(self.settings_wg[-1], plugin.name())
99 self.setLayout(QtGui.QGridLayout())
100 self.layout().addWidget(tab_wg, 0, 0, 1, 2)
101 self.layout().addWidget(self.save_btn, 1, 0)
102 self.layout().addWidget(self.close_btn, 1, 1)
104 self.connect(self.pluginlist, QtCore.SIGNAL('itemChanged(QListWidgetItem*)'), self.plugin_checked)
106 self.setWindowIcon(QtGui.QIcon(appIcon))
107 self.setWindowTitle('Settings')
108 self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
109 self.center()
110 self.resize(800,400)
112 def fill_pluginlist(self):
113 self.pluginlist.clear()
114 for plugin in self.main_win.plugins.plugins():
115 item = QtGui.QListWidgetItem("%s\t%s"%(plugin.name(), plugin.info()))
116 if plugin.is_loaded():
117 item.setCheckState(QtCore.Qt.Checked)
118 else:
119 item.setCheckState(QtCore.Qt.Unchecked)
121 self.pluginlist.addItem(item)
123 def center(self):
124 screen = QtGui.QDesktopWidget().screenGeometry()
125 size = self.geometry()
126 self.move((screen.width()-size.width())/2, (screen.height()-size.height())/2+100)
128 def save_clicked(self):
129 for wg in self.settings_wg:
130 wg.save_settings()
132 def close_clicked(self):
133 self.close()
135 def plugin_checked(self, item):
136 toload = (item.checkState() == QtCore.Qt.Checked)
137 name = str(item.text()[0:str(item.text()).find('\t')])
138 if toload:
139 # refresh the plugin file
140 self.main_win.plugins.load(name)
141 self.fill_pluginlist()
142 self.main_win.restoreLayout()
143 else:
144 self.main_win.plugins.unload(name)
145 self.settings.setValue(name + '/load', QtCore.QVariant(toload))
147 def closeEvent(self, event):
148 self.settings_wg = None
149 self.main_win.wSettings = None