X-Git-Url: http://git.asbjorn.biz/?p=talkcutter.git;a=blobdiff_plain;f=src%2Fmediaplayer.py;fp=src%2Fmediaplayer.py;h=4b4df99a4ba04ae29e88a61f7e43ff5cc65ba053;hp=b2741b046a02e7629161cde524517ef1f3cb14e9;hb=febeff096f13a1b38d3059bbbb06a0181d79536a;hpb=6958c5bcc833e071bb8b0cae1483c02c00c7099b diff --git a/src/mediaplayer.py b/src/mediaplayer.py index b2741b0..4b4df99 100644 --- a/src/mediaplayer.py +++ b/src/mediaplayer.py @@ -6,6 +6,9 @@ import gtk import gtk.glade class mediaplayer(object): + PLAY_IMAGE = gtk.image_new_from_stock(gtk.STOCK_MEDIA_PLAY, gtk.ICON_SIZE_BUTTON) + PAUSE_IMAGE = gtk.image_new_from_stock(gtk.STOCK_MEDIA_PAUSE, gtk.ICON_SIZE_BUTTON) + def __init__( self ): self.playbin = gst.element_factory_make('playbin2') @@ -15,7 +18,7 @@ class mediaplayer(object): self.spinner.set_range(0, 100) self.spinner.set_increments(1, 10) - self.spinner.connect('change-value', self.on_seeker_change) + self.spinner.connect('value-changed', self.on_spinner_change) self.seeker.set_range(0, 100) self.seeker.set_increments(1, 10) @@ -23,6 +26,24 @@ class mediaplayer(object): self.seeker.connect('button-press-event', self.on_button_press) self.seeker.connect('button-release-event', self.on_button_release) + self.play_button = gtk.Button() + self.play_button.set_image(self.PLAY_IMAGE) + self.play_button.connect('clicked', self.on_play_clicked) + self.bbox.pack_start(self.play_button, False) + + self.begin_button = gtk.Button() + self.begin_button.set_image(self.PLAY_IMAGE) + self.begin_button.connect('clicked', self.on_begin_clicked) + self.bbox.pack_start(self.begin_button, False) + + self.end_button = gtk.Button() + self.end_button.set_image(self.PLAY_IMAGE) + self.end_button.connect('clicked', self.on_end_clicked) + self.bbox.pack_start(self.end_button, False) + + self.bbox.show_all() + + self.is_loaded = False self.is_playing = False self.known_range = False @@ -30,9 +51,11 @@ class mediaplayer(object): self.playbin.set_property('uri', uri) self.playbin.set_state(gst.STATE_PLAYING) self.label.label = 'f'; - gobject.timeout_add(100, self.update_slider) + gobject.timeout_add(500, self.update_slider) self.is_playing = True + self.is_loaded = True self.known_range = False + self.label.set_text(uri) def on_finish(self, bus, message): self.playbin.set_state(gst.STATE_PAUSED); @@ -44,7 +67,7 @@ class mediaplayer(object): def update_slider(self): if not self.is_playing: - return False # cancel timeout + return True try: if not self.known_range: @@ -61,7 +84,7 @@ class mediaplayer(object): # block seek handler so we don't seek when we set_value() self.seeker.handler_block_by_func(self.on_seeker_change) - self.spinner.handler_block_by_func(self.on_seeker_change) + self.spinner.handler_block_by_func(self.on_spinner_change) value = float(nanosecs) / gst.SECOND; @@ -71,7 +94,7 @@ class mediaplayer(object): self.spinner.set_text("%f" %(value)) self.seeker.handler_unblock_by_func(self.on_seeker_change) - self.spinner.handler_unblock_by_func(self.on_seeker_change) + self.spinner.handler_unblock_by_func(self.on_spinner_change) except gst.QueryError: # pipeline must not be ready and does not know position @@ -81,14 +104,42 @@ class mediaplayer(object): def on_seeker_change(self, element, a, b): - print 'on_seeker_change' seek_time_secs = element.get_value() + self.mseek(seek_time_secs) + + def on_spinner_change(self, element): + seek_time_secs = float(element.get_value()) + self.mseek(seek_time_secs) + + def mplay(self): + self.playbin.set_state(gst.STATE_PLAYING) + + def mpause(self): + self.playbin.set_state(gst.STATE_PAUSED) + + def mseek(self, seek_time_secs): + print 'seek: %f' % (seek_time_secs) self.playbin.seek_simple(gst.FORMAT_TIME, gst.SEEK_FLAG_FLUSH | gst.SEEK_FLAG_KEY_UNIT, seek_time_secs * gst.SECOND) def on_button_press(self, element, a): - self.playbin.set_state(gst.STATE_PAUSED); + if self.is_playing: + self.mpause() def on_button_release(self, element, a): - self.playbin.set_state(gst.STATE_PLAYING) - + if self.is_playing: + self.mplay() + + def on_play_clicked(self, element): + if self.is_playing: + self.mpause() + self.play_button.set_image(self.PLAY_IMAGE) + self.is_playing = False; + else: + self.mplay() + self.play_button.set_image(self.PAUSE_IMAGE) + self.is_playing = True; + + def on_begin_clicked(self, element): + + def on_end_clicked(self, element):