Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import c4d
- from c4d import gui
- def isIterateable(item):
- try:
- item[0]
- except:
- return False
- else:
- return True
- class ListViewData:
- def __init__(self, iterateableData):
- if not isIterateable(iterateableData):
- raise TypeError, "%s must be initialized with an iterateable value" %self.__class__.__name__
- self.data = iterateableData
- def GetColumn(self, index):
- if index > len(self.data):
- return
- else:
- return self.data[index]
- def GetLengthOfData(self):
- return len(self.data)
- class MyUA(gui.GeUserArea):
- colors = {
- "background": c4d.Vector(.2),
- "lighter": c4d.Vector(.6),
- "darker": c4d.Vector(.2),
- "marked": c4d.Vector(.8, .4, .2),
- "text": c4d.Vector(.1),
- "markedText": c4d.Vector(.7, .5, .6),
- }
- def __init__(self, rowheight, data, columnwidth = (100, )):
- if not isIterateable(data):
- raise TypeError, "%s must be initialized with an iterateable value" %self.__class__.__name__
- self.minimumHeight = rowheight * len(data)
- self.rowheight = rowheight
- self.columnwidth = columnwidth
- self.data = data
- self.marked = 2
- def DrawMsg(self, x1, y1, x2, y2, msg):
- #Set Background Color
- self.DrawSetPen(self.colors["background"])
- self.DrawRectangle(x1, y1, x2, y2)
- rHeight = self.rowheight
- #Draw lighter areas
- self.DrawSetPen(self.colors["lighter"])
- for i in xrange(0, len(self.data), 2):
- if i == self.marked:
- self.DrawSetPen(self.colors["marked"])
- self.DrawRectangle(x1=0, y1 = rHeight*i, x2=x2, y2 = rHeight * (i+1))
- if i == self.marked:
- self.DrawSetPen(self.colors["lighter"])
- #Draw darker areas
- self.DrawSetPen(self.colors["darker"])
- for i in xrange(1, len(self.data), 2):
- if i == self.marked:
- self.DrawSetPen(self.colors["marked"])
- self.DrawRectangle(x1=0, y1 = rHeight*i, x2=x2, y2 = rHeight * (i+1))
- if i == self.marked:
- self.DrawSetPen(self.colors["darker"])
- #Draw self.data
- self.DrawSetPen(self.colors["text"])
- for i in xrange(len(self.data)):
- if i == self.marked:
- self.DrawSetPen(self.colors["markedText"])
- for j in xrange(self.data[i].GetLengthOfData()):
- if j >= len(self.columnwidth):
- width = self.columnwidth[-1]
- else:
- width = self.columnwidth[j]
- itemToDraw = str(self.data[i].GetColumn(j))
- self.DrawText(itemToDraw, x1 = x1 + j*width, y1 = i * rHeight + int((rHeight * .1)))
- if i == self.marked:
- self.DrawSetPen(self.colors["text"])
- def GetMinimumHeight(self):
- return 200, self.minimumHeight()
- def InputEvent(self, msg):
- #x = msg(c4d.BFM_INPUT_X)
- y = msg[c4d.BFM_INPUT_Y]
- self.marked = int(y/self.rowheight)
- self.Redraw()
- return True
- class dlg(gui.GeDialog):
- def Init(self):
- pass
- def CreateLayout(self):
- self.ua = MyUA(15, [ListViewData(("Name", "hello", 1002)) for i in range(20)])
- ua_id = self.AddUserArea(100000121, c4d.BFH_SCALEFIT | c4d.BFV_SCALEFIT)
- self.AttachUserArea(self.ua, ua_id)
- return True
- d = dlg()
- d.Open(c4d.DLG_TYPE_MODAL_RESIZEABLE, 1000124, -1, -1, 400, 300)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement