X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/83625579234e2dfd760c7380d267f0f0c1e53be6..13220cca727ed74c2998b4fb89a4d80aacf28e68:/wxPython/demo/GridCustEditor.py diff --git a/wxPython/demo/GridCustEditor.py b/wxPython/demo/GridCustEditor.py index f90ea1f2f5..55a8f9a410 100644 --- a/wxPython/demo/GridCustEditor.py +++ b/wxPython/demo/GridCustEditor.py @@ -1,19 +1,20 @@ -#!/usr/bin/env python -from wxPython.wx import * -from wxPython.grid import * +import string + +import wx +import wx.grid as gridlib #--------------------------------------------------------------------------- -class MyCellEditor(wxPyGridCellEditor): +class MyCellEditor(gridlib.PyGridCellEditor): """ This is a sample GridCellEditor that shows you how to make your own custom - grid editors. All the methods that can be overridden are show here. The + grid editors. All the methods that can be overridden are shown here. The ones that must be overridden are marked with "*Must Override*" in the docstring. Notice that in order to call the base class version of these special methods we use the method name preceded by "base_". This is because these - methods are "virtual" in C++ so if we try to call wxGridCellEditor.Create + methods are "virtual" in C++ so if we try to call wx.GridCellEditor.Create for example, then when the wxPython extension module tries to call ptr->Create(...) then it actually calls the derived class version which looks up the method in this class and calls it, causing a recursion loop. @@ -23,18 +24,19 @@ class MyCellEditor(wxPyGridCellEditor): def __init__(self, log): self.log = log self.log.write("MyCellEditor ctor\n") - wxPyGridCellEditor.__init__(self) + gridlib.PyGridCellEditor.__init__(self) def Create(self, parent, id, evtHandler): """ - Called to create the control, which must derive from wxControl. + Called to create the control, which must derive from wx.Control. *Must Override* """ self.log.write("MyCellEditor: Create\n") - self._tc = wxTextCtrl(parent, id, "") + self._tc = wx.TextCtrl(parent, id, "") self._tc.SetInsertionPoint(0) self.SetControl(self._tc) + if evtHandler: self._tc.PushEventHandler(evtHandler) @@ -46,7 +48,8 @@ class MyCellEditor(wxPyGridCellEditor): PaintBackground and do something meaningful there. """ self.log.write("MyCellEditor: SetSize %s\n" % rect) - self._tc.SetDimensions(rect.x, rect.y, rect.width+2, rect.height+2) + self._tc.SetDimensions(rect.x, rect.y, rect.width+2, rect.height+2, + wx.SIZE_ALLOW_MINUS_ONE) def Show(self, show, attr): @@ -86,16 +89,17 @@ class MyCellEditor(wxPyGridCellEditor): def EndEdit(self, row, col, grid): """ - Complete the editing of the current cell. Returns true if the value + Complete the editing of the current cell. Returns True if the value has changed. If necessary, the control may be destroyed. *Must Override* """ self.log.write("MyCellEditor: EndEdit (%d,%d)\n" % (row, col)) - changed = false + changed = False val = self._tc.GetValue() + if val != self.startValue: - changed = true + changed = True grid.GetTable().SetValue(row, col, val) # update the table self.startValue = '' @@ -115,7 +119,7 @@ class MyCellEditor(wxPyGridCellEditor): def IsAcceptedKey(self, evt): """ - Return TRUE to allow the given key to start editing: the base class + Return True to allow the given key to start editing: the base class version only checks that the event has no modifiers. F2 is special and will always start the editor. """ @@ -124,7 +128,8 @@ class MyCellEditor(wxPyGridCellEditor): ## Oops, there's a bug here, we'll have to do it ourself.. ##return self.base_IsAcceptedKey(evt) - return not evt.HasModifiers() and evt.GetKeyCode() != WXK_SHIFT + return (not (evt.ControlDown() or evt.AltDown()) and + evt.GetKeyCode() != wx.WXK_SHIFT) def StartingKey(self, evt): @@ -135,19 +140,23 @@ class MyCellEditor(wxPyGridCellEditor): self.log.write("MyCellEditor: StartingKey %d\n" % evt.GetKeyCode()) key = evt.GetKeyCode() ch = None - if key in [WXK_NUMPAD0, WXK_NUMPAD1, WXK_NUMPAD2, WXK_NUMPAD3, WXK_NUMPAD4, - WXK_NUMPAD5, WXK_NUMPAD6, WXK_NUMPAD7, WXK_NUMPAD8, WXK_NUMPAD9]: - ch = ch = chr(ord('0') + key - WXK_NUMPAD0) + if key in [ wx.WXK_NUMPAD0, wx.WXK_NUMPAD1, wx.WXK_NUMPAD2, wx.WXK_NUMPAD3, + wx.WXK_NUMPAD4, wx.WXK_NUMPAD5, wx.WXK_NUMPAD6, wx.WXK_NUMPAD7, + wx.WXK_NUMPAD8, wx.WXK_NUMPAD9 + ]: + + ch = ch = chr(ord('0') + key - wx.WXK_NUMPAD0) elif key < 256 and key >= 0 and chr(key) in string.printable: ch = chr(key) if not evt.ShiftDown(): - ch = string.lower(ch) + ch = ch.lower() if ch is not None: # For this example, replace the text. Normally we would append it. #self._tc.AppendText(ch) self._tc.SetValue(ch) + self._tc.SetInsertionPointEnd() else: evt.Skip() @@ -177,9 +186,9 @@ class MyCellEditor(wxPyGridCellEditor): #--------------------------------------------------------------------------- -class GridEditorTest(wxGrid): +class GridEditorTest(gridlib.Grid): def __init__(self, parent, log): - wxGrid.__init__(self, parent, -1) + gridlib.Grid.__init__(self, parent, -1) self.log = log self.CreateGrid(10, 3) @@ -192,16 +201,17 @@ class GridEditorTest(wxGrid): #self.SetDefaultEditor(MyCellEditor(self.log)) # Or we could just do it like this: - #self.RegisterDataType(wxGRID_VALUE_STRING, - # wxGridCellStringRenderer(), + #self.RegisterDataType(wx.GRID_VALUE_STRING, + # wx.GridCellStringRenderer(), # MyCellEditor(self.log)) + # ) # but for this example, we'll just set the custom editor on one cell self.SetCellEditor(1, 0, MyCellEditor(self.log)) self.SetCellValue(1, 0, "Try to edit this box") # and on a column - attr = wxGridCellAttr() + attr = gridlib.GridCellAttr() attr.SetEditor(MyCellEditor(self.log)) self.SetColAttr(2, attr) self.SetCellValue(1, 2, "or any in this column") @@ -210,11 +220,12 @@ class GridEditorTest(wxGrid): self.SetColSize(1, 150) self.SetColSize(2, 150) + #--------------------------------------------------------------------------- -class TestFrame(wxFrame): +class TestFrame(wx.Frame): def __init__(self, parent, log): - wxFrame.__init__(self, parent, -1, "Custom Grid Cell Editor Test", + wx.Frame.__init__(self, parent, -1, "Custom Grid Cell Editor Test", size=(640,480)) grid = GridEditorTest(self, log) @@ -222,9 +233,9 @@ class TestFrame(wxFrame): if __name__ == '__main__': import sys - app = wxPySimpleApp() + app = wx.PySimpleApp() frame = TestFrame(None, sys.stdout) - frame.Show(true) + frame.Show(True) app.MainLoop()