1 from PyQt4
import QtGui
, QtCore
2 from PyQt4
.QtCore
import QVariant
5 from misc
import ORGNAME
, APPNAME
, Button
, appIcon
9 class SettingsWindow(QtGui
.QWidget
):
17 class SettingsWidgetMPD(plugin
.Plugin
.SettingsWidget
):
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
):
43 def __init__(self
, text
, mpclient
, id):
44 QtGui
.QCheckBox
.__init
__(self
, text
)
45 self
.mpclient
= mpclient
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':
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()
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()
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
)
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
)
119 item
.setCheckState(QtCore
.Qt
.Unchecked
)
121 self
.pluginlist
.addItem(item
)
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
:
132 def close_clicked(self
):
135 def plugin_checked(self
, item
):
136 toload
= (item
.checkState() == QtCore
.Qt
.Checked
)
137 name
= str(item
.text()[0:str(item
.text()).find('\t')])
139 # refresh the plugin file
140 self
.main_win
.plugins
.load(name
)
141 self
.fill_pluginlist()
142 self
.main_win
.restoreLayout()
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