Ejemplo n.º 1
0
    def refresh(self, *p, **kw):
        def display_popup(widget, event, element):
            if event.button == 3:
                menu = advene.gui.popup.Menu(element,
                                             controller=self.controller)
                menu.popup()
                return True
            return False

        g = self.controller.gui
        for (w, elements) in ((self.created, g.last_created), (self.edited,
                                                               g.last_edited)):
            w.foreach(w.remove)
            for e in reversed(elements):
                if isinstance(e, Annotation):
                    b = AnnotationRepresentation(e, self.controller)
                elif isinstance(e, Relation):
                    b = RelationRepresentation(e, self.controller)
                else:
                    b = Gtk.Button("\n".join(
                        (helper.get_type(e), self.controller.get_title(e))),
                                   use_underline=False)
                b.connect('clicked',
                          (lambda i, el: self.controller.gui.edit_element(el)),
                          e)
                content = getattr(e, 'content', None)
                if content:
                    b.set_tooltip_text(content.data)
                enable_drag_source(b, e, self.controller)
                b.connect('button-press-event', display_popup, e)
                w.pack_start(b, False, True, 0)
        self.widget.show_all()
        return True
Ejemplo n.º 2
0
    def build_widget(self):
        vbox = gtk.VBox()
        self.label = {}
        self.label['title'] = gtk.Label()
        vbox.pack_start(self.label['title'], expand=False)

        b = self.label['edit'] = gtk.Button(_("Edit query"))

        # Enable DND
        def get_element():
            return self.element

        enable_drag_source(b, get_element, self.controller)
        b.connect('clicked',
                  lambda w: self.controller.gui.edit_element(self.element))
        vbox.pack_start(b, expand=False)

        f = gtk.Frame(_("Try to apply the query on..."))
        v = gtk.VBox()
        f.add(v)

        def try_query(b, expr):
            try:
                res, q = self.controller.evaluate_query(self.element,
                                                        expr=expr)
                self.controller.gui.open_adhoc_view('interactiveresult',
                                                    query=self.element,
                                                    result=res,
                                                    destination='east')
            except Exception, e:
                #print "********** Oops"
                #import traceback
                #traceback.print_exc()
                b.set_sensitive(False)
            return True
Ejemplo n.º 3
0
    def build_widget(self):
        vbox=gtk.VBox()
        self.label={}
        self.label['title']=gtk.Label()
        vbox.pack_start(self.label['title'], expand=False)

        b=self.label['edit']=gtk.Button(_("Edit query"))
        # Enable DND
        def get_element():
            return self.element
        enable_drag_source(b, get_element, self.controller)
        b.connect('clicked', lambda w: self.controller.gui.edit_element(self.element))
        vbox.pack_start(b, expand=False)

        f=gtk.Frame(_("Try to apply the query on..."))
        v=gtk.VBox()
        f.add(v)

        def try_query(b, expr):
            try:
                res, q = self.controller.evaluate_query(self.element, expr=expr)
                self.controller.gui.open_adhoc_view('interactiveresult',
                                                    query=self.element,
                                                    result=res,
                                                    destination='east')
            except Exception, e:
                #print "********** Oops"
                #import traceback
                #traceback.print_exc()
                b.set_sensitive(False)
            return True
Ejemplo n.º 4
0
 def refresh(self, *p, **kw):
     def display_popup(widget, event, element):
         if event.button == 3:
             menu = advene.gui.popup.Menu(element, controller=self.controller)
             menu.popup()
             return True
         return False
     g=self.controller.gui
     for (w, elements) in ( (self.created, g.last_created),
                            (self.edited, g.last_edited) ):
         w.foreach(w.remove)
         for e in reversed(elements):
             b=gtk.Button("\n".join((helper.get_type(e), self.controller.get_title(e))), use_underline=False)
             b.set_alignment(0, 0)
             colorname=self.controller.get_element_color(e)
             if colorname:
                 if config.data.os == 'win32':
                     text=b.get_label()
                     b.foreach(b.remove)
                     l=gtk.Label()
                     l.set_markup('<span background="%s">%s</span>' % (colorname, text))
                     l.show()
                     b.add(l)
                 else:
                     style = b.modify_bg(gtk.STATE_NORMAL, name2color(colorname))
             b.connect('clicked', (lambda i, el: self.controller.gui.edit_element(el)),
                       e)
             content=getattr(e, 'content', None)
             if content:
                 b.set_tooltip_text(content.data)
             enable_drag_source(b, e, self.controller)
             b.connect('button-press-event', display_popup, e)
             w.pack_start(b, expand=False)
     self.widget.show_all()
     return True
