def createButton(text, btnGeom, xPos, yPos, args): buttonSize = (-2, 2, 1, -1) btn = DirectButton( scale=0.25, geom=btnGeom, # some temp text text=text, text_scale=0.4, # set the alignment to right text_align=TextNode.ACenter, # set the text color to black text_fg=(1, 1, 1, 1), # set the buttons images relief=1, frameColor=(0,0,0,0), frameSize=buttonSize, pressEffect=False, pos=(xPos, 0, yPos), command=base.messenger.send, extraArgs=args, rolloverSound=None, clickSound=None) # check if the text is to long and resize the frame if necessary if btn.getBounds()[0] < buttonSize[0] or \ btn.getBounds()[1] > buttonSize[1]: btn["frameSize"] = ( btn.getBounds()[0]-0.2, btn.getBounds()[1]+0.2, buttonSize[2], buttonSize[3]) btn.resetFrameSize() btn.setTransparency(True) return btn
def addTextMessage(self, text, seconds = 7, priority = 0, color = (0, 0, 0, 1), icon = (), modelName = 'general_frame_b', name = None, avId = None, playerName = None): if name and playerName: t2 = text % (playerName, name) elif name: t2 = text % name elif playerName: t2 = text % playerName else: t2 = text if self.lastMessage == t2: return None msg = StackMessage(parent = self, text = t2, text_wordwrap = 15.5, text_align = TextNode.ALeft, text_scale = 0.035000000000000003, text_fg = color, text_pos = (0.17000000000000001, -0.071999999999999995, 0), textMayChange = 1, time = seconds, priority = priority, icon = icon, modelName = modelName) if name and playerName: buttonText = text % playerName else: buttonText = text if name or playerName: msg['text_fg'] = (0, 0, 0, 0) if name: nameArray = ('\x1CPOrangeHEAD\x1' + name + '\x2', '\x1CPOrangeHEAD\x1' + name + '\x2', '\x1CPOrangeOVER\x1' + name + '\x2', '\x1CPOrangeHEAD\x1' + name + '\x2') else: nameArray = ('\x1CPOrangeHEAD\x1' + playerName + '\x2', '\x1CPOrangeHEAD\x1' + playerName + '\x2', '\x1CPOrangeOVER\x1' + playerName + '\x2', '\x1CPOrangeHEAD\x1' + playerName + '\x2') if name: nameButton = DirectButton(parent = NodePath(), relief = None, text = nameArray, text_align = TextNode.ALeft, text_shadow = PiratesGuiGlobals.TextShadow, textMayChange = 0, command = self.handleAvatarTextPress, extraArgs = [ avId, name]) else: nameButton = DirectButton(parent = NodePath(), relief = None, text = nameArray, text_align = TextNode.ALeft, text_shadow = PiratesGuiGlobals.TextShadow, textMayChange = 0, command = self.handlePlayerTextPress, extraArgs = [ avId, playerName]) (left, right, bottom, top) = nameButton.getBounds() nameGFX = TextGraphic(nameButton, left, right, 0, 1) if name: buttonName = '\x5' + name + '\x5' else: buttonName = '\x5' + playerName + '\x5' buttonText = buttonText % buttonName tpMgr = TextPropertiesManager.getGlobalPtr() if name: tpMgr.setGraphic(name, nameGFX) else: tpMgr.setGraphic(playerName, nameGFX) del tpMgr textRender = TextNode('textRender') textRender.setFont(PiratesGlobals.getInterfaceFont()) textRender.setTextColor(PiratesGuiGlobals.TextFG14) textRender.setShadowColor(PiratesGuiGlobals.TextShadow) textRender.setWordwrap(15.5) textRender.setTabWidth(1.0) textRender.setShadow(0.080000000000000002, 0.080000000000000002) textRender.setText(buttonText) x = msg.attachNewNode(textRender.generate()) x.setScale(0.035000000000000003) x.setPos(0.16700000000000001, 0, -0.072999999999999995) self.addMessage(msg) self.lastMessage = t2 return msg
def addTextMessage(self, text, seconds = 7, priority = 0, color = (0, 0, 0, 1), icon = (), modelName = 'general_frame_b', name = None, avId = None, playerName = None): if name and playerName: t2 = text % (playerName, name) elif name: t2 = text % name elif playerName: t2 = text % playerName else: t2 = text if self.lastMessage == t2: return None msg = StackMessage(parent = self, text = t2, text_wordwrap = 15.5, text_align = TextNode.ALeft, text_scale = 0.035000000000000003, text_fg = color, text_pos = (0.17000000000000001, -0.071999999999999995, 0), textMayChange = 1, time = seconds, priority = priority, icon = icon, modelName = modelName) if name and playerName: buttonText = text % playerName else: buttonText = text if name or playerName: msg['text_fg'] = (0, 0, 0, 0) if name: nameArray = ('\x01CPOrangeHEAD\x01' + name + '\x02', '\x01CPOrangeHEAD\x01' + name + '\x02', '\x01CPOrangeOVER\x01' + name + '\x02', '\x01CPOrangeHEAD\x01' + name + '\x02') else: nameArray = ('\x01CPOrangeHEAD\x01' + playerName + '\x02', '\x01CPOrangeHEAD\x01' + playerName + '\x02', '\x01CPOrangeOVER\x01' + playerName + '\x02', '\x01CPOrangeHEAD\x01' + playerName + '\x02') if name: nameButton = DirectButton(parent = NodePath(), relief = None, text = nameArray, text_align = TextNode.ALeft, text_shadow = PiratesGuiGlobals.TextShadow, textMayChange = 0, command = self.handleAvatarTextPress, extraArgs = [ avId, name]) else: nameButton = DirectButton(parent = NodePath(), relief = None, text = nameArray, text_align = TextNode.ALeft, text_shadow = PiratesGuiGlobals.TextShadow, textMayChange = 0, command = self.handlePlayerTextPress, extraArgs = [ avId, playerName]) (left, right, bottom, top) = nameButton.getBounds() nameGFX = TextGraphic(nameButton, left, right, 0, 1) if name: buttonName = '\x05' + name + '\x05' else: buttonName = '\x05' + playerName + '\x05' buttonText = buttonText % buttonName tpMgr = TextPropertiesManager.getGlobalPtr() if name: tpMgr.setGraphic(name, nameGFX) else: tpMgr.setGraphic(playerName, nameGFX) del tpMgr textRender = TextNode('textRender') textRender.setFont(PiratesGlobals.getInterfaceFont()) textRender.setTextColor(PiratesGuiGlobals.TextFG14) textRender.setShadowColor(PiratesGuiGlobals.TextShadow) textRender.setWordwrap(15.5) textRender.setTabWidth(1.0) textRender.setShadow(0.080000000000000002, 0.080000000000000002) textRender.setText(buttonText) x = msg.attachNewNode(textRender.generate()) x.setScale(0.035000000000000003) x.setPos(0.16700000000000001, 0, -0.072999999999999995) self.addMessage(msg) self.lastMessage = t2 return msg
def _adjust_frame(self, new_button: DirectGui.DirectButton): frame_size = new_button.getBounds() button_width = (frame_size[1] - frame_size[0]) * self._TEXT_SIZE if button_width > self._width: self._width = button_width for menu in self._sub_menus: menu._frame.set_x(self._width + constants.PADDING) self._bottom -= self._TEXT_SIZE + 2 * constants.PADDING frame_size = list(self._frame["frameSize"]) frame_size[2] = self._bottom frame_size[1] = self._width + constants.PADDING self._frame["frameSize"] = frame_size
def addModalTextMessage(self, text, buttonStyle = OTPDialog.CancelOnly, noCallback = None, yesCallback = None, cancelCallback = None, seconds = 120, priority = 0, color = (1, 1, 1, 1), icon = (), modelName = 'general_frame_f', name = None, avId = None): if name: t2 = text % name else: t2 = text if self.lastMessage == text: return None msg = ModalStackMessage(parent = self, buttonStyle = buttonStyle, noCallback = noCallback, yesCallback = yesCallback, cancelCallback = cancelCallback, text = text, text_wordwrap = 15.5, text_align = TextNode.ALeft, text_scale = 0.035000000000000003, text_fg = color, text_pos = (0.17000000000000001, -0.071999999999999995, 0), textMayChange = 1, time = seconds, priority = priority, icon = icon, modelName = modelName) if name: msg['text_fg'] = (0, 0, 0, 0) nameArray = ('\x1CPOrangeHEAD\x1' + name + '\x2', '\x1CPOrangeHEAD\x1' + name + '\x2', '\x1CPOrangeOVER\x1' + name + '\x2', '\x1CPOrangeHEAD\x1' + name + '\x2') nameButton = DirectButton(parent = NodePath(), relief = None, text = nameArray, text_align = TextNode.ALeft, text_shadow = PiratesGuiGlobals.TextShadow, textMayChange = 0, command = self.handleAvatarModalPress, extraArgs = [ avId, name]) (left, right, bottom, top) = nameButton.getBounds() nameGFX = TextGraphic(nameButton, left, right, 0, 1) buttonName = '\x5' + name + '\x5' buttonText = text % buttonName tpMgr = TextPropertiesManager.getGlobalPtr() tpMgr.setGraphic(name, nameGFX) del tpMgr textRender = TextNode('textRender') textRender.setFont(PiratesGlobals.getInterfaceFont()) textRender.setTextColor(PiratesGuiGlobals.TextFG14) textRender.setShadowColor(PiratesGuiGlobals.TextShadow) textRender.setWordwrap(15.5) textRender.setTabWidth(1.0) textRender.setShadow(0.080000000000000002, 0.080000000000000002) textRender.setText(buttonText) x = msg.attachNewNode(textRender.generate()) x.setScale(0.034500000000000003, 1.0, 0.035000000000000003) x.setPos(0.16700000000000001, 0, -0.072999999999999995) self.addMessage(msg) self.lastMessage = text if icon and icon[0] == 'ship': self.shipMessage = msg return msg
def addModalTextMessage(self, text, buttonStyle = OTPDialog.CancelOnly, noCallback = None, yesCallback = None, cancelCallback = None, seconds = 120, priority = 0, color = (1, 1, 1, 1), icon = (), modelName = 'general_frame_f', name = None, avId = None): if name: t2 = text % name else: t2 = text if self.lastMessage == text: return None msg = ModalStackMessage(parent = self, buttonStyle = buttonStyle, noCallback = noCallback, yesCallback = yesCallback, cancelCallback = cancelCallback, text = text, text_wordwrap = 15.5, text_align = TextNode.ALeft, text_scale = 0.035000000000000003, text_fg = color, text_pos = (0.17000000000000001, -0.071999999999999995, 0), textMayChange = 1, time = seconds, priority = priority, icon = icon, modelName = modelName) if name: msg['text_fg'] = (0, 0, 0, 0) nameArray = ('\x01CPOrangeHEAD\x01' + name + '\x02', '\x01CPOrangeHEAD\x01' + name + '\x02', '\x01CPOrangeOVER\x01' + name + '\x02', '\x01CPOrangeHEAD\x01' + name + '\x02') nameButton = DirectButton(parent = NodePath(), relief = None, text = nameArray, text_align = TextNode.ALeft, text_shadow = PiratesGuiGlobals.TextShadow, textMayChange = 0, command = self.handleAvatarModalPress, extraArgs = [ avId, name]) (left, right, bottom, top) = nameButton.getBounds() nameGFX = TextGraphic(nameButton, left, right, 0, 1) buttonName = '\x05' + name + '\x05' buttonText = text % buttonName tpMgr = TextPropertiesManager.getGlobalPtr() tpMgr.setGraphic(name, nameGFX) del tpMgr textRender = TextNode('textRender') textRender.setFont(PiratesGlobals.getInterfaceFont()) textRender.setTextColor(PiratesGuiGlobals.TextFG14) textRender.setShadowColor(PiratesGuiGlobals.TextShadow) textRender.setWordwrap(15.5) textRender.setTabWidth(1.0) textRender.setShadow(0.080000000000000002, 0.080000000000000002) textRender.setText(buttonText) x = msg.attachNewNode(textRender.generate()) x.setScale(0.034500000000000003, 1.0, 0.035000000000000003) x.setPos(0.16700000000000001, 0, -0.072999999999999995) self.addMessage(msg) self.lastMessage = text if icon and icon[0] == 'ship': self.shipMessage = msg return msg
def addItem(self,text,extraArgs=None,atIndex=None,textColorName=None): """ add item to the list text : text for the button extraArgs : the object which will be passed to user command(s) (both command and contextMenu) when the button get clicked atIndex : where to add the item <None> : put item at the end of list <integer> : put item at index <integer> <button> : put item at <button>'s index textColorName : the color name eg. 'yellow' """ textColor = self.buttonTextColor if textColorName != None: textColor = globals.colors[textColorName] button = DirectButton(parent=self.canvas, scale=self.itemScale, relief=DGG.FLAT, frameColor=(0,0,0,0),text_scale=self.itemTextScale, text=text, text_pos=(0,self.itemTextZ),text_fg=textColor, text_font=self.font, text_align=TextNode.ALeft, command=self.__setFocusButton, enableEdit=0, suppressMouse=0, rolloverSound=None,clickSound=None) #button.setMyMode(self.mode) l,r,b,t=button.getBounds() # top & bottom are blindly set without knowing where exactly the baseline is, # but this ratio fits most fonts baseline=-self.fontHeight*.25 #button['saved_color'] = textColor button['frameSize']=(l-self.xtraSideSpace,r+self.xtraSideSpace,baseline,baseline+self.fontHeight) # Zc=NodePath(button).getBounds().getCenter()[1]-self.fontHeight*.5+.25 # # Zc=button.getCenter()[1]-self.fontHeight*.5+.25 # button['frameSize']=(l-self.xtraSideSpace,r+self.xtraSideSpace,Zc,Zc+self.fontHeight) button['extraArgs']=[button,extraArgs] button._DirectGuiBase__componentInfo['text2'][0].setColorScale(self.rolloverColor) button.bind(DGG.B3PRESS,self.__rightPressed,[button]) if isinstance(atIndex,DirectButton): if atIndex.isEmpty(): atIndex=None else: index=self.buttonsList.index(atIndex) self.buttonsList.insert(index,button) if atIndex==None: self.buttonsList.append(button) index=self.numItems elif type(atIndex)==IntType: index=atIndex self.buttonsList.insert(index,button) Zpos=(-.7-index)*self.itemVertSpacing button.setPos(.02,0,Zpos) if index!=self.numItems: for i in range(index+1,self.numItems+1): self.buttonsList[i].setZ(self.buttonsList[i],-self.fontHeight) self.numItems+=1 self.__adjustCanvasLength(self.numItems) if self.autoFocus: self.focusViewOnItem(index) if self.colorChange: Sequence( button.colorScaleInterval(self.colorChangeDuration,self.newItemColor,globals.colors['guiblue3']), button.colorScaleInterval(self.colorChangeDuration,Vec4(1,1,1,1),self.newItemColor) ).start()