Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar/canvas/Menu.py
blob: b626ff27805467c4110bdf178c4d703af2ad36f7 (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
import gtk
import goocanvas
import gobject

from sugar.canvas.CanvasView import CanvasView
from sugar.canvas.CanvasBox import CanvasBox
from sugar.canvas.IconItem import IconItem

class Menu(gtk.Window):
	__gsignals__ = {
		'action': (gobject.SIGNAL_RUN_FIRST,
				   gobject.TYPE_NONE, ([int])),
	}

	def __init__(self, grid, title):
		gtk.Window.__init__(self, gtk.WINDOW_POPUP)

		self._width = 15
		self._height = 3
		self._grid = grid
		self._action_box = None

		self._canvas = CanvasView()
		self.add(self._canvas)
		self._canvas.show()

		model = goocanvas.CanvasModelSimple()
		self._root = model.get_root_item()

		self._rect = goocanvas.Rect(fill_color='black', line_width=0)
		self._root.add_child(self._rect)

		text = goocanvas.Text(text=title, font="Sans bold 18",
							  fill_color='white', anchor=gtk.ANCHOR_SW)
		self._grid.set_constraints(text, 1, self._height, self._width, 2)
		self._root.add_child(text)
		self._height += 1

		self._update_constraints()

		self._canvas.set_model(model)

	def _create_action_box(self):
		separator = goocanvas.Path(data='M 15 0 L 215 0', line_width=3,
								   stroke_color='white')
		self._grid.set_constraints(separator, 0, self._height)
		self._root.add_child(separator)
		self._height += 1

		box = CanvasBox(self._grid, CanvasBox.HORIZONTAL)
		self._grid.set_constraints(box, 0, self._height)
		self._height += 5

		return box

	def get_grid(self):
		return self._grid

	def add_image(self, image_item, width, height):
		"""width & height in grid units"""
		separator = goocanvas.Path(data='M 15 0 L 215 0', line_width=3,
								   stroke_color='white')
		self._grid.set_constraints(separator, 0, self._height)
		self._root.add_child(separator)
		self._height += 1

		self._grid.set_constraints(image_item, x=5, y=self._height, width=width, height=height)
		self._root.add_child(image_item)
		self._height += height
		self._update_constraints()

	def add_action(self, icon, action_id):
		if self._action_box == None:
			self._action_box = self._create_action_box()
			self._root.add_child(self._action_box)
			self._update_constraints()

		icon.connect('clicked', self._action_clicked_cb, action_id)
		self._action_box.set_constraints(icon, 5, 5)
		self._action_box.add_child(icon)

	def _action_clicked_cb(self, icon, action):
		self.emit('action', action)

	def _update_constraints(self):
		self._grid.set_constraints(self._canvas, 0, 0,
								   self._width, self._height)				
		self._grid.set_constraints(self._rect, 0, 0,
								   self._width, self._height)

	def get_width(self):
		return self._width

	def get_height(self):
		return self._height