Ejemplo n.º 5
0
 def refresh(self, *p, **kw):
     def display_popup(widget, event, element):
         if event.button == 3:
             menu = advene.gui.popup.Menu(element, controller=self.controller)
             menu.popup()
             return True
         return False
     g=self.controller.gui
     for (w, elements) in ( (self.created, g.last_created),
                            (self.edited, g.last_edited) ):
         w.foreach(w.remove)
         for e in reversed(elements):
             if isinstance(e, Annotation):
                 b = AnnotationRepresentation(e, self.controller)
             elif isinstance(e, Relation):
                 b = RelationRepresentation(e, self.controller)
             else:
                 b = Gtk.Button("\n".join((helper.get_type(e), self.controller.get_title(e))), use_underline=False)
             b.connect('clicked', (lambda i, el: self.controller.gui.edit_element(el)),
                       e)
             content=getattr(e, 'content', None)
             if content:
                 b.set_tooltip_text(content.data)
             enable_drag_source(b, e, self.controller)
             b.connect('button-press-event', display_popup, e)
             w.pack_start(b, False, True, 0)
     self.widget.show_all()
     return True
Ejemplo n.º 6
0
 def __init__(self, annotation=None, container=None):
     self.annotation=annotation
     self.active=False
     self._fraction_marker=None
     GenericColorButtonWidget.__init__(self, element=annotation, container=container)
     self.connect('key-press-event', self.keypress, self.annotation)
     self.connect('enter-notify-event', lambda b, e: b.grab_focus() and True)
     # The widget can generate drags
     enable_drag_source(self, annotation, container.controller)
     self.no_image_pixbuf=None
Ejemplo n.º 7
0
 def __init__(self, annotation=None, container=None):
     self.annotation=annotation
     self.active=False
     self._fraction_marker=None
     GenericColorButtonWidget.__init__(self, element=annotation, container=container)
     self.connect('key-press-event', self.keypress, self.annotation)
     self.connect('enter-notify-event', lambda b, e: b.grab_focus() and True)
     # The widget can generate drags
     enable_drag_source(self, annotation, container.controller)
     self.no_image_pixbuf=None
Ejemplo n.º 8
0
 def __init__(self, relation, controller, direction='to'):
     self.relation=relation
     self.controller=controller
     self.direction=direction
     super(RelationRepresentation, self).__init__()
     l=gtk.Label()
     self.add(l)
     l.show()
     self.refresh()
     self.connect('button-press-event', self.button_press_handler, relation)
     enable_drag_source(self, self.relation, self.controller)
Ejemplo n.º 9
0
 def __init__(self, annotation, controller):
     super(AnnotationRepresentation, self).__init__()
     self.annotation=annotation
     self.controller=controller
     self.add(self.controller.gui.get_illustrated_text(text=self.controller.get_title(annotation),
                                                       position=annotation.fragment.begin,
                                                       vertical=False,
                                                       height=20,
                                                       color=controller.get_element_color(annotation)))
     self.connect('button-press-event', self.button_press_handler, annotation)
     enable_drag_source(self, self.annotation, self.controller)
Ejemplo n.º 10
0
 def __init__(self, relation, controller, direction='to'):
     self.relation=relation
     self.controller=controller
     self.direction=direction
     super(RelationRepresentation, self).__init__()
     l=gtk.Label()
     self.add(l)
     l.show()
     self.refresh()
     self.connect('button-press-event', self.button_press_handler, relation)
     enable_drag_source(self, self.relation, self.controller)
Ejemplo n.º 11
0
 def __init__(self, annotation, controller):
     super(AnnotationRepresentation, self).__init__()
     self.annotation=annotation
     self.controller=controller
     self.add(self.controller.gui.get_illustrated_text(text=self.controller.get_title(annotation),
                                                       position=annotation.begin,
                                                       vertical=False,
                                                       height=20,
                                                       color=controller.get_element_color(annotation)))
     self.connect('button-press-event', self.button_press_handler, annotation)
     enable_drag_source(self, self.annotation, self.controller)
