Mercurial > boomslang
annotate pyntnclick/widgets/base.py @ 558:f9f04cb35697 pyntnclick
s/mamba/pyntnclick/
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Sat, 11 Feb 2012 14:33:23 +0200 |
parents | c0474fe18b96 |
children | b7d8b89de71a |
rev | line source |
---|---|
555
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
1 import collections |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
2 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
3 import pygame |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
4 from pygame.locals import (KEYDOWN, K_DOWN, K_LEFT, K_RETURN, K_RIGHT, K_UP, |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
5 K_KP_ENTER, MOUSEBUTTONDOWN, MOUSEBUTTONUP, |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
6 MOUSEMOTION, SRCALPHA, USEREVENT) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
7 |
558 | 8 from pyntnclick.constants import UP, DOWN, LEFT, RIGHT |
9 from pyntnclick.engine import UserEvent | |
555
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
10 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
11 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
12 class Widget(object): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
13 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
14 def __init__(self, rect): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
15 if not isinstance(rect, pygame.Rect): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
16 rect = pygame.Rect(rect, (0, 0)) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
17 self.rect = rect |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
18 self.focussable = False |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
19 self.focussed = False |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
20 self.modal = False |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
21 self.parent = None |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
22 self.disabled = False |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
23 self.callbacks = collections.defaultdict(list) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
24 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
25 def add_callback(self, eventtype, callback, *args): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
26 self.callbacks[eventtype].append((callback, args)) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
27 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
28 def event(self, ev): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
29 "Don't override this without damn good reason" |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
30 if self.disabled: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
31 return True |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
32 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
33 type_ = ev.type |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
34 if type_ == USEREVENT: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
35 for k in self.callbacks.iterkeys(): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
36 if (isinstance(k, type) and issubclass(k, UserEvent) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
37 and k.matches(ev)): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
38 type_ = k |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
39 break |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
40 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
41 for callback, args in self.callbacks[type_]: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
42 if callback(ev, self, *args): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
43 return True |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
44 return False |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
45 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
46 def draw(self, surface): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
47 "Override me" |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
48 pass |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
49 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
50 def grab_focus(self): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
51 if self.focussable: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
52 # Find the root and current focus |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
53 root = self |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
54 while root.parent is not None: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
55 root = root.parent |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
56 focus = root |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
57 focus_modal_base = None |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
58 while (isinstance(focus, Container) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
59 and focus.focussed_child is not None): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
60 if focus.modal: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
61 focus_modal_base = focus |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
62 focus = focus.children[focus.focussed_child] |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
63 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
64 # Don't leave a modal heirarchy |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
65 if focus_modal_base: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
66 widget = self |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
67 while widget.parent is not None: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
68 if widget == focus_modal_base: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
69 break |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
70 widget = widget.parent |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
71 else: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
72 return False |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
73 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
74 root.defocus() |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
75 widget = self |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
76 while widget.parent is not None: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
77 parent = widget.parent |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
78 if isinstance(parent, Container): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
79 idx = parent.children.index(widget) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
80 parent.focussed_child = idx |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
81 widget = parent |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
82 self.focussed = True |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
83 return True |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
84 return False |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
85 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
86 def disable(self): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
87 if not self.disabled: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
88 self.disabled = True |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
89 self._focussable_when_enabled = self.focussable |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
90 self.focussable = False |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
91 if hasattr(self, 'prepare'): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
92 self.prepare() |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
93 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
94 def enable(self): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
95 if self.disabled: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
96 self.disabled = False |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
97 self.focussable = self._focussable_when_enabled |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
98 if hasattr(self, 'prepare'): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
99 self.prepare() |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
100 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
101 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
102 class Button(Widget): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
103 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
104 def event(self, ev): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
105 if super(Button, self).event(ev): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
106 return True |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
107 if (ev.type == MOUSEBUTTONDOWN |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
108 or (ev.type == KEYDOWN and ev.key in (K_RETURN, K_KP_ENTER))): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
109 for callback, args in self.callbacks['clicked']: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
110 if callback(ev, self, *args): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
111 return True |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
112 return False |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
113 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
114 def forced_click(self): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
115 """Force calling the clicked handler""" |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
116 self.grab_focus() |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
117 for callback, args in self.callbacks['clicked']: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
118 if callback(None, self, *args): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
119 return True |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
120 return False |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
121 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
122 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
123 class Container(Widget): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
124 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
125 def __init__(self, rect=None): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
126 if rect is None: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
127 rect = pygame.Rect(0, 0, 0, 0) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
128 super(Container, self).__init__(rect) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
129 self.children = [] |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
130 self.focussed_child = None |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
131 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
132 def event(self, ev): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
133 """Push an event down through the tree, and fire our own event as a |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
134 last resort |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
135 """ |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
136 if ev.type in (MOUSEMOTION, MOUSEBUTTONUP, MOUSEBUTTONDOWN): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
137 for child in self.children[:]: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
138 if child.rect.collidepoint(ev.pos): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
139 if ev.type == MOUSEBUTTONDOWN and child.focussable: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
140 if not child.grab_focus(): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
141 continue |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
142 if child.event(ev): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
143 return True |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
144 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
145 elif ev.type == KEYDOWN: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
146 for i, child in enumerate(self.children): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
147 if child.focussed or i == self.focussed_child: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
148 if child.event(ev): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
149 return True |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
150 else: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
151 # Other events go to all children first |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
152 for child in self.children[:]: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
153 if child.event(ev): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
154 return True |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
155 if super(Container, self).event(ev): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
156 return True |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
157 if (self.parent is None and ev.type == KEYDOWN |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
158 and ev.key in (K_UP, K_DOWN)): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
159 return self.adjust_focus(1 if ev.key == K_DOWN else -1) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
160 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
161 def add(self, widget): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
162 widget.parent = self |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
163 self.children.append(widget) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
164 self.rect = self.rect.union(widget.rect) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
165 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
166 def remove(self, widget): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
167 widget.parent = None |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
168 if self.focussed_child is not None: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
169 child = self.children[self.focussed_child] |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
170 self.children.remove(widget) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
171 # We don't update the rect, for reasons of simplificty and laziness |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
172 if self.focussed_child is not None and child in self.children: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
173 # Fix focus index |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
174 self.focussed_child = self.children.index(child) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
175 else: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
176 self.focussed_child = None |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
177 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
178 def defocus(self): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
179 if self.focussed_child is not None: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
180 child = self.children[self.focussed_child] |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
181 if isinstance(child, Container): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
182 if not child.defocus(): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
183 return False |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
184 child.focussed = False |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
185 self.focussed_child = None |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
186 return True |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
187 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
188 def adjust_focus(self, direction): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
189 """Try and adjust focus in direction (integer) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
190 """ |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
191 if self.focussed_child is not None: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
192 child = self.children[self.focussed_child] |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
193 if isinstance(child, Container): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
194 if child.adjust_focus(direction): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
195 return True |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
196 elif child.modal: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
197 # We're modal, go back |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
198 if child.adjust_focus(-direction): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
199 return True |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
200 else: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
201 child.focussed = False |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
202 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
203 current = self.focussed_child |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
204 if current is None: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
205 current = -1 if direction > 0 else len(self.children) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
206 if direction > 0: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
207 possibles = list(enumerate(self.children))[current + 1:] |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
208 else: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
209 possibles = list(enumerate(self.children))[:current] |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
210 possibles.reverse() |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
211 for i, child in possibles: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
212 if child.focussable: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
213 child.focussed = True |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
214 self.focussed_child = i |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
215 return True |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
216 if isinstance(child, Container): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
217 if child.adjust_focus(direction): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
218 self.focussed_child = i |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
219 return True |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
220 else: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
221 if self.parent is None: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
222 if self.focussed_child is not None: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
223 # At the end, mark the last one as focussed, again |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
224 child = self.children[self.focussed_child] |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
225 if isinstance(child, Container): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
226 if child.adjust_focus(-direction): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
227 return True |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
228 else: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
229 child.focussed = True |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
230 return True |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
231 else: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
232 self.focussed_child = None |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
233 return False |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
234 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
235 def draw(self, surface): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
236 if self.parent is None and not self.focussed: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
237 self.focussed = True |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
238 self.adjust_focus(1) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
239 for child in self.children: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
240 child.draw(surface) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
241 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
242 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
243 class GridContainer(Container): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
244 """Hacky container that only supports grids, won't work with Container |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
245 children, or modal children. |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
246 """ |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
247 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
248 def __init__(self, width, rect=None): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
249 super(GridContainer, self).__init__(rect) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
250 self.width = width |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
251 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
252 def event(self, ev): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
253 if (ev.type == KEYDOWN and ev.key in (K_UP, K_DOWN, K_LEFT, K_RIGHT)): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
254 direction = None |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
255 if ev.key == K_UP: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
256 direction = UP |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
257 elif ev.key == K_DOWN: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
258 direction = DOWN |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
259 elif ev.key == K_LEFT: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
260 direction = LEFT |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
261 elif ev.key == K_RIGHT: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
262 direction = RIGHT |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
263 return self.adjust_focus(direction) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
264 super(GridContainer, self).event(ev) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
265 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
266 def add(self, widget): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
267 assert not isinstance(widget, Container) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
268 assert not widget.modal |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
269 super(GridContainer, self).add(widget) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
270 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
271 def adjust_focus(self, direction): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
272 if isinstance(direction, int): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
273 direction = (direction, 0) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
274 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
275 if len(self.children) == 0: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
276 return False |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
277 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
278 if self.focussed_child is None: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
279 if sum(direction) > 0: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
280 self.focussed_child = 0 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
281 else: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
282 self.focussed_child = len(self.children) - 1 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
283 else: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
284 self.children[self.focussed_child].focussed = False |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
285 if direction[0] != 0: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
286 self.focussed_child += direction[0] |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
287 if direction[1] != 0: |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
288 self.focussed_child += self.width * direction[1] |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
289 if not 0 <= self.focussed_child < len(self.children): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
290 self.focussed_child = None |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
291 return False |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
292 self.children[self.focussed_child].focussed = True |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
293 return True |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
294 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
295 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
296 class Box(Container): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
297 """A container that draws a filled background with a border""" |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
298 padding = 4 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
299 |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
300 def draw(self, surface): |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
301 expandrect = self.rect.move((-self.padding, -self.padding)) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
302 expandrect.width = self.rect.width + 2 * self.padding |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
303 expandrect.height = self.rect.height + 2 * self.padding |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
304 border = pygame.Surface(expandrect.size, SRCALPHA) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
305 border.fill(pygame.Color('black')) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
306 surface.blit(border, expandrect) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
307 background = pygame.Surface(self.rect.size, SRCALPHA) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
308 background.fill(pygame.Color('gray')) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
309 surface.blit(background, self.rect) |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
310 super(Box, self).draw(surface) |