Beispiel #1
0
    def __init__(self, element, composition, timeline):
        goocanvas.Group.__init__(self)
        View.__init__(self)
        Zoomable.__init__(self)

        self.element = element
        self.comp = composition
        self.timeline = timeline

        self.bg = goocanvas.Rect(height=self.__HEIGHT__,
                                 fill_color_rgba=self.__NORMAL__,
                                 line_width=0)

        self.content = Preview(self.element)
        self.name = goocanvas.Text(x=10,
                                   text=os.path.basename(
                                       unquote(element.factory.name)),
                                   font="Sans 9",
                                   fill_color_rgba=0x000000FF,
                                   alignment=pango.ALIGN_LEFT)

        self.start_handle = StartHandle(element,
                                        timeline,
                                        height=self.__HEIGHT__)
        self.end_handle = EndHandle(element, timeline, height=self.__HEIGHT__)

        for thing in (self.bg, self.content, self.start_handle,
                      self.end_handle, self.name):
            self.add_child(thing)

        if element:
            self.zoomChanged()
        self.normal()
Beispiel #2
0
    def __init__(self, element, composition, timeline):
        goocanvas.Group.__init__(self)
        View.__init__(self)
        Zoomable.__init__(self)

        self.element = element
        self.comp = composition
        self.timeline = timeline

        self.bg = goocanvas.Rect(
            height=self.__HEIGHT__, 
            fill_color_rgba=self.__NORMAL__,
            line_width=0)

        self.content = Preview(self.element)
        self.name = goocanvas.Text(
            x=10,
            text=os.path.basename(unquote(element.factory.name)),
            font="Sans 9",
            fill_color_rgba=0x000000FF,
            alignment=pango.ALIGN_LEFT)
 
        self.start_handle = StartHandle(element, timeline,
            height=self.__HEIGHT__)
        self.end_handle = EndHandle(element, timeline,
            height=self.__HEIGHT__)

        for thing in (self.bg, self.content, self.start_handle, self.end_handle, self.name):
            self.add_child(thing)

        if element:
            self.zoomChanged()
        self.normal()
Beispiel #3
0
 def __init__(self, element, timeline, **kwargs):
     self.element = element
     self.timeline = timeline
     goocanvas.Rect.__init__(self,
                             width=5,
                             fill_color_rgba=0x00000022,
                             line_width=0,
                             **kwargs)
     View.__init__(self)
     Zoomable.__init__(self)
Beispiel #4
0
 def __init__(self, instance, element, timeline, **kwargs):
     self.app = instance
     self.element = element
     self.timeline = timeline
     goocanvas.Image.__init__(self,
                              pixbuf=TRIMBAR_PIXBUF,
                              line_width=0,
                              **kwargs)
     View.__init__(self)
     Zoomable.__init__(self)
Beispiel #5
0
 def __init__(self, element, timeline, **kwargs):
     self.element = element
     self.timeline = timeline
     goocanvas.Rect.__init__(self,
         width=5,
         fill_color_rgba=0x00000022,
         line_width=0,
         **kwargs
     )
     View.__init__(self)
     Zoomable.__init__(self)
 def __init__(self, instance, element, timeline, **kwargs):
     self.app = instance
     self.element = element
     self.timeline = timeline
     goocanvas.Image.__init__(self,
         pixbuf = TRIMBAR_PIXBUF,
         line_width=0,
         pointer_events=goocanvas.EVENTS_FILL,
         **kwargs
     )
     View.__init__(self)
     Zoomable.__init__(self)