Ejemplo n.º 12
0
    def build_widget(self):
        vbox = Gtk.VBox()
        self.label = {}
        self.label['title'] = Gtk.Label()
        vbox.pack_start(self.label['title'], False, True, 0)
        self.label['info'] = Gtk.Label()
        vbox.pack_start(self.label['info'], False, True, 0)
        b = self.label['edit'] = Gtk.Button(_("Edit view"))
        b.connect('clicked',
                  lambda w: self.controller.gui.edit_element(self.element))

        # Enable DND
        def get_element():
            return self.element

        enable_drag_source(b, get_element, self.controller)

        vbox.pack_start(b, False, True, 0)

        b = self.label['activate'] = Gtk.Button(_("Open view"))
        b.connect('clicked', self.activate)

        # Drag and drop for adhoc views

        def drag_data_get_cb(button, context, selection, targetType,
                             timestamp):
            if targetType == config.data.target_type['adhoc-view']:
                if not isinstance(self.element, View):
                    return False
                if helper.get_view_type(self.element) != 'adhoc':
                    return False
                selection.set(
                    selection.get_target(), 8,
                    urllib.parse.urlencode({
                        'id': self.element.id,
                    }).encode('utf8'))
                return True
            else:
                logger.warning("Unknown target type for drag: %d", targetType)
            return True

        b.drag_source_set(
            Gdk.ModifierType.BUTTON1_MASK,
            config.data.get_target_types('adhoc-view'),
            Gdk.DragAction.LINK | Gdk.DragAction.COPY | Gdk.DragAction.MOVE)
        b.connect('drag-data-get', drag_data_get_cb)

        vbox.pack_start(b, False, True, 0)

        vbox.show_all()
        return vbox
Ejemplo n.º 13
0
    def build_widget(self):
        vbox = gtk.VBox()
        self.label = {}
        self.label['title'] = gtk.Label()
        vbox.pack_start(self.label['title'], expand=False)
        self.label['info'] = gtk.Label()
        vbox.pack_start(self.label['info'], expand=False)
        b = self.label['edit'] = gtk.Button(_("Edit view"))
        b.connect('clicked',
                  lambda w: self.controller.gui.edit_element(self.element))

        # Enable DND
        def get_element():
            return self.element

        enable_drag_source(b, get_element, self.controller)

        vbox.pack_start(b, expand=False)

        b = self.label['activate'] = gtk.Button(_("Open view"))
        b.connect('clicked', self.activate)

        # Drag and drop for adhoc views

        def drag_data_get_cb(button, context, selection, targetType,
                             timestamp):
            if targetType == config.data.target_type['adhoc-view']:
                if not isinstance(self.element, View):
                    return False
                if helper.get_view_type(self.element) != 'adhoc':
                    return False
                selection.set(
                    selection.target, 8,
                    urllib.urlencode({
                        'id': self.element.id,
                    }).encode('utf8'))
                return True
            else:
                print "Unknown target type for drag: %d" % targetType
            return True

        b.drag_source_set(
            gtk.gdk.BUTTON1_MASK, config.data.drag_type['adhoc-view'],
            gtk.gdk.ACTION_LINK | gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_MOVE)
        b.connect('drag-data-get', drag_data_get_cb)

        vbox.pack_start(b, expand=False)

        vbox.show_all()
        return vbox
Ejemplo n.º 14
0
    def build_widget(self):
        vbox = Gtk.VBox()
        self.label = {}
        self.label['title'] = Gtk.Label()
        vbox.pack_start(self.label['title'], False, True, 0)

        b = self.label['edit'] = Gtk.Button(_("Edit query"))

        # Enable DND
        def get_element():
            return self.element

        enable_drag_source(b, get_element, self.controller)
        b.connect('clicked',
                  lambda w: self.controller.gui.edit_element(self.element))
        vbox.pack_start(b, False, True, 0)

        f = Gtk.Frame.new(_("Try to apply the query on..."))
        v = Gtk.VBox()
        f.add(v)

        def try_query(b, expr):
            try:
                res, q = self.controller.evaluate_query(self.element,
                                                        expr=expr)
                self.controller.gui.open_adhoc_view('interactiveresult',
                                                    query=self.element,
                                                    result=res,
                                                    destination='east')
            except Exception:
                logger.debug("Exception in query evaluation", exc_info=True)
                b.set_sensitive(False)
            return True

        self.apply_buttons = []
        for (expr, label) in (
            ('package', _("the package")),
            ('package/annotations', _("all annotations of the package")),
            ('package/annotations/first',
             _("the first annotation of the package")),
        ):
            b = Gtk.Button(label, use_underline=False)
            b.connect('clicked', try_query, expr)
            v.pack_start(b, False, True, 0)
            self.apply_buttons.append(b)

        vbox.add(f)
        vbox.show_all()
        return vbox
Ejemplo n.º 15
0
 def build_widget(self):
     vbox=gtk.VBox()
     self.label={}
     self.label['title']=gtk.Label()
     vbox.pack_start(self.label['title'], expand=False)
     b=self.label['edit']=gtk.Button(_("Edit resource"))
     # Enable DND
     def get_element():
         return self.element
     enable_drag_source(b, get_element, self.controller)
     b.connect('clicked', lambda w: self.controller.gui.edit_element(self.element))
     vbox.pack_start(b, expand=False)
     self.preview=gtk.VBox()
     vbox.add(self.preview)
     vbox.show_all()
     return vbox
