]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/wx/lib/mixins/inspect.py
don't use TPM_RECURSE under NT4, it results in TrackPopupMenu() not showing the menu...
[wxWidgets.git] / wxPython / wx / lib / mixins / inspect.py
index 6e6951a7cd913d818cce39fa537351b1b1b57f6e..b6a5f82c617cb0872b57bb786816788bfd1c0bf4 100644 (file)
@@ -1,6 +1,7 @@
 #----------------------------------------------------------------------------
 # Name:        wx.lib.mixins.inspect
-# Purpose:     A mix-in class that can add PyCrust-based inspection of the app
+# Purpose:     A mix-in class that can add PyCrust-based inspection of the
+#              app's widgets and sizers.
 #
 # Author:      Robin Dunn
 #
 # Licence:     wxWindows license
 #----------------------------------------------------------------------------
 
-# NOTE: This class is based on ideas sent to the wxPython-users
-# mail-list by Dan Eloff.
+# NOTE: This class was originally based on ideas sent to the
+# wxPython-users mail list by Dan Eloff.
 
-import wx.py
+import wx
+from wx.lib.inspect import InspectionTool
+
+
+#----------------------------------------------------------------------------
 
 class InspectionMixin(object):
     """
     This class is intended to be used as a mix-in with the wx.App
-    object.  When used it will add the ability to popup a PyCrust
-    window where the widget under the mouse cursor will be loaded into
-    the shell's namespace as 'win'.
+    class.  When used it will add the ability to popup a
+    InspectionFrame window where the widget under the mouse cursor
+    will be selected in the tree and loaded into the shell's namespace
+    as 'obj'.  The default key sequence to activate the inspector is
+    Ctrl-Alt-I (or Cmd-Alt-I on Mac) but this can be changed via
+    parameters to the `Init` method, or the application can call
+    `ShowInspectionTool` from other event handlers if desired.
 
     To use this class simply derive a class from wx.App and
-    InspectionMixin and then call the Init() method from the app's
+    InspectionMixin and then call the `Init` method from the app's
     OnInit.
     """
-    def Init(self, pos=(-1, -1), size=(-1, -1)):
+    def Init(self, pos=wx.DefaultPosition, size=wx.Size(850,700),
+             config=None, locals=None,
+             alt=True, cmd=True, shift=False, keyCode=ord('I')):
         """
-        Make the event binding that will activate the PyCrust window.
+        Make the event binding that will activate the InspectionFrame window.
         """
-        self.Bind(wx.EVT_KEY_DOWN, self.OnKeyPress)
-        self._crust = None
-        self._pos = pos
-        self._size = size
+        self.Bind(wx.EVT_KEY_DOWN, self._OnKeyPress)
+        self._alt = alt
+        self._cmd = cmd
+        self._shift = shift
+        self._keyCode = keyCode
+        InspectionTool().Init(pos, size, config, locals, self)
 
-
-    def OnKeyPress(self, evt):
+    def _OnKeyPress(self, evt):
         """
-        Event handler
+        Event handler, check for our hot-key.  Normally it is
+        Ctrl-Alt-I but that can be changed by what is passed to the
+        Init method.
         """
-        if evt.AltDown() and evt.CmdDown() and evt.KeyCode == ord('I'):
-            self.ShowShell()
+        if evt.AltDown() == self._alt  and \
+               evt.CmdDown() == self._cmd and \
+               evt.ShiftDown() == self._shift and \
+               evt.GetKeyCode() == self._keyCode:
+            self.ShowInspectionTool()
         else:
             evt.Skip()
 
 
-    def ShowShell(self):
+    def ShowInspectionTool(self):
         """
-        Show the PyCrust window.
+        Show the Inspection tool, creating it if neccesary, setting it
+        to display the widget under the cursor.
         """
-        if not self._crust:
-            self._crust = wx.py.crust.CrustFrame(self.GetTopWindow(),
-                                                 pos = self._pos, size = self._size)
-            self._crust.shell.interp.locals['app'] = self
-        win = wx.FindWindowAtPointer()
-        self._crust.shell.interp.locals['win'] = win
-        self._crust.Show()
+        # get the current widget under the mouse
+        wnd = wx.FindWindowAtPointer()
+        InspectionTool().Show(wnd)
+
+
+#---------------------------------------------------------------------------
+
+class InspectableApp(wx.App, InspectionMixin):
+    """
+    A simple mix of wx.App and InspectionMixin that can be used stand-alone.
+    """
+
+    def OnInit(self):
+        self.Init()
+        return True
+
+#---------------------------------------------------------------------------
+