Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell/view/frame/ZoomBox.py
blob: 26fda37cbd9cdb0dbc78a9512f8b14a2104ee1cf (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
import goocanvas
import hippo

from sugar.graphics.canvasicon import CanvasIcon
from sugar.graphics.menuicon import MenuIcon
from sugar.graphics.menu import Menu
from sugar.graphics import style
from view.frame.MenuStrategy import MenuStrategy
import sugar

class ActivityMenu(Menu):
	ACTION_SHARE = 1
	ACTION_CLOSE = 2

	def __init__(self, grid, activity_host):
		Menu.__init__(self, activity_host.get_title())

		icon = CanvasIcon(icon_name='stock-share-mesh')
		style.apply_stylesheet(icon, 'menu-action-icon')
		self.add_action(icon, ActivityMenu.ACTION_SHARE) 

		icon = CanvasIcon(icon_name='stock-close')
		style.apply_stylesheet(icon, 'menu-action-icon')
		self.add_action(icon, ActivityMenu.ACTION_CLOSE) 

class ActivityIcon(MenuIcon):
	def __init__(self, shell, menu_shell, activity_host):
		self._shell = shell
		self._activity_host = activity_host

		icon_name = activity_host.get_icon_name()
		icon_color = activity_host.get_icon_color()

		MenuIcon.__init__(self, menu_shell, icon_name=icon_name,
						  color=icon_color)

		self.set_menu_strategy(MenuStrategy())

	def create_menu(self):
		menu = ActivityMenu(self._shell.get_grid(), self._activity_host)
		menu.connect('action', self._action_cb)
		return menu

	def _action_cb(self, menu, action):
		self.popdown()

		activity = self._shell.get_current_activity()
		if activity == None:
			return

		if action == ActivityMenu.ACTION_SHARE:
			activity.share()
		if action == ActivityMenu.ACTION_CLOSE:
			activity.close()

class ZoomBox(hippo.CanvasBox):
	def __init__(self, shell, menu_shell):
		hippo.CanvasBox.__init__(self, orientation=hippo.ORIENTATION_HORIZONTAL)

		self._shell = shell
		self._menu_shell = menu_shell
		self._activity_icon = None

		icon = CanvasIcon(icon_name='stock-zoom-mesh')
		style.apply_stylesheet(icon, 'frame-zoom-icon')
		icon.connect('activated', self._level_clicked_cb, sugar.ZOOM_MESH)
		self.append(icon)

		icon = CanvasIcon(icon_name='stock-zoom-friends')
		style.apply_stylesheet(icon, 'frame-zoom-icon')
		icon.connect('activated', self._level_clicked_cb, sugar.ZOOM_FRIENDS)
		self.append(icon)

		icon = CanvasIcon(icon_name='stock-zoom-home')
		style.apply_stylesheet(icon, 'frame-zoom-icon')
		icon.connect('activated', self._level_clicked_cb, sugar.ZOOM_HOME)
		self.append(icon)

		icon = CanvasIcon(icon_name='stock-zoom-activity')
		style.apply_stylesheet(icon, 'frame-zoom-icon')
		icon.connect('activated', self._level_clicked_cb, sugar.ZOOM_ACTIVITY)
		self.append(icon)

		shell.connect('activity-changed', self._activity_changed_cb)
		self._set_current_activity(shell.get_current_activity())

	def _set_current_activity(self, activity):
		if self._activity_icon:
			self.remove(self._activity_icon)

		if activity:
			icon = ActivityIcon(self._shell, self._menu_shell, activity)
			style.apply_stylesheet(icon, 'frame-zoom-icon')
			self.append(icon, 0)
			self._activity_icon = icon
		else:
			self._activity_icon = None

	def _activity_changed_cb(self, shell_model, activity):
		self._set_current_activity(activity)

	def _level_clicked_cb(self, item, level):
		self._shell.set_zoom_level(level)