def __init__(self, model_name, view_ids=None, mode=None, context=None, views_preload=None, domain=None, row_activate=None, limit=None, readonly=False, exclude_field=None, order=None, search_value=None, tab_domain=None, alternate_view=False): if view_ids is None: view_ids = [] if mode is None: mode = ['tree', 'form'] if views_preload is None: views_preload = {} if domain is None: domain = [] self.limit = limit or CONFIG['client.limit'] self.offset = 0 super(Screen, self).__init__() self.readonly = readonly if not MODELACCESS[model_name]['write']: self.readonly = True self.search_count = 0 if not row_activate: self.row_activate = self.default_row_activate else: self.row_activate = row_activate self.domain = domain self.size_limit = None self.views_preload = views_preload self.model_name = model_name self.views = [] self.view_ids = view_ids[:] self.parent = None self.parent_name = None self.exclude_field = exclude_field self.filter_widget = None self.tree_states = collections.defaultdict( lambda: collections.defaultdict(lambda: None)) self.tree_states_done = set() self.__group = None self.new_group(context or {}) self.__current_record = None self.current_record = None self.screen_container = ScreenContainer(tab_domain) self.screen_container.alternate_view = alternate_view self.widget = self.screen_container.widget_get() self.__current_view = 0 self.search_value = search_value self.fields_view_tree = {} self.order = order self.view_to_load = [] self._domain_parser = {} self.pre_validate = False self.view_to_load = mode[:] if view_ids or mode: self.switch_view()
def __init__(self, model_name, view_ids=None, mode=None, context=None, views_preload=None, domain=None, row_activate=None, limit=None, readonly=False, exclude_field=None, order=None, search_value=None, tab_domain=None, context_model=None, alternate_view=False): if view_ids is None: view_ids = [] if mode is None: mode = ['tree', 'form'] if views_preload is None: views_preload = {} if domain is None: domain = [] self.limit = limit or CONFIG['client.limit'] self.offset = 0 super(Screen, self).__init__() self.readonly = readonly if not (MODELACCESS[model_name]['write'] or MODELACCESS[model_name]['create']): self.readonly = True self.search_count = 0 if not row_activate: self.row_activate = self.default_row_activate else: self.row_activate = row_activate self.domain = domain self.size_limit = None self.views_preload = views_preload self.model_name = model_name self.views = [] self.view_ids = view_ids[:] self.parent = None self.parent_name = None self.exclude_field = exclude_field self.filter_widget = None self.tree_states = collections.defaultdict( lambda: collections.defaultdict(lambda: None)) self.tree_states_done = set() self.__group = None self.__current_record = None self.new_group(context or {}) self.current_record = None self.screen_container = ScreenContainer(tab_domain) self.screen_container.alternate_view = alternate_view self.widget = self.screen_container.widget_get() self.context_screen = None if context_model: self.context_screen = Screen(context_model, mode=['form'], context=context) self.context_screen.new() context_widget = self.context_screen.widget def walk_descendants(widget): yield widget if not hasattr(widget, 'get_children'): return for child in widget.get_children(): for widget in walk_descendants(child): yield widget for widget in reversed(list(walk_descendants(context_widget))): if isinstance(widget, gtk.Entry): widget.connect_after('activate', self.screen_container.activate) elif isinstance(widget, gtk.CheckButton): widget.connect_after('toggled', self.screen_container.activate) def remove_bin(widget): assert isinstance(widget, (gtk.ScrolledWindow, gtk.Viewport)) parent = widget.parent parent.remove(widget) child = widget.get_child() while isinstance(child, (gtk.ScrolledWindow, gtk.Viewport)): child = child.get_child() child.parent.remove(child) parent.add(child) return child # Remove first level Viewport and ScrolledWindow to fill the Vbox for widget in [ self.context_screen.screen_container.viewport, self.context_screen.current_view.widget.get_children()[0], ]: remove_bin(widget) self.screen_container.filter_vbox.pack_start(context_widget, expand=False, fill=True) self.screen_container.filter_vbox.reorder_child(context_widget, 0) self.context_screen.widget.show() self.__current_view = 0 self.search_value = search_value self.fields_view_tree = {} self.order = order self.view_to_load = [] self._domain_parser = {} self.pre_validate = False self.view_to_load = mode[:] if view_ids or mode: self.switch_view()
def __init__(self, model_name, **attributes): context = attributes.get('context', {}) self.limit = attributes.get('limit', CONFIG['client.limit']) self.offset = 0 super(Screen, self).__init__() self.readonly = attributes.get('readonly', False) if not (MODELACCESS[model_name]['write'] or MODELACCESS[model_name]['create']): self.readonly = True self.search_count = 0 if not attributes.get('row_activate'): self.row_activate = self.default_row_activate else: self.row_activate = attributes['row_activate'] self.domain = attributes.get('domain', []) self.context_domain = attributes.get('context_domain') self.size_limit = None self.views_preload = attributes.get('views_preload', {}) self.model_name = model_name self.views = [] self.view_ids = attributes.get('view_ids', [])[:] self.parent = None self.parent_name = None self.exclude_field = attributes.get('exclude_field') self.filter_widget = None self.tree_states = collections.defaultdict( lambda: collections.defaultdict(lambda: None)) self.tree_states_done = set() self.__group = None self.new_group(context or {}) self.__current_record = None self.current_record = None self.screen_container = ScreenContainer(attributes.get('tab_domain')) self.screen_container.alternate_view = attributes.get( 'alternate_view', False) self.widget = self.screen_container.widget_get() self.context_screen = None if attributes.get('context_model'): self.context_screen = Screen( attributes['context_model'], mode=['form'], context=context) self.context_screen.new() context_widget = self.context_screen.widget def walk_descendants(widget): yield widget if not hasattr(widget, 'get_children'): return for child in widget.get_children(): for widget in walk_descendants(child): yield widget for widget in reversed(list(walk_descendants(context_widget))): if isinstance(widget, Gtk.Entry): widget.connect_after( 'activate', self.screen_container.activate) elif isinstance(widget, Gtk.CheckButton): widget.connect_after( 'toggled', self.screen_container.activate) def remove_bin(widget): assert isinstance(widget, (Gtk.ScrolledWindow, Gtk.Viewport)) parent = widget.get_parent() parent.remove(widget) child = widget.get_child() while isinstance(child, (Gtk.ScrolledWindow, Gtk.Viewport)): child = child.get_child() child.get_parent().remove(child) parent.add(child) return child # Remove first level Viewport and ScrolledWindow to fill the Vbox for widget in [ self.context_screen.screen_container.viewport, self.context_screen.current_view.widget.get_children()[0], ]: remove_bin(widget) self.screen_container.filter_vbox.pack_start( context_widget, expand=False, fill=True, padding=0) self.screen_container.filter_vbox.reorder_child( context_widget, 0) self.context_screen.widget.show() self.__current_view = 0 self.search_value = attributes.get('search_value') self.fields_view_tree = {} self.order = self.default_order = attributes.get('order') self.view_to_load = [] self._domain_parser = {} self.pre_validate = False mode = attributes.get('mode') if mode is None: mode = ['tree', 'form'] self.view_to_load = mode[:] if self.view_ids or self.view_to_load: self.switch_view() self.count_tab_domain()