コード例 #1
0
    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()
コード例 #2
0
    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
コード例 #3
0
ファイル: finder.py プロジェクト: eamexicano/advene
    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()
コード例 #4
0
ファイル: finder.py プロジェクト: eamexicano/advene
    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
コード例 #5
0
ファイル: finder.py プロジェクト: eamexicano/advene
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
コード例 #6
0
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