qpreferences.py

changeset 32
59da528bc470
parent 31
c869766e25ff
child 33
61809bb871bf
--- a/qpreferences.py	Fri Jan 25 20:51:56 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,141 +0,0 @@
-import os
-from PyQt4 import QtCore, QtGui, uic
-
-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(),
-              
-              }
-    t = v.userType()
-    return _cvrts[t](v)
-    
-class PreferenceItem(object):
-    _id = 0
-    def __init__(self, default=None, basetype=None, name=None, description=None):
-        self._default = default
-        self._basetype = basetype
-        if self._basetype is None:
-            self._basetype = self._default.__class__
-        self._id = "_pref%X"%self.__class__._id
-        self._name = name
-        self._description = description
-        self.__class__._id += 1
-
-    def __get__(self, obj, cls):
-        if obj is None:
-            return self
-        try:
-            return obj.getPref(self._id)
-        except Exception, e:
-            #print "humm", e
-            return None
-
-    def __set__(self, obj, value):
-        obj.setPref(self._id, value)
-        
-class AbstractPreferences(QtCore.QObject):
-    def __init__(self):
-        QtCore.QObject.__init__(self)
-        self._settings = QtCore.QSettings(QtCore.QSettings.UserScope,
-                                          self.ORGANISATION, self.APPLICATION)
-        self._prefs = {}
-        for k in dir(self.__class__):
-            item = getattr(self.__class__, k)
-            if isinstance(item, PreferenceItem):
-                self._prefs[item._id] = k            
-        
-    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 = self._settings.value(key, default)
-        return fromVariant(val)
-    
-    def setPref(self, key, value):
-        key = self._prefs.get(key, key)
-        self._settings.setValue(key, QtCore.QVariant(value))
-
-    def keys(self):
-        return [k for k in self._prefs.values() if not k.startswith('_')]
-
-    def getName(self, key):
-        item = getattr(self.__class__, key)
-        return item._name
-
-    def getDescription(self, key):
-        item = getattr(self.__class__, key)
-        return item._description
-    
-form_class, base_class = uic.loadUiType(os.path.join(os.path.dirname(__file__), "qpreferences_dialog.ui"))
-
-class PreferencesEditor(QtGui.QDialog, form_class):
-    def __init__(self, preferences, parent=None):
-        QtGui.QDialog.__init__(self, parent)
-        self.setupUi(self)
-        self._prefs = preferences
-        self.buildUI()
-
-    def buildUI(self):
-        w = self.centralFrame
-        g = QtGui.QGridLayout(w)
-        p = self._prefs
-        eds = {}
-        self._editors = eds
-        for i, k in enumerate(p.keys()):
-            name = p.getName(k)
-            if not name:
-                name = k
-            l = QtGui.QLabel(name, w)
-            g.addWidget(l, i, 0)
-            if p.getDescription(k):
-                l.setToolTip(p.getDescription(k))
-            
-            e = QtGui.QLineEdit(w)
-            eds[k] = e
-            g.addWidget(e, i, 1)
-            val = p.getPref(k)
-            if val is None:
-                val = ''
-            if not isinstance(val, basestring):
-                val = unicode(val)
-            e.setText(val)
-            
-        g.addWidget(QtGui.QWidget(w), i+1, 0)
-        g.setRowStretch(i+1,1)
-        g.setColumnStretch(1,1)
-
-    def accept(self):
-        p=self._prefs
-        for k in p.keys():
-            newval = unicode(self._editors[k].text())
-            p.setPref(k, newval)            
-        return QtGui.QDialog.accept(self)
-            
-if __name__ == '__main__':
-    class TestPreferences(AbstractPreferences):
-        ORGANISATION="Logilab"
-        APPLICATION="test_qpref_editor"
-
-        device = PreferenceItem('/dev/ttyUSB0', name="the device")
-        address = PreferenceItem(5, description="GPIB address of the plotter")
-        _pos = PreferenceItem(None)
-        _size = PreferenceItem(None)
-        _appState = PreferenceItem(None)
-        
-    a = QtGui.QApplication([])
-
-    prefs = TestPreferences()
-    w = PreferencesEditor(prefs)
-    w.show()
-    a.exec_()

mercurial