class Button(object): def __init__(self, view, attrs): super(Button, self).__init__() self.attrs = attrs self.renderer = CellRendererButton(attrs.get('string', _('Unknown'))) self.view = view self.renderer.connect('clicked', self.button_clicked) self.renderer.set_property('yalign', 0) @realized @CellCache.cache def setter(self, column, cell, store, iter): record = store.get_value(iter, 0) states = record.expr_eval(self.attrs.get('states', {})) if record.group.readonly or record.readonly: states['readonly'] = True invisible = states.get('invisible', False) cell.set_property('visible', not invisible) readonly = states.get('readonly', False) cell.set_property('sensitive', not readonly) parent = record.parent if record else None while parent: if parent.modified: cell.set_property('sensitive', False) break parent = parent.parent # TODO icon def button_clicked(self, widget, path): if not path: return True store = self.view.treeview.get_model() record = store.get_value(store.get_iter(path), 0) state_changes = record.expr_eval( self.attrs.get('states', {})) if state_changes.get('invisible') \ or state_changes.get('readonly'): return True widget.handler_block_by_func(self.button_clicked) try: self.view.screen.button(self.attrs) finally: widget.handler_unblock_by_func(self.button_clicked)
class Button(object): def __init__(self, view, attrs): super(Button, self).__init__() self.attrs = attrs self.renderer = CellRendererButton(attrs.get('string', _('Unknown'))) self.view = view self.renderer.connect('clicked', self.button_clicked) self.renderer.set_property('yalign', 0) @realized @CellCache.cache def setter(self, column, cell, store, iter): record = store.get_value(iter, 0) states = record.expr_eval(self.attrs.get('states', {})) if record.group.readonly or record.readonly: states['readonly'] = True invisible = states.get('invisible', False) cell.set_property('visible', not invisible) readonly = states.get('readonly', False) cell.set_property('sensitive', not readonly) parent = record.parent if record else None while parent: if parent.modified: cell.set_property('sensitive', False) break parent = parent.parent # TODO icon def button_clicked(self, widget, path): if not path: return True store = self.view.treeview.get_model() record = store.get_value(store.get_iter(path), 0) state_changes = record.expr_eval( self.attrs.get('states', {})) if state_changes.get('invisible') \ or state_changes.get('readonly'): return True widget.handler_block_by_func(self.button_clicked) try: self.view.screen.button(self.attrs) finally: widget.handler_unblock_by_func(self.button_clicked)