SF.net SVN: fclient:[797] trunk/fclient/src/fclient/impl/lib/qt4ex/lib/ settings.py
Status: Pre-Alpha
Brought to you by:
jurner
|
From: <jU...@us...> - 2008-07-28 12:18:34
|
Revision: 797
http://fclient.svn.sourceforge.net/fclient/?rev=797&view=rev
Author: jUrner
Date: 2008-07-28 12:18:41 +0000 (Mon, 28 Jul 2008)
Log Message:
-----------
added a controler to associate widgets to settings
Modified Paths:
--------------
trunk/fclient/src/fclient/impl/lib/qt4ex/lib/settings.py
Modified: trunk/fclient/src/fclient/impl/lib/qt4ex/lib/settings.py
===================================================================
--- trunk/fclient/src/fclient/impl/lib/qt4ex/lib/settings.py 2008-07-28 12:18:20 UTC (rev 796)
+++ trunk/fclient/src/fclient/impl/lib/qt4ex/lib/settings.py 2008-07-28 12:18:41 UTC (rev 797)
@@ -166,6 +166,7 @@
"""
settings = self.settingsObject()
settings.beginGroup(self._key_)
+ mySettings = {}
try:
for name in self._settingsOrder:
typeSetting = self.type(name)
@@ -181,10 +182,12 @@
obj, ok = tools.castVariant(v, typeSetting)
else:
obj, ok = getattr(self, 'to' + typeSetting)(settings, name, v)
- self._settingsDict[name].value = obj if ok else self.default(name)
+ mySettings[name] = obj if ok else self.default(name)
+ #self._settingsDict[name].value = obj if ok else self.default(name)
finally:
settings.endGroup()
self.finalizeSettingsObject(settings)
+ self.setValues(**mySettings)
return self
@@ -389,5 +392,100 @@
return string, True
return None, False
+#**********************************************************************************
+#
+#**********************************************************************************
+class SettingsControler(QtCore.QObject):
+ """associates widgets to settings and automatically adjusts settings according to widget signals
+
+ @signal: isDirty(bool) . emitted when the dirty status of the controler changes
+
+
+ sample::
+ class MySettings(qt4ex.lib.settings.SettingsBase):
+ _key_ = 'MySettingsKey'
+ _settings_ = (
+ ('MySetting1', 'Bool', QtCore.QString('MyDefaultValue')),
+ )
+
+ mySettings = MySettings()
+ myControler = SettingsControler(mySettings)
+ myControler.addLineEdit(myLineEdit, 'MySetting1')
+
+ myObject.connect(myControler, QtCore.SIGNAL('isDirty(bool)', myObject.whatever)
+
+ """
+ def __init__(self, settings, parent=None):
+ QtCore.QObject.__init__(self, parent)
+ self.dirtyObjects = []
+ self.objects = {}
+ self.settings = settings
+
+ #########################
+ ## methods
+ #########################
+ def addLineEdit(self, lineEdit, settingName):
+ """adds a QLineEdit as controler for the specified setting"""
+ self.objects[lineEdit] = settingName
+ lineEdit.setText(self.settings.value(settingName))
+ self.connect(lineEdit, QtCore.SIGNAL('textChanged(const QString &)'), self.onLineEditTextChanged)
+ def addSpinBox(self, spinBox, settingName):
+ """adds a QSpinBox as controler for the specified setting"""
+ self.objects[spinBox] = settingName
+ spinBox.setValue(self.settings.value(settingName))
+ self.connect(spinBox, QtCore.SIGNAL('valueChanged(int)'), self.onSpinBoxValueChanged)
+
+ def apply(self):
+ """applies the values of the controled widgets to the settings object"""
+ settings = {}
+ for obj, settingName in self.objects.items():
+ if isinstance(obj, QtGui.QLineEdit):
+ value = obj.text()
+ elif isinstance(obj, QtGui.QSpinBox):
+ value = obj.value()
+ settings[settingName] = value
+
+ del self.dirtyObjects[:]
+ self.settings.setValues(**settings)
+ self.emit(QtCore.SIGNAL('isDirty(bool)'), False)
+ return True
+
+ def restoreDefaults(self):
+ """resores the default settings and updates the values of the controlled widgets accordingly"""
+ for obj, settingName in self.objects.items():
+ value = self.settings.default(settingName)
+ if isinstance(obj, QtGui.QLineEdit):
+ obj.setText(value)
+ elif isinstance(obj, QtGui.QSpinBox):
+ obj.setValue(value)
+
+ del self.dirtyObjects[:]
+ self.emit(QtCore.SIGNAL('isDirty(bool)'), False)
+ return True
+
+ #########################
+ ## event handlers
+ #########################
+ def onLineEditTextChanged(self, text):
+ lineEdit = self.sender()
+ settingName = self.objects[lineEdit]
+ if lineEdit.text() == self.settings.value(settingName):
+ if lineEdit in self.dirtyObjects:
+ self.dirtyObjects.remove(lineEdit)
+ else:
+ if lineEdit not in self.dirtyObjects:
+ self.dirtyObjects.append(lineEdit)
+ self.emit(QtCore.SIGNAL('isDirty(bool)'), bool(self.dirtyObjects))
+
+ def onSpinBoxValueChanged(self, n):
+ spinBox= self.sender()
+ settingName = self.objects[spinBox]
+ if spinBox.value() == self.settings.value(settingName):
+ if spinBox in self.dirtyObjects:
+ self.dirtyObjects.remove(spinBox)
+ else:
+ if spinBox not in self.dirtyObjects:
+ self.dirtyObjects.append(spinBox)
+ self.emit(QtCore.SIGNAL('isDirty(bool)'), bool(self.dirtyObjects))
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|