Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell/home/HomeView.py
blob: 67a9a41af93a475c68bd60bf5c63e2df3df0849a (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
import gtk
import goocanvas
import wnck

from sugar.canvas.IconItem import IconItem
from sugar.canvas.IconColor import IconColor
from sugar.canvas.DonutItem import DonutItem
from sugar.canvas.DonutItem import PieceItem
from sugar.canvas.DonutItem import PieceIcon
import sugar.conf

import Theme

class TasksItem(DonutItem):
	def __init__(self, shell):
		DonutItem.__init__(self, 250)

		self._items = {}

		shell.connect('activity_opened', self.__activity_opened_cb)
		shell.connect('activity_closed', self.__activity_closed_cb)

	def __activity_opened_cb(self, shell, activity):
		self._add(activity)

	def __activity_closed_cb(self, shell, activity):
		self._remove(activity)
	
	def _remove(self, activity):
		item = self._items[activity.get_id()]
		self.remove_piece(item)
		del self._items[activity.get_id()]

	def _add(self, activity):
		icon_name = activity.get_icon_name()
		item = self.add_piece(100 / 8, icon_name, IconColor())

		# FIXME This really sucks. Fix goocanvas event handling.
		item.set_data('activity', activity)
		item.get_icon().set_data('activity', activity)

		self._items[activity.get_id()] = item

class Background(goocanvas.Group):
	def __init__(self):
		goocanvas.Group.__init__(self)
		self._theme = Theme.get_instance()
		self._theme.connect("theme-changed", self.__theme_changed_cb)

		color = self._theme.get_home_friends_color()
		self._friends_rect = goocanvas.Rect(width=1200, height=900,
										  fill_color=color)
		self.add_child(self._friends_rect)

		color = self._theme.get_home_activities_color()
		self._home_rect = goocanvas.Rect(x=100, y=100, width=1000, height=700,
										  line_width=0, fill_color=color,
										  radius_x=30, radius_y=30)
		self.add_child(self._home_rect)

		item = goocanvas.Text(text="My Activities",
							  x=12, y=12, fill_color="black",
                              font="Sans 21")
		self.add_child(item)

	def __theme_changed_cb(self, theme):
		color = self._theme.get_home_activities_color()
		self._home_rect.set_property("fill-color", color)
		color = self._theme.get_friends_colors()
		self._friends_rect.set_property("fill-color", color)

class Model(goocanvas.CanvasModelSimple):
	def __init__(self, shell):
		goocanvas.CanvasModelSimple.__init__(self)

		root = self.get_root_item()

		background = Background()
		root.add_child(background)

		tasks = TasksItem(shell)
		tasks.translate(600, 450)
		root.add_child(tasks)

		profile = sugar.conf.get_profile()
		me = IconItem('stock-buddy', profile.get_color(), 150)
		me.translate(600 - (me.get_property('width') / 2),
					 450 - (me.get_property('height') / 2))
		root.add_child(me)

class HomeView(goocanvas.CanvasView):
	def __init__(self, shell):
		goocanvas.CanvasView.__init__(self)
		self._shell = shell

		self.connect("item_view_created", self.__item_view_created_cb)

		canvas_model = Model(shell)
		self.set_model(canvas_model)

	def __item_view_created_cb(self, view, item_view, item):
		if isinstance(item, PieceItem) or \
		   isinstance(item, PieceIcon):
			item_view.connect("button_press_event",
							  self.__task_button_press_cb)

	def __activity_button_press_cb(self, view, target, event, activity_id):
		self._shell.start_activity(activity_id)

	def __task_button_press_cb(self, view, target, event):
		activity = view.get_item().get_data('activity')
		activity.present()