Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell/view/clipboardmenu.py
blob: 96999728a0a1b8c409c3522bbf442ea95d5e50c9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
from gettext import gettext as _

import hippo

from sugar.graphics.menu import Menu, MenuItem
from sugar.graphics.canvasicon import CanvasIcon
from sugar.graphics.ClipboardBubble import ClipboardBubble
from sugar.graphics import color
from sugar.graphics import font

class ClipboardProgressBar(ClipboardBubble):

    def __init__(self, percent = 0):
        self._text_item = None
        ClipboardBubble.__init__(self, percent=percent)

        self._text_item = hippo.CanvasText(text=str(percent) + ' %')
        self._text_item.props.color = color.LABEL_TEXT.get_int()
        self._text_item.props.font_desc = font.DEFAULT.get_pango_desc()

        self.append(self._text_item)
        
    def do_set_property(self, pspec, value):
        if pspec.name == 'percent':
            if self._text_item:
                self._text_item.set_property('text', str(value) + ' %')

        ClipboardBubble.do_set_property(self, pspec, value)
        
class ClipboardMenu(Menu):

    ACTION_DELETE = 0
    ACTION_OPEN = 1
    ACTION_STOP_DOWNLOAD = 2
    
    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)
            self.append(self._progress_bar)
        else:
            self._progress_bar = None
        
        self._remove_item = None
        self._open_item = None
        self._stop_item = None

        if preview:
            self._preview_text = hippo.CanvasText(text=preview,
                    size_mode=hippo.CANVAS_SIZE_WRAP_WORD)
            self._preview_text.props.color = color.LABEL_TEXT.get_int()
            self._preview_text.props.font_desc = font.DEFAULT.get_pango_desc()        
            self.append(self._preview_text)
        
        self._update_icons(percent)
        
    def _update_icons(self, percent):
        if percent == 100 and self._activities:
            if not self._remove_item:
                self._remove_item = MenuItem(ClipboardMenu.ACTION_DELETE,
                                             _('Remove'),
                                             'theme:stock-remove')
                self.add_item(self._remove_item)
                            
            if not self._open_item:
                self._open_item = MenuItem(ClipboardMenu.ACTION_OPEN,
                                           _('Open'),
                                           'theme:stock-keep')
                self.add_item(self._open_item)
                            
            if self._stop_item:
                self.remove_item(self._stop_item)
                self._stop_item = None
        elif percent == 100 and not self._activities:
            if not self._remove_item:
                self._remove_item = MenuItem(ClipboardMenu.ACTION_DELETE,
                                             _('Remove'),
                                             'theme:stock-remove')
                self.add_item(self._remove_item)

            if self._open_item:
                self.remove_item(self._open_item)
                self._open_item = None

            if self._stop_item:
                self.remove_item(self._stop_item)
                self._stop_item = None        
        else:
            if not self._stop_item:
                self._stop_item = MenuItem(ClipboardMenu.ACTION_STOP_DOWNLOAD,
                                           _('Stop download'),
                                           'theme:stock-close')
                self.add_item(self._stop_item)

            if self._remove_item:
                self.remove_item(self._remove_item)
                self._remove_item = None

            if self._open_item:
                self.remove_item(self._open_item)
                self._open_item = None

    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.props.percent = percent
            self._update_icons(percent)