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)