def __init__(self, numVisible = 5, onSelected = None, listItems = None, selection = None, editable = True): Base.__init__(self) self.numVisible = numVisible self.selectionList = ListBox(self._pyui2SelectedEvent) self.selectionList.setShow(0) self.addChild(self.selectionList) self.registerEvent(pyui2.locals.LMOUSEBUTTONDOWN, self._pyui2MouseDown) self.selectHandler = onSelected self.addItems(listItems) self.setSelectedItem(selection)
class DropDownBox(Base): """A drop-down selection box. Pass the number of lines to be visible in the drop-down list to the constructor. """ BUTTON_WIDTH = 10 DEFAULT_WIDTH = 10 widgetLabel = "DROPDOWN" def __init__(self, numVisible = 5, onSelected = None, listItems = None, selection = None, editable = True): Base.__init__(self) self.numVisible = numVisible self.selectionList = ListBox(self._pyui2SelectedEvent) self.selectionList.setShow(0) self.addChild(self.selectionList) self.registerEvent(pyui2.locals.LMOUSEBUTTONDOWN, self._pyui2MouseDown) self.selectHandler = onSelected self.addItems(listItems) self.setSelectedItem(selection) def getPreferredSize(self): font = getTheme().getProperty("DEFAULT FONT") size = font.getTextSize("W" * self.DEFAULT_WIDTH) return int(size[0]), int(size[1]) def getMaximumSize(self): return Much, self.getPreferredSize()[1] ## pass-through methods to the list box def addItem(self, itemText, itemData, color = None): self.selectionList.addItem(itemText, itemData, color) #self.selectionList.selected = len(self.selectionList.items) - 1 def addItems(self, itemList, color = None): if itemList != None: for itemText, itemData in itemList: self.selectionList.addItem(itemText, itemData, color) #self.selectionList.selected = len(self.selectionList.items) - 1 def setSelectedItem(self, selection): if selection != None: if selection >= 0 and selection < len(self.selectionList.items): self.selectionList.selected = selection def getSelectedItem(self): return self.selectionList.getSelectedItem() def removeItem(self, text): self.selectionList.removeItem(text) def clearSelection(self): self.selectionList.clearSelection() def clear(self): self.selectionList.clear() def present(self, presenter, graphicsContext): presenter.drawWidget(self.widgetLabel, self, graphicsContext) for child in self.children: child.present(presenter, graphicsContext, (self.posX, self.posY, self.windowRect[2], self.windowRect[3])) def hideMe(self, interval): if self.selectHandler: self.selectHandler(self.item) self.selectionList.setShow(0) return 1 def resize(self, width, height): Base.resize(self, width, height) self.positionSelectionList() def positionSelectionList(self): font = getTheme().getProperty("DEFAULT FONT") self.selectionList.resize(self.width, self.numVisible * font.getTextSize("x")[1]) self.selectionList.moveto(self.posX, self.posY + self.height) def handleEvent(self, event): if not self.show: return if self.selectionList.handleEvent(event): return 1 if self.eventMap.has_key(event.type): if self.eventMap[event.type](event): return 1 return 0 def _pyui2MouseDown(self, event): if not self.hit(event.pos): if self.selectionList.show: self.selectionList.setShow(0) return 0 adjEvtPos = self.convertToWindowCoords(event.pos) x = adjEvtPos[0] - self.posX y = adjEvtPos[1] - self.posY if x > self.width - self.rect[3] and x < self.width: if self.selectionList.show == 0: self.positionSelectionList() self.selectionList.setShow(1) else: self.selectionList.setShow(0) return 1 def _pyui2SelectedEvent(self, item): self.item = item getDesktop().addCallback(self.hideMe, 0.33) return 1