class SubCategoryPanel(VerticalPanel): def __init__(self, subCategoryName='', subCategoryClassName='', openList=True): self.list = VerticalPanel(StyleName='block_list') self.list.setStyleAttribute("display", "block") VerticalPanel.__init__(self, StyleName='SubCategoryPanel') self.subCategoryName = subCategoryName if subCategoryName != '': self.title = Element(Element=DOM.createElement('dt'), StyleName=subCategoryClassName) DOM.setInnerHTML(self.title.getElement(), self.subCategoryName) self.collapse = FocusWidget(Element=DOM.createDiv(), StyleName='collapse close_up') self.collapse.addClickListener(self.showHide) self.title.add(self.collapse) self.add(self.title) if openList: self.list.setStyleAttribute("display", "block") self.collapse.setStyleName('collapse close_up') else: self.list.setStyleAttribute("display", "none") self.collapse.setStyleName('collapse open_down') self.add(self.list) self.blocks = [] self.count = 0 def changeTexts(self): if self.subCategoryName != '': DOM.setInnerHTML(self.title.getElement(), _(self.subCategoryName)) self.title.add(self.collapse) for block in self.blocks: block.changeTexts() def addBlock(self, block, classHelp='help_default', beforeIndex=None): panel = HorizontalPanel() panel.add(block) info = Label('i', StyleName='info_btn') info.block = block info.classHelp = classHelp info.addClickListener(self.showInfo) panel.add(info) if beforeIndex is not None: self.list.insert(panel, self.list.getBody(), 0) #deprecated else: self.list.add(panel) self.list.setStyleName(self.list.getWidgetTd(panel), 'block_info') self.blocks.append(block) if block.name in [ 'commandType', 'numericType', 'logicType', 'alphaNumericType' ]: panel.add(self.getRemoveCustomBlock(block)) info.addMouseListener(TooltipListener("Editar")) else: info.addMouseListener(TooltipListener("Ajuda")) def getRemoveCustomBlock(self, block): remove = Label('x', StyleName='remove_btn') remove.addMouseListener(TooltipListener("Remover")) remove.block = block remove.addClickListener(self.RemoveCustomBlock) return remove def RemoveCustomBlock(self, sender): self.list.remove(sender.block.getParent()) self.blocks.remove(sender.block) if len(self.blocks) == 0: self.getParent().reload() del createdBlocks[sender.block.varName] stateChange() def removeBlock(self, block): self.list.remove(block.getParent()) self.blocks.remove(block) def removeAllBlocks(self): while len(self.blocks) > 0: self.removeBlock(self.blocks[0]) def addWidget(self, widget): self.list.add(widget) def showInfo(self, sender): if sender.block.name in [ 'commandType', 'numericType', 'logicType', 'alphaNumericType' ]: createdBlocks[sender.block.varName].show() else: popup = Popup('<b>' + _('Help') + '</b>', None, None) popup.center.append( Widget(Element=DOM.createDiv(), StyleName=sender.classHelp)) popup.caption.setStyleAttribute('text-align', 'center') popup.show() def showHide(self): if self.list.getStyleAttribute('display') == 'none': self.list.setStyleAttribute("display", "block") self.collapse.setStyleName('collapse close_up') else: self.list.setStyleAttribute("display", "none") self.collapse.setStyleName('collapse open_down') def changeTitle(self, count): # faz perder o collapse DOM.setInnerHTML(self.title.getElement(), _(self.subCategoryName) + ': #' + str(count)) self.title.add(self.collapse) self.count = count