]>
Commit | Line | Data |
---|---|---|
ea839c29 VZ |
1 | #---------------------------------------------------------------------------- |
2 | # Name: wx.lib.mixins.inspect | |
3 | # Purpose: A mix-in class that can add PyCrust-based inspection of the app | |
4 | # | |
5 | # Author: Robin Dunn | |
6 | # | |
7 | # Created: 21-Nov-2006 | |
8 | # RCS-ID: $Id$ | |
9 | # Copyright: (c) 2006 by Total Control Software | |
10 | # Licence: wxWindows license | |
11 | #---------------------------------------------------------------------------- | |
12 | ||
13 | # NOTE: This class is based on ideas sent to the wxPython-users | |
14 | # mail-list by Dan Elof. | |
15 | ||
16 | import wx.py | |
17 | ||
18 | class InspectionMixin(object): | |
19 | """ | |
20 | This class is intended to be used as a mix-in with the wx.App | |
21 | object. When used it will add the ability to popup a PyCrust | |
22 | window where the widget under the mouse cursor will be loaded into | |
23 | the shell's namespace as 'win'. | |
24 | ||
25 | To use this class simply derive a class from wx.App and | |
26 | InspectionMixin and then call the Init() method from the app's | |
27 | OnInit. | |
28 | """ | |
29 | def Init(self): | |
30 | """ | |
31 | Make the event binding that will activate the PyCrust window. | |
32 | """ | |
33 | self.Bind(wx.EVT_KEY_DOWN, self.OnKeyPress) | |
34 | self._crust = None | |
35 | ||
36 | ||
37 | def OnKeyPress(self, evt): | |
38 | """ | |
39 | Event handler | |
40 | """ | |
41 | if evt.AltDown() and evt.CmdDown() and evt.KeyCode == ord('I'): | |
42 | self.ShowShell() | |
43 | else: | |
44 | evt.Skip() | |
45 | ||
46 | ||
47 | def ShowShell(self): | |
48 | """ | |
49 | Show the PyCrust window. | |
50 | """ | |
51 | if not self._crust: | |
52 | self._crust = wx.py.crust.CrustFrame(self.GetTopWindow()) | |
53 | self._crust.shell.interp.locals['app'] = self | |
54 | win = wx.FindWindowAtPointer() | |
55 | self._crust.shell.interp.locals['win'] = win | |
56 | self._crust.Show() | |
57 | ||
58 |