def __init__(self, field_name, model_name, treeview, attrs=None): super(Char, self).__init__() self.field_name = field_name self.model_name = model_name self.attrs = attrs or {} self.renderer = CellRendererText() self.renderer.connect('editing-started', self.editing_started) self.treeview = treeview
class Char(object): def __init__(self, field_name, model_name, treeview, attrs=None): super(Char, self).__init__() self.field_name = field_name self.model_name = model_name self.attrs = attrs or {} self.renderer = CellRendererText() self.renderer.connect('editing-started', self.editing_started) self.treeview = treeview @realized def setter(self, column, cell, store, iter): record = store.get_value(iter, 0) text = self.get_textual_value(record) if isinstance(cell, CellRendererToggle): cell.set_active(bool(text)) else: cell.set_sensitive(not (record.deleted or record.removed)) if isinstance(cell, (CellRendererText, CellRendererDate, CellRendererCombo)): cell.set_property('strikethrough', record.deleted) cell.set_property('text', text) fg_color = self.get_color(record) cell.set_property('foreground', fg_color) if fg_color == 'black': cell.set_property('foreground-set', False) else: cell.set_property('foreground-set', True) field = record[self.field_name] if self.attrs.get('type', field.attrs.get('type')) in \ ('float', 'integer', 'biginteger', 'boolean', 'numeric', 'float_time'): align = 1 else: align = 0 states = ('invisible',) if hasattr(self.treeview, 'editable') \ and self.treeview.editable: states = ('readonly', 'required', 'invisible') field.state_set(record, states=states) invisible = field.get_state_attrs(record).get('invisible', False) cell.set_property('visible', not invisible) if hasattr(self.treeview, 'editable') \ and self.treeview.editable: readonly = field.get_state_attrs(record).get('readonly', False) if invisible: readonly = True if not isinstance(cell, CellRendererToggle): bg_color = 'white' if not field.get_state_attrs(record).get('valid', True): bg_color = COLORS.get('invalid', 'white') elif bool(int( field.get_state_attrs(record).get('required', 0))): bg_color = COLORS.get('required', 'white') cell.set_property('background', bg_color) if bg_color == 'white': cell.set_property('background-set', False) else: cell.set_property('background-set', True) cell.set_property('foreground-set', not (record.deleted or record.removed)) if isinstance(cell, CellRendererToggle): cell.set_property('activatable', not readonly) elif isinstance(cell, (gtk.CellRendererProgress, CellRendererButton)): pass else: cell.set_property('editable', not readonly) cell.set_property('xalign', align) def get_color(self, record): return record.expr_eval(self.treeview.colors, check_load=False) def open_remote(self, record, create, changed=False, text=None, callback=None): raise NotImplementedError def get_textual_value(self, record): if not record: return '' return record[self.field_name].get_client(record) def value_from_text(self, record, text, callback=None): field = record[self.field_name] field.set_client(record, text) if callback: callback() def editing_started(self, cell, editable, path): return False