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  
    2121
    2222import sys
    2323import logging
     24import emptypanel
    2425from gettext import gettext as _
    2526
    2627from sugar3.activity import activity
    class JukeboxActivity(activity.Activity): 
    7374        toolbar_box.toolbar.insert(activity_button, 0)
    7475        self.title_entry = activity_toolbar.title
    7576
    76         view_toolbar = ViewToolbar()
    77         view_toolbar.connect('go-fullscreen',
     77        self._view_toolbar = ViewToolbar()
     78        self._view_toolbar.connect('go-fullscreen',
    7879                              self.__go_fullscreen_cb)
    79         view_toolbar.connect('toggle-playlist',
     80        self._view_toolbar.connect('toggle-playlist',
    8081                              self.__toggle_playlist_cb)
    8182        view_toolbar_button = ToolbarButton(
    82             page=view_toolbar,
     83            page=self._view_toolbar,
    8384            icon_name='toolbar-view')
    84         view_toolbar.show()
     85        self._view_toolbar.show()
    8586        toolbar_box.toolbar.insert(view_toolbar_button, -1)
    8687        view_toolbar_button.show()
    8788
    88         self.canvas = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
     89        self._video_canvas = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
    8990
    9091        self.playlist_widget = PlayList()
    9192        self.playlist_widget.connect('play-index', self.__play_index)
    9293        self.playlist_widget.set_size_request(
    9394            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)
    9696
    9797        # Create the player just once
    9898        self.player = GstPlayer()
    class JukeboxActivity(activity.Activity): 
    118118
    119119        self._empty_widget.show()
    120120        self.videowidget = VideoWidget()
    121         self.set_canvas(self.canvas)
     121        self.set_canvas(self._video_canvas)
    122122        self._init_view_area()
    123123        self.show_all()
    124124
    125125        self.player.init_view_area(self.videowidget)
    126126
    127         # Check if the activity was launched from a Journal Entry
    128         if handle.uri:
    129             self._start(handle.uri, handle.title)
    130 
    131127        self._volume_monitor = Gio.VolumeMonitor.get()
    132128        self._volume_monitor.connect('mount-added', self._mount_added_cb)
    133129        self._volume_monitor.connect('mount-removed', self._mount_removed_cb)
    134130
     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
    135139    def __notify_active_cb(self, widget, event):
    136140        """Sugar notify us that the activity is becoming active or inactive.
    137141        When we are inactive, we stop the player if it is reproducing
    class JukeboxActivity(activity.Activity): 
    156160        self.view_area.set_show_tabs(False)
    157161        self.view_area.append_page(self._empty_widget, None)
    158162        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,
    160164                             fill=True, padding=0)
    161165
    162166    def _switch_canvas(self, show_video):
    class JukeboxActivity(activity.Activity): 
    170174            self.view_area.set_current_page(1)
    171175        else:
    172176            self.view_area.set_current_page(0)
    173         self.canvas.queue_draw()
     177        self._video_canvas.queue_draw()
    174178
    175179    def __key_press_event_cb(self, widget, event):
    176180        keyname = Gdk.keyval_name(event.keyval)
    class JukeboxActivity(activity.Activity): 
    318322        self.fullscreen()
    319323
    320324    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():
    324326            self.playlist_widget.show_all()
    325         self.canvas.queue_draw()
     327        else:
     328            self.playlist_widget.hide()
     329        self._video_canvas.queue_draw()
    326330
    327331
    328332class VideoWidget(Gtk.DrawingArea):
  • controls.py

    diff --git a/controls.py b/controls.py
    index a5922e8..c86bd6d 100644
    a b class Controls(GObject.GObject): 
    128128        self.set_button_pause()
    129129
    130130    def __open_button_clicked_cb(self, widget):
    131         self.__show_picker_cb()
     131        self.show_picker_cb()
    132132
    133133    def __erase_playlist_entry_clicked_cb(self, widget):
    134134        self.activity.playlist_widget.delete_selected_items()
    135135
    136     def __show_picker_cb(self):
     136    def show_picker_cb(self, button=None):
    137137        jobject = None
    138138        chooser = ObjectChooser(self.activity,
    139139                                what_filter=mime.GENERIC_TYPE_AUDIO)
    class Controls(GObject.GObject): 
    146146                    logging.info('Adding %s', jobject.file_path)
    147147                    self.activity.playlist_widget.load_file(jobject)
    148148                    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)
    149154        finally:
    150155            if jobject is not None:
    151156                jobject.destroy()
  • new file emptypanel.py

    diff --git a/emptypanel.py b/emptypanel.py
    new file mode 100644
    index 0000000..bf4c414
    - +  
     1import logging
     2
     3from gi.repository import Gtk
     4
     5from sugar3.graphics import style
     6from sugar3.graphics.icon import Icon
     7
     8
     9def 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): 
    4444        GObject.GObject.__init__(self)
    4545
    4646        self._show_playlist = ToggleToolButton('view-list')
    47         self._show_playlist.set_active(True)
     47        self._show_playlist.set_active(False)
    4848        self._show_playlist.set_tooltip(_('Show Playlist'))
    4949        self._show_playlist.connect('toggled', self._playlist_toggled_cb)
    5050        self.insert(self._show_playlist, -1)