Beispiel #7
0
    def __init__(self, instance, element, track, timeline):
        goocanvas.Group.__init__(self)
        View.__init__(self)
        Zoomable.__init__(self)
        self.app = instance
        self.track = track
        self.timeline = timeline
        self.namewidth = 0
        self.nameheight = 0

        self.bg = goocanvas.Rect(height=self.height, line_width=0)

        self.content = Preview(element)

        self.name = goocanvas.Text(x=NAME_HOFFSET + NAME_PADDING,
                                   y=NAME_VOFFSET + NAME_PADDING,
                                   operator=cairo.OPERATOR_ADD,
                                   alignment=pango.ALIGN_LEFT)
        self.namebg = goocanvas.Rect(radius_x=2,
                                     radius_y=2,
                                     x=NAME_HOFFSET,
                                     y=NAME_VOFFSET,
                                     line_width=0)

        self.start_handle = StartHandle(self.app,
                                        element,
                                        timeline,
                                        height=self.height)
        self.end_handle = EndHandle(self.app,
                                    element,
                                    timeline,
                                    height=self.height)

        self.selection_indicator = goocanvas.Rect(
            visibility=goocanvas.ITEM_INVISIBLE,
            line_width=0.0,
            height=self.height)

        for thing in (self.bg, self.content, self.selection_indicator,
                      self.start_handle, self.end_handle, self.namebg,
                      self.name):
            self.add_child(thing)

        for prop, interpolator in element.getInterpolators().itervalues():
            self.add_child(Curve(instance, element, interpolator, 50))

        self.element = element
        self.settings = instance.settings
        self.normal()
    def __init__(self, instance, element, track, timeline):
        goocanvas.Group.__init__(self)
        View.__init__(self)
        Zoomable.__init__(self)
        self.app = instance
        self.track = track
        self.timeline = timeline
        self.namewidth = 0
        self.nameheight = 0

        self.bg = goocanvas.Rect(
            height=self.height,
            line_width=1)

        self.content = Preview(self.app, element)

        self.name = goocanvas.Text(
            x= NAME_HOFFSET + NAME_PADDING,
            y= NAME_VOFFSET + NAME_PADDING,
            operator = cairo.OPERATOR_ADD,
            alignment=pango.ALIGN_LEFT)
        self.namebg = goocanvas.Rect(
            radius_x = 2,
            radius_y = 2,
            x = NAME_HOFFSET,
            y = NAME_VOFFSET,
            line_width = 0)

        self.start_handle = StartHandle(self.app, element, timeline,
            height=self.height)
        self.end_handle = EndHandle(self.app, element, timeline,
            height=self.height)

        self.selection_indicator = goocanvas.Rect(
            visibility=goocanvas.ITEM_INVISIBLE,
            line_width = 0.0,
            height=self.height)

        for thing in (self.bg, self.content, self.selection_indicator,
            self.start_handle, self.end_handle, self.namebg, self.name):
            self.add_child(thing)

        for prop, interpolator in element.getInterpolators().itervalues():
            self.add_child(Curve(instance, element, interpolator))

        self.element = element
        self.settings = instance.settings
        self.unfocus()
