From fcb57779a275e8a3343b71f991c23cb98f5c1e7a Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Wed, 11 Apr 2007 14:14:58 +0000 Subject: Start reworking the cliboard services to use the types registry. --- (limited to 'shell') diff --git a/shell/view/clipboardicon.py b/shell/view/clipboardicon.py index ef0de29..e6b4a3f 100644 --- a/shell/view/clipboardicon.py +++ b/shell/view/clipboardicon.py @@ -44,7 +44,6 @@ class ClipboardIcon(CanvasIcon): self._name = name self._percent = 0 self._preview = None - self._activity = None self._selected = False self._hover = False self.props.box_width = units.grid_to_pixels(1) @@ -74,60 +73,26 @@ class ClipboardIcon(CanvasIcon): self.props.background_color = color.TOOLBAR_BACKGROUND.get_int() def get_popup(self): - self._menu = ClipboardMenu(self._name, self._percent, self._preview, - self._activity) + self._menu = ClipboardMenu(self._name, self._percent, self._preview) self._menu.connect('action', self._popup_action_cb) return self._menu def get_popup_context(self): return self._popup_context - def set_state(self, name, percent, icon_name, preview, activity): + def set_name(self, name): self._name = name - self._percent = percent - self._preview = preview - self._activity = activity - self.set_property("icon_name", icon_name) if self._menu: - self._menu.set_state(name, percent, preview, activity) - - if activity and percent < 100: - self.props.xo_color = XoColor("#000000,#424242") - else: - self.props.xo_color = XoColor("#000000,#FFFFFF") - - if activity and percent == 100: - # FIXME: restrict based on file type rather than activity once - # we have a better type registry - # restrict auto-open to a specific set of activities - allowed = ["org.laptop.AbiWordActivity", - "org.laptop.sugar.Xbook", - "org.vpri.EtoysActivity"] - if activity in allowed: - self._open_file() - - def _open_file(self): - if self._percent < 100 or not self._activity: - return - - # Get the file path - cb_service = clipboardservice.get_instance() - obj = cb_service.get_object(self._object_id) - formats = obj['FORMATS'] - if len(formats) > 0: - path = cb_service.get_object_data(self._object_id, formats[0]) - - # FIXME: would be better to check for format.onDisk - try: - path_exists = os.path.exists(path) - except TypeError: - path_exists = False + self._menu.set_title(name) + + def set_formats(self, formats): + self._preview = None + self.props.icon_name = 'theme:stock-missing' - if path_exists: - uri = 'file://' + path - activityfactory.create_with_uri(self._activity, uri) - else: - logging.debug("Clipboard item file path %s didn't exist" % path) + def set_state(self, percent): + self._percent = percent + if self._menu: + self._menu.set_state(percent) def _popup_action_cb(self, popup, menu_item): action = menu_item.props.action_id diff --git a/shell/view/clipboardmenu.py b/shell/view/clipboardmenu.py index 3e8239d..9699972 100644 --- a/shell/view/clipboardmenu.py +++ b/shell/view/clipboardmenu.py @@ -33,9 +33,11 @@ class ClipboardMenu(Menu): ACTION_OPEN = 1 ACTION_STOP_DOWNLOAD = 2 - def __init__(self, name, percent, preview, activity): + def __init__(self, name, percent, preview): Menu.__init__(self, name) self.props.border = 0 + + self._activities = None if percent < 100: self._progress_bar = ClipboardProgressBar(percent) @@ -54,10 +56,10 @@ class ClipboardMenu(Menu): self._preview_text.props.font_desc = font.DEFAULT.get_pango_desc() self.append(self._preview_text) - self._update_icons(percent, activity) + self._update_icons(percent) - def _update_icons(self, percent, activity): - if percent == 100 and activity: + def _update_icons(self, percent): + if percent == 100 and self._activities: if not self._remove_item: self._remove_item = MenuItem(ClipboardMenu.ACTION_DELETE, _('Remove'), @@ -73,7 +75,7 @@ class ClipboardMenu(Menu): if self._stop_item: self.remove_item(self._stop_item) self._stop_item = None - elif percent == 100 and not activity: + elif percent == 100 and not self._activities: if not self._remove_item: self._remove_item = MenuItem(ClipboardMenu.ACTION_DELETE, _('Remove'), @@ -102,8 +104,33 @@ class ClipboardMenu(Menu): self.remove_item(self._open_item) self._open_item = None - def set_state(self, name, percent, preview, activity): - self.set_title(name) + def _open_file(self): + if self._percent < 100 or not self._activity: + return + + # Get the file path + cb_service = clipboardservice.get_instance() + obj = cb_service.get_object(self._object_id) + formats = obj['FORMATS'] + if len(formats) > 0: + path = cb_service.get_object_data(self._object_id, formats[0]) + + # FIXME: would be better to check for format.onDisk + try: + path_exists = os.path.exists(path) + except TypeError: + path_exists = False + + if path_exists: + uri = 'file://' + path + activityfactory.create_with_uri(self._activity, uri) + else: + logging.debug("Clipboard item file path %s didn't exist" % path) + + def set_activities(self, activities): + self._activities = activities + + def set_state(self, percent): if self._progress_bar: - self._progress_bar.set_property('percent', percent) - self._update_icons(percent, activity) + self._progress_bar.props.percent = percent + self._update_icons(percent) diff --git a/shell/view/frame/clipboardbox.py b/shell/view/frame/clipboardbox.py index 2dcad10..1baca58 100644 --- a/shell/view/frame/clipboardbox.py +++ b/shell/view/frame/clipboardbox.py @@ -52,6 +52,7 @@ class ClipboardBox(hippo.CanvasBox): cb_service = clipboardservice.get_instance() cb_service.connect('object-added', self._object_added_cb) cb_service.connect('object-deleted', self._object_deleted_cb) + cb_service.connect('object-changed', self._object_changed_cb) cb_service.connect('object-state-changed', self._object_state_changed_cb) def owns_clipboard(self): @@ -136,10 +137,14 @@ class ClipboardBox(hippo.CanvasBox): del self._icons[object_id] logging.debug('ClipboardBox: ' + object_id + ' was deleted.') - def _object_state_changed_cb(self, cb_service, object_id, name, percent, - icon_name, preview, activity): + def _object_changed_cb(self, cb_service, object_id, name, formats): icon = self._icons[object_id] - icon.set_state(name, percent, icon_name, preview, activity) + icon.set_name(name) + icon.set_formats(formats) + + def _object_state_changed_cb(self, cb_service, object_id, percent): + icon = self._icons[object_id] + icon.set_state(percent) if icon.props.selected and percent == 100: self._put_in_clipboard(object_id) -- cgit v0.9.1