Mercurial > boomslang
comparison pyntnclick/engine.py @ 619:d9d1a9c4b833 pyntnclick
Add ScreenEvents.
author | Simon Cross <hodgestar+bzr@gmail.com> |
---|---|
date | Sat, 11 Feb 2012 21:40:36 +0200 |
parents | cfc16ded7b34 |
children | 660ef5793886 |
comparison
equal
deleted
inserted
replaced
618:1a8dceccd98e | 619:d9d1a9c4b833 |
---|---|
34 for ev in events: | 34 for ev in events: |
35 if ev.type == QUIT: | 35 if ev.type == QUIT: |
36 return | 36 return |
37 elif ScreenChangeEvent.matches(ev): | 37 elif ScreenChangeEvent.matches(ev): |
38 self.set_screen(ev.screen_name) | 38 self.set_screen(ev.screen_name) |
39 elif ScreenEvent.matches(ev): | |
40 self.screens[ev.screen_name].process_event(ev.event_name, | |
41 ev.data) | |
39 else: | 42 else: |
40 self._screen.dispatch(ev) | 43 self._screen.dispatch(ev) |
41 surface = pygame.display.get_surface() | 44 surface = pygame.display.get_surface() |
42 self._screen.draw(surface) | 45 self._screen.draw(surface) |
43 flip() | 46 flip() |
92 dialog.grab_focus() | 95 dialog.grab_focus() |
93 | 96 |
94 def change_screen(self, new_screen_name): | 97 def change_screen(self, new_screen_name): |
95 ScreenChangeEvent.post(new_screen_name) | 98 ScreenChangeEvent.post(new_screen_name) |
96 | 99 |
100 def screen_event(self, screen_name, event_name, data=None): | |
101 ScreenEvent.post(screen_name, event_name, data) | |
102 | |
103 def process_event(self, event_name, data): | |
104 pass | |
105 | |
97 | 106 |
98 class UserEvent(object): | 107 class UserEvent(object): |
99 """A user event type allowing subclassing, | 108 """A user event type allowing subclassing, |
100 to provide an infinate number of user-defined events | 109 to provide an infinate number of user-defined events |
101 """ | 110 """ |
117 TYPE = "SCREEN_CHANGE" | 126 TYPE = "SCREEN_CHANGE" |
118 | 127 |
119 @classmethod | 128 @classmethod |
120 def post(cls, screen_name): | 129 def post(cls, screen_name): |
121 super(ScreenChangeEvent, cls).post(screen_name=screen_name) | 130 super(ScreenChangeEvent, cls).post(screen_name=screen_name) |
131 | |
132 | |
133 class ScreenEvent(UserEvent): | |
134 | |
135 TYPE = "SCREEN_EVENT" | |
136 | |
137 @classmethod | |
138 def post(cls, screen_name, event_name, data): | |
139 super(ScreenEvent, cls).post(screen_name=screen_name, | |
140 event_name=event_name, data=data) |