Beispiel #9
0
 def _move_temp_source(self, x, y):
     x1, y1, x2, y2 = self._controls.get_allocation()
     offset = 10 + (x2 - x1)
     x, y = self._canvas.convert_from_pixels(x - offset, y)
     priority = int((y // (LAYER_HEIGHT_EXPANDED + LAYER_SPACING)))
     delta = Zoomable.pixelToNs(x)
     self._move_context.editTo(delta, priority)
 def set_pos(self, item, pos):
     x, y = pos
     position = Zoomable.pixelToNs(x + self._hadj.get_value())
     priority = int((y - self._y_offset + self._vadj.get_value()) //
         (LAYER_HEIGHT_EXPANDED + LAYER_SPACING))
     self._context.setMode(self._getMode())
     self._context.editTo(position, priority)
Beispiel #11
0
 def set_pos(self, item, pos):
     x, y = pos
     position = Zoomable.pixelToNs(x)
     priority = int(
         (y - self._y_offset) // (LAYER_HEIGHT_EXPANDED + LAYER_SPACING))
     self._context.setMode(self._getMode())
     self._context.editTo(position, priority)
 def scrollToPlayhead(self):
     width = self.get_allocation().width
     new_pos = Zoomable.nsToPixel(self._position)
     scroll_pos = self.hadj.get_value()
     if (new_pos < scroll_pos) or (new_pos > scroll_pos + width):
         self.scrollToPosition(new_pos - width / 2)
     return False
Beispiel #13
0
 def _updateScrollAdjustments(self):
     a = self.get_allocation()
     size = Zoomable.nsToPixel(self.timeline.duration)
     self.hadj.props.lower = 0
     self.hadj.props.upper = size + 200  # why is this necessary???
     self.hadj.props.page_size = a.width
     self.hadj.props.page_increment = size * 0.9
     self.hadj.props.step_increment = size * 0.1
Beispiel #14
0
 def _updateScrollAdjustments(self):
     a = self.get_allocation()
     size = Zoomable.nsToPixel(self.timeline.duration)
     self.hadj.props.lower = 0
     self.hadj.props.upper = size + 200  # why is this necessary???
     self.hadj.props.page_size = a.width
     self.hadj.props.page_increment = size * 0.9
     self.hadj.props.step_increment = size * 0.1
Beispiel #15
0
    def __init__(self, instance, ui_manager):
        gtk.Table.__init__(self, rows=2, columns=1, homogeneous=False)
        Loggable.__init__(self)
        Zoomable.__init__(self)
        self.log("Creating Timeline")

        self._updateZoom = True
        self.project = None
        self.ui_manager = ui_manager
        self.app = instance
        self._temp_objects = None
        self._factories = None
        self._finish_drag = False
        self._position = 0
        self._state = gst.STATE_NULL
        self._createUI()
        self._prev_duration = 0
        self.rate = gst.Fraction(1, 1)
Beispiel #16
0
    def __init__(self, instance, ui_manager):
        gtk.Table.__init__(self, rows=2, columns=1, homogeneous=False)
        Loggable.__init__(self)
        Zoomable.__init__(self)
        self.log("Creating Timeline")

        self._updateZoom = True
        self.project = None
        self.ui_manager = ui_manager
        self.app = instance
        self._temp_objects = None
        self._factories = None
        self._finish_drag = False
        self._position = 0
        self._state = gst.STATE_NULL
        self._createUI()
        self._prev_duration = 0
        self.rate = gst.Fraction(1, 1)
Beispiel #17
0
    def scrollToPlayhead(self):
        """
        Scroll the current position as close to the center of the view
        as possible (as close as the timeline canvas allows).
        """
        page_size = self.hadj.get_page_size()

        new_pos = Zoomable.nsToPixel(self._position)
        scroll_pos = self.hadj.get_value()
        if (new_pos > scroll_pos + page_size) or (new_pos < scroll_pos):
            self.scrollToPosition(min(new_pos - page_size / 2, self.hadj.upper - page_size - 1))
        return False
Beispiel #18
0
    def scrollToPlayhead(self):
        """
        Scroll the current position as close to the center of the view
        as possible (as close as the timeline canvas allows).
        """
        page_size = self.hadj.get_page_size()

        new_pos = Zoomable.nsToPixel(self._position)
        scroll_pos = self.hadj.get_value()
        if (new_pos > scroll_pos + page_size) or (new_pos < scroll_pos):
            self.scrollToPosition(min(new_pos - page_size / 2, self.hadj.upper - page_size - 1))
        return False
Beispiel #19
0
    def zoomChanged(self):
        if self._updateZoom:
            self._zoomAdjustment.set_value(self.getCurrentZoomLevel())

        # the new scroll position should preserve the current horizontal
        # position of the playhead in the window
        cur_playhead_offset = self._canvas._playhead.props.x - self.hadj.props.value
        new_pos = Zoomable.nsToPixel(self._position) - cur_playhead_offset

        self._updateScrollAdjustments()
        self._scrollToPosition(new_pos)
        self.ruler.queue_resize()
        self.ruler.queue_draw()
Beispiel #20
0
    def zoomChanged(self):
        if self._updateZoom:
            self._zoomAdjustment.set_value(self.getCurrentZoomLevel())

        # the new scroll position should preserve the current horizontal
        # position of the playhead in the window
        cur_playhead_offset = self._canvas._playhead.props.x -\
            self.hadj.props.value
        new_pos = Zoomable.nsToPixel(self._position) - cur_playhead_offset

        self._updateScrollAdjustments()
        self._scrollToPosition(new_pos)
        self.ruler.queue_resize()
        self.ruler.queue_draw()
Beispiel #21
0
 def _scrollEventCb(self, canvas, event):
     if event.state & gtk.gdk.SHIFT_MASK:
         # shift + scroll => vertical (up/down) scroll
         if event.direction == gtk.gdk.SCROLL_UP:
             self.scroll_up()
         elif event.direction == gtk.gdk.SCROLL_DOWN:
             self.scroll_down()
         event.state &= ~gtk.gdk.SHIFT_MASK
     elif event.state & gtk.gdk.CONTROL_MASK:
         # zoom + scroll => zooming (up: zoom in)
         if event.direction == gtk.gdk.SCROLL_UP:
             Zoomable.zoomIn()
             return True
         elif event.direction == gtk.gdk.SCROLL_DOWN:
             Zoomable.zoomOut()
             return True
         return False
     else:
         if event.direction == gtk.gdk.SCROLL_UP:
             self.scroll_left()
         elif event.direction == gtk.gdk.SCROLL_DOWN:
             self.scroll_right()
     return True
Beispiel #22
0
 def _scrollEventCb(self, canvas, event):
     if event.state & gtk.gdk.SHIFT_MASK:
         # shift + scroll => vertical (up/down) scroll
         if event.direction == gtk.gdk.SCROLL_UP:
             self.scroll_up()
         elif event.direction == gtk.gdk.SCROLL_DOWN:
             self.scroll_down()
         event.state &= ~gtk.gdk.SHIFT_MASK
     elif event.state & gtk.gdk.CONTROL_MASK:
         # zoom + scroll => zooming (up: zoom in)
         if event.direction == gtk.gdk.SCROLL_UP:
             Zoomable.zoomIn()
             return True
         elif event.direction == gtk.gdk.SCROLL_DOWN:
             Zoomable.zoomOut()
             return True
         return False
     else:
         if event.direction == gtk.gdk.SCROLL_UP:
             self.scroll_left()
         elif event.direction == gtk.gdk.SCROLL_DOWN:
             self.scroll_right()
     return True
Beispiel #23
0
 def click(self, pos):
     timeline = self._view.timeline
     element = self._view.element
     element_end = element.start + element.duration
     if self._last_event.get_state() & gtk.gdk.SHIFT_MASK:
         timeline.setSelectionToObj(element, SELECT_BETWEEN)
     elif self._last_event.get_state() & gtk.gdk.CONTROL_MASK:
         if element.selected:
             mode = UNSELECT
         else:
             mode = SELECT_ADD
         timeline.setSelectionToObj(element, mode)
     else:
         self._view.app.current.seeker.seek(Zoomable.pixelToNs(pos[0]))
         timeline.setSelectionToObj(element, SELECT)
Beispiel #24
0
 def click(self, pos):
     timeline = self._view.timeline
     element = self._view.element
     element_end = element.start + element.duration
     if self._last_event.get_state() & gtk.gdk.SHIFT_MASK:
         timeline.setSelectionToObj(element, SELECT_BETWEEN)
     elif self._last_event.get_state() & gtk.gdk.CONTROL_MASK:
         if element.selected:
             mode = UNSELECT
         else:
             mode = SELECT_ADD
         timeline.setSelectionToObj(element, mode)
     else:
         self._view.app.current.seeker.seek(
             Zoomable.pixelToNs(pos[0]))
         timeline.setSelectionToObj(element, SELECT)
Beispiel #25
0
 def _zoomAdjustmentChangedCb(self, adjustment):
     # GTK crack
     self._updateZoom = False
     Zoomable.setZoomLevel(int(adjustment.get_value()))
     self._updateZoom = True
Beispiel #26
0
 def _updateScrollPosition(self, adjustment):
     self._scroll_pos_ns = Zoomable.pixelToNs(self.hadj.get_value())
     self._root_item.set_simple_transform(-self.hadj.get_value(),
                                          -self.vadj.get_value(), 1.0, 0)
Beispiel #27
0
    def _createUI(self):
        self.leftSizeGroup = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL)
        self.props.row_spacing = 2
        self.props.column_spacing = 2
        self.hadj = gtk.Adjustment()
        self.vadj = gtk.Adjustment()

        # zooming slider
        self._zoomAdjustment = gtk.Adjustment()
        self._zoomAdjustment.set_value(Zoomable.getCurrentZoomLevel())
        self._zoomAdjustment.connect("value-changed",
            self._zoomAdjustmentChangedCb)
        self._zoomAdjustment.props.lower = 0
        self._zoomAdjustment.props.upper = Zoomable.zoom_steps
        zoomslider = gtk.HScale(self._zoomAdjustment)
        zoomslider.props.draw_value = False
        zoomslider.set_tooltip_text(_("Zoom Timeline"))
        self.attach(zoomslider, 0, 1, 0, 1, yoptions=0, xoptions=gtk.FILL)

        # controls for tracks and layers
        self._controls = TimelineControls()
        controlwindow = gtk.Viewport(None, self.vadj)
        controlwindow.add(self._controls)
        controlwindow.set_size_request(-1, 1)
        controlwindow.set_shadow_type(gtk.SHADOW_OUT)
        self.attach(controlwindow, 0, 1, 1, 2, xoptions=0)

        # timeline ruler
        self.ruler = ruler.ScaleRuler(self.app, self.hadj)
        self.ruler.set_size_request(0, 25)
        self.ruler.set_border_width(2)
        self.ruler.connect("key-press-event", self._keyPressEventCb)
        self.ruler.connect("size-allocate", self._rulerSizeAllocateCb)
        rulerframe = gtk.Frame()
        rulerframe.set_shadow_type(gtk.SHADOW_OUT)
        rulerframe.add(self.ruler)
        self.attach(rulerframe, 1, 2, 0, 1, yoptions=0)

        # proportional timeline
        self._canvas = TimelineCanvas(self.app)
        self._root_item = self._canvas.get_root_item()
        self.attach(self._canvas, 1, 2, 1, 2)

        # scrollbar
        self._hscrollbar = gtk.HScrollbar(self.hadj)
        self._vscrollbar = gtk.VScrollbar(self.vadj)
        self.attach(self._hscrollbar, 1, 2, 2, 3, yoptions=0)
        self.attach(self._vscrollbar, 2, 3, 1, 2, xoptions=0)
        self.hadj.connect("value-changed", self._updateScrollPosition)
        self.vadj.connect("value-changed", self._updateScrollPosition)

        # error infostub
        self.infostub = InfoStub()
        self.attach(self.infostub, 1, 2, 4, 5, yoptions=0)

        self.show_all()
        self.infostub.hide()

        # toolbar actions
        actions = (
            ("ZoomIn", gtk.STOCK_ZOOM_IN, None, "<Control>plus", ZOOM_IN,
                self._zoomInCb),
            ("ZoomOut", gtk.STOCK_ZOOM_OUT, None, "<Control>minus", ZOOM_OUT,
                self._zoomOutCb),

            # actions for adding additional accelerators
            ("ControlEqualAccel", gtk.STOCK_ZOOM_IN, None, "<Control>equal", ZOOM_IN,
                self._zoomInCb),
            ("ControlKPAddAccel", gtk.STOCK_ZOOM_IN, None, "<Control>KP_Add", ZOOM_IN,
                self._zoomInCb),
            ("ControlKPSubtractAccel", gtk.STOCK_ZOOM_OUT, None, "<Control>KP_Subtract", ZOOM_OUT,
                self._zoomOutCb),
        )

        selection_actions = (
            ("DeleteObj", gtk.STOCK_DELETE, None, "Delete", DELETE,
                self.deleteSelected),
            ("UnlinkObj", "pitivi-unlink", None, "<Shift><Control>L", UNLINK,
                self.unlinkSelected),
            ("LinkObj", "pitivi-link", None, "<Control>L", LINK,
                self.linkSelected),
            ("UngroupObj", "pitivi-ungroup", None, "<Shift><Control>G", UNGROUP,
                self.ungroupSelected),
            ("GroupObj", "pitivi-group", None, "<Control>G", GROUP,
                self.groupSelected),
        )

        self.playhead_actions = (
            ("Split", "pitivi-split", _("Split"), "S", SPLIT,
                self.split),
            ("Keyframe", "pitivi-keyframe", _("Add a keyframe"), "K", KEYFRAME,
                self.keyframe),
            ("Prevframe", "pitivi-prevframe", _("_Prevframe"), "E", PREVFRAME,
                self.prevframe),
            ("Nextframe", "pitivi-nextframe", _("_Nextframe"), "R", NEXTFRAME,
                self.nextframe),
        )

        actiongroup = gtk.ActionGroup("timelinepermanent")
        actiongroup.add_actions(actions)
        self.ui_manager.insert_action_group(actiongroup, 0)

        actiongroup = gtk.ActionGroup("timelineselection")
        actiongroup.add_actions(selection_actions)
        actiongroup.add_actions(self.playhead_actions)
        self.link_action = actiongroup.get_action("LinkObj")
        self.unlink_action = actiongroup.get_action("UnlinkObj")
        self.group_action = actiongroup.get_action("GroupObj")
        self.ungroup_action = actiongroup.get_action("UngroupObj")
        self.delete_action = actiongroup.get_action("DeleteObj")
        self.split_action = actiongroup.get_action("Split")
        self.keyframe_action = actiongroup.get_action("Keyframe")
        self.prevframe_action = actiongroup.get_action("Prevframe")
        self.nextframe_action = actiongroup.get_action("Nextframe")

        self.ui_manager.insert_action_group(actiongroup, -1)

        self.ui_manager.add_ui_from_string(ui)

        # drag and drop
        self.drag_dest_set(gtk.DEST_DEFAULT_MOTION,
            [dnd.FILESOURCE_TUPLE, dnd.EFFECT_TUPLE],
            gtk.gdk.ACTION_COPY)

        self.connect("drag-data-received", self._dragDataReceivedCb)
        self.connect("drag-leave", self._dragLeaveCb)
        self.connect("drag-drop", self._dragDropCb)
        self.connect("drag-motion", self._dragMotionCb)
        self._canvas.connect("button-press-event", self._buttonPress)
        self._canvas.connect("button-release-event", self._buttonRelease)
        self._canvas.connect("key-press-event", self._keyPressEventCb)
Beispiel #28
0
 def _zoomInCb(self, unused_action):
     Zoomable.zoomIn()
Beispiel #29
0
    def _createUI(self):
        self.leftSizeGroup = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL)
        self.props.row_spacing = 2
        self.props.column_spacing = 2
        self.hadj = gtk.Adjustment()
        self.vadj = gtk.Adjustment()

        # zooming slider
        self._zoomAdjustment = gtk.Adjustment()
        self._zoomAdjustment.set_value(Zoomable.getCurrentZoomLevel())
        self._zoomAdjustment.connect("value-changed",
            self._zoomAdjustmentChangedCb)
        self._zoomAdjustment.props.lower = 0
        self._zoomAdjustment.props.upper = Zoomable.zoom_steps
        zoomslider = gtk.HScale(self._zoomAdjustment)
        zoomslider.props.draw_value = False
        zoomslider.set_tooltip_text(_("Zoom Timeline"))
        self.attach(zoomslider, 0, 1, 0, 1, yoptions=0, xoptions=gtk.FILL)

        # controls for tracks and layers
        self._controls = TimelineControls()
        controlwindow = gtk.Viewport(None, self.vadj)
        controlwindow.add(self._controls)
        controlwindow.set_size_request(-1, 1)
        controlwindow.set_shadow_type(gtk.SHADOW_OUT)
        self.attach(controlwindow, 0, 1, 1, 2, xoptions=0)

        # timeline ruler
        self.ruler = ruler.ScaleRuler(self.app, self.hadj)
        self.ruler.set_size_request(0, 25)
        self.ruler.set_border_width(2)
        self.ruler.connect("key-press-event", self._keyPressEventCb)
        self.ruler.connect("size-allocate", self._rulerSizeAllocateCb)
        rulerframe = gtk.Frame()
        rulerframe.set_shadow_type(gtk.SHADOW_OUT)
        rulerframe.add(self.ruler)
        self.attach(rulerframe, 1, 2, 0, 1, yoptions=0)

        # proportional timeline
        self._canvas = TimelineCanvas(self.app)
        timelinewindow = gtk.ScrolledWindow(self.hadj, self.vadj)
        timelinewindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        timelinewindow.add(self._canvas)
        timelinewindow.set_shadow_type(gtk.SHADOW_IN)
        timelinewindow.set_name("timelinewindow")

        # temp fix for padding between scrollbar and scrolled window
        #FIXME: should be set at an global position for easy editing?
        gtk.rc_parse_string("""
            style 'timelinewindow'
            {
                GtkScrolledWindow::scrollbar-spacing = 0
            }
            widget '*.timelinewindow' style 'timelinewindow'
        """)

        self.attach(timelinewindow, 1, 2, 1, 2)

        # error infostub
        self.infostub = InfoStub()
        self.attach(self.infostub, 1, 2, 2, 3, yoptions=0)

        self.show_all()
        self.infostub.hide()

        # toolbar actions
        actions = (
            ("ZoomIn", gtk.STOCK_ZOOM_IN, None, "<Control>equal", ZOOM_IN,
                self._zoomInCb),
            ("ZoomOut", gtk.STOCK_ZOOM_OUT, None, "<Control>minus", ZOOM_OUT,
                self._zoomOutCb),
        )

        selection_actions = (
            ("DeleteObj", gtk.STOCK_DELETE, None, "Delete", DELETE,
                self.deleteSelected),
            ("UnlinkObj", "pitivi-unlink", None, "<Shift><Control>L", UNLINK,
                self.unlinkSelected),
            ("LinkObj", "pitivi-link", None, "<Control>L", LINK,
                self.linkSelected),
            ("UngroupObj", "pitivi-ungroup", None, "<Shift><Control>G", UNGROUP,
                self.ungroupSelected),
            ("GroupObj", "pitivi-group", None, "<Control>G", GROUP,
                self.groupSelected),
        )

        playhead_actions = (
            ("Split", "pitivi-split", _("Split"), "S", SPLIT,
                self.split),
        )

        actiongroup = gtk.ActionGroup("timelinepermanent")
        actiongroup.add_actions(actions)
        actiongroup.add_actions(playhead_actions)
        self.ui_manager.insert_action_group(actiongroup, 0)

        actiongroup = gtk.ActionGroup("timelineselection")
        actiongroup.add_actions(selection_actions)
        self.link_action = actiongroup.get_action("LinkObj")
        self.unlink_action = actiongroup.get_action("UnlinkObj")
        self.group_action = actiongroup.get_action("GroupObj")
        self.ungroup_action = actiongroup.get_action("UngroupObj")
        self.delete_action = actiongroup.get_action("DeleteObj")

        self.ui_manager.insert_action_group(actiongroup, -1)

        self.ui_manager.add_ui_from_string(ui)

        # drag and drop
        self.drag_dest_set(gtk.DEST_DEFAULT_MOTION, 
            [dnd.FILESOURCE_TUPLE],
            gtk.gdk.ACTION_COPY)

        self.connect("drag-data-received", self._dragDataReceivedCb)
        self.connect("drag-leave", self._dragLeaveCb)
        self.connect("drag-drop", self._dragDropCb)
        self.connect("drag-motion", self._dragMotionCb)
        self._canvas.connect("button-press-event", self._buttonPress)
        self._canvas.connect("button-release-event", self._buttonRelease)
        self._canvas.connect("key-press-event", self._keyPressEventCb)
Beispiel #30
0
 def _zoomOutCb(self, unused_action):
     Zoomable.zoomOut()
Beispiel #31
0
 def _updateScrollPosition(self, adjustment):
     self._scroll_pos_ns = Zoomable.pixelToNs(self.hadj.get_value())
     self._root_item.set_simple_transform(-self.hadj.get_value(),
         -self.vadj.get_value(), 1.0, 0)