Ejemplo n.º 16
0
    def build_widget(self):
        vbox=Gtk.VBox()
        self.label={}
        self.label['title']=Gtk.Label()
        vbox.pack_start(self.label['title'], False, True, 0)

        b=self.label['edit']=Gtk.Button(_("Edit query"))
        # Enable DND
        def get_element():
            return self.element
        enable_drag_source(b, get_element, self.controller)
        b.connect('clicked', lambda w: self.controller.gui.edit_element(self.element))
        vbox.pack_start(b, False, True, 0)

        f=Gtk.Frame.new(_("Try to apply the query on..."))
        v=Gtk.VBox()
        f.add(v)

        def try_query(b, expr):
            try:
                res, q = self.controller.evaluate_query(self.element, expr=expr)
                self.controller.gui.open_adhoc_view('interactiveresult',
                                                    query=self.element,
                                                    result=res,
                                                    destination='east')
            except Exception:
                logger.debug("Exception in query evaluation", exc_info=True)
                b.set_sensitive(False)
            return True

        self.apply_buttons=[]
        for (expr, label) in (
             ('package', _("the package")),
             ('package/annotations', _("all annotations of the package")),
             ('package/annotations/first', _("the first annotation of the package")),
            ):
            b=Gtk.Button(label, use_underline=False)
            b.connect('clicked', try_query, expr)
            v.pack_start(b, False, True, 0)
            self.apply_buttons.append(b)

        vbox.add(f)
        vbox.show_all()
        return vbox
Ejemplo n.º 17
0
    def build_widget(self):
        vbox=gtk.VBox()
        self.label={}
        self.label['title']=gtk.Label()
        vbox.pack_start(self.label['title'], expand=False)
        self.label['info']=gtk.Label()
        vbox.pack_start(self.label['info'], expand=False)
        b=self.label['edit']=gtk.Button(_("Edit view"))
        b.connect('clicked', lambda w: self.controller.gui.edit_element(self.element))
        # Enable DND
        def get_element():
            return self.element
        enable_drag_source(b, get_element, self.controller)

        vbox.pack_start(b, expand=False)

        b=self.label['activate']=gtk.Button(_("Open view"))
        b.connect('clicked', self.activate)
        # Drag and drop for adhoc views

        def drag_data_get_cb(button, context, selection, targetType, timestamp):
            if targetType == config.data.target_type['adhoc-view']:
                if not isinstance(self.element, View):
                    return False
                if helper.get_view_type(self.element) != 'adhoc':
                    return False
                selection.set(selection.target, 8,
                              urllib.urlencode( {
                            'id': self.element.id,
                            } ).encode('utf8'))
                return True
            else:
                print "Unknown target type for drag: %d" % targetType
            return True

        b.drag_source_set(gtk.gdk.BUTTON1_MASK,
                          config.data.drag_type['adhoc-view'],
                          gtk.gdk.ACTION_LINK | gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_MOVE)
        b.connect('drag-data-get', drag_data_get_cb)

        vbox.pack_start(b, expand=False)

        vbox.show_all()
        return vbox
Ejemplo n.º 18
0
    def build_widget(self):
        vbox=Gtk.VBox()
        self.label={}
        self.label['title']=Gtk.Label()
        vbox.pack_start(self.label['title'], False, True, 0)
        self.label['info']=Gtk.Label()
        vbox.pack_start(self.label['info'], False, True, 0)
        b=self.label['edit']=Gtk.Button(_("Edit view"))
        b.connect('clicked', lambda w: self.controller.gui.edit_element(self.element))
        # Enable DND
        def get_element():
            return self.element
        enable_drag_source(b, get_element, self.controller)

        vbox.pack_start(b, False, True, 0)

        b=self.label['activate']=Gtk.Button(_("Open view"))
        b.connect('clicked', self.activate)
        # Drag and drop for adhoc views

        def drag_data_get_cb(button, context, selection, targetType, timestamp):
            if targetType == config.data.target_type['adhoc-view']:
                if not isinstance(self.element, View):
                    return False
                if helper.get_view_type(self.element) != 'adhoc':
                    return False
                selection.set(selection.get_target(), 8,
                              urllib.parse.urlencode( {
                            'id': self.element.id,
                            } ).encode('utf8'))
                return True
            else:
                logger.warn("Unknown target type for drag: %d" % targetType)
            return True

        b.drag_source_set(Gdk.ModifierType.BUTTON1_MASK,
                          config.data.get_target_types('adhoc-view'),
                          Gdk.DragAction.LINK | Gdk.DragAction.COPY | Gdk.DragAction.MOVE)
        b.connect('drag-data-get', drag_data_get_cb)

        vbox.pack_start(b, False, True, 0)

        vbox.show_all()
        return vbox
