def __init__(self, controller=None, parameters=None): super(Finder, self).__init__(controller=controller) self.close_on_package_load = False self.contextual_actions = [] self.package = controller.package self.controller = controller self.model = DetailedTreeModel(controller=controller, package=self.package) # 640 / 3 self.column_width = 210 self.rootcolumn = None self.widget = self.build_widget()
def update_model(self, package=None): if package is None: package = self.controller.package # Reset to the rootcolumn cb = self.rootcolumn.next while cb is not None: cb.widget.destroy() cb = cb.next self.rootcolumn.next = None self.package = package self.model = DetailedTreeModel(controller=self.controller, package=package) # Update the rootcolumn element self.rootcolumn.update(self.model[0]) return True
def __init__(self, controller=None, parameters=None): super(Finder, self).__init__(controller=controller) self.close_on_package_load = False self.contextual_actions = [] self.package=controller.package self.controller=controller self.model=DetailedTreeModel(controller=controller, package=self.package) # 640 / 3 self.column_width=210 self.rootcolumn=None self.widget=self.build_widget()
def update_model(self, package=None): if package is None: package = self.controller.package # Reset to the rootcolumn cb=self.rootcolumn.next while cb is not None: cb.widget.destroy() cb=cb.next self.rootcolumn.next=None self.package = package self.model=DetailedTreeModel(controller=self.controller, package=package) # Update the rootcolumn element self.rootcolumn.update(self.model[0]) return True
class Finder(AdhocView): view_name = _("Package finder") view_id = 'finder' tooltip=_("Column-based package finder") def __init__(self, controller=None, parameters=None): super(Finder, self).__init__(controller=controller) self.close_on_package_load = False self.contextual_actions = [] self.package=controller.package self.controller=controller self.model=DetailedTreeModel(controller=controller, package=self.package) # 640 / 3 self.column_width=210 self.rootcolumn=None self.widget=self.build_widget() def refresh(self): c=self.rootcolumn c.update(c.node) while c.next is not None: c=c.next c.update(c.node) return True def update_element(self, element=None, event=None): if event.endswith('Create'): self.model.update_element(element, created=True) self.refresh() elif event.endswith('EditEnd'): self.model.update_element(element, created=False) self.refresh() elif event.endswith('Delete'): self.model.remove_element(element) cb=self.rootcolumn.next while cb is not None: if [ r for r in cb.liststore if r[ModelColumn.COLUMN_NODE][DetailedTreeModel.COLUMN_ELEMENT] == element ]: # The element is present in the list of # children. Remove the next column if necessary # and update the children list. cb.update(node=cb.node) if cb.next is not None and cb.next.node[DetailedTreeModel.COLUMN_ELEMENT] == element: cb.next.close() cb=cb.next #self.update_model(element.rootPackage) else: return "Unknown event %s" % event return def update_annotation(self, annotation=None, event=None): """Update the annotation. """ self.update_element(annotation, event) return def update_relation(self, relation=None, event=None): """Update the relation. """ self.update_element(relation, event) return def update_view(self, view=None, event=None): self.update_element(view, event) return def update_query(self, query=None, event=None): self.update_element(query, event) return def update_schema(self, schema=None, event=None): self.update_element(schema, event) return def update_annotationtype(self, annotationtype=None, event=None): self.update_element(annotationtype, event) return def update_relationtype(self, relationtype=None, event=None): """Update the relationtype """ self.update_element(relationtype, event) return def update_resource(self, resource=None, event=None): self.update_element(resource, event) return def update_model(self, package=None): if package is None: package = self.controller.package # Reset to the rootcolumn cb=self.rootcolumn.next while cb is not None: cb.widget.destroy() cb=cb.next self.rootcolumn.next=None self.package = package self.model=DetailedTreeModel(controller=self.controller, package=package) # Update the rootcolumn element self.rootcolumn.update(self.model[0]) return True def clicked_callback(self, columnbrowser, node): if columnbrowser is None: # We selected the rootcolumn. Delete the next ones cb=self.rootcolumn.next while cb is not None: cb.widget.destroy() cb=cb.next self.rootcolumn.next=None elif columnbrowser.next is None: t=type(node[DetailedTreeModel.COLUMN_ELEMENT]) clazz=CLASS2COLUMN.get(t, ModelColumn) # Create a new columnbrowser col=clazz(controller=self.controller, node=node, callback=self.clicked_callback, parent=columnbrowser) col.widget.set_property("width-request", self.column_width) self.hbox.pack_start(col.widget, expand=False) col.widget.show_all() columnbrowser.next=col else: # Delete all next+1 columns (we reuse the next one) cb=columnbrowser.next.next if cb is not None: cb.close() # Check if the column is still appropriate for the node clazz=CLASS2COLUMN.get(type(node[DetailedTreeModel.COLUMN_ELEMENT]), ModelColumn) if not isinstance(columnbrowser.next, clazz): # The column is not appropriate for the new node. # Close it and reopen it. columnbrowser.next.close() self.clicked_callback(columnbrowser, node) else: columnbrowser.next.update(node) # Scroll the columns gobject.timeout_add(100, lambda: self.autoscroll_end() and False) return True def autoscroll_end(self): adj=self.sw.get_hadjustment() adj.value = adj.upper - adj.page_size return True def scroll_event(self, widget=None, event=None): a=widget.get_hadjustment() if ((event.direction == gtk.gdk.SCROLL_DOWN and event.state & gtk.gdk.SHIFT_MASK) or event.direction == gtk.gdk.SCROLL_RIGHT): val = a.value + a.step_increment if val > a.upper - a.page_size: val = a.upper - a.page_size if val != a.value: a.value = val a.value_changed () return True elif ((event.direction == gtk.gdk.SCROLL_UP and event.state & gtk.gdk.SHIFT_MASK) or event.direction == gtk.gdk.SCROLL_LEFT): val = a.value - a.step_increment if val < a.lower: val = a.lower if val != a.value: a.value = val a.value_changed () return True return False def build_widget(self): vbox=gtk.VBox() self.sw=gtk.ScrolledWindow() self.sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.sw.connect('scroll-event', self.scroll_event) vbox.add(self.sw) self.hbox = gtk.HBox() self.rootcolumn=ModelColumn(controller=self.controller, node=self.model[0], callback=self.clicked_callback, parent=None) self.rootcolumn.widget.set_property("width-request", self.column_width) self.hbox.pack_start(self.rootcolumn.widget, expand=False) self.sw.add_with_viewport(self.hbox) vbox.show_all() return vbox
class Finder(AdhocView): view_name = _("Package finder") view_id = 'finder' tooltip = _("Column-based package finder") def __init__(self, controller=None, parameters=None): super(Finder, self).__init__(controller=controller) self.close_on_package_load = False self.contextual_actions = [] self.package = controller.package self.controller = controller self.model = DetailedTreeModel(controller=controller, package=self.package) # 640 / 3 self.column_width = 210 self.rootcolumn = None self.widget = self.build_widget() def refresh(self): c = self.rootcolumn c.update(c.node) while c.next is not None: c = c.next c.update(c.node) return True def update_element(self, element=None, event=None): if event.endswith('Create'): self.model.update_element(element, created=True) self.refresh() elif event.endswith('EditEnd'): self.model.update_element(element, created=False) self.refresh() elif event.endswith('Delete'): self.model.remove_element(element) cb = self.rootcolumn.next while cb is not None: if [ r for r in cb.liststore if r[ModelColumn.COLUMN_NODE][ DetailedTreeModel.COLUMN_ELEMENT] == element ]: # The element is present in the list of # children. Remove the next column if necessary # and update the children list. cb.update(node=cb.node) if cb.next is not None and cb.next.node[ DetailedTreeModel.COLUMN_ELEMENT] == element: cb.next.close() cb = cb.next #self.update_model(element.rootPackage) else: return "Unknown event %s" % event return def update_annotation(self, annotation=None, event=None): """Update the annotation. """ self.update_element(annotation, event) return def update_relation(self, relation=None, event=None): """Update the relation. """ self.update_element(relation, event) return def update_view(self, view=None, event=None): self.update_element(view, event) return def update_query(self, query=None, event=None): self.update_element(query, event) return def update_schema(self, schema=None, event=None): self.update_element(schema, event) return def update_annotationtype(self, annotationtype=None, event=None): self.update_element(annotationtype, event) return def update_relationtype(self, relationtype=None, event=None): """Update the relationtype """ self.update_element(relationtype, event) return def update_resource(self, resource=None, event=None): self.update_element(resource, event) return def update_model(self, package=None): if package is None: package = self.controller.package # Reset to the rootcolumn cb = self.rootcolumn.next while cb is not None: cb.widget.destroy() cb = cb.next self.rootcolumn.next = None self.package = package self.model = DetailedTreeModel(controller=self.controller, package=package) # Update the rootcolumn element self.rootcolumn.update(self.model[0]) return True def clicked_callback(self, columnbrowser, node): if columnbrowser is None: # We selected the rootcolumn. Delete the next ones cb = self.rootcolumn.next while cb is not None: cb.widget.destroy() cb = cb.next self.rootcolumn.next = None elif columnbrowser.next is None: t = type(node[DetailedTreeModel.COLUMN_ELEMENT]) clazz = CLASS2COLUMN.get(t, ModelColumn) # Create a new columnbrowser col = clazz(controller=self.controller, node=node, callback=self.clicked_callback, parent=columnbrowser) col.widget.set_property("width-request", self.column_width) self.hbox.pack_start(col.widget, expand=False) col.widget.show_all() columnbrowser.next = col else: # Delete all next+1 columns (we reuse the next one) cb = columnbrowser.next.next if cb is not None: cb.close() # Check if the column is still appropriate for the node clazz = CLASS2COLUMN.get( type(node[DetailedTreeModel.COLUMN_ELEMENT]), ModelColumn) if not isinstance(columnbrowser.next, clazz): # The column is not appropriate for the new node. # Close it and reopen it. columnbrowser.next.close() self.clicked_callback(columnbrowser, node) else: columnbrowser.next.update(node) # Scroll the columns gobject.timeout_add(100, lambda: self.autoscroll_end() and False) return True def autoscroll_end(self): adj = self.sw.get_hadjustment() adj.value = adj.upper - adj.page_size return True def scroll_event(self, widget=None, event=None): a = widget.get_hadjustment() if ((event.direction == gtk.gdk.SCROLL_DOWN and event.state & gtk.gdk.SHIFT_MASK) or event.direction == gtk.gdk.SCROLL_RIGHT): val = a.value + a.step_increment if val > a.upper - a.page_size: val = a.upper - a.page_size if val != a.value: a.value = val a.value_changed() return True elif ((event.direction == gtk.gdk.SCROLL_UP and event.state & gtk.gdk.SHIFT_MASK) or event.direction == gtk.gdk.SCROLL_LEFT): val = a.value - a.step_increment if val < a.lower: val = a.lower if val != a.value: a.value = val a.value_changed() return True return False def build_widget(self): vbox = gtk.VBox() self.sw = gtk.ScrolledWindow() self.sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.sw.connect('scroll-event', self.scroll_event) vbox.add(self.sw) self.hbox = gtk.HBox() self.rootcolumn = ModelColumn(controller=self.controller, node=self.model[0], callback=self.clicked_callback, parent=None) self.rootcolumn.widget.set_property("width-request", self.column_width) self.hbox.pack_start(self.rootcolumn.widget, expand=False) self.sw.add_with_viewport(self.hbox) vbox.show_all() return vbox