Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import wx
- import wx.grid
- from model import session
- class Column(object):
- def __init__(self, id, title=None, width=None, getter=None):
- self.id = id
- self.title = title if title else id
- default_getter = lambda x: getattr(x, self.id, None)
- self.getter = getter if getter else default_getter
- self.width = width if width else -2
- class SAGridAdapter(wx.grid.PyGridTableBase):
- BUFFER_LEN = 200
- def __init__(self, columns, query):
- super(SAGridAdapter, self).__init__()
- self.columns = columns
- self.query = query
- self.buffer_start = 0
- self.buffer = ()
- self.rows = 0
- self.odd = wx.grid.GridCellAttr()
- self.odd.SetBackgroundColour("snow")
- self.odd.SetReadOnly(True)
- self.even = wx.grid.GridCellAttr()
- self.even.SetBackgroundColour("lightcyan2")
- self.even.SetReadOnly(True)
- self.selected = wx.grid.GridCellAttr()
- self.selected.SetBackgroundColour((135,206,250))
- self.selected.SetReadOnly(True)
- self.refresh()
- def column_width(self):
- return [x.width for x in self.columns]
- def refresh(self):
- self.rows = self.query.count()
- self._move_buffer()
- def _move_buffer(self):
- self.buffer = self.query[self.buffer_start:self.buffer_start+self.BUFFER_LEN]
- def __getitem__(self, index):
- n = index - self.buffer_start
- if n >= 0 and n < min(self.BUFFER_LEN, self.rows):
- return self.buffer[n]
- else:
- self.buffer_start = index - self.BUFFER_LEN / 2
- if self.buffer_start < 0:
- self.buffer_start = 0
- self._move_buffer()
- return self.buffer[index-self.buffer_start]
- def GetNumberRows(self):
- return self.rows
- def GetNumberCols(self):
- return len(self.columns)
- def GetColLabelValue(self, col):
- return self.columns[col].title
- def GetRowLabelValue(self, row):
- pass
- def IsEmptyCell(self, row, col):
- return self.columns[col].getter(self[row]) == None
- def GetValue(self, row, col):
- return self.columns[col].getter(self[row])
- def SetValue(self, row, col, value):
- pass
- def GetAttr(self, row, col, kind):
- curr_row = self.GetView().GetGridCursorRow()
- if row == curr_row or (curr_row == -1 and row == 0):
- attr = self.selected
- else:
- attr = [self.even, self.odd][row % 2]
- attr.IncRef()
- return attr
Advertisement
Add Comment
Please, Sign In to add comment