home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyo (Python 2.5)
-
- from gui.skin.skinparse import makeBrush
- import random
- import wx
- from wx import Rect, RectPS
-
- class VList(wx.ScrolledWindow):
-
- def __init__(self, parent, id = -1, style = wx.NO_BORDER | wx.FULL_REPAINT_ON_RESIZE, multiple = False):
- wx.ScrolledWindow.__init__(self, parent, style = style)
- if not isinstance(multiple, bool):
- raise TypeError('multiple argument must be a bool')
-
- self._selection = set()
- self.visible = list()
- self.multiple = multiple
- self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM)
- Bind = self.Bind
- Bind(wx.EVT_ERASE_BACKGROUND, (lambda e: pass))
- Bind(wx.EVT_PAINT, self._VList__paint)
- Bind(wx.EVT_MOUSEWHEEL, self._VList__wheel)
- Bind(wx.EVT_KEY_DOWN, self._VList__keydown)
- Bind(wx.EVT_LEFT_DOWN, self._VList__leftdown)
- Bind(wx.EVT_LEFT_DCLICK, self._VList__leftdclick)
-
-
- def SetBackground(self, background_brush):
- self.bg = background_brush
- s = background_brush.ytile
- self.EnableScrolling(s, s)
-
-
- def GetBackground(self):
- return self.bg
-
- Background = property(GetBackground, SetBackground)
-
- def RefreshLine(self, line):
- vis = dict((lambda .0: for y1, y2, n in .0:
- (n, (y1, y2)))(self.visible))
- if line in vis:
- (left, top, right, bottom) = self.GetItemMargins()
- w = self.ClientSize.width
- y = self.ViewStart[1]
- (y1, y2) = vis[line]
- r = wx.Rect(0, y1 - top - y, w, 0)
- r.SetHeight((y2 - y1) + top + bottom)
- self.RefreshRect(r, False)
-
-
-
- def RefreshLines(self, lines):
- vis = dict((lambda .0: for y1, y2, n in .0:
- (n, (y1, y2)))(self.visible))
- (left, top, right, bottom) = self.GetItemMargins()
- w = self.ClientSize.width
- y = self.ViewStart[1]
- for line in lines:
- if line in vis:
- (y1, y2) = vis[line]
- r = wx.Rect(0, y1 - top - y, w, 0)
- r.SetHeight((y2 - y1) + top + bottom)
- self.RefreshRect(r, False)
- continue
-
-
-
- def RefreshAll(self):
- return self.Refresh()
-
-
- def ScrollToLine(self, i):
- pass
-
-
- def UpdateScrollbars(self):
- margins = self.GetItemMargins()
- totalHeight = (sum,)((lambda .0: for n in .0:
- self.OnMeasureItem(n))(xrange(self._itemcount)))
- self.SetScrollbars(0, 1, 0, (margins[1] + margins[3]) * self._itemcount + totalHeight)
-
-
- def HitTest(self, .1):
- (x, y) = .1
- p = wx.Point(x, y) + self.ViewStart
- for y1, y2, n in self.visible:
- if p.y >= y1 and p.y < y2:
- return n
- continue
-
- return wx.NOT_FOUND
-
-
- def GetSelection(self):
- if self.multiple:
- return self._selection
- else:
-
- try:
- return list(self._selection)[0]
- except IndexError:
- return -1
-
-
-
- def SetSelection(self, newsel):
- if self.multiple:
- pass
- elif not isinstance(newsel, int):
- raise TypeError('single selection lists take an integer argument to SetSelection')
-
- oldsel = self._selection
- self._selection = set([
- newsel])
- s = self._selection.union(oldsel)
- self.RefreshLines(min(s), max(s))
-
- Selection = property(GetSelection, SetSelection)
-
- def GetFirstVisibleLine(self):
-
- try:
- return self.visible[0][-1]
- except IndexError:
- return -1
-
-
-
- def GetLastVisibleLine(self):
-
- try:
- return self.visible[-1][-1]
- except IndexError:
- return -1
-
-
-
- def IsSelected(self, n):
- return n in self._selection
-
-
- def __wheel(self, e):
- self.Scroll(0, self.ViewStart[1] - e.WheelRotation)
-
-
- def __keydown(self, e):
- c = e.KeyCode
- sel = self._selection
- if c == wx.WXK_DOWN:
-
- try:
- s = sel.pop()
- except KeyError:
- s = -1
-
- if s + 1 == len(self):
- s = -1
-
- self._selection = set([
- s + 1])
- elif c == wx.WXK_UP:
-
- try:
- s = sel.pop()
- except KeyError:
- s = -1
-
- if s == 0:
- s = -1
-
- self._selection = None(set if s != -1 else [
- len(self) - 1])
- else:
- return e.Skip()
- s = self._selection.union(sel)
- self.RefreshLines(min(s), max(s))
-
-
- def __paint(self, e):
- dc = wx.BufferedPaintDC(self, style = wx.BUFFER_VIRTUAL_AREA)
- size = self.ClientSize
- (viewstartx, viewstarty) = self.ViewStart
- viewend = viewstarty + size[1]
- self.bg.Draw(dc, RectPS((viewstartx, viewstarty), size))
- (left, top, right, bottom) = self.GetItemMargins()
- r = Rect(left, top, *size)
- r.SetSize((r.Width - right, 0))
- visible = self.visible
- visappend = visible.append
- del visible[:]
- selection = self._selection
- measureitem = self.OnMeasureItem
- drawitem = self.OnDrawItem
- drawbg = self.OnDrawBackground
- offset = r.Offset
- for n in xrange(self._itemcount):
- itemHeight = measureitem(n)
- if r.Y > viewend:
- break
-
- if r.Y + itemHeight >= viewstarty:
- r.Height = itemHeight
- visappend((r.Y - top, r.Y + r.Height + bottom, n))
- drawbg(dc, Rect(*r), n, n in selection)
- drawitem(dc, Rect(*r), n, n in selection)
-
- offset((0, itemHeight + top + bottom))
-
-
-
- def _ensure_visible(self, line):
- for top, bottom, n in self.visible:
- if n == line:
- return None
- continue
-
-
-
- def __leftdown(self, e):
- i = self.HitTest(e.Position)
- cmd = e.CmdDown()
- sel = self._selection
- if set([
- i]) != sel:
-
- try:
- old = self._selection.pop()
- except KeyError:
- self._selection.add(i)
- self.RefreshLine(i)
-
- self._selection.add(i)
- s = [
- old,
- i]
- self.RefreshLines(min(s), max(s))
-
-
-
- def __leftdclick(self, e):
- evt = wx.CommandEvent(wx.wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, self.Id)
- evt.SetEventObject(self)
- evt.SetInt(self.HitTest(e.Position))
- self.ProcessEvent(evt)
-
-
- def NativeScrollbars(self):
- return True
-
- NativeScrollbars = property(NativeScrollbars)
-
- def GetItemMargins(self):
- return (0, 0, 0, 0)
-
-
- def SetItemCount(self, n):
- self._itemcount = n
- self.UpdateScrollbars()
-
-
- def GetItemCount(self):
- return self._itemcount
-
- __len__ = GetItemCount
- ItemCount = property(GetItemCount, SetItemCount)
-
- def OnDrawBackground(self, dc, rect, n, selected):
- if selected:
- dc.Brush = wx.BLUE_BRUSH
- else:
- dc.Brush = wx.WHITE_BRUSH
- dc.Pen = wx.TRANSPARENT_PEN
- dc.DrawRectangleRect(rect)
-
-
-
- class BList(VList):
-
- def __init__(self, parent):
- VList.__init__(self, parent)
- self.itembg = makeBrush('white 40% white 40%')
- self.selbg = makeBrush('white 90% white 90%')
-
-
- def OnMeasureItem(self, n):
- random.seed(n)
- return random.randint(15, 80)
-
-
- def OnDrawItem(self, dc, rect, n, selected):
- if not selected:
- self.itembg.Draw(dc, rect, n)
- else:
- self.selbg.Draw(dc, rect, n)
- dc.Font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
- dc.DrawText('item %d' % n, rect.X, rect.Y)
-
-
- def GetItemMargins(self):
- return (3, 3, 3, 20)
-
-
- if __name__ == '__main__':
- a = wx.PySimpleApp()
- f = wx.Frame(None, size = (240, 650))
- v = BList(f)
- v.SetItemCount(65)
- f.Show()
- a.MainLoop()
-
-