diff -r 8becd52c2171 -r 1bbea188a7e5 qt4/qpreferences.py --- a/qt4/qpreferences.py Mon Feb 04 19:49:48 2008 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,150 +0,0 @@ -import os -from PyQt4 import QtCore, QtGui, uic -from tools import AbstractRegister - -def fromVariant(v): - _cvrts = {0: lambda x:None, - 1: lambda x:x.toBool(), - 2: lambda x:x.toInt()[0], - 6: lambda x:x.toDouble()[0], - 10: lambda x:unicode(x.toString()), - 12: lambda x:x.toByteArray(), - 21: lambda x:x.toSize(), - 22: lambda x:x.toSizeF(), - 25: lambda x:x.toPoint(), - 26: lambda x:x.toPointF(), - 64: lambda x:QtGui.QFont(x), - 67: lambda x:QtGui.QColor(x), - } - t = v.userType() - return _cvrts[t](v) - -class PreferenceMetaclass(type): - _widgets = {} - def __init__(cls, name, bases, dct): - # called at class creation - super(type, cls).__init__(name, bases, dct) - if name != "BaseItem": - ItemRegister().add(cls) - -class BaseItem(object): - #__metaclass__ = PreferenceMetaclass - _id = 0 - def __init__(self, default=None, name=None, description=None, group=None): - self._default = default - self._id = BaseItem._id - self._name = name - self._description = description - self._group = group - BaseItem._id += 1 - - def validate(self, value): - return True - - def __get__(self, obj, cls): - if obj is None: #when called from the class, return the Item itself - return self - try: - return obj.getPref(self._id) - except Exception, e: - return None - - def __set__(self, obj, value): - obj.setPref(self._id, value) - -class ItemRegister(AbstractRegister): - _registered_type = BaseItem - getItem = AbstractRegister.get_class - -class PointItem(BaseItem): - _type = QtCore.QPoint - -class SizeItem(BaseItem): - _type = QtCore.QSize - -class ByteArrayItem(BaseItem): - _type = QtCore.QByteArray - -class UnicodeItem(BaseItem): - _type = unicode - def validate(self, value): - return isinstance(value, basestring) - -class IntItem(BaseItem): - _type = int - def __init__(self, default=None, name=None, description=None, group=None, min=None, max=None): - BaseItem.__init__(self, default, name, description, group) - self._min = min - self._max = max - - def validate(self, value): - try: - value = self._type(value) - except: - return False - if self._min is not None and valueself._max: - return False - return True - -class ColorItem(BaseItem): - _type = QtGui.QColor - - def validate(self, value): - try: - self._type(value) - return True - except: - return False - -class AbstractPreferences(QtCore.QObject): - def __init__(self): - QtCore.QObject.__init__(self) - self._settings = QtCore.QSettings(QtCore.QSettings.UserScope, - self.ORGANISATION, self.APPLICATION) - self._prefs = {} - self.groups = [] - keys = [] - for k in dir(self.__class__): - item = self.getItem(k) - if isinstance(item, BaseItem): - keys.append((k,item)) - keys.sort(key=lambda x: x[1]._id) - for k, item in keys: - self._prefs[item._id] = k - if item._group not in self.groups: - self.groups.append(item._group) - - def getItem(self, key): - return getattr(self.__class__, key) - #return self._prefs.get(key, None) - - def getPref(self, key): - key = self._prefs.get(key, key) - default = getattr(self.__class__, key)._default - if default is not None: - default = QtCore.QVariant(default) - else: - default = QtCore.QVariant() - val = fromVariant(self._settings.value(key, default)) - return val - - def setPref(self, key, value): - key = self._prefs.get(key, key) - self._settings.setValue(key, QtCore.QVariant(value)) - - def keys(self, group=None): - return [k for k in self._prefs.values() if not k.startswith('_') and self.getItem(k)._group == group] - - def getName(self, key): - item = getattr(self.__class__, key) - return item._name - - def getDescription(self, key): - item = getattr(self.__class__, key) - return item._description - - def __getitem__(self, key): - return getattr(self, key) -