]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/samples/wxPIA_book/Chapter-14/grid_renderer.py
Added the sample code from wxPython In Action to the samples dir
[wxWidgets.git] / wxPython / samples / wxPIA_book / Chapter-14 / grid_renderer.py
diff --git a/wxPython/samples/wxPIA_book/Chapter-14/grid_renderer.py b/wxPython/samples/wxPIA_book/Chapter-14/grid_renderer.py
new file mode 100644 (file)
index 0000000..415fd50
--- /dev/null
@@ -0,0 +1,59 @@
+import wx
+import wx.grid
+import random
+
+class RandomBackgroundRenderer(wx.grid.PyGridCellRenderer):
+    def __init__(self):
+        wx.grid.PyGridCellRenderer.__init__(self)
+
+
+    def Draw(self, grid, attr, dc, rect, row, col, isSelected):
+        text = grid.GetCellValue(row, col)
+        hAlign, vAlign = attr.GetAlignment()
+        dc.SetFont( attr.GetFont() )
+        if isSelected:
+            bg = grid.GetSelectionBackground()
+            fg = grid.GetSelectionForeground()
+        else:
+            bg = random.choice(["pink", "sky blue", "cyan", "yellow", "plum"])
+            fg = attr.GetTextColour()
+
+        dc.SetTextBackground(bg)
+        dc.SetTextForeground(fg)
+        dc.SetBrush(wx.Brush(bg, wx.SOLID))
+        dc.SetPen(wx.TRANSPARENT_PEN)
+        dc.DrawRectangleRect(rect)           
+        grid.DrawTextRectangle(dc, text, rect, hAlign, vAlign)
+
+
+    def GetBestSize(self, grid, attr, dc, row, col):
+        text = grid.GetCellValue(row, col)
+        dc.SetFont(attr.GetFont())
+        w, h = dc.GetTextExtent(text)
+        return wx.Size(w, h)
+  
+    def Clone(self):
+        return RandomBackgroundRenderer()
+
+class TestFrame(wx.Frame):
+    def __init__(self):
+        wx.Frame.__init__(self, None, title="Grid Renderer",
+                          size=(640,480))
+
+        grid = wx.grid.Grid(self)
+        grid.CreateGrid(50,50)
+
+        # Set this custom renderer just for row 4
+        attr = wx.grid.GridCellAttr()
+        attr.SetRenderer(RandomBackgroundRenderer())
+        grid.SetRowAttr(4, attr)
+        
+        for row in range(10):
+            for col in range(10):
+                grid.SetCellValue(row, col,
+                                  "cell (%d,%d)" % (row, col))
+
+app = wx.PySimpleApp()
+frame = TestFrame()
+frame.Show()
+app.MainLoop()