Ejemplo n.º 19
0
 def __init__(self, annotation=None, container=None):
     self.annotation = annotation
     self.active = False
     self._fraction_marker = None
     self.resize_time = None
     self.resize_cursor = Gdk.Cursor.new_from_name(
         container.widget.get_display(), "ew-resize")
     GenericColorButtonWidget.__init__(self,
                                       element=annotation,
                                       container=container)
     self.connect('key-press-event', self.keypress, self.annotation)
     self.connect('enter-notify-event',
                  lambda b, e: b.grab_focus() and True)
     self.connect('leave-notify-event',
                  lambda b, e: self.set_cursor(None) and False)
     self.connect('motion-notify-event', self.motion_notify_cb)
     # The widget can generate drags
     enable_drag_source(self, annotation, container.controller)
     self.no_image_pixbuf = None
Ejemplo n.º 20
0
    def build_widget(self):
        vbox = Gtk.VBox()
        self.label = {}
        self.label['title'] = Gtk.Label()
        vbox.pack_start(self.label['title'], False, True, 0)
        b = self.label['edit'] = Gtk.Button(_("Edit resource"))

        # Enable DND
        def get_element():
            return self.element

        enable_drag_source(b, get_element, self.controller)
        b.connect('clicked',
                  lambda w: self.controller.gui.edit_element(self.element))
        vbox.pack_start(b, False, True, 0)
        self.preview = Gtk.VBox()
        vbox.add(self.preview)
        vbox.show_all()
        return vbox
Ejemplo n.º 21
0
    def build_widget(self):
        vbox=gtk.VBox()

        self.player = self.controller.playerfactory.get_player()

        self.player.sound_mute()

        self.drawable=gtk.Socket()
        def handle_remove(socket):
            # Do not kill the widget if the application exits
            return True
        self.drawable.connect('plug-removed', handle_remove)

        black=gtk.gdk.Color(0, 0, 0)
        for state in (gtk.STATE_ACTIVE, gtk.STATE_NORMAL,
                      gtk.STATE_SELECTED, gtk.STATE_INSENSITIVE,
                      gtk.STATE_PRELIGHT):
            self.drawable.modify_bg (state, black)

        self.drawable.set_size_request(320, 200)


        self.toolbar=gtk.Toolbar()
        self.toolbar.set_style(gtk.TOOLBAR_ICONS)

        # Append the volume control to the toolbar
        def volume_change(scale, value):
            if self.player.sound_get_volume() != int(value * 100):
                self.player.sound_set_volume(int(value * 100))
            return True

        self.audio_volume = gtk.VolumeButton()
        self.audio_volume.set_value(self.player.sound_get_volume() / 100.0)
        ti = gtk.ToolItem()
        ti.add(self.audio_volume)
        self.audio_volume.connect('value-changed', volume_change)
        self.toolbar.insert(ti, -1)

        sync_button=gtk.ToolButton(gtk.STOCK_CONNECT)
        sync_button.set_tooltip_text(_("Synchronize"))
        sync_button.connect('clicked', self.synchronize)
        self.toolbar.insert(sync_button, -1)

        def offset_changed(spin):
            self.offset = long(spin.get_value())
            return True

        ti = gtk.ToolItem()
        self.offset_spin = gtk.SpinButton(gtk.Adjustment(value = self.offset,
                                                         lower = - 24 * 60 * 60 * 1000,
                                                         upper =   24 * 60 * 60 * 1000,
                                                         step_incr = 1000 / config.data.preferences['default-fps'],
                                                         page_incr = 1000))
        self.offset_spin.get_adjustment().connect('value-changed', offset_changed)
        ti.add(self.offset_spin)
        self.offset_spin.set_tooltip_text(_("Offset in ms"))
        self.toolbar.insert(ti, -1)

        self.label = gtk.Label()
        self.label.set_alignment(0, 0)
        self.label.modify_font(pango.FontDescription("sans 10"))

        timestamp_button = get_pixmap_button('set-to-now.png')
        timestamp_button.set_tooltip_text(_("Drag and drop to get player time"))
        enable_drag_source(timestamp_button, lambda: long(self.player.get_stream_information().position), self.controller)
        # Cannot use a gtk.ToolButton since it cannot be drag_source
        ti = gtk.ToolItem()
        ti.add(timestamp_button)
        self.toolbar.insert(ti, -1)

        black=gtk.gdk.color_parse('black')
        white=gtk.gdk.color_parse('white')
        eb=gtk.EventBox()
        eb.add(self.label)
        for state in (gtk.STATE_ACTIVE, gtk.STATE_NORMAL,
                      gtk.STATE_SELECTED, gtk.STATE_INSENSITIVE,
                      gtk.STATE_PRELIGHT):
            self.label.modify_bg(state, black)
            eb.modify_bg(state, black)
            self.label.modify_fg(state, white)

        vbox.add(self.drawable)
        vbox.pack_start(eb, expand=False)
        vbox.pack_start(self.toolbar, expand=False)

        self.drawable.connect_after('realize', self.register_drawable)

        # Accept annotation/timestamp drop, to adjust time offset
        vbox.connect('drag-data-received', self.drag_received_cb)
        vbox.drag_dest_set(gtk.DEST_DEFAULT_MOTION |
                           gtk.DEST_DEFAULT_HIGHLIGHT |
                           gtk.DEST_DEFAULT_ALL,
                           config.data.drag_type['annotation'] +
                           config.data.drag_type['timestamp'],
                           gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_LINK | gtk.gdk.ACTION_MOVE)

        vbox.show_all()
        return vbox
