]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/wx/lib/mixins/inspection.py
Merge recent changes from 2.8 branch.
[wxWidgets.git] / wxPython / wx / lib / mixins / inspection.py
diff --git a/wxPython/wx/lib/mixins/inspection.py b/wxPython/wx/lib/mixins/inspection.py
new file mode 100644 (file)
index 0000000..1a364fa
--- /dev/null
@@ -0,0 +1,88 @@
+#----------------------------------------------------------------------------
+# Name:        wx.lib.mixins.inspection
+# Purpose:     A mix-in class that can add PyCrust-based inspection of the
+#              app's widgets and sizers.
+#
+# Author:      Robin Dunn
+#
+# Created:     21-Nov-2006
+# RCS-ID:      $Id$
+# Copyright:   (c) 2006 by Total Control Software
+# Licence:     wxWindows license
+#----------------------------------------------------------------------------
+
+# NOTE: This class was originally based on ideas sent to the
+# wxPython-users mail list by Dan Eloff.
+
+import wx
+from wx.lib.inspection import InspectionTool
+
+
+#----------------------------------------------------------------------------
+
+class InspectionMixin(object):
+    """
+    This class is intended to be used as a mix-in with the wx.App
+    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
+    OnInit.
+    """
+    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 InspectionFrame window.
+        """
+        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):
+        """
+        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() == self._alt  and \
+               evt.CmdDown() == self._cmd and \
+               evt.ShiftDown() == self._shift and \
+               evt.GetKeyCode() == self._keyCode:
+            self.ShowInspectionTool()
+        else:
+            evt.Skip()
+
+
+    def ShowInspectionTool(self):
+        """
+        Show the Inspection tool, creating it if neccesary, setting it
+        to display the widget under the cursor.
+        """
+        # 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
+
+#---------------------------------------------------------------------------
+