def layoutWidgets(self): gx, gy = self.theme.getGridParams() r = self.rect self.bar.rect = pygame.Rect(r.width - gx, 0, gx, r.height) self.labels = [] rows = r.height / gy startRow = 0 bIndex = 0 lIndex = 0 eIndex = 0 if self.columnLabels: rowLabels = [] y = 0 x = 0 remains = (r.width - gx) / gx for title, name, width, flags in self.columns: if len(self._buttons) <= bIndex: label = Button(self, action='onSortByColumn') label.subscribeAction('*', self) self._buttons.append(label) label = self._buttons[bIndex] bIndex += 1 label.set(text=title, align=flags & Const.ALIGN_MASK, data=name, visible=1) if width == 0 or width > remains: width = remains label.rect = pygame.Rect(x, y, width * gx, gy) x += width * gx remains -= width startRow = 1 for row in xrange(startRow, rows): rowLabels = [] y = row * gy x = 0 remains = (r.width - gx) / gx for title, name, width, flags in self.columns: if flags & Const.F_EDITABLE: if len(self._entries) <= eIndex: label = Entry(self, align=Const.ALIGN_E, action='onNewValue') label.subscribeAction('*', self) self._entries.append(label) label = self._entries[eIndex] eIndex += 1 label._listboxColumn = name label.visible = 1 label.redraw() else: if len(self._labels) <= lIndex: label = Button(self, action='onItemSelect', rmbAction="onRmbItemSelect", hoverAction="onItemHighlight", style="listitem", toggle=1) label.subscribeAction('*', self) self._labels.append(label) label = self._labels[lIndex] lIndex += 1 label.set(align=flags & Const.ALIGN_MASK, visible=1) label.redraw() if width == 0 or width > remains: width = remains label.rect = pygame.Rect(x, y, width * gx, gy) x += width * gx remains -= width rowLabels.append(label) self.labels.append(rowLabels) while lIndex < len(self._labels): self._labels[lIndex].visible = 0 lIndex += 1 while bIndex < len(self._buttons): self._buttons[bIndex].visible = 0 bIndex += 1 while eIndex < len(self._entries): self._entries[eIndex].visible = 0 eIndex += 1 self.bar.slider.position = 0 self.bar.slider.min = 0 if self.columnLabels: self.bar.slider.shown = rows - 1 else: self.bar.slider.shown = rows self.itemsChanged()
def layoutWidgets(self): gx, gy = self.theme.getGridParams() r = self.rect self.bar.rect = Rect(r.width - gx, 0, gx, r.height) self.labels = [] rows = r.height / gy startRow = 0 bIndex = 0 lIndex = 0 eIndex = 0 if self.columnLabels: rowLabels = [] y = 0 x = 0 remains = (r.width - gx) / gx for title, name, width, flags in self.columns: if len(self._buttons) <= bIndex: label = Button(self, action = 'onSortByColumn') label.subscribeAction('*', self) self._buttons.append(label) label = self._buttons[bIndex] bIndex += 1 label.set(text = title, align = flags & ALIGN_MASK, data = name, visible = 1) if width == 0 or width > remains: width = remains label.rect = Rect(x, y, width * gx, gy) x += width * gx remains -= width startRow = 1 for row in xrange(startRow, rows): rowLabels = [] y = row * gy x = 0 remains = (r.width - gx) / gx for title, name, width, flags in self.columns: if flags & F_EDITABLE: if len(self._entries) <= eIndex: label = Entry(self, align = ALIGN_E, action = 'onNewValue') label.subscribeAction('*', self) self._entries.append(label) label = self._entries[eIndex] eIndex += 1 label._listboxColumn = name label.visible = 1 label.redraw() else: if len(self._labels) <= lIndex: label = Button(self, action = 'onItemSelect', rmbAction = "onRmbItemSelect", style = "listitem", toggle = 1) label.subscribeAction('*', self) self._labels.append(label) label = self._labels[lIndex] lIndex += 1 label.set(align = flags & ALIGN_MASK, visible = 1) label.redraw() if width == 0 or width > remains: width = remains label.rect = Rect(x, y, width * gx, gy) x += width * gx remains -= width rowLabels.append(label) self.labels.append(rowLabels) while lIndex < len(self._labels): self._labels[lIndex].visible = 0 lIndex += 1 while bIndex < len(self._buttons): self._buttons[bIndex].visible = 0 bIndex += 1 while eIndex < len(self._entries): self._entries[eIndex].visible = 0 eIndex += 1 self.bar.slider.position = 0 self.bar.slider.min = 0 if self.columnLabels: self.bar.slider.shown = rows - 1 else: self.bar.slider.shown = rows self.itemsChanged()