Ticket #3714: 0004-Show-No-media-message-when-Jukebox-starts-from-scrat.patch
File 0004-Show-No-media-message-when-Jukebox-starts-from-scrat.patch, 9.8 KB (added by humitos, 11 years ago) |
---|
-
activity.py
From a86f33908a1d764ff79c85adf5cc97f3b492528d Mon Sep 17 00:00:00 2001 From: Manuel Kaufmann <humitos@gmail.com> Date: Wed, 16 Jan 2013 10:12:26 -0300 Subject: [PATCH Jukebox 4/5] Show 'No media' message when Jukebox starts from scratch SL #4158 When the user starts a new instance of Jukebox the 'No media' message is shown with a button to 'Choose media files' that opens the Object Chooser. Signed-off-by: Manuel Kaufmann <humitos@gmail.com> --- activity.py | 42 +++++++++++++++++++++++------------------- controls.py | 9 +++++++-- emptypanel.py | 46 ++++++++++++++++++++++++++++++++++++++++++++++ icons/activity-jukebox.svg | 7 +++++++ viewtoolbar.py | 2 +- 5 files changed, 84 insertions(+), 22 deletions(-) create mode 100644 emptypanel.py create mode 100644 icons/activity-jukebox.svg diff --git a/activity.py b/activity.py index 32834f4..b05f46b 100644
a b 21 21 22 22 import sys 23 23 import logging 24 import emptypanel 24 25 from gettext import gettext as _ 25 26 26 27 from sugar3.activity import activity … … class JukeboxActivity(activity.Activity): 73 74 toolbar_box.toolbar.insert(activity_button, 0) 74 75 self.title_entry = activity_toolbar.title 75 76 76 view_toolbar = ViewToolbar()77 view_toolbar.connect('go-fullscreen',77 self._view_toolbar = ViewToolbar() 78 self._view_toolbar.connect('go-fullscreen', 78 79 self.__go_fullscreen_cb) 79 view_toolbar.connect('toggle-playlist',80 self._view_toolbar.connect('toggle-playlist', 80 81 self.__toggle_playlist_cb) 81 82 view_toolbar_button = ToolbarButton( 82 page= view_toolbar,83 page=self._view_toolbar, 83 84 icon_name='toolbar-view') 84 view_toolbar.show()85 self._view_toolbar.show() 85 86 toolbar_box.toolbar.insert(view_toolbar_button, -1) 86 87 view_toolbar_button.show() 87 88 88 self. canvas = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)89 self._video_canvas = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) 89 90 90 91 self.playlist_widget = PlayList() 91 92 self.playlist_widget.connect('play-index', self.__play_index) 92 93 self.playlist_widget.set_size_request( 93 94 Gdk.Screen.width() * PLAYLIST_WIDTH_PROP, 0) 94 self.playlist_widget.show() 95 self.canvas.pack_start(self.playlist_widget, False, True, 0) 95 self._video_canvas.pack_start(self.playlist_widget, False, True, 0) 96 96 97 97 # Create the player just once 98 98 self.player = GstPlayer() … … class JukeboxActivity(activity.Activity): 118 118 119 119 self._empty_widget.show() 120 120 self.videowidget = VideoWidget() 121 self.set_canvas(self. canvas)121 self.set_canvas(self._video_canvas) 122 122 self._init_view_area() 123 123 self.show_all() 124 124 125 125 self.player.init_view_area(self.videowidget) 126 126 127 # Check if the activity was launched from a Journal Entry128 if handle.uri:129 self._start(handle.uri, handle.title)130 131 127 self._volume_monitor = Gio.VolumeMonitor.get() 132 128 self._volume_monitor.connect('mount-added', self._mount_added_cb) 133 129 self._volume_monitor.connect('mount-removed', self._mount_removed_cb) 134 130 131 if handle.object_id is None: 132 # The activity was launched from scratch. We need to show 133 # the Empty Widget 134 self.playlist_widget.hide() 135 emptypanel.show(self, 'activity-jukebox', 136 _('No media'), _('Choose media files'), 137 self.control.show_picker_cb) 138 135 139 def __notify_active_cb(self, widget, event): 136 140 """Sugar notify us that the activity is becoming active or inactive. 137 141 When we are inactive, we stop the player if it is reproducing … … class JukeboxActivity(activity.Activity): 156 160 self.view_area.set_show_tabs(False) 157 161 self.view_area.append_page(self._empty_widget, None) 158 162 self.view_area.append_page(self.videowidget, None) 159 self. canvas.pack_end(self.view_area, expand=True,163 self._video_canvas.pack_end(self.view_area, expand=True, 160 164 fill=True, padding=0) 161 165 162 166 def _switch_canvas(self, show_video): … … class JukeboxActivity(activity.Activity): 170 174 self.view_area.set_current_page(1) 171 175 else: 172 176 self.view_area.set_current_page(0) 173 self. canvas.queue_draw()177 self._video_canvas.queue_draw() 174 178 175 179 def __key_press_event_cb(self, widget, event): 176 180 keyname = Gdk.keyval_name(event.keyval) … … class JukeboxActivity(activity.Activity): 318 322 self.fullscreen() 319 323 320 324 def __toggle_playlist_cb(self, toolbar): 321 if self.playlist_widget.get_visible(): 322 self.playlist_widget.hide() 323 else: 325 if self._view_toolbar._show_playlist.get_active(): 324 326 self.playlist_widget.show_all() 325 self.canvas.queue_draw() 327 else: 328 self.playlist_widget.hide() 329 self._video_canvas.queue_draw() 326 330 327 331 328 332 class VideoWidget(Gtk.DrawingArea): -
controls.py
diff --git a/controls.py b/controls.py index a5922e8..c86bd6d 100644
a b class Controls(GObject.GObject): 128 128 self.set_button_pause() 129 129 130 130 def __open_button_clicked_cb(self, widget): 131 self. __show_picker_cb()131 self.show_picker_cb() 132 132 133 133 def __erase_playlist_entry_clicked_cb(self, widget): 134 134 self.activity.playlist_widget.delete_selected_items() 135 135 136 def __show_picker_cb(self):136 def show_picker_cb(self, button=None): 137 137 jobject = None 138 138 chooser = ObjectChooser(self.activity, 139 139 what_filter=mime.GENERIC_TYPE_AUDIO) … … class Controls(GObject.GObject): 146 146 logging.info('Adding %s', jobject.file_path) 147 147 self.activity.playlist_widget.load_file(jobject) 148 148 self.check_if_next_prev() 149 150 if button is not None: 151 self.activity._switch_canvas(False) 152 self.activity._view_toolbar.\ 153 _show_playlist.set_active(True) 149 154 finally: 150 155 if jobject is not None: 151 156 jobject.destroy() -
new file emptypanel.py
diff --git a/emptypanel.py b/emptypanel.py new file mode 100644 index 0000000..bf4c414
- + 1 import logging 2 3 from gi.repository import Gtk 4 5 from sugar3.graphics import style 6 from sugar3.graphics.icon import Icon 7 8 9 def show(activity, icon_name, message, btn_label, btn_callback): 10 empty_widgets = Gtk.EventBox() 11 empty_widgets.modify_bg(Gtk.StateType.NORMAL, 12 style.COLOR_WHITE.get_gdk_color()) 13 14 vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) 15 mvbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) 16 vbox.pack_start(mvbox, True, False, 0) 17 18 image_icon = Icon(pixel_size=style.LARGE_ICON_SIZE, 19 icon_name=icon_name, 20 stroke_color=style.COLOR_BUTTON_GREY.get_svg(), 21 fill_color=style.COLOR_TRANSPARENT.get_svg()) 22 mvbox.pack_start(image_icon, False, False, style.DEFAULT_PADDING) 23 24 label = Gtk.Label('<span foreground="%s"><b>%s</b></span>' % 25 (style.COLOR_BUTTON_GREY.get_html(), 26 message)) 27 label.set_use_markup(True) 28 mvbox.pack_start(label, False, False, style.DEFAULT_PADDING) 29 30 hbox = Gtk.Box() 31 open_image_btn = Gtk.Button() 32 open_image_btn.connect('clicked', btn_callback) 33 add_image = Gtk.Image.new_from_stock(Gtk.STOCK_ADD, 34 Gtk.IconSize.BUTTON) 35 buttonbox = Gtk.Box() 36 buttonbox.pack_start(add_image, False, True, 0) 37 buttonbox.pack_end(Gtk.Label(btn_label), True, True, 5) 38 open_image_btn.add(buttonbox) 39 hbox.pack_start(open_image_btn, True, False, 0) 40 mvbox.pack_start(hbox, False, False, style.DEFAULT_PADDING) 41 42 empty_widgets.add(vbox) 43 empty_widgets.show_all() 44 logging.error('Showing empty Panel') 45 activity.view_area.append_page(empty_widgets, None) 46 activity.view_area.set_current_page(2) -
new file icons/activity-jukebox.svg
diff --git a/icons/activity-jukebox.svg b/icons/activity-jukebox.svg new file mode 100644 index 0000000..b921d4f
- + 1 <?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' [ 2 <!ENTITY stroke_color "#010101"> 3 <!ENTITY fill_color "#FFFFFF"> 4 ]><svg enable-background="new 0 0 55 55" height="55px" version="1.1" viewBox="0 0 55 55" width="55px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"><g display="block" id="activity-jukebox"> 5 <path d="M17.666,7.884v32.841 c-2.587-0.614-7.914-0.612-10.755,1.764c-5.688,4.76-0.695,10.109,5.815,7.456c3.705-1.512,4.94-3.937,4.94-7.597V25.997 l30.952-3.516v12.974c-4.212-0.615-7.915-0.614-10.758,1.764c-5.688,4.76-0.695,10.109,5.815,7.454 c3.705-1.51,4.942-3.936,4.942-7.596V4.293L17.666,7.884z M48.618,15.86l-30.952,4.029l0-5.225l30.953-4.102V15.86z" display="inline" fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5"/> 6 </g></svg> 7 -
viewtoolbar.py
diff --git a/viewtoolbar.py b/viewtoolbar.py index f2d99d2..58d5dd7 100644
a b class ViewToolbar(Gtk.Toolbar): 44 44 GObject.GObject.__init__(self) 45 45 46 46 self._show_playlist = ToggleToolButton('view-list') 47 self._show_playlist.set_active( True)47 self._show_playlist.set_active(False) 48 48 self._show_playlist.set_tooltip(_('Show Playlist')) 49 49 self._show_playlist.connect('toggled', self._playlist_toggled_cb) 50 50 self.insert(self._show_playlist, -1)