Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/jarabe/desktop/activitieslist.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/jarabe/desktop/activitieslist.py')
-rw-r--r--src/jarabe/desktop/activitieslist.py83
1 files changed, 78 insertions, 5 deletions
diff --git a/src/jarabe/desktop/activitieslist.py b/src/jarabe/desktop/activitieslist.py
index 9fdaa16..71f3c61 100644
--- a/src/jarabe/desktop/activitieslist.py
+++ b/src/jarabe/desktop/activitieslist.py
@@ -33,11 +33,13 @@ from sugar3.graphics.icon import Icon, CellRendererIcon
from sugar3.graphics.xocolor import XoColor
from sugar3.graphics.alert import Alert
from sugar3.graphics.palettemenu import PaletteMenuItem
+from sugar3.graphics.palettemenu import PaletteMenuItemSeparator
from jarabe.model import bundleregistry
from jarabe.view.palettes import ActivityPalette
from jarabe.journal import misc
from jarabe.util.normalize import normalize_string
+from jarabe.desktop.favoritesview import ActivityIconDatastoreListener
gconf_client = GConf.Client.get_default()
@@ -86,6 +88,7 @@ class ActivitiesTreeView(Gtk.TreeView):
column = Gtk.TreeViewColumn()
column.pack_start(cell_icon, True)
+ column.set_cell_data_func(cell_icon, self.__set_activity_icon_color)
column.add_attribute(cell_icon, 'file-name', ListModel.COLUMN_ICON)
self.append_column(column)
@@ -137,6 +140,19 @@ class ActivitiesTreeView(Gtk.TreeView):
def __erase_activated_cb(self, cell_renderer, bundle_id):
self.emit('erase-activated', bundle_id)
+ def __set_activity_icon_color(self, column, cell, model, tree_iter, data):
+ listener = model[tree_iter][ListModel.COLUMN_DATASTORE_LISTENER]
+ if len(listener._journal_entries) > 0:
+ xo_color = misc.get_icon_color(listener._journal_entries[0])
+ stroke_color = xo_color.get_stroke_color()
+ fill_color = xo_color.get_fill_color()
+ else:
+ stroke_color = style.COLOR_DESKTOP_ICON.get_svg()
+ fill_color = style.COLOR_TRANSPARENT.get_svg()
+
+ cell.props.stroke_color = stroke_color
+ cell.props.fill_color = fill_color
+
def __favorite_set_data_cb(self, column, cell, model, tree_iter, data):
favorite = model[tree_iter][ListModel.COLUMN_FAVORITE]
if favorite:
@@ -154,8 +170,20 @@ class ActivitiesTreeView(Gtk.TreeView):
not row[ListModel.COLUMN_FAVORITE],
True)
+ def _resume(self, journal_entry, activity_info):
+ if not journal_entry['activity_id']:
+ journal_entry['activity_id'] = activityfactory.create_activity_id()
+ misc.resume(journal_entry, activity_info.get_bundle_id())
+
def __icon_clicked_cb(self, cell, path):
- self._start_activity(path)
+ row = self.get_model()[path]
+ listener = row[ListModel.COLUMN_DATASTORE_LISTENER]
+
+ if listener._journal_entries:
+ self._resume(listener._journal_entries[0],
+ listener._activity_info)
+ else:
+ misc.launch(listener._activity_info)
def _start_activity(self, path):
row = self.get_model()[path]
@@ -196,9 +224,11 @@ class ListModel(Gtk.TreeModelSort):
COLUMN_VERSION_TEXT = 5
COLUMN_DATE = 6
COLUMN_DATE_TEXT = 7
+ COLUMN_DATASTORE_LISTENER = 8
def __init__(self):
- self._model = Gtk.ListStore(str, bool, str, str, str, str, int, str)
+ self._model = Gtk.ListStore(str, bool, str, str, str, str, int,
+ str, ActivityIconDatastoreListener)
self._model_filter = self._model.filter_new()
Gtk.TreeModelSort.__init__(self, model=self._model_filter)
self.set_sort_column_id(ListModel.COLUMN_TITLE, Gtk.SortType.ASCENDING)
@@ -289,7 +319,8 @@ class ListModel(Gtk.TreeModelSort):
version,
_('Version %s') % version,
int(timestamp),
- elapsed_string])
+ elapsed_string,
+ ActivityIconDatastoreListener(activity_info, self)])
def set_visible_func(self, func):
self._model_filter.set_visible_func(func)
@@ -297,6 +328,10 @@ class ListModel(Gtk.TreeModelSort):
def refilter(self):
self._model_filter.refilter()
+ def _update(self, force=False):
+ if force is True:
+ self.refresh_model()
+
class CellRendererFavorite(CellRendererIcon):
__gtype_name__ = 'SugarCellRendererFavorite'
@@ -325,6 +360,7 @@ class CellRendererActivityIcon(CellRendererIcon):
def __init__(self, tree_view):
CellRendererIcon.__init__(self, tree_view)
+ self._tree_view = tree_view
self.props.width = style.GRID_CELL_SIZE
self.props.height = style.GRID_CELL_SIZE
@@ -346,13 +382,19 @@ class CellRendererActivityIcon(CellRendererIcon):
bundle_id = row[ListModel.COLUMN_BUNDLE_ID]
registry = bundleregistry.get_registry()
- palette = ActivityListPalette(registry.get_bundle(bundle_id))
+ palette = ActivityListPalette(registry.get_bundle(bundle_id),
+ row[ListModel.COLUMN_DATASTORE_LISTENER]._journal_entries)
palette.connect('erase-activated', self.__erase_activated_cb)
+ palette.connect('entry-activate', self.__palette_entry_activate_cb)
return palette
def __erase_activated_cb(self, palette, bundle_id):
self.emit('erase-activated', bundle_id)
+ def __palette_entry_activate_cb(self, palette, metadata, activity_info):
+ self._tree_view._resume(metadata, activity_info)
+
+
class ClearMessageBox(Gtk.EventBox):
def __init__(self, message, button_callback):
@@ -528,14 +570,41 @@ class ActivityListPalette(ActivityPalette):
__gsignals__ = {
'erase-activated': (GObject.SignalFlags.RUN_FIRST, None,
([str])),
+ 'entry-activate': (GObject.SignalFlags.RUN_FIRST, None, ([object, object])),
+
}
- def __init__(self, activity_info):
+ def __init__(self, activity_info, journal_entries):
ActivityPalette.__init__(self, activity_info)
self._bundle_id = activity_info.get_bundle_id()
self._version = activity_info.get_activity_version()
+ if journal_entries:
+ title = journal_entries[0]['title']
+ self.props.secondary_text = GLib.markup_escape_text(title)
+
+ menu_items = []
+ for entry in journal_entries:
+ icon_file_name = misc.get_icon_name(entry)
+ color = misc.get_icon_color(entry)
+
+ menu_item = PaletteMenuItem(text_label=entry['title'],
+ file_name=icon_file_name,
+ xo_color=color)
+ menu_item.connect('activate', self.__resume_entry_cb,
+ entry, activity_info)
+ menu_items.append(menu_item)
+ menu_item.show()
+
+ if journal_entries:
+ separator = PaletteMenuItemSeparator()
+ menu_items.append(separator)
+ separator.show()
+
+ for i in range(0, len(menu_items)):
+ self.menu_box.pack_start(menu_items[i], True, True, 0)
+
registry = bundleregistry.get_registry()
self._favorite = registry.is_bundle_favorite(self._bundle_id,
self._version)
@@ -603,3 +672,7 @@ class ActivityListPalette(ActivityPalette):
def __erase_activate_cb(self, menu_item):
self.emit('erase-activated', self._bundle_id)
+
+ def __resume_entry_cb(self, menu_item, entry, activity_info):
+ if entry is not None:
+ self.emit('entry-activate', entry, activity_info)