8.2 Attribute edition : the createEditor execution

When clicking an attribute in a creation/edition dialog box, the createEditor class method is executed. The signature is the following :

def createEditor(cls, xattribute, parent, xobject, value, text)
where cls is the current class, xattribute is the xattribute corresponding to the item edited, parent is the parent qt widget. The xobject is quite special. If it is an object edition, this attribute contains the object being edited, if it is an object creation, this attribute contains a dictionnary whom keys are the attributes names already present and values are the value founded in the dialog edition box. It allows to deals with the dependencies between attributes at gui level. value attribute contains the current value or None if not already setted and text attribute contains the current text or None if not already setted.

The default implementation of createEditor class method coded in XObject class do nearly nothing ... it's only called the createEditor method on the xattribute object with the following signature:

def createEditor(self, cls, parent, xobject, value, text)
where self is the XAttribute instance and other attributes are the same as described previously.

The default implementation of createEditor method is coded in XAttribute class. It does nearly nothing ... it's only called the createEditor method on the xtype object contained in the xattribute object with the following signature:

def createEditor(self, xattribute, cls, parent, xobject, value, text)
where self is now an instance of XType class. The default implementation is coded in XType class and create the default behaviour i.e. a QLineEdit.

All this mechanism provide a way to intercept easily the way that the editors are created. A usual configuration is to define his own XType subclass and re-implement the createEditor method for this class. For instance :

from xdata import *

class MyXInstance(XInstance):

    def createEditor(self, *args, **kwargs):
        ## do before job
        editor = super(MyXInstance, self).createEditor(*args, **kwargs)
        ## do after job
        ## return the editor !
        return editor

    pass