Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@tomeuvizoso.net>2007-08-15 10:19:29 (GMT)
committer Tomeu Vizoso <tomeu@tomeuvizoso.net>2007-08-15 10:19:29 (GMT)
commitc54fb84b28cca54c7d0cb0355b7a21f3cbabfc4d (patch)
tree6511f37709c0feb2bcd2206a76e51bf66cdc436f /shell
parent43fb1627a7ce9a5e05230699cda7448c44f5c689 (diff)
#2543: Offer multiple activities for opening clipboard objects.
Diffstat (limited to 'shell')
-rw-r--r--shell/view/clipboardmenu.py60
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()