X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/53fe40bac2443a81d05c4803942731a77de0880d..b4eecebd423df0c6efe86d7658cd3df818d67ed8:/wxPython/demo/GridSimple.py diff --git a/wxPython/demo/GridSimple.py b/wxPython/demo/GridSimple.py index 3052a26538..0748d09f7e 100644 --- a/wxPython/demo/GridSimple.py +++ b/wxPython/demo/GridSimple.py @@ -1,19 +1,21 @@ -from wxPython.wx import * -from wxPython.grid import * -from wxPython.lib.mixins.grid import wxGridAutoEditMixin + +import wx +import wx.grid as gridlib +#import wx.lib.mixins.grid as mixins #--------------------------------------------------------------------------- -class SimpleGrid(wxGrid): ##, wxGridAutoEditMixin): +class SimpleGrid(gridlib.Grid): ##, mixins.GridAutoEditMixin): def __init__(self, parent, log): - wxGrid.__init__(self, parent, -1) - ##wxGridAutoEditMixin.__init__(self) + gridlib.Grid.__init__(self, parent, -1) + ##mixins.GridAutoEditMixin.__init__(self) self.log = log self.moveTo = None - EVT_IDLE(self, self.OnIdle) + self.Bind(wx.EVT_IDLE, self.OnIdle) - self.CreateGrid(25, 25) + self.CreateGrid(25, 25)#, gridlib.Grid.SelectRows) + ##self.EnableEditing(False) # simple cell formatting self.SetColSize(3, 200) @@ -22,22 +24,28 @@ class SimpleGrid(wxGrid): ##, wxGridAutoEditMixin): 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.SetCellFont(0, 0, wx.Font(12, wx.ROMAN, wx.ITALIC, wx.NORMAL)) + self.SetCellTextColour(1, 1, wx.RED) + self.SetCellBackgroundColour(2, 2, wx.CYAN) + self.SetReadOnly(3, 3, True) - self.SetCellEditor(5, 0, wxGridCellNumberEditor()) + self.SetCellEditor(5, 0, gridlib.GridCellNumberEditor(1,1000)) self.SetCellValue(5, 0, "123") - self.SetCellEditor(6, 0, wxGridCellFloatEditor()) + self.SetCellEditor(6, 0, gridlib.GridCellFloatEditor()) self.SetCellValue(6, 0, "123.34") + self.SetCellEditor(7, 0, gridlib.GridCellNumberEditor()) + + 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 - attr = wxGridCellAttr() - attr.SetTextColour(wxBLACK) - attr.SetBackgroundColour(wxRED) - attr.SetFont(wxFont(10, wxSWISS, wxNORMAL, wxBOLD)) + attr = gridlib.GridCellAttr() + attr.SetTextColour(wx.BLACK) + attr.SetBackgroundColour(wx.RED) + attr.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD)) # you can set cell attributes for the whole row (or column) self.SetRowAttr(5, attr) @@ -46,30 +54,50 @@ class SimpleGrid(wxGrid): ##, wxGridAutoEditMixin): self.SetColLabelValue(1, "column") self.SetColLabelValue(2, "labels") - self.SetColLabelAlignment(wxALIGN_LEFT, wxALIGN_BOTTOM) + self.SetColLabelAlignment(wx.ALIGN_LEFT, wx.ALIGN_BOTTOM) - # test all the events - EVT_GRID_CELL_LEFT_CLICK(self, self.OnCellLeftClick) - EVT_GRID_CELL_RIGHT_CLICK(self, self.OnCellRightClick) - EVT_GRID_CELL_LEFT_DCLICK(self, self.OnCellLeftDClick) - EVT_GRID_CELL_RIGHT_DCLICK(self, self.OnCellRightDClick) + #self.SetDefaultCellOverflow(False) + #r = gridlib.GridCellAutoWrapStringRenderer() + #self.SetCellRenderer(9, 1, r) - EVT_GRID_LABEL_LEFT_CLICK(self, self.OnLabelLeftClick) - EVT_GRID_LABEL_RIGHT_CLICK(self, self.OnLabelRightClick) - EVT_GRID_LABEL_LEFT_DCLICK(self, self.OnLabelLeftDClick) - EVT_GRID_LABEL_RIGHT_DCLICK(self, self.OnLabelRightDClick) + # 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, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE); + self.SetCellValue(11, 1, "This cell is set to span 3 rows and 3 columns"); - EVT_GRID_ROW_SIZE(self, self.OnRowSize) - EVT_GRID_COL_SIZE(self, self.OnColSize) - EVT_GRID_RANGE_SELECT(self, self.OnRangeSelect) - EVT_GRID_CELL_CHANGE(self, self.OnCellChange) - EVT_GRID_SELECT_CELL(self, self.OnSelectCell) + editor = gridlib.GridCellTextEditor() + editor.SetParameters('10') + self.SetCellEditor(0, 4, editor) + self.SetCellValue(0, 4, "Limited text") + + renderer = gridlib.GridCellAutoWrapStringRenderer() + self.SetCellRenderer(15,0, renderer) + self.SetCellValue(15,0, "The text in this cell will be rendered with word-wrapping") + + + # test all the events + self.Bind(gridlib.EVT_GRID_CELL_LEFT_CLICK, self.OnCellLeftClick) + self.Bind(gridlib.EVT_GRID_CELL_RIGHT_CLICK, self.OnCellRightClick) + self.Bind(gridlib.EVT_GRID_CELL_LEFT_DCLICK, self.OnCellLeftDClick) + self.Bind(gridlib.EVT_GRID_CELL_RIGHT_DCLICK, self.OnCellRightDClick) + + self.Bind(gridlib.EVT_GRID_LABEL_LEFT_CLICK, self.OnLabelLeftClick) + self.Bind(gridlib.EVT_GRID_LABEL_RIGHT_CLICK, self.OnLabelRightClick) + self.Bind(gridlib.EVT_GRID_LABEL_LEFT_DCLICK, self.OnLabelLeftDClick) + self.Bind(gridlib.EVT_GRID_LABEL_RIGHT_DCLICK, self.OnLabelRightDClick) - EVT_GRID_EDITOR_SHOWN(self, self.OnEditorShown) - EVT_GRID_EDITOR_HIDDEN(self, self.OnEditorHidden) - EVT_GRID_EDITOR_CREATED(self, self.OnEditorCreated) + self.Bind(gridlib.EVT_GRID_ROW_SIZE, self.OnRowSize) + self.Bind(gridlib.EVT_GRID_COL_SIZE, self.OnColSize) + self.Bind(gridlib.EVT_GRID_RANGE_SELECT, self.OnRangeSelect) + self.Bind(gridlib.EVT_GRID_CELL_CHANGE, self.OnCellChange) + self.Bind(gridlib.EVT_GRID_SELECT_CELL, self.OnSelectCell) + + self.Bind(gridlib.EVT_GRID_EDITOR_SHOWN, self.OnEditorShown) + self.Bind(gridlib.EVT_GRID_EDITOR_HIDDEN, self.OnEditorHidden) + self.Bind(gridlib.EVT_GRID_EDITOR_CREATED, self.OnEditorCreated) def OnCellLeftClick(self, evt): @@ -112,7 +140,6 @@ class SimpleGrid(wxGrid): ##, wxGridAutoEditMixin): (evt.GetRow(), evt.GetCol(), evt.GetPosition())) evt.Skip() - def OnRowSize(self, evt): self.log.write("OnRowSize: row %d, %s\n" % (evt.GetRowOrCol(), evt.GetPosition())) @@ -136,9 +163,10 @@ class SimpleGrid(wxGrid): ##, wxGridAutoEditMixin): # 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 coordinants to move to in + # 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() @@ -147,6 +175,7 @@ class SimpleGrid(wxGrid): ##, wxGridAutoEditMixin): if self.moveTo != None: self.SetGridCursor(self.moveTo[0], self.moveTo[1]) self.moveTo = None + evt.Skip() @@ -157,25 +186,43 @@ class SimpleGrid(wxGrid): ##, wxGridAutoEditMixin): # 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 \ + wx.MessageBox("Are you sure you wish to edit this cell?", + "Checking", wx.YES_NO) == wx.NO: + 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 \ + wx.MessageBox("Are you sure you wish to finish editing this cell?", + "Checking", wx.YES_NO) == wx.NO: + 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())) @@ -184,49 +231,23 @@ class SimpleGrid(wxGrid): ##, wxGridAutoEditMixin): #--------------------------------------------------------------------------- -class TestFrame(wxFrame): +class TestFrame(wx.Frame): def __init__(self, parent, log): - wxFrame.__init__(self, parent, -1, "Simple Grid Demo", size=(640,480)) - self.grid = grid = SimpleGrid(self, log) - - self.mainmenu = wxMenuBar() - - menu = wxMenu() - - mID = NewId() - menu.Append(mID, 'Preview Grid', 'Print Displayed Grid') - EVT_MENU(self, mID, self.OnPreviewGrid) - self.mainmenu.Append(menu, '&Print') - - self.SetMenuBar(self.mainmenu) - - def OnPreviewGrid(self, event): - from wxPython.lib.printout import PrintGrid - grid = self.grid - - total_col = 4 # not all columns to be used for printing - total_row = 4 - - format = [1, 1.5, 2.5, 4, 5, 7] # column spacing - - # class to print and preview - prt = PrintGrid(self, grid, format, total_col, total_row ) - prt.SetAttributes() # get the colour and text attributes - - table = prt.GetTable() # the table print control class - table.SetHeader("Simple Grid Test Header") - table.SetFooter() + wx.Frame.__init__(self, parent, -1, "Simple Grid Demo", size=(640,480)) + self.grid = SimpleGrid(self, log) - prt.Preview() # preview the table #--------------------------------------------------------------------------- if __name__ == '__main__': import sys - app = wxPySimpleApp() + app = wx.PySimpleApp() frame = TestFrame(None, sys.stdout) - frame.Show(true) + frame.Show(True) + #import wx.py + #shell = wx.py.shell.ShellFrame(frame, locals={'wx':wx, 'frame':frame}) + #shell.Show() app.MainLoop()