def createEditor( self, parent, option, index ):
        """
        Creates a new editor for the given index parented to the inputed widget.
        
        :param      parent | <QWidget>
                    option | <QStyleOption>
                    index  | <QModelIndex>
        
        :return     <QWidget> || None
        """
        # determine the editor to use for the inputed index based on the
        # table column
        item   = self.parent().itemFromIndex(index)
        column = self.column(index)
        
        # edit based on column preferences
        if column and \
           not column.isReadOnly() and \
           isinstance(item, XOrbRecordItem):
            plugin = self.plugin(column)
            if not plugin:
                return None
            
            return plugin.createEditor(parent, item.record(), column)
        
        return super(XOrbTreeWidgetDelegate, self).createEditor(parent,
                                                                option,
                                                                index)