00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 from PyQt4.QtCore import *
00029 from PyQt4.QtGui import *
00030 from Koo import Rpc
00031
00032 class FieldsModel( QStandardItemModel ):
00033 def __init__(self):
00034 QStandardItemModel.__init__(self)
00035 self.rootItem = self.invisibleRootItem()
00036 self.setColumnCount( 1 )
00037 self.setHeaderData( 0, Qt.Horizontal, QVariant( _('Fields') ) )
00038
00039 def addField(self, text, data):
00040 item = QStandardItem( text )
00041 item.setData( QVariant(data) )
00042 self.rootItem.appendRow( item )
00043
00044 def load(self, fields, fieldsInfo = None, fieldsInvertedInfo = None):
00045 if fieldsInfo is None:
00046 fieldsInfo = {}
00047 if fieldsInvertedInfo is None:
00048 fieldsInvertedInfo = {}
00049 self.fieldsInfo = fieldsInfo
00050 self.fieldsInvertedInfo = fieldsInvertedInfo
00051 self.populate(fields)
00052
00053 def populate(self, fields, prefix_node='', prefix=None, prefix_value='', level=2):
00054 fields_order = fields.keys()
00055 fields_order.sort(lambda x,y: -cmp(fields[x].get('string', ''), fields[y].get('string', '')))
00056 if prefix == None:
00057 prefix = self.rootItem
00058 for field in fields_order:
00059 st_name = fields[field]['string'] or field
00060 node = QStandardItem(st_name)
00061 node.setData( QVariant(field) )
00062 if fields[field].get('required', False):
00063 font = node.font()
00064 font.setBold( True )
00065 node.setFont( font )
00066 prefix.appendRow( node )
00067
00068
00069 self.fieldsInvertedInfo[prefix_value+st_name] = prefix_node+field
00070 self.fieldsInfo[prefix_node+field] = fields[field]
00071 if prefix_node:
00072 self.fieldsInfo[prefix_node + field]['string'] = '%s%s' % (prefix_value, self.fieldsInfo[prefix_node + field]['string'])
00073
00074 if fields[field].get('relation', False) and level>0:
00075 fields2 = Rpc.session.execute('/object', 'execute', fields[field]['relation'], 'fields_get', False, Rpc.session.context)
00076 self.populate(fields2, prefix_node+field+'/', node, st_name+'/', level-1)