Mercurial > fife-parpg
comparison engine/extensions/pychan/compat.py @ 205:54bfd1015b35
* PyChan event handling rework (part I)
** Unified listeners
** ...hopefully more robust attach/detach code.
* Added compat, layout and also the new autopsition feature.
* Documentation
* Minor style fixes in core.
author | phoku@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Sat, 14 Mar 2009 12:13:29 +0000 |
parents | |
children | 6214a0b91eb2 |
comparison
equal
deleted
inserted
replaced
204:5816ab527da8 | 205:54bfd1015b35 |
---|---|
1 # coding: utf-8 | |
2 | |
3 in_fife = None | |
4 guichan = None | |
5 | |
6 def _import_guichan(): | |
7 global in_fife | |
8 | |
9 err_fife = "" | |
10 try: | |
11 import fife | |
12 in_fife = True | |
13 return fife | |
14 except ImportError, e: | |
15 err_fife = str(e) | |
16 | |
17 try: | |
18 import guichan | |
19 in_fife = False | |
20 return guichan | |
21 except ImportError, e: | |
22 import traceback | |
23 traceback.print_exc() | |
24 raise ImportError("Couldn't import neither fife nor guichan: fife:'%s' guichan:'%s'" % (err_fife,str(e))) | |
25 guichan = _import_guichan() | |
26 | |
27 | |
28 | |
29 def _munge_engine_hook(engine): | |
30 engine.translate_mouse_event = getattr(engine,'translate_mouse_event',lambda x : x ) | |
31 engine.translate_key_event = getattr(engine,'translate_key_event',lambda x : x ) | |
32 | |
33 if not in_fife: | |
34 return engine | |
35 if not isinstance(engine,fife.Engine): | |
36 return engine | |
37 | |
38 guimanager = engine.getGuiManager() | |
39 | |
40 def _fife_load_image(filename): | |
41 index = engine.imagePool.addResourceFromFile(filename) | |
42 return guichan.GuiImage(index,engine.getImagePool()) | |
43 | |
44 class hook: | |
45 pass | |
46 hook = hook() | |
47 | |
48 hook.add_widget = guimanager.add | |
49 hook.remove_widget = guimanager.remove | |
50 hook.default_font = engine.getDefaultFont() | |
51 hook.load_image = _fife_load_image | |
52 hook.translate_mouse_event = guimanager.translateMouseEvent | |
53 hook.translate_key_event = guimanager.translateKeyEvent | |
54 | |
55 hook.screen_width = engine.getRenderBackend().getScreenWidth() | |
56 hook.screen_height = engine.getRenderBackend().getScreenHeight() | |
57 | |
58 hook.engine = engine | |
59 return hook | |
60 | |
61 | |
62 class _multilistener(guichan.ActionListener,guichan.MouseListener,guichan.KeyListener): | |
63 def __init__(self): | |
64 guichan.ActionListener.__init__(self) | |
65 guichan.MouseListener.__init__(self) | |
66 guichan.KeyListener.__init__(self) | |
67 | |
68 | |
69 class _point(object): | |
70 def __init__(self,x=0,y=0): | |
71 self.x=0 | |
72 self.y=0 | |
73 | |
74 if in_fife: | |
75 fife = guichan | |
76 guichan.ActionListener._ActionListener_init__ = lambda x : x | |
77 #guichan.MouseListener.__init__ = lambda x : x | |
78 guichan.KeyListener.__init__ = lambda x : x | |
79 else: | |
80 guichan.Point = _point | |
81 guichan.ScrollArea.SHOW_AUTO = guichan.ScrollArea.ShowAuto | |
82 guichan.ScrollArea.SHOW_NEVER = guichan.ScrollArea.ShowNever | |
83 guichan.ScrollArea.SHOW_ALWAYS = guichan.ScrollArea.ShowAlways | |
84 | |
85 assert isinstance(_multilistener(),guichan.ActionListener) | |
86 assert isinstance(_multilistener(),guichan.MouseListener) | |
87 assert isinstance(_multilistener(),guichan.KeyListener) |