Esempio n. 1
0
   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()