annotate mamba/widgets/base.py @ 189:aeacd8dfeb07

Add grab_focus helper
author Neil Muller <drnlmuller@gmail.com>
date Wed, 14 Sep 2011 17:42:47 +0200
parents 5f286cbb15e3
children 51d54026b153
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
55
671d027f1b71 Callbacks for events in widgets
Stefano Rivera <stefano@rivera.za.net>
parents: 43
diff changeset
1 import collections
671d027f1b71 Callbacks for events in widgets
Stefano Rivera <stefano@rivera.za.net>
parents: 43
diff changeset
2
23
d0e8940df703 Widgets -> base
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
3 import pygame
115
d5aa5f805f00 Add Button class that buttons inherit from. It implements a 'clicked' callback
Stefano Rivera <stefano@rivera.za.net>
parents: 109
diff changeset
4 from pygame.constants import K_UP, K_DOWN, K_RETURN
58
7fa000c4b3c7 Dispatch key events
Stefano Rivera <stefano@rivera.za.net>
parents: 55
diff changeset
5 from pygame.locals import MOUSEMOTION, MOUSEBUTTONUP, MOUSEBUTTONDOWN, KEYDOWN
23
d0e8940df703 Widgets -> base
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
6
d0e8940df703 Widgets -> base
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
7
d0e8940df703 Widgets -> base
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
8 class Widget(object):
d0e8940df703 Widgets -> base
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
9
d0e8940df703 Widgets -> base
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
10 def __init__(self, rect):
38
047273a63054 Main menu says hello
Stefano Rivera <stefano@rivera.za.net>
parents: 24
diff changeset
11 if not isinstance(rect, pygame.Rect):
41
3f44c30a1c39 Correct Text placement
Stefano Rivera <stefano@rivera.za.net>
parents: 38
diff changeset
12 rect = pygame.Rect(rect, (0, 0))
3f44c30a1c39 Correct Text placement
Stefano Rivera <stefano@rivera.za.net>
parents: 38
diff changeset
13 self.rect = rect
58
7fa000c4b3c7 Dispatch key events
Stefano Rivera <stefano@rivera.za.net>
parents: 55
diff changeset
14 self.focussable = False
77
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
15 self.focussed = False
106
d1152f2a0e13 Mouse affects focus
Stefano Rivera <stefano@rivera.za.net>
parents: 99
diff changeset
16 self.parent = None
55
671d027f1b71 Callbacks for events in widgets
Stefano Rivera <stefano@rivera.za.net>
parents: 43
diff changeset
17 self.callbacks = collections.defaultdict(list)
671d027f1b71 Callbacks for events in widgets
Stefano Rivera <stefano@rivera.za.net>
parents: 43
diff changeset
18
671d027f1b71 Callbacks for events in widgets
Stefano Rivera <stefano@rivera.za.net>
parents: 43
diff changeset
19 def add_callback(self, eventtype, callback, *args):
671d027f1b71 Callbacks for events in widgets
Stefano Rivera <stefano@rivera.za.net>
parents: 43
diff changeset
20 self.callbacks[eventtype].append((callback, args))
23
d0e8940df703 Widgets -> base
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
21
59
3cc917814579 Container subclasses Widget
Stefano Rivera <stefano@rivera.za.net>
parents: 58
diff changeset
22 def event(self, ev):
3cc917814579 Container subclasses Widget
Stefano Rivera <stefano@rivera.za.net>
parents: 58
diff changeset
23 for callback, args in self.callbacks[ev.type]:
77
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
24 if callback(ev, self, *args):
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
25 return True
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
26 return False
23
d0e8940df703 Widgets -> base
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
27
24
30d4f3e62bcf Refactor widgets *again*, add container to Habitat
Stefano Rivera <stefano@rivera.za.net>
parents: 23
diff changeset
28 def draw(self, surface):
23
d0e8940df703 Widgets -> base
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
29 "Override me"
d0e8940df703 Widgets -> base
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
30 pass
d0e8940df703 Widgets -> base
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
31
189
aeacd8dfeb07 Add grab_focus helper
Neil Muller <drnlmuller@gmail.com>
parents: 184
diff changeset
32 def grab_focus(self):
aeacd8dfeb07 Add grab_focus helper
Neil Muller <drnlmuller@gmail.com>
parents: 184
diff changeset
33 if self.focussable and self.parent:
aeacd8dfeb07 Add grab_focus helper
Neil Muller <drnlmuller@gmail.com>
parents: 184
diff changeset
34 self.parent.defocus()
aeacd8dfeb07 Add grab_focus helper
Neil Muller <drnlmuller@gmail.com>
parents: 184
diff changeset
35 self.focussed = True
aeacd8dfeb07 Add grab_focus helper
Neil Muller <drnlmuller@gmail.com>
parents: 184
diff changeset
36
23
d0e8940df703 Widgets -> base
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
37
115
d5aa5f805f00 Add Button class that buttons inherit from. It implements a 'clicked' callback
Stefano Rivera <stefano@rivera.za.net>
parents: 109
diff changeset
38 class Button(Widget):
137
7fbeeb402685 PEP8 tidy mamba.widgets
Stefano Rivera <stefano@rivera.za.net>
parents: 115
diff changeset
39
115
d5aa5f805f00 Add Button class that buttons inherit from. It implements a 'clicked' callback
Stefano Rivera <stefano@rivera.za.net>
parents: 109
diff changeset
40 def event(self, ev):
d5aa5f805f00 Add Button class that buttons inherit from. It implements a 'clicked' callback
Stefano Rivera <stefano@rivera.za.net>
parents: 109
diff changeset
41 if super(Button, self).event(ev):
d5aa5f805f00 Add Button class that buttons inherit from. It implements a 'clicked' callback
Stefano Rivera <stefano@rivera.za.net>
parents: 109
diff changeset
42 return True
d5aa5f805f00 Add Button class that buttons inherit from. It implements a 'clicked' callback
Stefano Rivera <stefano@rivera.za.net>
parents: 109
diff changeset
43 if (ev.type == MOUSEBUTTONDOWN
d5aa5f805f00 Add Button class that buttons inherit from. It implements a 'clicked' callback
Stefano Rivera <stefano@rivera.za.net>
parents: 109
diff changeset
44 or (ev.type == KEYDOWN and ev.key == K_RETURN)):
d5aa5f805f00 Add Button class that buttons inherit from. It implements a 'clicked' callback
Stefano Rivera <stefano@rivera.za.net>
parents: 109
diff changeset
45 for callback, args in self.callbacks['clicked']:
d5aa5f805f00 Add Button class that buttons inherit from. It implements a 'clicked' callback
Stefano Rivera <stefano@rivera.za.net>
parents: 109
diff changeset
46 if callback(ev, self, *args):
d5aa5f805f00 Add Button class that buttons inherit from. It implements a 'clicked' callback
Stefano Rivera <stefano@rivera.za.net>
parents: 109
diff changeset
47 return True
d5aa5f805f00 Add Button class that buttons inherit from. It implements a 'clicked' callback
Stefano Rivera <stefano@rivera.za.net>
parents: 109
diff changeset
48 return False
d5aa5f805f00 Add Button class that buttons inherit from. It implements a 'clicked' callback
Stefano Rivera <stefano@rivera.za.net>
parents: 109
diff changeset
49
d5aa5f805f00 Add Button class that buttons inherit from. It implements a 'clicked' callback
Stefano Rivera <stefano@rivera.za.net>
parents: 109
diff changeset
50
59
3cc917814579 Container subclasses Widget
Stefano Rivera <stefano@rivera.za.net>
parents: 58
diff changeset
51 class Container(Widget):
23
d0e8940df703 Widgets -> base
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
52
106
d1152f2a0e13 Mouse affects focus
Stefano Rivera <stefano@rivera.za.net>
parents: 99
diff changeset
53 def __init__(self, rect):
59
3cc917814579 Container subclasses Widget
Stefano Rivera <stefano@rivera.za.net>
parents: 58
diff changeset
54 super(Container, self).__init__(rect)
23
d0e8940df703 Widgets -> base
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
55 self.children = []
77
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
56 self.focussed_child = None
23
d0e8940df703 Widgets -> base
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
57
59
3cc917814579 Container subclasses Widget
Stefano Rivera <stefano@rivera.za.net>
parents: 58
diff changeset
58 def event(self, ev):
77
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
59 """Push an event down through the tree, and fire our own event as a
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
60 last resort
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
61 """
59
3cc917814579 Container subclasses Widget
Stefano Rivera <stefano@rivera.za.net>
parents: 58
diff changeset
62 if ev.type in (MOUSEMOTION, MOUSEBUTTONUP, MOUSEBUTTONDOWN):
58
7fa000c4b3c7 Dispatch key events
Stefano Rivera <stefano@rivera.za.net>
parents: 55
diff changeset
63 for child in self.children:
59
3cc917814579 Container subclasses Widget
Stefano Rivera <stefano@rivera.za.net>
parents: 58
diff changeset
64 if child.rect.collidepoint(ev.pos):
109
dc0b0be7e2f6 Move mouse focussing to within Container
Stefano Rivera <stefano@rivera.za.net>
parents: 106
diff changeset
65 if ev.type == MOUSEBUTTONDOWN and child.focussable:
dc0b0be7e2f6 Move mouse focussing to within Container
Stefano Rivera <stefano@rivera.za.net>
parents: 106
diff changeset
66 root = self
dc0b0be7e2f6 Move mouse focussing to within Container
Stefano Rivera <stefano@rivera.za.net>
parents: 106
diff changeset
67 while root.parent is not None:
dc0b0be7e2f6 Move mouse focussing to within Container
Stefano Rivera <stefano@rivera.za.net>
parents: 106
diff changeset
68 root = root.parent
dc0b0be7e2f6 Move mouse focussing to within Container
Stefano Rivera <stefano@rivera.za.net>
parents: 106
diff changeset
69 root.defocus()
dc0b0be7e2f6 Move mouse focussing to within Container
Stefano Rivera <stefano@rivera.za.net>
parents: 106
diff changeset
70 widget = child
dc0b0be7e2f6 Move mouse focussing to within Container
Stefano Rivera <stefano@rivera.za.net>
parents: 106
diff changeset
71 while widget.parent is not None:
dc0b0be7e2f6 Move mouse focussing to within Container
Stefano Rivera <stefano@rivera.za.net>
parents: 106
diff changeset
72 parent = widget.parent
dc0b0be7e2f6 Move mouse focussing to within Container
Stefano Rivera <stefano@rivera.za.net>
parents: 106
diff changeset
73 if isinstance(parent, Container):
dc0b0be7e2f6 Move mouse focussing to within Container
Stefano Rivera <stefano@rivera.za.net>
parents: 106
diff changeset
74 idx = parent.children.index(widget)
dc0b0be7e2f6 Move mouse focussing to within Container
Stefano Rivera <stefano@rivera.za.net>
parents: 106
diff changeset
75 parent.focussed_child = idx
dc0b0be7e2f6 Move mouse focussing to within Container
Stefano Rivera <stefano@rivera.za.net>
parents: 106
diff changeset
76 widget = parent
dc0b0be7e2f6 Move mouse focussing to within Container
Stefano Rivera <stefano@rivera.za.net>
parents: 106
diff changeset
77 child.focussed = True
dc0b0be7e2f6 Move mouse focussing to within Container
Stefano Rivera <stefano@rivera.za.net>
parents: 106
diff changeset
78
77
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
79 if child.event(ev):
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
80 return True
109
dc0b0be7e2f6 Move mouse focussing to within Container
Stefano Rivera <stefano@rivera.za.net>
parents: 106
diff changeset
81
184
5f286cbb15e3 Pass other events to container children as well
Neil Muller <drnlmuller@gmail.com>
parents: 179
diff changeset
82 elif ev.type == KEYDOWN:
58
7fa000c4b3c7 Dispatch key events
Stefano Rivera <stefano@rivera.za.net>
parents: 55
diff changeset
83 for child in self.children:
77
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
84 if child.focussed:
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
85 if child.event(ev):
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
86 return True
184
5f286cbb15e3 Pass other events to container children as well
Neil Muller <drnlmuller@gmail.com>
parents: 179
diff changeset
87 else:
5f286cbb15e3 Pass other events to container children as well
Neil Muller <drnlmuller@gmail.com>
parents: 179
diff changeset
88 # Other events go to all children first
5f286cbb15e3 Pass other events to container children as well
Neil Muller <drnlmuller@gmail.com>
parents: 179
diff changeset
89 for child in self.children:
5f286cbb15e3 Pass other events to container children as well
Neil Muller <drnlmuller@gmail.com>
parents: 179
diff changeset
90 if child.event(ev):
5f286cbb15e3 Pass other events to container children as well
Neil Muller <drnlmuller@gmail.com>
parents: 179
diff changeset
91 return True
77
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
92 if super(Container, self).event(ev):
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
93 return True
106
d1152f2a0e13 Mouse affects focus
Stefano Rivera <stefano@rivera.za.net>
parents: 99
diff changeset
94 if (self.parent is None and ev.type == KEYDOWN
d1152f2a0e13 Mouse affects focus
Stefano Rivera <stefano@rivera.za.net>
parents: 99
diff changeset
95 and ev.key in (K_UP, K_DOWN)):
97
c65046b5bafd eat focus adjusting key events
Stefano Rivera <stefano@rivera.za.net>
parents: 95
diff changeset
96 return self.adjust_focus(1 if ev.key == K_DOWN else -1)
23
d0e8940df703 Widgets -> base
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
97
d0e8940df703 Widgets -> base
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
98 def add(self, widget):
77
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
99 widget.parent = self
23
d0e8940df703 Widgets -> base
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
100 self.children.append(widget)
106
d1152f2a0e13 Mouse affects focus
Stefano Rivera <stefano@rivera.za.net>
parents: 99
diff changeset
101 self.rect = self.rect.union(widget.rect)
d1152f2a0e13 Mouse affects focus
Stefano Rivera <stefano@rivera.za.net>
parents: 99
diff changeset
102
179
79fdae806ca5 Add remove method to containers
Neil Muller <drnlmuller@gmail.com>
parents: 137
diff changeset
103 def remove(self, widget):
79fdae806ca5 Add remove method to containers
Neil Muller <drnlmuller@gmail.com>
parents: 137
diff changeset
104 widget.parent = None
79fdae806ca5 Add remove method to containers
Neil Muller <drnlmuller@gmail.com>
parents: 137
diff changeset
105 if self.focussed_child is not None:
79fdae806ca5 Add remove method to containers
Neil Muller <drnlmuller@gmail.com>
parents: 137
diff changeset
106 child = self.children[self.focussed_child]
79fdae806ca5 Add remove method to containers
Neil Muller <drnlmuller@gmail.com>
parents: 137
diff changeset
107 self.children.remove(widget)
79fdae806ca5 Add remove method to containers
Neil Muller <drnlmuller@gmail.com>
parents: 137
diff changeset
108 # We don't update the rect, for reasons of simplificty and laziness
79fdae806ca5 Add remove method to containers
Neil Muller <drnlmuller@gmail.com>
parents: 137
diff changeset
109 if self.focussed_child is not None and child in self.children:
79fdae806ca5 Add remove method to containers
Neil Muller <drnlmuller@gmail.com>
parents: 137
diff changeset
110 # Fix focus index
79fdae806ca5 Add remove method to containers
Neil Muller <drnlmuller@gmail.com>
parents: 137
diff changeset
111 self.focussed_child = self.children.index(child)
79fdae806ca5 Add remove method to containers
Neil Muller <drnlmuller@gmail.com>
parents: 137
diff changeset
112 else:
79fdae806ca5 Add remove method to containers
Neil Muller <drnlmuller@gmail.com>
parents: 137
diff changeset
113 self.focussed_child = None
79fdae806ca5 Add remove method to containers
Neil Muller <drnlmuller@gmail.com>
parents: 137
diff changeset
114
106
d1152f2a0e13 Mouse affects focus
Stefano Rivera <stefano@rivera.za.net>
parents: 99
diff changeset
115 def defocus(self):
d1152f2a0e13 Mouse affects focus
Stefano Rivera <stefano@rivera.za.net>
parents: 99
diff changeset
116 if self.focussed_child is not None:
d1152f2a0e13 Mouse affects focus
Stefano Rivera <stefano@rivera.za.net>
parents: 99
diff changeset
117 child = self.children[self.focussed_child]
d1152f2a0e13 Mouse affects focus
Stefano Rivera <stefano@rivera.za.net>
parents: 99
diff changeset
118 if isinstance(child, Container):
d1152f2a0e13 Mouse affects focus
Stefano Rivera <stefano@rivera.za.net>
parents: 99
diff changeset
119 child.defocus()
d1152f2a0e13 Mouse affects focus
Stefano Rivera <stefano@rivera.za.net>
parents: 99
diff changeset
120 child.focussed = False
23
d0e8940df703 Widgets -> base
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
121
77
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
122 def adjust_focus(self, direction):
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
123 """Try and adjust focus in direction (integer)
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
124 """
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
125 if self.focussed_child is not None:
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
126 child = self.children[self.focussed_child]
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
127 if isinstance(child, Container):
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
128 if child.adjust_focus(direction):
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
129 return True
106
d1152f2a0e13 Mouse affects focus
Stefano Rivera <stefano@rivera.za.net>
parents: 99
diff changeset
130 else:
d1152f2a0e13 Mouse affects focus
Stefano Rivera <stefano@rivera.za.net>
parents: 99
diff changeset
131 child.focussed = False
77
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
132
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
133 current = self.focussed_child
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
134 if current is None:
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
135 current = -1 if direction > 0 else len(self.children)
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
136 if direction > 0:
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
137 possibles = list(enumerate(self.children))[current + 1:]
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
138 else:
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
139 possibles = list(enumerate(self.children))[:current]
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
140 possibles.reverse()
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
141 for i, child in possibles:
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
142 if child.focussable:
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
143 child.focussed = True
106
d1152f2a0e13 Mouse affects focus
Stefano Rivera <stefano@rivera.za.net>
parents: 99
diff changeset
144 self.focussed_child = i
d1152f2a0e13 Mouse affects focus
Stefano Rivera <stefano@rivera.za.net>
parents: 99
diff changeset
145 return True
d1152f2a0e13 Mouse affects focus
Stefano Rivera <stefano@rivera.za.net>
parents: 99
diff changeset
146 if isinstance(child, Container):
d1152f2a0e13 Mouse affects focus
Stefano Rivera <stefano@rivera.za.net>
parents: 99
diff changeset
147 if child.adjust_focus(direction):
77
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
148 self.focussed_child = i
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
149 return True
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
150 else:
106
d1152f2a0e13 Mouse affects focus
Stefano Rivera <stefano@rivera.za.net>
parents: 99
diff changeset
151 if self.parent is None:
d1152f2a0e13 Mouse affects focus
Stefano Rivera <stefano@rivera.za.net>
parents: 99
diff changeset
152 if self.focussed_child is not None:
99
2b6626f417f2 Handle root containers where nothing is focussable
Stefano Rivera <stefano@rivera.za.net>
parents: 97
diff changeset
153 # At the end, mark the last one as focussed, again
2b6626f417f2 Handle root containers where nothing is focussable
Stefano Rivera <stefano@rivera.za.net>
parents: 97
diff changeset
154 child = self.children[self.focussed_child]
2b6626f417f2 Handle root containers where nothing is focussable
Stefano Rivera <stefano@rivera.za.net>
parents: 97
diff changeset
155 if isinstance(child, Container):
2b6626f417f2 Handle root containers where nothing is focussable
Stefano Rivera <stefano@rivera.za.net>
parents: 97
diff changeset
156 if child.adjust_focus(-direction):
2b6626f417f2 Handle root containers where nothing is focussable
Stefano Rivera <stefano@rivera.za.net>
parents: 97
diff changeset
157 return True
106
d1152f2a0e13 Mouse affects focus
Stefano Rivera <stefano@rivera.za.net>
parents: 99
diff changeset
158 else:
d1152f2a0e13 Mouse affects focus
Stefano Rivera <stefano@rivera.za.net>
parents: 99
diff changeset
159 child.focussed = True
d1152f2a0e13 Mouse affects focus
Stefano Rivera <stefano@rivera.za.net>
parents: 99
diff changeset
160 return True
95
7a17c5b74148 Correctly handle nested Containers. Set focus on root container at first draw
Stefano Rivera <stefano@rivera.za.net>
parents: 77
diff changeset
161 else:
7a17c5b74148 Correctly handle nested Containers. Set focus on root container at first draw
Stefano Rivera <stefano@rivera.za.net>
parents: 77
diff changeset
162 self.focussed_child = None
77
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
163 return False
Stefano Rivera <stefano@rivera.za.net>
parents: 59
diff changeset
164
23
d0e8940df703 Widgets -> base
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
165 def draw(self, surface):
106
d1152f2a0e13 Mouse affects focus
Stefano Rivera <stefano@rivera.za.net>
parents: 99
diff changeset
166 if self.parent is None and not self.focussed:
95
7a17c5b74148 Correctly handle nested Containers. Set focus on root container at first draw
Stefano Rivera <stefano@rivera.za.net>
parents: 77
diff changeset
167 self.focussed = True
7a17c5b74148 Correctly handle nested Containers. Set focus on root container at first draw
Stefano Rivera <stefano@rivera.za.net>
parents: 77
diff changeset
168 self.adjust_focus(1)
23
d0e8940df703 Widgets -> base
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
169 for child in self.children:
24
30d4f3e62bcf Refactor widgets *again*, add container to Habitat
Stefano Rivera <stefano@rivera.za.net>
parents: 23
diff changeset
170 child.draw(surface)