Library: fix setting modes.
[nephilim.git] / winSettings.py
blobc4db874e1f15de7aeca7cd80c613001e99a701bd
1 from PyQt4 import QtGui, QtCore
2 from PyQt4.QtCore import QVariant
3 import os
5 from misc import ORGNAME, APPNAME, Button, appIcon, doEvents
6 import plugins
9 class winSettings(QtGui.QWidget):
10 btnSave=None
11 btnClose=None
12 lstPlugins=None
14 winMain=None
15 settings = None
16 settings_wg = []
18 class SettingsWidgetMPD(QtGui.QWidget):
19 settings = None
20 host_txt = None
21 port_txt = None
22 lib_txt = None
24 def __init__(self):
25 QtGui.QWidget.__init__(self)
26 self.settings = QtCore.QSettings(ORGNAME, APPNAME)
28 self.settings.beginGroup('MPD')
29 self.host_txt = QtGui.QLineEdit(self.settings.value('host', QVariant('localhost')).toString())
30 self.port_txt = QtGui.QLineEdit(self.settings.value('port', QVariant('6600')).toString())
31 self.lib_txt = QtGui.QLineEdit(self.settings.value('music_dir', QVariant(os.path.expanduser('~/music/'))).toString())
32 self.settings.endGroup()
34 self.setLayout(QtGui.QVBoxLayout())
35 self.layout().addWidget(self.host_txt)
36 self.layout().addWidget(self.port_txt)
37 self.layout().addWidget(self.lib_txt)
39 def save_settings(self):
40 self.settings.beginGroup('MPD')
41 self.settings.setValue('host', QVariant(self.host_txt.text()))
42 self.settings.setValue('port', QVariant(self.port_txt.text()))
43 self.settings.setValue('music_dir', QVariant(self.lib_txt.text()))
44 self.settings.endGroup()
46 def __init__(self, winMain, parent=None):
47 QtGui.QWidget.__init__(self, parent)
48 self.settings = QtCore.QSettings(ORGNAME, APPNAME)
49 self.winMain = winMain
51 self.btnSave = Button('save all', self.onBtnSaveClick)
52 self.btnClose = Button('close', self.onBtnCloseClick)
54 tabWidget = QtGui.QTabWidget(parent)
55 self.settings_wg.append(self.SettingsWidgetMPD())
56 tabWidget.addTab(self.settings_wg[-1], 'MPD settings')
58 self.lstPlugins = QtGui.QListWidget(self)
59 tabWidget.addTab(self.lstPlugins, 'plugins')
60 for k,entry in plugins.listPlugins().iteritems():
61 plugin=entry[plugins.PLUGIN_INSTANCE]
62 if plugin:
63 wg = plugin.getSettingsWidget()
64 if wg:
65 self.settings_wg.append(plugin.getSettingsWidget())
66 tabWidget.addTab(self.settings_wg[-1], plugin.getName())
67 self.fillList()
69 self.setLayout(QtGui.QVBoxLayout())
70 self.layout().addWidget(tabWidget)
72 layoutButtons = QtGui.QHBoxLayout()
73 layoutButtons.addStretch()
74 layoutButtons.addWidget(self.btnSave)
75 layoutButtons.addWidget(self.btnClose)
76 self.layout().addLayout(layoutButtons)
78 self.connect(self.lstPlugins, QtCore.SIGNAL('itemChanged (QListWidgetItem*)'), self.onlstPluginItemChanged)
80 self.setWindowIcon(QtGui.QIcon(appIcon))
81 self.setWindowTitle('Settings')
82 self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
83 self.center()
84 self.resize(800,400)
85 doEvents()
87 def fillList(self):
88 self.lstPlugins.clear()
89 for k,entry in plugins.listPlugins().iteritems():
90 plugin=entry[plugins.PLUGIN_INSTANCE]
91 if plugin:
92 if entry[plugins.PLUGIN_MSG]:
93 item=QtGui.QListWidgetItem("%s\t%s"%(entry[plugins.PLUGIN_CLASS], entry[plugins.PLUGIN_MSG]))
94 item.setCheckState(QtCore.Qt.Unchecked)
95 item.setTextColor(QtCore.Qt.red)
96 else:
97 item=QtGui.QListWidgetItem("%s\t%s"%(entry[plugins.PLUGIN_CLASS], plugin.getInfo()))
98 if plugin.isLoaded():
99 item.setCheckState(QtCore.Qt.Checked)
100 else:
101 item.setCheckState(QtCore.Qt.Unchecked)
103 if self.settings.value(plugin.getName() + '/load') == None:
104 # load new plugins by default
105 item.setTextColor(QtCore.Qt.blue)
106 self.settings.setValue(plugin.getName() + '/load', QtCore.QVariant(True))
108 else:
109 item=QtGui.QListWidgetItem("%s\t%s"%(entry[plugins.PLUGIN_CLASS], entry[plugins.PLUGIN_MSG]))
110 item.setCheckState(QtCore.Qt.Unchecked)
111 item.setTextColor(QtCore.Qt.red)
112 self.lstPlugins.addItem(item)
114 def center(self):
115 screen = QtGui.QDesktopWidget().screenGeometry()
116 size = self.geometry()
117 self.move((screen.width()-size.width())/2, (screen.height()-size.height())/2+100)
119 def onBtnSaveClick(self):
120 for wg in self.settings_wg:
121 wg.save_settings()
123 def onBtnCloseClick(self):
124 self.close()
125 def onlstPluginItemChanged(self, item):
126 # check here if we have to load or unload the plugin!
127 toload = (item.checkState() == QtCore.Qt.Checked)
128 className=str(item.text()[0:str(item.text()).find('\t')])
129 if toload:
130 # refresh the plugin file
131 plugin=plugins.loadPlugin(className, self.winMain)
132 if plugin:
133 plugin.load()
134 self.fillList()
135 self.winMain.restoreLayout()
136 else:
137 plugin=plugins.getPlugin(className)
138 if plugin:
139 plugin.unload()
140 if plugin:
141 self.settings.setValue(plugin.getName() + '/load', QtCore.QVariant(toload))
142 def closeEvent(self, event):
143 map(lambda entry: entry[plugins.PLUGIN_INSTANCE] and entry[plugins.PLUGIN_INSTANCE].resetSettingCache(), plugins.listPlugins().values())
144 self.settings_wg = None
145 self.winMain.wSettings=None