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() self.discoverer.connect('discovery-done', self._update_preview_cb) self.discoverer.connect('discovery-error', self._error_detected_cb) #playbin for play pics self.player = get_playbin() 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.element_factory_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.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.STATE_NORMAL, self.preview_video.style.black) self.pack_start(self.preview_video, expand=False) # 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, expand=False) # 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, expand=False) #Scale for position handling self.pos_adj = gtk.Adjustment() self.seeker = gtk.HScale(self.pos_adj) self.seeker.set_update_policy(gtk.UPDATE_DISCONTINUOUS) 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) # 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, expand=False) self.bbox.pack_start(self.b_zoom_out, expand=False) self.bbox.show_all() self.pack_start(self.bbox, expand=False) # Label for metadata tags self.l_tags = gtk.Label() self.l_tags.set_justify(gtk.JUSTIFY_LEFT) self.l_tags.set_ellipsize(pango.ELLIPSIZE_END) self.l_tags.show() self.pack_start(self.l_tags, expand=False) # Error handling vbox = gtk.VBox() vbox.set_spacing(SPACING) self.l_error = gtk.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) vbox.pack_start(self.b_details, expand=False, fill=False) vbox.show() self.pack_start(vbox, expand=False, fill=False)