Guest User

Untitled

a guest
Nov 3rd, 2011
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.57 KB | None | 0 0
  1. import wx
  2. import wx.grid
  3. from model import session
  4.  
  5. class Column(object):
  6.  
  7.     def __init__(self, id, title=None, width=None, getter=None):
  8.         self.id = id
  9.         self.title = title if title else id
  10.  
  11.         default_getter = lambda x: getattr(x, self.id, None)
  12.         self.getter = getter if getter else default_getter
  13.         self.width = width if width else -2
  14.  
  15.  
  16. class SAGridAdapter(wx.grid.PyGridTableBase):
  17.     BUFFER_LEN = 200
  18.  
  19.     def __init__(self, columns, query):
  20.         super(SAGridAdapter, self).__init__()
  21.         self.columns = columns
  22.         self.query = query
  23.         self.buffer_start = 0
  24.         self.buffer = ()
  25.         self.rows = 0
  26.         self.odd = wx.grid.GridCellAttr()
  27.         self.odd.SetBackgroundColour("snow")
  28.         self.odd.SetReadOnly(True)
  29.         self.even = wx.grid.GridCellAttr()
  30.         self.even.SetBackgroundColour("lightcyan2")
  31.         self.even.SetReadOnly(True)
  32.         self.selected = wx.grid.GridCellAttr()
  33.         self.selected.SetBackgroundColour((135,206,250))
  34.         self.selected.SetReadOnly(True)
  35.         self.refresh()
  36.  
  37.     def column_width(self):
  38.         return [x.width for x in self.columns]
  39.  
  40.     def refresh(self):
  41.         self.rows = self.query.count()
  42.         self._move_buffer()
  43.  
  44.     def _move_buffer(self):
  45.         self.buffer = self.query[self.buffer_start:self.buffer_start+self.BUFFER_LEN]
  46.  
  47.     def __getitem__(self, index):
  48.         n = index - self.buffer_start
  49.         if n >= 0 and n < min(self.BUFFER_LEN, self.rows):
  50.             return self.buffer[n]
  51.         else:
  52.             self.buffer_start = index - self.BUFFER_LEN / 2
  53.             if self.buffer_start < 0:
  54.                 self.buffer_start = 0
  55.             self._move_buffer()
  56.             return self.buffer[index-self.buffer_start]
  57.  
  58.     def GetNumberRows(self):
  59.         return self.rows
  60.  
  61.     def GetNumberCols(self):
  62.         return len(self.columns)
  63.  
  64.     def GetColLabelValue(self, col):
  65.         return self.columns[col].title
  66.  
  67.     def GetRowLabelValue(self, row):
  68.         pass
  69.  
  70.     def IsEmptyCell(self, row, col):
  71.         return self.columns[col].getter(self[row]) == None
  72.  
  73.     def GetValue(self, row, col):
  74.         return self.columns[col].getter(self[row])
  75.  
  76.     def SetValue(self, row, col, value):
  77.         pass
  78.  
  79.     def GetAttr(self, row, col, kind):
  80.         curr_row = self.GetView().GetGridCursorRow()
  81.         if row == curr_row or (curr_row == -1 and row == 0):
  82.             attr = self.selected
  83.         else:
  84.             attr = [self.even, self.odd][row % 2]
  85.         attr.IncRef()
  86.         return attr
  87.  
  88.  
Advertisement
Add Comment
Please, Sign In to add comment