102 |
return self.CanGetValueAs(row, col, typeName) |
return self.CanGetValueAs(row, col, typeName) |
103 |
|
|
104 |
|
|
105 |
|
|
106 |
|
class NullRenderer(wxPyGridCellRenderer): |
107 |
|
|
108 |
|
"""Renderer that draws NULL as a gray rectangle |
109 |
|
|
110 |
|
Other values are delegated to a normal renderer which is given as |
111 |
|
the parameter to the constructor. |
112 |
|
""" |
113 |
|
|
114 |
|
def __init__(self, non_null_renderer): |
115 |
|
wxPyGridCellRenderer.__init__(self) |
116 |
|
self.non_null_renderer = non_null_renderer |
117 |
|
|
118 |
|
def Draw(self, grid, attr, dc, rect, row, col, isSelected): |
119 |
|
value = grid.table.GetValue(row, col) |
120 |
|
if value is None: |
121 |
|
dc.SetBackgroundMode(wxSOLID) |
122 |
|
dc.SetBrush(wxBrush(wxColour(192, 192, 192), wxSOLID)) |
123 |
|
dc.SetPen(wxTRANSPARENT_PEN) |
124 |
|
dc.DrawRectangle(rect.x, rect.y, rect.width, rect.height) |
125 |
|
else: |
126 |
|
self.non_null_renderer.Draw(grid, attr, dc, rect, row, col, |
127 |
|
isSelected) |
128 |
|
|
129 |
|
def GetBestSize(self, grid, attr, dc, row, col): |
130 |
|
self.non_null_renderer.GetBestSize(grid, attr, dc, row, col) |
131 |
|
|
132 |
|
def Clone(self): |
133 |
|
return NullRenderer(self.non_null_renderer) |
134 |
|
|
135 |
|
|
136 |
class TableGrid(wxGrid, Publisher): |
class TableGrid(wxGrid, Publisher): |
137 |
|
|
138 |
"""A grid view for a Thuban table |
"""A grid view for a Thuban table |
168 |
|
|
169 |
self.SetSelectionMode(wxGrid.wxGridSelectRows) |
self.SetSelectionMode(wxGrid.wxGridSelectRows) |
170 |
|
|
|
#EVT_GRID_RANGE_SELECT(self, None) |
|
|
#EVT_GRID_SELECT_CELL(self, None) |
|
|
#EVT_GRID_RANGE_SELECT(self, self.OnRangeSelect) |
|
|
#EVT_GRID_SELECT_CELL(self, self.OnSelectCell) |
|
|
|
|
171 |
self.ToggleEventListeners(True) |
self.ToggleEventListeners(True) |
172 |
|
|
173 |
|
# Replace the normal renderers with our own versions which |
174 |
|
# render NULL/None values specially |
175 |
|
self.RegisterDataType(wxGRID_VALUE_STRING, |
176 |
|
NullRenderer(wxGridCellStringRenderer()), None) |
177 |
|
self.RegisterDataType(wxGRID_VALUE_NUMBER, |
178 |
|
NullRenderer(wxGridCellNumberRenderer()), None) |
179 |
|
self.RegisterDataType(wxGRID_VALUE_FLOAT, |
180 |
|
NullRenderer(wxGridCellFloatRenderer()), None) |
181 |
|
|
182 |
def SetTableObject(self, table): |
def SetTableObject(self, table): |
183 |
self.table.SetTable(table) |
self.table.SetTable(table) |
184 |
|
|