Ejemplo n.º 22
0
    def build_widget(self):
        vbox = gtk.VBox()

        self.player = self.controller.playerfactory.get_player()

        self.player.sound_mute()

        self.drawable = gtk.Socket()

        def handle_remove(socket):
            # Do not kill the widget if the application exits
            return True

        self.drawable.connect('plug-removed', handle_remove)

        black = gtk.gdk.Color(0, 0, 0)
        for state in (gtk.STATE_ACTIVE, gtk.STATE_NORMAL, gtk.STATE_SELECTED,
                      gtk.STATE_INSENSITIVE, gtk.STATE_PRELIGHT):
            self.drawable.modify_bg(state, black)

        self.drawable.set_size_request(320, 200)

        self.toolbar = gtk.Toolbar()
        self.toolbar.set_style(gtk.TOOLBAR_ICONS)

        # Append the volume control to the toolbar
        def volume_change(scale, value):
            if self.player.sound_get_volume() != int(value * 100):
                self.player.sound_set_volume(int(value * 100))
            return True

        self.audio_volume = gtk.VolumeButton()
        self.audio_volume.set_value(self.player.sound_get_volume() / 100.0)
        ti = gtk.ToolItem()
        ti.add(self.audio_volume)
        self.audio_volume.connect('value-changed', volume_change)
        self.toolbar.insert(ti, -1)

        sync_button = gtk.ToolButton(gtk.STOCK_CONNECT)
        sync_button.set_tooltip_text(_("Synchronize"))
        sync_button.connect('clicked', self.synchronize)
        self.toolbar.insert(sync_button, -1)

        def offset_changed(spin):
            self.offset = long(spin.get_value())
            return True

        ti = gtk.ToolItem()
        self.offset_spin = gtk.SpinButton(
            gtk.Adjustment(value=self.offset,
                           lower=-24 * 60 * 60 * 1000,
                           upper=24 * 60 * 60 * 1000,
                           step_incr=1000 /
                           config.data.preferences['default-fps'],
                           page_incr=1000))
        self.offset_spin.get_adjustment().connect('value-changed',
                                                  offset_changed)
        ti.add(self.offset_spin)
        self.offset_spin.set_tooltip_text(_("Offset in ms"))
        self.toolbar.insert(ti, -1)

        self.label = gtk.Label()
        self.label.set_alignment(0, 0)
        self.label.modify_font(pango.FontDescription("sans 10"))

        timestamp_button = get_pixmap_button('set-to-now.png')
        timestamp_button.set_tooltip_text(
            _("Drag and drop to get player time"))
        enable_drag_source(
            timestamp_button,
            lambda: long(self.player.get_stream_information().position),
            self.controller)
        # Cannot use a gtk.ToolButton since it cannot be drag_source
        ti = gtk.ToolItem()
        ti.add(timestamp_button)
        self.toolbar.insert(ti, -1)

        black = gtk.gdk.color_parse('black')
        white = gtk.gdk.color_parse('white')
        eb = gtk.EventBox()
        eb.add(self.label)
        for state in (gtk.STATE_ACTIVE, gtk.STATE_NORMAL, gtk.STATE_SELECTED,
                      gtk.STATE_INSENSITIVE, gtk.STATE_PRELIGHT):
            self.label.modify_bg(state, black)
            eb.modify_bg(state, black)
            self.label.modify_fg(state, white)

        vbox.add(self.drawable)
        vbox.pack_start(eb, expand=False)
        vbox.pack_start(self.toolbar, expand=False)

        self.drawable.connect_after('realize', self.register_drawable)

        # Accept annotation/timestamp drop, to adjust time offset
        vbox.connect('drag-data-received', self.drag_received_cb)
        vbox.drag_dest_set(
            gtk.DEST_DEFAULT_MOTION | gtk.DEST_DEFAULT_HIGHLIGHT
            | gtk.DEST_DEFAULT_ALL, config.data.drag_type['annotation'] +
            config.data.drag_type['timestamp'],
            gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_LINK | gtk.gdk.ACTION_MOVE)

        vbox.show_all()
        return vbox
