Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManuel Kaufmann <humitos@gmail.com>2013-01-24 19:31:45 (GMT)
committer Gonzalo Odiard <godiard@gmail.com>2013-01-25 13:52:34 (GMT)
commit2c39f29eec38a6d43f65342d154db0d961b1c7fc (patch)
treec4ecb1f84c6d84d44a1c68a5833bc2e5bed31891
parent9f4e3eeacb28e24885a806583330d7bdf1ced614 (diff)
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>
-rw-r--r--activity.py37
-rw-r--r--controls.py9
-rw-r--r--emptypanel.py46
-rw-r--r--icons/activity-jukebox.svg7
-rw-r--r--viewtoolbar.py2
5 files changed, 84 insertions, 17 deletions
diff --git a/activity.py b/activity.py
index 84c6646..c88c7f1 100644
--- a/activity.py
+++ b/activity.py
@@ -21,6 +21,7 @@
import sys
import logging
+import emptypanel
from gettext import gettext as _
from sugar3.activity import activity
@@ -74,15 +75,15 @@ class JukeboxActivity(activity.Activity):
toolbar_box.toolbar.insert(activity_button, 0)
self.title_entry = activity_toolbar.title
- view_toolbar = ViewToolbar()
- view_toolbar.connect('go-fullscreen',
+ self._view_toolbar = ViewToolbar()
+ self._view_toolbar.connect('go-fullscreen',
self.__go_fullscreen_cb)
- view_toolbar.connect('toggle-playlist',
+ self._view_toolbar.connect('toggle-playlist',
self.__toggle_playlist_cb)
view_toolbar_button = ToolbarButton(
- page=view_toolbar,
+ page=self._view_toolbar,
icon_name='toolbar-view')
- view_toolbar.show()
+ self._view_toolbar.show()
toolbar_box.toolbar.insert(view_toolbar_button, -1)
view_toolbar_button.show()
@@ -96,14 +97,14 @@ class JukeboxActivity(activity.Activity):
# reproducing the video
self.connect('notify::active', self.__notify_active_cb)
- self.canvas = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
+ self._video_canvas = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
self.playlist_widget = PlayList()
self.playlist_widget.connect('play-index', self.__play_index_cb)
self.playlist_widget.set_size_request(
Gdk.Screen.width() * PLAYLIST_WIDTH_PROP, 0)
self.playlist_widget.show()
- self.canvas.pack_start(self.playlist_widget, False, True, 0)
+ self._video_canvas.pack_start(self.playlist_widget, False, True, 0)
# Create the player just once
logging.debug('Instantiating GstPlayer')
@@ -119,7 +120,7 @@ class JukeboxActivity(activity.Activity):
self._empty_widget = Gtk.Label(label="")
self._empty_widget.show()
self.videowidget = VideoWidget()
- self.set_canvas(self.canvas)
+ self.set_canvas(self._video_canvas)
self._init_view_area()
self.show_all()
@@ -129,6 +130,14 @@ class JukeboxActivity(activity.Activity):
volume_monitor.connect('mount-added', self.__mount_added_cb)
volume_monitor.connect('mount-removed', self.__mount_removed_cb)
+ if handle.object_id is None:
+ # The activity was launched from scratch. We need to show
+ # the Empty Widget
+ self.playlist_widget.hide()
+ emptypanel.show(self, 'activity-jukebox',
+ _('No media'), _('Choose media files'),
+ self.control.show_picker_cb)
+
def __notify_active_cb(self, widget, event):
"""Sugar notify us that the activity is becoming active or inactive.
When we are inactive, we stop the player if it is reproducing
@@ -153,7 +162,7 @@ class JukeboxActivity(activity.Activity):
self.view_area.set_show_tabs(False)
self.view_area.append_page(self._empty_widget, None)
self.view_area.append_page(self.videowidget, None)
- self.canvas.pack_end(self.view_area, expand=True,
+ self._video_canvas.pack_end(self.view_area, expand=True,
fill=True, padding=0)
def _switch_canvas(self, show_video):
@@ -167,7 +176,7 @@ class JukeboxActivity(activity.Activity):
self.view_area.set_current_page(1)
else:
self.view_area.set_current_page(0)
- self.canvas.queue_draw()
+ self._video_canvas.queue_draw()
def __key_press_event_cb(self, widget, event):
keyname = Gdk.keyval_name(event.keyval)
@@ -324,11 +333,11 @@ class JukeboxActivity(activity.Activity):
self.fullscreen()
def __toggle_playlist_cb(self, toolbar):
- if self.playlist_widget.get_visible():
- self.playlist_widget.hide()
- else:
+ if self._view_toolbar._show_playlist.get_active():
self.playlist_widget.show_all()
- self.canvas.queue_draw()
+ else:
+ self.playlist_widget.hide()
+ self._video_canvas.queue_draw()
class VideoWidget(Gtk.DrawingArea):
diff --git a/controls.py b/controls.py
index 6ee16a9..775e30a 100644
--- a/controls.py
+++ b/controls.py
@@ -128,12 +128,12 @@ class Controls(GObject.GObject):
self.set_button_pause()
def __open_button_clicked_cb(self, widget):
- self.__show_picker_cb()
+ self.show_picker_cb()
def __erase_playlist_entry_clicked_cb(self, widget):
self.activity.playlist_widget.delete_selected_items()
- def __show_picker_cb(self):
+ def show_picker_cb(self, button=None):
jobject = None
chooser = ObjectChooser(self.activity,
what_filter=mime.GENERIC_TYPE_AUDIO)
@@ -146,6 +146,11 @@ class Controls(GObject.GObject):
logging.info('Adding %s', jobject.file_path)
self.activity.playlist_widget.load_file(jobject)
self.check_if_next_prev()
+
+ if button is not None:
+ self.activity._switch_canvas(False)
+ self.activity._view_toolbar.\
+ _show_playlist.set_active(True)
finally:
if jobject is not None:
jobject.destroy()
diff --git a/emptypanel.py b/emptypanel.py
new file mode 100644
index 0000000..bf4c414
--- /dev/null
+++ b/emptypanel.py
@@ -0,0 +1,46 @@
+import logging
+
+from gi.repository import Gtk
+
+from sugar3.graphics import style
+from sugar3.graphics.icon import Icon
+
+
+def show(activity, icon_name, message, btn_label, btn_callback):
+ empty_widgets = Gtk.EventBox()
+ empty_widgets.modify_bg(Gtk.StateType.NORMAL,
+ style.COLOR_WHITE.get_gdk_color())
+
+ vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
+ mvbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
+ vbox.pack_start(mvbox, True, False, 0)
+
+ image_icon = Icon(pixel_size=style.LARGE_ICON_SIZE,
+ icon_name=icon_name,
+ stroke_color=style.COLOR_BUTTON_GREY.get_svg(),
+ fill_color=style.COLOR_TRANSPARENT.get_svg())
+ mvbox.pack_start(image_icon, False, False, style.DEFAULT_PADDING)
+
+ label = Gtk.Label('<span foreground="%s"><b>%s</b></span>' %
+ (style.COLOR_BUTTON_GREY.get_html(),
+ message))
+ label.set_use_markup(True)
+ mvbox.pack_start(label, False, False, style.DEFAULT_PADDING)
+
+ hbox = Gtk.Box()
+ open_image_btn = Gtk.Button()
+ open_image_btn.connect('clicked', btn_callback)
+ add_image = Gtk.Image.new_from_stock(Gtk.STOCK_ADD,
+ Gtk.IconSize.BUTTON)
+ buttonbox = Gtk.Box()
+ buttonbox.pack_start(add_image, False, True, 0)
+ buttonbox.pack_end(Gtk.Label(btn_label), True, True, 5)
+ open_image_btn.add(buttonbox)
+ hbox.pack_start(open_image_btn, True, False, 0)
+ mvbox.pack_start(hbox, False, False, style.DEFAULT_PADDING)
+
+ empty_widgets.add(vbox)
+ empty_widgets.show_all()
+ logging.error('Showing empty Panel')
+ activity.view_area.append_page(empty_widgets, None)
+ activity.view_area.set_current_page(2)
diff --git a/icons/activity-jukebox.svg b/icons/activity-jukebox.svg
new file mode 100644
index 0000000..b921d4f
--- /dev/null
+++ b/icons/activity-jukebox.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' [
+ <!ENTITY stroke_color "#010101">
+ <!ENTITY fill_color "#FFFFFF">
+]><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">
+ <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"/>
+</g></svg>
+
diff --git a/viewtoolbar.py b/viewtoolbar.py
index 2f15bbe..e9d823d 100644
--- a/viewtoolbar.py
+++ b/viewtoolbar.py
@@ -44,7 +44,7 @@ class ViewToolbar(Gtk.Toolbar):
GObject.GObject.__init__(self)
self._show_playlist = ToggleToolButton('view-list')
- self._show_playlist.set_active(True)
+ self._show_playlist.set_active(False)
self._show_playlist.set_tooltip(_('Show Playlist'))
self._show_playlist.connect('toggled', self._playlist_toggled_cb)
self.insert(self._show_playlist, -1)