X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f6bcfd974ef26faf6f91a62cac09827e09463fd1..fbd5dd1dfa8aa5d7574e2f3e6d898dc8bb4c89c4:/wxPython/demo/GridSimple.py diff --git a/wxPython/demo/GridSimple.py b/wxPython/demo/GridSimple.py index 5f23c26dc8..9075341a70 100644 --- a/wxPython/demo/GridSimple.py +++ b/wxPython/demo/GridSimple.py @@ -1,14 +1,20 @@ from wxPython.wx import * from wxPython.grid import * +from wxPython.lib.mixins.grid import wxGridAutoEditMixin #--------------------------------------------------------------------------- -class SimpleGrid(wxGrid): +class SimpleGrid(wxGrid): ##, wxGridAutoEditMixin): def __init__(self, parent, log): wxGrid.__init__(self, parent, -1) + ##wxGridAutoEditMixin.__init__(self) self.log = log + self.moveTo = None - self.CreateGrid(25, 25) + EVT_IDLE(self, self.OnIdle) + + self.CreateGrid(25, 25) #, wxGrid.wxGridSelectRows) + ##self.EnableEditing(False) # simple cell formatting self.SetColSize(3, 200) @@ -16,9 +22,22 @@ class SimpleGrid(wxGrid): self.SetCellValue(0, 0, "First cell") self.SetCellValue(1, 1, "Another cell") self.SetCellValue(2, 2, "Yet another cell") + self.SetCellValue(3, 3, "This cell is read-only") self.SetCellFont(0, 0, wxFont(12, wxROMAN, wxITALIC, wxNORMAL)) self.SetCellTextColour(1, 1, wxRED) self.SetCellBackgroundColour(2, 2, wxCYAN) + self.SetReadOnly(3, 3, True) + + self.SetCellEditor(5, 0, wxGridCellNumberEditor(1,1000)) + self.SetCellValue(5, 0, "123") + self.SetCellEditor(6, 0, wxGridCellFloatEditor()) + self.SetCellValue(6, 0, "123.34") + self.SetCellEditor(7, 0, wxGridCellNumberEditor()) + + self.SetCellValue(6, 3, "You can veto editing this cell") + + #self.SetRowLabelSize(0) + #self.SetColLabelSize(0) # attribute objects let you keep a set of formatting values # in one spot, and reuse them if needed @@ -30,6 +49,28 @@ class SimpleGrid(wxGrid): # you can set cell attributes for the whole row (or column) self.SetRowAttr(5, attr) + self.SetColLabelValue(0, "Custom") + self.SetColLabelValue(1, "column") + self.SetColLabelValue(2, "labels") + + self.SetColLabelAlignment(wxALIGN_LEFT, wxALIGN_BOTTOM) + + #self.SetDefaultCellOverflow(False) + #r = wxGridCellAutoWrapStringRenderer() + #self.SetCellRenderer(9, 1, r) + + # overflow cells + self.SetCellValue( 9, 1, "This default cell will overflow into neighboring cells, but not if you turn overflow off."); + self.SetCellSize(11, 1, 3, 3); + self.SetCellAlignment(11, 1, wxALIGN_CENTRE, wxALIGN_CENTRE); + self.SetCellValue(11, 1, "This cell is set to span 3 rows and 3 columns"); + + + editor = wxGridCellTextEditor() + editor.SetParameters('10') + self.SetCellEditor(0, 4, editor) + self.SetCellValue(0, 4, "Limited text") + # test all the events EVT_GRID_CELL_LEFT_CLICK(self, self.OnCellLeftClick) @@ -51,6 +92,8 @@ class SimpleGrid(wxGrid): EVT_GRID_EDITOR_SHOWN(self, self.OnEditorShown) EVT_GRID_EDITOR_HIDDEN(self, self.OnEditorHidden) + EVT_GRID_EDITOR_CREATED(self, self.OnEditorCreated) + def OnCellLeftClick(self, evt): @@ -110,27 +153,73 @@ class SimpleGrid(wxGrid): (evt.GetTopLeftCoords(), evt.GetBottomRightCoords())) evt.Skip() + def OnCellChange(self, evt): self.log.write("OnCellChange: (%d,%d) %s\n" % (evt.GetRow(), evt.GetCol(), evt.GetPosition())) + + # Show how to stay in a cell that has bad data. We can't just + # call SetGridCursor here since we are nested inside one so it + # won't have any effect. Instead, set coordinates to move to in + # idle time. + value = self.GetCellValue(evt.GetRow(), evt.GetCol()) + if value == 'no good': + self.moveTo = evt.GetRow(), evt.GetCol() + + + def OnIdle(self, evt): + if self.moveTo != None: + self.SetGridCursor(self.moveTo[0], self.moveTo[1]) + self.moveTo = None evt.Skip() + def OnSelectCell(self, evt): self.log.write("OnSelectCell: (%d,%d) %s\n" % (evt.GetRow(), evt.GetCol(), evt.GetPosition())) + + # Another way to stay in a cell that has a bad value... + row = self.GetGridCursorRow() + col = self.GetGridCursorCol() + if self.IsCellEditControlEnabled(): + self.HideCellEditControl() + self.DisableCellEditControl() + value = self.GetCellValue(row, col) + if value == 'no good 2': + return # cancels the cell selection evt.Skip() + def OnEditorShown(self, evt): + if evt.GetRow() == 6 and evt.GetCol() == 3 and \ + wxMessageBox("Are you sure you wish to edit this cell?", + "Checking", wxYES_NO) == wxNO: + evt.Veto() + return + self.log.write("OnEditorShown: (%d,%d) %s\n" % (evt.GetRow(), evt.GetCol(), evt.GetPosition())) evt.Skip() + def OnEditorHidden(self, evt): + if evt.GetRow() == 6 and evt.GetCol() == 3 and \ + wxMessageBox("Are you sure you wish to finish editing this cell?", + "Checking", wxYES_NO) == wxNO: + evt.Veto() + return + self.log.write("OnEditorHidden: (%d,%d) %s\n" % (evt.GetRow(), evt.GetCol(), evt.GetPosition())) evt.Skip() + def OnEditorCreated(self, evt): + self.log.write("OnEditorCreated: (%d, %d) %s\n" % + (evt.GetRow(), evt.GetCol(), evt.GetControl())) + + + #--------------------------------------------------------------------------- class TestFrame(wxFrame): @@ -146,8 +235,10 @@ if __name__ == '__main__': import sys app = wxPySimpleApp() frame = TestFrame(None, sys.stdout) - frame.Show(true) + frame.Show(True) app.MainLoop() #--------------------------------------------------------------------------- + +