Ejemplo n.º 23
0
    def __init__(self, value, controller, width=None, epsilon=None, comment_getter=None, visible_label=True, bgcolor=None, callback=None):
        """Instanciate a new TimestampRepresentation.

        @param value: the timestamp value
        @type value: int
        @param controller: the controller
        @type controller: advene.core.Controller
        @param width: the snapshot width
        @type width: int
        @param epsilon: the precision (for snapshot display)
        @type epsilon: int (ms)
        @param comment_getter: method returning the associated comment
        @type comment_getter: method
        @param visible_label: should the timestamp label be displayed?
        @type visible_label: boolean
        @param bgcolor: background color
        @type bgcolor: string
        @value callback: a callback that will be called before value modification
        @type callback: method. If it returns False, then the modification will be cancelled
        """
        super(TimestampRepresentation, self).__init__()
        self._value=value
        self.controller=controller
        self._width=width or config.data.preferences['bookmark-snapshot-width']
        if epsilon is None:
            epsilon=config.data.preferences['bookmark-snapshot-precision']
        self.epsilon=epsilon
        self.visible_label=visible_label
        # comment_getter is a method which returns the comment
        # associated to this timestamp
        self.comment_getter=comment_getter
        # extend_popup_menu is a method which takes the menu and the
        # element as parameter, and adds appropriate menu items.
        self.extend_popup_menu=None
        self.highlight=False
        self._bgcolor = None
        # Displayed text.
        self._text = '<span size="xx-small">%(timestamp)s</span>'
        self.callback = callback

        box=gtk.VBox()
        self.image=gtk.Image()
        self.label=gtk.Label()
        box.pack_start(self.image, expand=False)
        box.pack_start(self.label, expand=False)
        if not self.visible_label:
            self.label.set_no_show_all(True)
            self.label.hide()
        self.add(box)
        self.box=box

        self._bgcolor = bgcolor

        self.refresh()

        self.connect('button-press-event', self._button_press_handler)

        enable_drag_source(self, self.get_value, self.controller)

        def enter_bookmark(widget, event):
            self.controller.notify('BookmarkHighlight', timestamp=self.value, immediate=True)
            self.highlight=True
            return False
        def leave_bookmark(widget, event):
            self.controller.notify('BookmarkUnhighlight', timestamp=self.value, immediate=True)
            self.highlight=False
            return False
        self.connect('enter-notify-event', enter_bookmark)
        self.connect('leave-notify-event', leave_bookmark)

        self._rules=[]
        # React to UpdateSnapshot events
        self._rules.append(self.controller.event_handler.internal_rule (event='SnapshotUpdate',
                                                                        method=self.snapshot_update_cb))
        self.connect('destroy', self.remove_rules)
