#2543: Offer multiple activities for opening clipboard objects.
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user