From 6c07cc5fbd2a9ffcbeca37be6a2d06e1e9a59f28 Mon Sep 17 00:00:00 2001 From: Jussi Kukkonen Date: Wed, 20 Feb 2013 16:52:38 +0200 Subject: [Player] Remove Stop-button Remove "Stop" button: it does not give the user much added value and the relation to pause is not clear to many people (this is why most modern players do not use it). Signed-off-by: Jussi Kukkonen --- src/msd/msd_player.py | 49 +++++++++++++++++-------------------------------- 1 file changed, 17 insertions(+), 32 deletions(-) diff --git a/src/msd/msd_player.py b/src/msd/msd_player.py index ac14bcc..6f55551 100644 --- a/src/msd/msd_player.py +++ b/src/msd/msd_player.py @@ -114,13 +114,6 @@ class GStreamerWindow(PlayWindowBase): button_bar = gtk.HBox(True, 0) - self.__stop_button = gtk.Button() - self.__stop_button.connect("clicked", self.__stop) - stop_image = gtk.Image() - stop_image.set_from_stock(gtk.STOCK_MEDIA_STOP, - gtk.ICON_SIZE_BUTTON) - self.__stop_button.add(stop_image) - self.__play_pause_button = gtk.Button() self.__play_pause_button.connect("clicked", self.__play_pause) self.__play_pause_image = gtk.Image() @@ -130,8 +123,7 @@ class GStreamerWindow(PlayWindowBase): self.__scale = gtk.HScale() - button_bar.pack_start(self.__play_pause_button, True, True, 0) - button_bar.pack_start(self.__stop_button, True, True, 0) + button_bar.pack_start(self.__play_pause_button, True, False, 0) self.private_area.pack_start(self.__scale, False, False, 0) self.private_area.pack_start(button_bar, False, False, 0) @@ -143,35 +135,23 @@ class GStreamerWindow(PlayWindowBase): self.__adjustment = None self.player.set_state(gst.STATE_PLAYING) - def __stop_or_pause(self): - self.__play_pause_image.set_from_stock(gtk.STOCK_MEDIA_PLAY, - gtk.ICON_SIZE_BUTTON) - self.__scale.set_sensitive(True) - if self.__update_pos_id != 0: - glib.source_remove(self.__update_pos_id) - self.__update_pos_id = 0 - - def __stop(self, button): - self.player.set_state(gst.STATE_NULL) - self.__stop_button.set_sensitive(False) - self.__stop_or_pause() - if self.__adjustment: - self.__adjustment.set_value(0) - def __play_pause(self, button): - print (self.player.get_state()[1]) if (self.player.get_state()[1] == gst.STATE_PLAYING): self.player.set_state(gst.STATE_PAUSED) - self.__stop_or_pause() + self.__play_pause_image.set_from_stock (gtk.STOCK_MEDIA_PLAY, + gtk.ICON_SIZE_BUTTON) + self.__scale.set_sensitive(True) + if self.__update_pos_id != 0: + glib.source_remove(self.__update_pos_id) + self.__update_pos_id = 0 else: self.player.set_state(gst.STATE_PLAYING) self.__play_pause_image.set_from_stock(gtk.STOCK_MEDIA_PAUSE, gtk.ICON_SIZE_BUTTON) self.__scale.set_sensitive(False) - self.__stop_button.set_sensitive(True) - def __update_pos(self, user_data): + def __update_pos(self, user_data=None): try: pos = self.player.query_position(gst.FORMAT_TIME, None)[0] if pos != -1: @@ -188,12 +168,14 @@ class GStreamerWindow(PlayWindowBase): self.player.set_state(gst.STATE_NULL) PlayWindowBase.quit(self, button) + def __seek (self, position): + self.player.seek_simple(gst.FORMAT_TIME, gst.SEEK_FLAG_FLUSH, + position) + def __adjusted(self, adjustment): (ret, state, pending) = self.player.get_state() if state != gst.STATE_PLAYING: - seek_pos = adjustment.get_value() * 1000000000 - self.player.seek_simple(gst.FORMAT_TIME, gst.SEEK_FLAG_FLUSH, - seek_pos) + self.__seek(adjustment.get_value() * 1000000000) def __format_time(self, scale, value): pos = int(self.__adjustment.get_value()) @@ -201,7 +183,8 @@ class GStreamerWindow(PlayWindowBase): def gs_message_cb(self, bus, message): if message.type == gst.MESSAGE_EOS or message.type == gst.MESSAGE_ERROR: - self.__stop(None) + self.__seek(0) + self.player.set_state(gst.STATE_PAUSED) elif message.type == gst.MESSAGE_STATE_CHANGED: (old, state, pending) = message.parse_state_changed() if self.__duration == -1 and (state == gst.STATE_PLAYING or @@ -227,6 +210,8 @@ class GStreamerWindow(PlayWindowBase): self.__update_pos_id = glib.timeout_add(500, self.__update_pos, None) + elif message.type == gst.MESSAGE_ASYNC_DONE: + self.__update_pos() class PlayWindowAudio(GStreamerWindow): -- cgit v1.2.1