From febeff096f13a1b38d3059bbbb06a0181d79536a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Asbj=C3=B8rn=20Sloth=20T=C3=B8nnesen?= Date: Thu, 29 Apr 2010 20:16:38 +0000 Subject: [PATCH] bulk pre-camp commit --- src/audioplayer.py | 2 ++ src/main.glade | 50 +++++++++++++++++++++---------------- src/mediaplayer.py | 69 +++++++++++++++++++++++++++++++++++++++++++++------- src/talkcutter.py | 1 - src/videoplayer.py | 2 ++ 5 files changed, 93 insertions(+), 31 deletions(-) diff --git a/src/audioplayer.py b/src/audioplayer.py index aac7bdf..d0ba582 100644 --- a/src/audioplayer.py +++ b/src/audioplayer.py @@ -14,6 +14,8 @@ class audioplayer(mediaplayer): self.spinner = self.wTree.get_widget('audio_spin') self.seeker = self.wTree.get_widget('audio_seeker') self.label = self.wTree.get_widget('audio_label') + self.bbox = self.wTree.get_widget('audio_buttons') + self.status = self.wTree.get_widget('audio_status') super(audioplayer, self).__init__() diff --git a/src/main.glade b/src/main.glade index f77d5fd..e46fd4d 100644 --- a/src/main.glade +++ b/src/main.glade @@ -225,12 +225,11 @@ - - gtk-media-pause + True - True - True - True + + + False @@ -243,6 +242,16 @@ 2 + + + True + label + + + False + 3 + + 0 @@ -296,12 +305,11 @@ - - gtk-media-pause + True - True - True - True + + + False @@ -314,6 +322,16 @@ 1 + + + True + label + + + False + 2 + + False @@ -368,17 +386,7 @@ - - gtk-media-pause - True - True - True - True - - - False - 2 - + 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): diff --git a/src/talkcutter.py b/src/talkcutter.py index 103a70a..15e5b94 100755 --- a/src/talkcutter.py +++ b/src/talkcutter.py @@ -45,7 +45,6 @@ class TalkCutter: self.wTree.visible = True gtk.main() - def on_destroy(self, window): self.playbin.set_state(gst.STATE_NULL) gtk.main_quit() diff --git a/src/videoplayer.py b/src/videoplayer.py index 0d88a22..73e22f2 100644 --- a/src/videoplayer.py +++ b/src/videoplayer.py @@ -15,6 +15,8 @@ class videoplayer(mediaplayer): self.spinner = self.wTree.get_widget('video_spin') self.seeker = self.wTree.get_widget('video_seeker') self.label = self.wTree.get_widget('video_label') + self.bbox = self.wTree.get_widget('video_buttons') + self.status = self.wTree.get_widget('video_status') self.drawingarea = self.wTree.get_widget('video') super(videoplayer, self).__init__() -- 1.7.10.4