+#----------------------------------------------------------------------------
+
+
+class GridAutoEditMixin:
+    """A mix-in class that automatically enables the grid edit control when
+    a cell is selected.
+
+    If your class hooks EVT_GRID_SELECT_CELL be sure to call event.Skip so
+    this handler will be called too.
+    """
+
+    def __init__(self):
+        self.__enableEdit = 0
+        self.Bind(wx.EVT_IDLE, self.__OnIdle)
+        self.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.__OnSelectCell)
+
+
+    def __OnIdle(self, evt):
+        if self.__enableEdit:
+            if self.CanEnableCellControl():
+                self.EnableCellEditControl()
+            self.__enableEdit = 0
+        evt.Skip()
+
+
+    def __OnSelectCell(self, evt):
+        self.__enableEdit = 1
+        evt.Skip()