def __init__(self, settings, minimal=False): Gtk.Grid.__init__(self) Loggable.__init__(self) self.log("Init PreviewWidget") self.connect('destroy', self._destroy_cb) self.settings = settings self.preview_cache = {} self.preview_cache_errors = {} self.discoverer = GstPbutils.Discoverer.new(Gst.SECOND) # playbin for play pics self.player = AssetPipeline(clip=None, name="preview-player") self.player.connect('eos', self._pipelineEosCb) self.player.connect('error', self._pipelineErrorCb) self.player._bus.connect('message::tag', self._tag_found_cb) # some global variables for preview handling self.is_playing = False self.original_dims = (PREVIEW_WIDTH, PREVIEW_HEIGHT) self.countinuous_seek = False self.slider_being_used = False self.current_selected_uri = "" self.current_preview_type = "" self.description = "" self.tags = {} # Gui elements: # Drawing area for video output self.preview_video = ViewerWidget( realizedCb=self._on_preview_video_realize_cb) self.preview_video.sink = self.player.video_sink self.preview_video.props.hexpand = minimal self.preview_video.props.vexpand = minimal self.attach(self.preview_video, 0, 0, 1, 1) # An image for images and audio self.preview_image = Gtk.Image() self.preview_image.set_size_request( self.settings.FCpreviewWidth, self.settings.FCpreviewHeight) self.preview_image.show() self.attach(self.preview_image, 0, 1, 1, 1) # Play button self.bbox = Gtk.HBox() self.play_button = Gtk.ToolButton() self.play_button.set_icon_name("media-playback-start") self.play_button.connect("clicked", self._on_start_stop_clicked_cb) self.bbox.pack_start(self.play_button, False, False, 0) # Scale for position handling self.pos_adj = Gtk.Adjustment() self.seeker = Gtk.Scale.new(Gtk.Orientation.HORIZONTAL, self.pos_adj) self.seeker.connect('button-press-event', self._on_seeker_press_cb) self.seeker.connect('button-release-event', self._on_seeker_press_cb) self.seeker.connect('motion-notify-event', self._on_motion_notify_cb) self.seeker.set_draw_value(False) self.seeker.show() self.bbox.pack_start(self.seeker, True, True, 0) # Zoom buttons self.b_zoom_in = Gtk.ToolButton() self.b_zoom_in.set_icon_name("zoom-in") self.b_zoom_in.connect("clicked", self._on_zoom_clicked_cb, 1) self.b_zoom_out = Gtk.ToolButton() self.b_zoom_out.set_icon_name("zoom-out") self.b_zoom_out.connect("clicked", self._on_zoom_clicked_cb, -1) self.bbox.pack_start(self.b_zoom_in, False, True, 0) self.bbox.pack_start(self.b_zoom_out, False, True, 0) self.bbox.show_all() self.attach(self.bbox, 0, 2, 1, 1) # Label for metadata tags self.l_tags = Gtk.Label() self.l_tags.set_justify(Gtk.Justification.LEFT) self.l_tags.set_ellipsize(Pango.EllipsizeMode.END) self.l_tags.show() self.attach(self.l_tags, 0, 3, 1, 1) # Error handling vbox = Gtk.VBox() vbox.set_spacing(SPACING) self.l_error = Gtk.Label(label=_("Pitivi can not preview this file.")) self.b_details = Gtk.Button.new_with_label(_("More info")) self.b_details.connect('clicked', self._on_b_details_clicked_cb) vbox.pack_start(self.l_error, True, True, 0) vbox.pack_start(self.b_details, False, False, 0) vbox.show() self.attach(vbox, 0, 4, 1, 1) if minimal: self.remove(self.l_tags) self.bbox.remove(self.b_zoom_in) self.bbox.remove(self.b_zoom_out)
def __init__(self, instance): Gtk.VBox.__init__(self) Loggable.__init__(self) self.log("Init PreviewWidget") self.connect('destroy', self._destroy_cb) self.settings = instance.settings self.preview_cache = {} self.preview_cache_errors = {} self.discoverer = Discoverer.new(Gst.SECOND) #playbin for play pics self.player = Gst.ElementFactory.make("playbin", "preview-player") bus = self.player.get_bus() bus.add_signal_watch() bus.connect('message', self._bus_message_cb) bus.enable_sync_message_emission() bus.connect('sync-message::element', self._sync_message_cb) bus.connect('message::tag', self._tag_found_cb) self.__videosink = self.player.get_property("video-sink") self.__fakesink = Gst.ElementFactory.make("fakesink", "fakesink") #some global variables for preview handling self.is_playing = False self.time_format = Gst.Format(Gst.Format.TIME) self.original_dims = (PREVIEW_WIDTH, PREVIEW_HEIGHT) self.countinuous_seek = False self.slider_being_used = False self.current_selected_uri = "" self.current_preview_type = "" self.description = "" self.tags = {} # Gui elements: # Drawing area for video output self.preview_video = ViewerWidget() self.preview_video.modify_bg(Gtk.StateType.NORMAL, self.preview_video.get_style().black) self.pack_start(self.preview_video, False, True, 0) # An image for images and audio self.preview_image = Gtk.Image() self.preview_image.set_size_request(self.settings.FCpreviewWidth, self.settings.FCpreviewHeight) self.preview_image.show() self.pack_start(self.preview_image, False, True, 0) # Play button self.bbox = Gtk.HBox() self.play_button = Gtk.ToolButton(Gtk.STOCK_MEDIA_PLAY) self.play_button.connect("clicked", self._on_start_stop_clicked_cb) self.bbox.pack_start(self.play_button, False, True, 0) #Scale for position handling self.pos_adj = Gtk.Adjustment() self.seeker = Gtk.Scale.new(Gtk.Orientation.HORIZONTAL, self.pos_adj) self.seeker.connect('button-press-event', self._on_seeker_press_cb) self.seeker.connect('button-release-event', self._on_seeker_press_cb) self.seeker.connect('motion-notify-event', self._on_motion_notify_cb) self.seeker.set_draw_value(False) self.seeker.show() self.bbox.pack_start(self.seeker, True, True, 0) # Zoom buttons self.b_zoom_in = Gtk.ToolButton(Gtk.STOCK_ZOOM_IN) self.b_zoom_in.connect("clicked", self._on_zoom_clicked_cb, 1) self.b_zoom_out = Gtk.ToolButton(Gtk.STOCK_ZOOM_OUT) self.b_zoom_out.connect("clicked", self._on_zoom_clicked_cb, -1) self.bbox.pack_start(self.b_zoom_in, False, True, 0) self.bbox.pack_start(self.b_zoom_out, False, True, 0) self.bbox.show_all() self.pack_start(self.bbox, False, False, 0) # Label for metadata tags self.l_tags = Gtk.Label() self.l_tags.set_justify(Gtk.Justification.LEFT) self.l_tags.set_ellipsize(Pango.EllipsizeMode.END) self.l_tags.show() self.pack_start(self.l_tags, False, False, 0) # Error handling vbox = Gtk.VBox() vbox.set_spacing(SPACING) self.l_error = Gtk.Label(label=_("PiTiVi can not preview this file.")) self.b_details = Gtk.Button(_("More info")) self.b_details.connect('clicked', self._on_b_details_clicked_cb) vbox.pack_start(self.l_error, True, True, 0) vbox.pack_start(self.b_details, False, False, 0) vbox.show() self.pack_start(vbox, False, False, 0)