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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
f9f04cb35697 s/mamba/pyntnclick/
Stefano Rivera <stefano@rivera.za.net>
parents: 555
diff changeset
8 from pyntnclick.constants import UP, DOWN, LEFT, RIGHT
f9f04cb35697 s/mamba/pyntnclick/
Stefano Rivera <stefano@rivera.za.net>
parents: 555
diff changeset
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)