First implementation of ClipboardService. Implement pdf viewing and downloading via ClipboardService.

This commit is contained in:
Tomeu Vizoso
2006-11-15 13:56:19 +01:00
parent 66acd2a91b
commit 59d57a03d9
41 changed files with 1187 additions and 291 deletions
+38
View File
@@ -0,0 +1,38 @@
from sugar.graphics.menuicon import MenuIcon
from view.ClipboardMenu import ClipboardMenu
from sugar.activity import ActivityFactory
from sugar.clipboard import ClipboardService
class ClipboardIcon(MenuIcon):
def __init__(self, menu_shell, name, file_name):
MenuIcon.__init__(self, menu_shell, icon_name='activity-xbook')
self._name = name
self._file_name = file_name
self._percent = 0
self.connect('activated', self._icon_activated_cb)
self._menu = None
def create_menu(self):
self._menu = ClipboardMenu(self._name, self._percent)
self._menu.connect('action', self._popup_action_cb)
return self._menu
def set_percent(self, percent):
self._percent = percent
if self._menu:
self._menu.set_percent(percent)
def _icon_activated_cb(self, icon):
if self._percent == 100:
activity = ActivityFactory.create("org.laptop.sugar.Xbook")
activity.execute("open_document", [self._file_name])
def _popup_action_cb(self, popup, action):
self.popdown()
if action == ClipboardMenu.ACTION_STOP_DOWNLOAD:
raise "Stopping downloads still not implemented."
elif action == ClipboardMenu.ACTION_DELETE:
cb_service = ClipboardService.get_instance()
cb_service.delete_object(self._file_name)
+56
View File
@@ -0,0 +1,56 @@
import gtk
import gobject
import hippo
from sugar.graphics.menu import Menu
from sugar.graphics.canvasicon import CanvasIcon
from sugar.graphics.ClipboardBubble import ClipboardBubble
from sugar.graphics import style
class ClipboardMenuItem(ClipboardBubble):
def __init__(self, percent = 0, stylesheet="clipboard.Bubble"):
ClipboardBubble.__init__(self, percent = percent)
style.apply_stylesheet(self, stylesheet)
class ClipboardMenu(Menu):
ACTION_DELETE = 0
ACTION_SHARE = 1
ACTION_STOP_DOWNLOAD = 2
def __init__(self, name, percent):
Menu.__init__(self, name)
self._progress_bar = ClipboardMenuItem(percent)
self._root.append(self._progress_bar)
#icon = CanvasIcon(icon_name='stock-share-mesh')
#self.add_action(icon, ClipboardMenu.ACTION_SHARE)
self._remove_icon = None
self._stop_icon = None
self._create_icons(percent)
def _create_icons(self, percent):
if percent == 100:
if not self._remove_icon:
self._remove_icon = CanvasIcon(icon_name='stock-remove')
self.add_action(self._remove_icon, ClipboardMenu.ACTION_DELETE)
if self._stop_icon:
self.remove_action(self._stop_icon)
self._stop_icon = None
else:
if not self._stop_icon:
self._stop_icon = CanvasIcon(icon_name='stock-close')
self.add_action(self._stop_icon, ClipboardMenu.ACTION_STOP_DOWNLOAD)
if self._remove_icon:
self.remove_action(self._remove_icon)
self._remove_icon = None
def set_percent(self, percent):
self._progress_bar.set_property('percent', percent)
self._create_icons(percent)
+2
View File
@@ -7,6 +7,8 @@ sugar_PYTHON = \
FirstTimeDialog.py \
BuddyIcon.py \
BuddyMenu.py \
ClipboardIcon.py \
ClipboardMenu.py \
OverlayWindow.py \
Shell.py \
dconmanager.py \
+42
View File
@@ -0,0 +1,42 @@
import logging
import dbus
import hippo
from sugar.graphics import style
from view.ClipboardIcon import ClipboardIcon
from sugar.clipboard import ClipboardService
class ClipboardBox(hippo.CanvasBox):
def __init__(self, frame, menu_shell):
hippo.CanvasBox.__init__(self)
self._frame = frame
self._menu_shell = menu_shell
self._icons = {}
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-state-changed', self._object_state_changed_cb)
def _object_added_cb(self, cb_service, name, mimeType, fileName):
icon = ClipboardIcon(self._menu_shell, name, fileName)
style.apply_stylesheet(icon, 'frame.BuddyIcon')
self.append(icon)
self._icons[fileName] = icon
if not self._frame.is_visible():
self._frame.show_and_hide(0.1)
logging.debug('ClipboardBox: ' + fileName + ' was added.')
def _object_deleted_cb(self, cb_service, fileName):
icon = self._icons[fileName]
self.remove(icon)
del self._icons[fileName]
logging.debug('ClipboardBox: ' + fileName + ' was deleted.')
def _object_state_changed_cb(self, cb_service, fileName, percent):
icon = self._icons[fileName]
icon.set_percent(percent)
logging.debug('ClipboardBox: ' + fileName + ' state was changed.')
+5 -1
View File
@@ -23,6 +23,7 @@ from view.frame.ActivitiesBox import ActivitiesBox
from view.frame.ZoomBox import ZoomBox
from view.frame.overlaybox import OverlayBox
from view.frame.FriendsBox import FriendsBox
from view.frame.ClipboardBox import ClipboardBox
from view.frame.PanelWindow import PanelWindow
from view.frame.notificationtray import NotificationTray
from view.frame.shutdownicon import ShutdownIcon
@@ -205,7 +206,10 @@ class Frame:
root.append(box)
# Left panel
self._create_panel(grid, 0, 1, 1, 10)
[menu_shell, root] = self._create_panel(grid, 0, 1, 1, 10)
box = ClipboardBox(self, menu_shell)
root.append(box)
def _create_panel(self, grid, x, y, width, height):
panel = PanelWindow()
+1
View File
@@ -2,6 +2,7 @@ sugardir = $(pkgdatadir)/shell/view/frame
sugar_PYTHON = \
__init__.py \
ActivitiesBox.py \
ClipboardBox.py \
FriendsBox.py \
PanelWindow.py \
Frame.py \
+18
View File
@@ -60,3 +60,21 @@ friends_FriendIcon = {
friends_ActivityIcon = {
'size' : style.standard_icon_size
}
clipboard_bubble = {
'fill-color' : 0x646464FF,
'stroke-color' : 0x646464FF,
'progress-color': 0x333333FF,
'spacing' : style.space_unit,
'padding' : style.space_unit * 1.5
}
clipboard_menu_item_title = {
'xalign': hippo.ALIGNMENT_START,
'padding-left': 5,
'color' : 0xFFFFFFFF,
'font' : style.get_font_description('Bold', 1.2)
}
style.register_stylesheet("clipboard.Bubble", clipboard_bubble)
style.register_stylesheet("clipboard.MenuItem.Title", clipboard_menu_item_title)