class ContentPanel(HorizontalPanel): def __init__(self, onItemPublish, onItemLike, onItemDislike, onSort=None, onFilter=None): super(ContentPanel, self).__init__() self.newItemArgs = {'onPublish':onItemPublish, 'onLike':onItemLike, 'onDislike':onItemDislike} self.sidebar = SideVerticalToolbar(onSort=onSort, onFilter=onFilter) text = '<br>'.join(list('More Tools')) self.sidebarEdge = Button(text, listener=self.onSidebarEdgeClick, StyleName=Styles.TOOLBAR_VERTICALEDGE) self.add(self.sidebarEdge) self.contentpanel = VerticalPanel() self.add(self.contentpanel) self.allContentCells = [] return def _getAllContentItemCells(self): for widg in self.contentpanel.getChildren(): if isinstance(widg, ContentItemCell): yield widg def addItems(self, items): for item in items: widg = ContentItemCell(item, **self.newItemArgs) self.contentpanel.add(widg) self.allContentCells.append(widg) def itemCount(self): return len(self.allContentCells) def onSidebarEdgeClick(self): #If parent is set, hide it- otherwise, remove it if self.sidebar.parent: self.sidebar.removeFromParent() else: self.insert(self.sidebar, 0) def setItemsOpenState(self, state): for cell in self._getAllContentItemCells(): cell.setOpen(state) def sortItems(self, keyselector, ascending): allchildren = list(self.contentpanel.getChildren()) self.contentpanel.clear() sall = sorted(allchildren, key=keyselector) if not ascending: sall = reversed(sall) for child in sall: self.contentpanel.add(child) def filterItems(self, predicate): self.contentpanel.clear() cellsToShow = [cell for cell in self.allContentCells if predicate(cell)] for cell in cellsToShow: self.contentpanel.add(cell)