Ejemplo n.º 24
0
    def build_widget(self):
        vbox = Gtk.VBox()

        self.player = self.controller.playerfactory.get_player()

        self.player.sound_mute()

        self.drawable = get_drawable()

        black = Gdk.Color(0, 0, 0)
        for state in (Gtk.StateType.ACTIVE, Gtk.StateType.NORMAL,
                      Gtk.StateType.SELECTED, Gtk.StateType.INSENSITIVE,
                      Gtk.StateType.PRELIGHT):
            self.drawable.modify_bg(state, black)

        self.drawable.set_size_request(320, 200)

        self.toolbar = Gtk.Toolbar()
        self.toolbar.set_style(Gtk.ToolbarStyle.ICONS)

        # Append the volume control to the toolbar
        def volume_change(scale, value):
            if self.player.sound_get_volume() != int(value * 100):
                self.player.sound_set_volume(int(value * 100))
            return True

        self.audio_volume = Gtk.VolumeButton()
        self.audio_volume.set_value(self.player.sound_get_volume() / 100.0)
        ti = Gtk.ToolItem()
        ti.add(self.audio_volume)
        self.audio_volume.connect('value-changed', volume_change)
        self.toolbar.insert(ti, -1)

        sync_button = Gtk.ToolButton(Gtk.STOCK_CONNECT)
        sync_button.set_tooltip_text(_("Synchronize"))
        sync_button.connect('clicked', self.synchronize)
        self.toolbar.insert(sync_button, -1)

        def offset_changed(spin):
            self.offset = int(spin.get_value())
            return True

        ti = Gtk.ToolItem()
        self.offset_spin = Gtk.SpinButton.new(
            Gtk.Adjustment.new(self.offset, -24 * 60 * 60 * 1000,
                               24 * 60 * 60 * 1000,
                               self.controller.frame2time(1), 1000, 500), 1000,
            0)
        self.offset_spin.get_adjustment().connect('value-changed',
                                                  offset_changed)
        ti.add(self.offset_spin)
        self.offset_spin.set_tooltip_text(_("Offset in ms"))
        self.toolbar.insert(ti, -1)

        self.label = Gtk.Label()
        self.label.set_alignment(0, 0)
        self.label.modify_font(Pango.FontDescription("sans 10"))

        timestamp_button = get_pixmap_button('set-to-now.png')
        timestamp_button.set_tooltip_text(
            _("Drag and drop to get player time"))
        enable_drag_source(
            timestamp_button,
            lambda: int(self.player.get_stream_information().position),
            self.controller)
        # Cannot use a Gtk.ToolButton since it cannot be drag_source
        ti = Gtk.ToolItem()
        ti.add(timestamp_button)
        self.toolbar.insert(ti, -1)

        black = Gdk.color_parse('black')
        white = Gdk.color_parse('white')
        eb = Gtk.EventBox()
        eb.add(self.label)
        for state in (Gtk.StateType.ACTIVE, Gtk.StateType.NORMAL,
                      Gtk.StateType.SELECTED, Gtk.StateType.INSENSITIVE,
                      Gtk.StateType.PRELIGHT):
            self.label.modify_bg(state, black)
            eb.modify_bg(state, black)
            self.label.modify_fg(state, white)

        vbox.add(self.drawable)
        vbox.pack_start(eb, False, True, 0)
        vbox.pack_start(self.toolbar, False, True, 0)

        self.drawable.connect_after('realize', self.register_drawable)

        # Accept annotation/timestamp drop, to adjust time offset
        vbox.connect('drag-data-received', self.drag_received_cb)
        vbox.drag_dest_set(
            Gtk.DestDefaults.MOTION | Gtk.DestDefaults.HIGHLIGHT
            | Gtk.DestDefaults.ALL,
            config.data.get_target_types('annotation', 'timestamp'),
            Gdk.DragAction.COPY | Gdk.DragAction.LINK | Gdk.DragAction.MOVE)

        vbox.show_all()
        return vbox
Ejemplo n.º 25
0
    def __init__(self, value, controller, width=None, epsilon=None, comment_getter=None, visible_label=True, bgcolor=None, callback=None):
        """Instanciate a new TimestampRepresentation.

        @param value: the timestamp value
        @type value: int
        @param controller: the controller
        @type controller: advene.core.Controller
        @param width: the snapshot width
        @type width: int
        @param epsilon: the precision (for snapshot display)
        @type epsilon: int (ms)
        @param comment_getter: method returning the associated comment
        @type comment_getter: method
        @param visible_label: should the timestamp label be displayed?
        @type visible_label: boolean
        @param bgcolor: background color
        @type bgcolor: string
        @value callback: a callback that will be called before value modification
        @type callback: method. If it returns False, then the modification will be cancelled
        """
        super(TimestampRepresentation, self).__init__()
        self._value=value
        self.controller=controller
        self._width=width or config.data.preferences['bookmark-snapshot-width']
        if epsilon is None:
            epsilon=config.data.preferences['bookmark-snapshot-precision']
        self.epsilon=epsilon
        self.visible_label=visible_label
        # comment_getter is a method which returns the comment
        # associated to this timestamp
        self.comment_getter=comment_getter
        # extend_popup_menu is a method which takes the menu and the
        # element as parameter, and adds appropriate menu items.
        self.extend_popup_menu=None
        self.highlight=False
        self._bgcolor = None
        # Displayed text.
        self._text = '<span size="xx-small">%(timestamp)s</span>'
        self.callback = callback

        box=gtk.VBox()
        self.image=gtk.Image()
        self.label=gtk.Label()
        box.pack_start(self.image, expand=False)
        box.pack_start(self.label, expand=False)
        if not self.visible_label:
            self.label.set_no_show_all(True)
            self.label.hide()
        self.add(box)
        self.box=box

        self._bgcolor = bgcolor

        self.refresh()

        self.connect('button-press-event', self._button_press_handler)

        enable_drag_source(self, self.get_value, self.controller)

        def enter_bookmark(widget, event):
            self.controller.notify('BookmarkHighlight', timestamp=self.value, immediate=True)
            self.highlight=True
            return False
        def leave_bookmark(widget, event):
            self.controller.notify('BookmarkUnhighlight', timestamp=self.value, immediate=True)
            self.highlight=False
            return False
        self.connect('enter-notify-event', enter_bookmark)
        self.connect('leave-notify-event', leave_bookmark)

        self._rules=[]
        # React to UpdateSnapshot events
        self._rules.append(self.controller.event_handler.internal_rule (event='SnapshotUpdate',
                                                                        method=self.snapshot_update_cb))
        self.connect('destroy', self.remove_rules)