diff options
author | Tomeu Vizoso <tomeu@tomeuvizoso.net> | 2007-08-15 10:19:29 (GMT) |
---|---|---|
committer | Tomeu Vizoso <tomeu@tomeuvizoso.net> | 2007-08-15 10:19:29 (GMT) |
commit | c54fb84b28cca54c7d0cb0355b7a21f3cbabfc4d (patch) | |
tree | 6511f37709c0feb2bcd2206a76e51bf66cdc436f /shell | |
parent | 43fb1627a7ce9a5e05230699cda7448c44f5c689 (diff) |
#2543: Offer multiple activities for opening clipboard objects.
Diffstat (limited to 'shell')
-rw-r--r-- | shell/view/clipboardmenu.py | 60 |
1 files changed, 52 insertions, 8 deletions
diff --git a/shell/view/clipboardmenu.py b/shell/view/clipboardmenu.py index 28ea0bb..3acf90e 100644 --- a/shell/view/clipboardmenu.py +++ b/shell/view/clipboardmenu.py @@ -30,16 +30,17 @@ from sugar.clipboard import clipboardservice from sugar.datastore import datastore from sugar.objects import mime from sugar import profile +from sugar import activity class ClipboardMenu(Palette): - def __init__(self, object_id, name, percent, preview, activity, installable): + def __init__(self, object_id, name, percent, preview, activities, installable): Palette.__init__(self, name) self.props.position = Palette.RIGHT self._object_id = object_id self._percent = percent - self._activity = activity + self._activities = activities self.set_group_id('frame') @@ -68,7 +69,8 @@ class ClipboardMenu(Palette): self._remove_item.show() self._open_item = MenuItem(_('Open'), 'stock-keep') - self._open_item.connect('activate', self._open_item_activate_cb) + self._open_item_activate_sid = self._open_item.connect('activate', + self._open_item_activate_cb) self.menu.append(self._open_item) self._open_item.show() @@ -83,14 +85,49 @@ class ClipboardMenu(Palette): self._journal_item.show() self._update_items_visibility(installable) + self._update_open_submenu() + + def _update_open_submenu(self): + submenu = self._open_item.get_submenu() + if submenu: + for item in submenu.get_children(): + submenu.remove(item) + + if self._activities is None or len(self._activities) <= 1: + if self._open_item_activate_sid is None: + self._open_item_activate_sid = self._open_item.connect( + 'activate', + self._open_item_activate_cb) + return + else: + if self._open_item_activate_sid is not None: + self._open_item.disconnect(self._open_item_activate_sid) + self._open_item_activate_sid = None + + if not submenu: + submenu = gtk.Menu() + self._open_item.set_submenu(submenu) + submenu.show() + + for service_name in self._activities: + registry = activity.get_registry() + activity_info = registry.get_activity(service_name) + + if not activity_info: + logging.warning('Activity %s is unknown.' % service_name) + + item = gtk.MenuItem(activity_info.name) + item.connect('activate', self._open_submenu_item_activate_cb, service_name) + submenu.append(item) + item.show() def _update_items_visibility(self, installable): - if self._percent == 100 and (self._activity or installable): + if self._percent == 100 and (self._activities or installable): self._remove_item.props.sensitive = True self._open_item.props.sensitive = True #self._stop_item.props.sensitive = False self._journal_item.props.sensitive = True - elif self._percent == 100 and (not self._activity and not installable): + elif self._percent == 100 and (not self._activities and not installable): self._remove_item.props.sensitive = True self._open_item.props.sensitive = False #self._stop_item.props.sensitive = False @@ -112,19 +149,26 @@ class ClipboardMenu(Palette): self._progress_bar.props.fraction = self._percent / 100.0 self._progress_bar.props.text = '%.2f %%' % self._percent - def set_state(self, name, percent, preview, activity, installable): + def set_state(self, name, percent, preview, activities, installable): self.set_primary_text(name) self._percent = percent - self._activity = activity + self._activities = activities if self._progress_bar: self._update_progress_bar() self._update_items_visibility(installable) + self._update_open_submenu() def _open_item_activate_cb(self, menu_item): if self._percent < 100: return jobject = self._copy_to_journal() - jobject.resume() + jobject.resume(self._activities[0]) + + def _open_submenu_item_activate_cb(self, menu_item, service_name): + if self._percent < 100: + return + jobject = self._copy_to_journal() + jobject.resume(service_name) def _remove_item_activate_cb(self, menu_item): cb_service = clipboardservice.get_instance() |