def load(self):
     if self.loaded:
         return
     self.loaded = 1
     self.verify = None
     self.pictureFrame = self.attachNewNode('pictureFrame')
     self.pictureFrame.setScale(0.15)
     self.itemIndex = 0
     self.ival = None
     typeCode = self['item'].getTypeCode()
     if self['item'].needsCustomize() and (typeCode == CatalogItemTypes.WALLPAPER_ITEM or typeCode == CatalogItemTypes.FLOORING_ITEM or typeCode == CatalogItemTypes.MOULDING_ITEM or typeCode == CatalogItemTypes.FURNITURE_ITEM or typeCode == CatalogItemTypes.WAINSCOTING_ITEM or typeCode == CatalogItemTypes.TOON_STATUE_ITEM):
         if typeCode == CatalogItemTypes.WALLPAPER_ITEM:
             self.items = getAllWallpapers(self['item'].patternIndex)
         elif typeCode == CatalogItemTypes.FLOORING_ITEM:
             self.items = getAllFloorings(self['item'].patternIndex)
         elif typeCode == CatalogItemTypes.MOULDING_ITEM:
             self.items = getAllMouldings(self['item'].patternIndex)
         elif typeCode == CatalogItemTypes.FURNITURE_ITEM:
             self.items = getAllFurnitures(self['item'].furnitureType)
         elif typeCode == CatalogItemTypes.TOON_STATUE_ITEM:
             self.items = self['item'].getAllToonStatues()
         elif typeCode == CatalogItemTypes.WAINSCOTING_ITEM:
             self.items = getAllWainscotings(self['item'].patternIndex)
         self.numItems = len(self.items)
         if self.numItems > 1:
             guiItems = loader.loadModel('phase_5.5/models/gui/catalog_gui')
             nextUp = guiItems.find('**/arrow_up')
             nextRollover = guiItems.find('**/arrow_Rollover')
             nextDown = guiItems.find('**/arrow_Down')
             prevUp = guiItems.find('**/arrowUp')
             prevDown = guiItems.find('**/arrowDown1')
             prevRollover = guiItems.find('**/arrowRollover')
             self.nextVariant = DirectButton(parent=self, relief=None, image=(nextUp,
              nextDown,
              nextRollover,
              nextUp), image3_color=(1, 1, 1, 0.4), pos=(0.13, 0, 0), command=self.showNextVariant)
             self.prevVariant = DirectButton(parent=self, relief=None, image=(prevUp,
              prevDown,
              prevRollover,
              prevUp), image3_color=(1, 1, 1, 0.4), pos=(-0.13, 0, 0), command=self.showPrevVariant, state=DGG.DISABLED)
             self.variantPictures = [(None, None)] * self.numItems
         else:
             self.variantPictures = [(None, None)]
         self.showCurrentVariant()
     else:
         picture, self.ival = self['item'].getPicture(base.localAvatar)
         if picture:
             picture.reparentTo(self)
             picture.setScale(0.15)
         self.items = [self['item']]
         self.variantPictures = [(picture, self.ival)]
     self.typeLabel = DirectLabel(parent=self, relief=None, pos=(0, 0, 0.24), scale=TTLocalizer.CIPtypeLabel, text=self['item'].getTypeName(), text_fg=(0.95, 0.95, 0, 1), text_shadow=(0, 0, 0, 1), text_font=ToontownGlobals.getInterfaceFont(), text_wordwrap=CATALOG_PANEL_WORDWRAP)
     self.auxText = DirectLabel(parent=self, relief=None, scale=0.05, pos=(-0.2, 0, 0.16))
     self.auxText.setHpr(0, 0, -30)
     self.nameLabel = DirectLabel(parent=self, relief=None, text=self['item'].getDisplayName(), text_fg=(0, 0, 0, 1), text_font=ToontownGlobals.getInterfaceFont(), text_scale=TTLocalizer.CIPnameLabel, text_wordwrap=CATALOG_PANEL_WORDWRAP + TTLocalizer.CIPwordwrapOffset)
     if self['item'].getTypeCode() == CatalogItemTypes.CHAT_ITEM:
         self.nameLabel['text_wordwrap'] = CATALOG_PANEL_CHAT_WORDWRAP
         numRows = self.nameLabel.component('text0').textNode.getNumRows()
         if numRows == 1:
             namePos = (0, 0, -0.06)
         elif numRows == 2:
             namePos = (0, 0, -0.03)
         else:
             namePos = (0, 0, 0)
         nameScale = 0.063
     elif self['item'].getTypeCode() == CatalogItemTypes.ACCESSORY_ITEM:
         self.nameLabel['text_wordwrap'] = CATALOG_PANEL_ACCESSORY_WORDWRAP
         namePos = (0, 0, -.22)
         nameScale = 0.06
     else:
         namePos = (0, 0, -.22)
         nameScale = 0.06
     self.nameLabel.setPos(*namePos)
     self.nameLabel.setScale(nameScale)
     numericBeanPrice = self['item'].getPrice(self['type'])
     priceStr = str(numericBeanPrice) + ' ' + TTLocalizer.CatalogCurrency
     priceScale = 0.07
     if self['item'].isSaleItem():
         priceStr = TTLocalizer.CatalogSaleItem + priceStr
         priceScale = 0.06
     self.priceLabel = DirectLabel(parent=self, relief=None, pos=(0, 0, -0.3), scale=priceScale, text=priceStr, text_fg=(0.95, 0.95, 0, 1), text_shadow=(0, 0, 0, 1), text_font=ToontownGlobals.getSignFont(), text_align=TextNode.ACenter)
     self.createEmblemPrices(numericBeanPrice)
     buttonModels = loader.loadModel('phase_3.5/models/gui/inventory_gui')
     upButton = buttonModels.find('**/InventoryButtonUp')
     downButton = buttonModels.find('**/InventoryButtonDown')
     rolloverButton = buttonModels.find('**/InventoryButtonRollover')
     buyText = TTLocalizer.CatalogBuyText
     buyTextScale = TTLocalizer.CIPbuyButton
     if self['item'].isRental():
         buyText = TTLocalizer.CatalogRentText
     self.buyButton = DirectButton(parent=self, relief=None, pos=(0.2, 0, 0.15), scale=(0.7, 1, 0.8), text=buyText, text_scale=buyTextScale, text_pos=(-0.005, -0.01), image=(upButton,
      downButton,
      rolloverButton,
      upButton), image_color=(1.0, 0.2, 0.2, 1), image0_color=Vec4(1.0, 0.4, 0.4, 1), image3_color=Vec4(1.0, 0.4, 0.4, 0.4), command=self.__handlePurchaseRequest)
     soundIcons = loader.loadModel('phase_5.5/models/gui/catalogSoundIcons')
     soundOn = soundIcons.find('**/sound07')
     soundOff = soundIcons.find('**/sound08')
     self.soundOnButton = DirectButton(parent=self, relief=None, pos=(0.2, 0, -0.15), scale=(0.7, 1, 0.8), text_scale=buyTextScale, text_pos=(-0.005, -0.01), image=(upButton,
      downButton,
      rolloverButton,
      upButton), image_color=(0.2, 0.5, 0.2, 1), image0_color=Vec4(0.4, 0.5, 0.4, 1), image3_color=Vec4(0.4, 0.5, 0.4, 0.4), command=self.handleSoundOnButton)
     self.soundOnButton.hide()
     soundOn.setScale(0.1)
     soundOn.reparentTo(self.soundOnButton)
     self.soundOffButton = DirectButton(parent=self, relief=None, pos=(0.2, 0, -0.15), scale=(0.7, 1, 0.8), text_scale=buyTextScale, text_pos=(-0.005, -0.01), image=(upButton,
      downButton,
      rolloverButton,
      upButton), image_color=(0.2, 1.0, 0.2, 1), image0_color=Vec4(0.4, 1.0, 0.4, 1), image3_color=Vec4(0.4, 1.0, 0.4, 0.4), command=self.handleSoundOffButton)
     self.soundOffButton.hide()
     soundOff = self.soundOffButton.attachNewNode('soundOff')
     soundOn.copyTo(soundOff)
     soundOff.reparentTo(self.soundOffButton)
     upGButton = buttonModels.find('**/InventoryButtonUp')
     downGButton = buttonModels.find('**/InventoryButtonDown')
     rolloverGButton = buttonModels.find('**/InventoryButtonRollover')
     self.giftButton = DirectButton(parent=self, relief=None, pos=(0.2, 0, 0.15), scale=(0.7, 1, 0.8), text=TTLocalizer.CatalogGiftText, text_scale=buyTextScale, text_pos=(-0.005, -0.01), image=(upButton,
      downButton,
      rolloverButton,
      upButton), image_color=(1.0, 0.2, 0.2, 1), image0_color=Vec4(1.0, 0.4, 0.4, 1), image3_color=Vec4(1.0, 0.4, 0.4, 0.4), command=self.__handleGiftRequest)
     self.updateButtons()
     return
 def load(self):
     if self.loaded:
         return
     self.loaded = 1
     self.verify = None
     self.pictureFrame = self.attachNewNode('pictureFrame')
     self.pictureFrame.setScale(0.15)
     self.itemIndex = 0
     self.ival = None
     typeCode = self['item'].getTypeCode()
     if self['item'].needsCustomize() and (
             typeCode == CatalogItemTypes.WALLPAPER_ITEM
             or typeCode == CatalogItemTypes.FLOORING_ITEM
             or typeCode == CatalogItemTypes.MOULDING_ITEM
             or typeCode == CatalogItemTypes.FURNITURE_ITEM
             or typeCode == CatalogItemTypes.WAINSCOTING_ITEM
             or typeCode == CatalogItemTypes.TOON_STATUE_ITEM):
         if typeCode == CatalogItemTypes.WALLPAPER_ITEM:
             self.items = getAllWallpapers(self['item'].patternIndex)
         elif typeCode == CatalogItemTypes.FLOORING_ITEM:
             self.items = getAllFloorings(self['item'].patternIndex)
         elif typeCode == CatalogItemTypes.MOULDING_ITEM:
             self.items = getAllMouldings(self['item'].patternIndex)
         elif typeCode == CatalogItemTypes.FURNITURE_ITEM:
             self.items = getAllFurnitures(self['item'].furnitureType)
         elif typeCode == CatalogItemTypes.TOON_STATUE_ITEM:
             self.items = self['item'].getAllToonStatues()
         elif typeCode == CatalogItemTypes.WAINSCOTING_ITEM:
             self.items = getAllWainscotings(self['item'].patternIndex)
         self.numItems = len(self.items)
         if self.numItems > 1:
             guiItems = loader.loadModel('phase_5.5/models/gui/catalog_gui')
             nextUp = guiItems.find('**/arrow_up')
             nextRollover = guiItems.find('**/arrow_Rollover')
             nextDown = guiItems.find('**/arrow_Down')
             prevUp = guiItems.find('**/arrowUp')
             prevDown = guiItems.find('**/arrowDown1')
             prevRollover = guiItems.find('**/arrowRollover')
             self.nextVariant = DirectButton(parent=self,
                                             relief=None,
                                             image=(nextUp, nextDown,
                                                    nextRollover, nextUp),
                                             image3_color=(1, 1, 1, 0.4),
                                             pos=(0.13, 0, 0),
                                             command=self.showNextVariant)
             self.prevVariant = DirectButton(parent=self,
                                             relief=None,
                                             image=(prevUp, prevDown,
                                                    prevRollover, prevUp),
                                             image3_color=(1, 1, 1, 0.4),
                                             pos=(-0.13, 0, 0),
                                             command=self.showPrevVariant,
                                             state=DGG.DISABLED)
             self.variantPictures = [(None, None)] * self.numItems
         else:
             self.variantPictures = [(None, None)]
         self.showCurrentVariant()
     else:
         picture, self.ival = self['item'].getPicture(base.localAvatar)
         if picture:
             picture.reparentTo(self)
             picture.setScale(0.15)
         self.items = [self['item']]
         self.variantPictures = [(picture, self.ival)]
     self.typeLabel = DirectLabel(
         parent=self,
         relief=None,
         pos=(0, 0, 0.24),
         scale=TTLocalizer.CIPtypeLabel,
         text=self['item'].getTypeName(),
         text_fg=(0.95, 0.95, 0, 1),
         text_shadow=(0, 0, 0, 1),
         text_font=ToontownGlobals.getInterfaceFont(),
         text_wordwrap=CATALOG_PANEL_WORDWRAP)
     self.auxText = DirectLabel(parent=self,
                                relief=None,
                                scale=0.05,
                                pos=(-0.2, 0, 0.16))
     self.auxText.setHpr(0, 0, -30)
     self.nameLabel = DirectLabel(
         parent=self,
         relief=None,
         text=self['item'].getDisplayName(),
         text_fg=(0, 0, 0, 1),
         text_font=ToontownGlobals.getInterfaceFont(),
         text_scale=TTLocalizer.CIPnameLabel,
         text_wordwrap=CATALOG_PANEL_WORDWRAP +
         TTLocalizer.CIPwordwrapOffset)
     if self['item'].getTypeCode() == CatalogItemTypes.CHAT_ITEM:
         self.nameLabel['text_wordwrap'] = CATALOG_PANEL_CHAT_WORDWRAP
         numRows = self.nameLabel.component('text0').textNode.getNumRows()
         if numRows == 1:
             namePos = (0, 0, -0.06)
         elif numRows == 2:
             namePos = (0, 0, -0.03)
         else:
             namePos = (0, 0, 0)
         nameScale = 0.063
     elif self['item'].getTypeCode() == CatalogItemTypes.ACCESSORY_ITEM:
         self.nameLabel['text_wordwrap'] = CATALOG_PANEL_ACCESSORY_WORDWRAP
         namePos = (0, 0, -.22)
         nameScale = 0.06
     else:
         namePos = (0, 0, -.22)
         nameScale = 0.06
     self.nameLabel.setPos(*namePos)
     self.nameLabel.setScale(nameScale)
     numericBeanPrice = self['item'].getPrice(self['type'])
     priceStr = str(numericBeanPrice) + ' ' + TTLocalizer.CatalogCurrency
     priceScale = 0.07
     if self['item'].isSaleItem():
         priceStr = TTLocalizer.CatalogSaleItem + priceStr
         priceScale = 0.06
     self.priceLabel = DirectLabel(parent=self,
                                   relief=None,
                                   pos=(0, 0, -0.3),
                                   scale=priceScale,
                                   text=priceStr,
                                   text_fg=(0.95, 0.95, 0, 1),
                                   text_shadow=(0, 0, 0, 1),
                                   text_font=ToontownGlobals.getSignFont(),
                                   text_align=TextNode.ACenter)
     self.createEmblemPrices(numericBeanPrice)
     buttonModels = loader.loadModel('phase_3.5/models/gui/inventory_gui')
     upButton = buttonModels.find('**/InventoryButtonUp')
     downButton = buttonModels.find('**/InventoryButtonDown')
     rolloverButton = buttonModels.find('**/InventoryButtonRollover')
     buyText = TTLocalizer.CatalogBuyText
     buyTextScale = TTLocalizer.CIPbuyButton
     if self['item'].isRental():
         buyText = TTLocalizer.CatalogRentText
     self.buyButton = DirectButton(parent=self,
                                   relief=None,
                                   pos=(0.2, 0, 0.15),
                                   scale=(0.7, 1, 0.8),
                                   text=buyText,
                                   text_scale=buyTextScale,
                                   text_pos=(-0.005, -0.01),
                                   image=(upButton, downButton,
                                          rolloverButton, upButton),
                                   image_color=(1.0, 0.2, 0.2, 1),
                                   image0_color=Vec4(1.0, 0.4, 0.4, 1),
                                   image3_color=Vec4(1.0, 0.4, 0.4, 0.4),
                                   command=self.__handlePurchaseRequest)
     soundIcons = loader.loadModel('phase_5.5/models/gui/catalogSoundIcons')
     soundOn = soundIcons.find('**/sound07')
     soundOff = soundIcons.find('**/sound08')
     self.soundOnButton = DirectButton(
         parent=self,
         relief=None,
         pos=(0.2, 0, -0.15),
         scale=(0.7, 1, 0.8),
         text_scale=buyTextScale,
         text_pos=(-0.005, -0.01),
         image=(upButton, downButton, rolloverButton, upButton),
         image_color=(0.2, 0.5, 0.2, 1),
         image0_color=Vec4(0.4, 0.5, 0.4, 1),
         image3_color=Vec4(0.4, 0.5, 0.4, 0.4),
         command=self.handleSoundOnButton)
     self.soundOnButton.hide()
     soundOn.setScale(0.1)
     soundOn.reparentTo(self.soundOnButton)
     self.soundOffButton = DirectButton(
         parent=self,
         relief=None,
         pos=(0.2, 0, -0.15),
         scale=(0.7, 1, 0.8),
         text_scale=buyTextScale,
         text_pos=(-0.005, -0.01),
         image=(upButton, downButton, rolloverButton, upButton),
         image_color=(0.2, 1.0, 0.2, 1),
         image0_color=Vec4(0.4, 1.0, 0.4, 1),
         image3_color=Vec4(0.4, 1.0, 0.4, 0.4),
         command=self.handleSoundOffButton)
     self.soundOffButton.hide()
     soundOff = self.soundOffButton.attachNewNode('soundOff')
     soundOn.copyTo(soundOff)
     soundOff.reparentTo(self.soundOffButton)
     upGButton = buttonModels.find('**/InventoryButtonUp')
     downGButton = buttonModels.find('**/InventoryButtonDown')
     rolloverGButton = buttonModels.find('**/InventoryButtonRollover')
     self.giftButton = DirectButton(parent=self,
                                    relief=None,
                                    pos=(0.2, 0, 0.15),
                                    scale=(0.7, 1, 0.8),
                                    text=TTLocalizer.CatalogGiftText,
                                    text_scale=buyTextScale,
                                    text_pos=(-0.005, -0.01),
                                    image=(upButton, downButton,
                                           rolloverButton, upButton),
                                    image_color=(1.0, 0.2, 0.2, 1),
                                    image0_color=Vec4(1.0, 0.4, 0.4, 1),
                                    image3_color=Vec4(1.0, 0.4, 0.4, 0.4),
                                    command=self.__handleGiftRequest)
     self.updateButtons()
     return
Beispiel #3
0
 2920: getChatRange(12000, 12049),
 2921: getChatRange(12050, 12099),
 2930: getChatRange(13000, 13099),
 2940: getChatRange(14000, 14099),
 3000: getWallpapers(1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100),
 3010: getWallpapers(2200, 2300, 2400, 2500, 2600, 2700, 2800),
 3020: getWallpapers(2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600),
 3030: getWallpapers(3700, 3800, 3900),
 3500: getAllWainscotings(1000, 1010),
 3510: getAllWainscotings(1020),
 3520: getAllWainscotings(1030),
 3530: getAllWainscotings(1040),
 4000: getFloorings(1000, 1010, 1020, 1030, 1040, 1050, 1060, 1070, 1080, 1090, 1100),
 4010: getFloorings(1110, 1120, 1130),
 4020: getFloorings(1140, 1150, 1160, 1170, 1180, 1190),
 4500: getAllMouldings(1000, 1010),
 4510: getAllMouldings(1020, 1030, 1040),
 4520: getAllMouldings(1070),
 5000: getAllPetTricks()}
MetaItemChatKeysSold = (2000,
 2010,
 2020,
 2030,
 2040,
 2050,
 2900,
 2910,
 2920,
 2921,
 2930)
Beispiel #4
0
    def load(self):
        # Loading is guarded so things only get loaded once
        if self.loaded:
            return
        self.loaded = 1
        # Init variables
        self.verify = None
        # Some items know how to draw themselves.  Put this first so
        # it will be below any text on the frame.
        # Add a picture Frame so draw order is preserved if you change
        # the picture
        self.pictureFrame = self.attachNewNode('pictureFrame')
        self.pictureFrame.setScale(0.15)
        self.itemIndex = 0
        self.ival = None
        # If this is an item that needs customization, add buttons
        # to scroll through variations
        typeCode = self['item'].getTypeCode()
        if (self['item'].needsCustomize()
                and ((typeCode == CatalogItemTypes.WALLPAPER_ITEM) or
                     (typeCode == CatalogItemTypes.FLOORING_ITEM) or
                     (typeCode == CatalogItemTypes.MOULDING_ITEM) or
                     (typeCode == CatalogItemTypes.FURNITURE_ITEM) or
                     (typeCode == CatalogItemTypes.WAINSCOTING_ITEM) or
                     (typeCode == CatalogItemTypes.TOON_STATUE_ITEM))):
            if typeCode == CatalogItemTypes.WALLPAPER_ITEM:
                self.items = getAllWallpapers(self['item'].patternIndex)
            elif typeCode == CatalogItemTypes.FLOORING_ITEM:
                self.items = getAllFloorings(self['item'].patternIndex)
            elif typeCode == CatalogItemTypes.MOULDING_ITEM:
                self.items = getAllMouldings(self['item'].patternIndex)
            elif typeCode == CatalogItemTypes.FURNITURE_ITEM:
                self.items = getAllFurnitures(self['item'].furnitureType)
            elif typeCode == CatalogItemTypes.TOON_STATUE_ITEM:
                self.items = self['item'].getAllToonStatues()
            elif typeCode == CatalogItemTypes.WAINSCOTING_ITEM:
                self.items = getAllWainscotings(self['item'].patternIndex)
            self.numItems = len(self.items)
            if self.numItems > 1:
                guiItems = loader.loadModel('phase_5.5/models/gui/catalog_gui')
                nextUp = guiItems.find('**/arrow_up')
                nextRollover = guiItems.find('**/arrow_Rollover')
                nextDown = guiItems.find('**/arrow_Down')
                prevUp = guiItems.find('**/arrowUp')
                prevDown = guiItems.find('**/arrowDown1')
                prevRollover = guiItems.find('**/arrowRollover')
                self.nextVariant = DirectButton(
                    parent=self,
                    relief=None,
                    image=(nextUp, nextDown, nextRollover, nextUp),
                    image3_color=(1, 1, 1, .4),
                    pos=(0.13, 0, 0),
                    command=self.showNextVariant,
                )
                self.prevVariant = DirectButton(
                    parent=self,
                    relief=None,
                    image=(prevUp, prevDown, prevRollover, prevUp),
                    image3_color=(1, 1, 1, .4),
                    pos=(-0.13, 0, 0),
                    command=self.showPrevVariant,
                    state=DGG.DISABLED,
                )
                self.variantPictures = [(None, None)] * self.numItems
            else:
                self.variantPictures = [(None, None)]
            self.showCurrentVariant()
        else:
            # Some items know how to draw themselves.  Put this first so
            # it will be below any text on the frame.

            picture, self.ival = self['item'].getPicture(base.localAvatar)
            if picture:
                picture.reparentTo(self)
                picture.setScale(0.15)

            self.items = [self['item']]
            self.variantPictures = [(picture, self.ival)]
        # type label
        self.typeLabel = DirectLabel(
            parent=self,
            relief=None,
            pos=(0, 0, 0.24),
            scale=0.075,
            text=self['item'].getTypeName(),
            text_fg=(0.95, 0.95, 0, 1),
            text_shadow=(0, 0, 0, 1),
            text_font=ToontownGlobals.getInterfaceFont(),
            text_wordwrap=CATALOG_PANEL_WORDWRAP,
        )
        # aux text label
        self.auxText = DirectLabel(
            parent=self,
            relief=None,
            scale=0.05,
            pos=(-0.20, 0, 0.16),
        )
        # Put this one at a jaunty angle
        self.auxText.setHpr(0, 0, -30)

        self.nameLabel = DirectLabel(
            parent=self,
            relief=None,
            text=self['item'].getDisplayName(),
            text_fg=(0, 0, 0, 1),
            text_font=ToontownGlobals.getInterfaceFont(),
            text_scale=TTLocalizer.CIPnameLabel,
            text_wordwrap=CATALOG_PANEL_WORDWRAP +
            TTLocalizer.CIPwordwrapOffset,
        )

        if self['item'].getTypeCode() == CatalogItemTypes.CHAT_ITEM:
            # adjust wordwrap as the bubbles are narrower
            self.nameLabel['text_wordwrap'] = CATALOG_PANEL_CHAT_WORDWRAP
            # Center the text vertically on the chat balloon based
            # on the number of rows of text
            numRows = self.nameLabel.component('text0').textNode.getNumRows()
            if numRows == 1:
                namePos = (0, 0, -0.06)
            elif numRows == 2:
                namePos = (0, 0, -0.03)
            else:
                namePos = (0, 0, 0)
            nameScale = 0.063
        else:
            namePos = (0, 0, -.22)
            nameScale = 0.06
        self.nameLabel.setPos(*namePos)
        self.nameLabel.setScale(nameScale)

        priceStr = str(self['item'].getPrice(
            self['type'])) + " " + TTLocalizer.CatalogCurrency
        priceScale = 0.07
        # prepend sale sign if necessary
        if self['item'].isSaleItem():
            priceStr = TTLocalizer.CatalogSaleItem + priceStr
            priceScale = 0.06
        # price label
        self.priceLabel = DirectLabel(
            parent=self,
            relief=None,
            pos=(0, 0, -0.3),
            scale=priceScale,
            text=priceStr,
            text_fg=(0.95, 0.95, 0, 1),
            text_shadow=(0, 0, 0, 1),
            text_font=ToontownGlobals.getSignFont(),
            text_align=TextNode.ACenter,
        )

        # buy button
        buttonModels = loader.loadModel("phase_3.5/models/gui/inventory_gui")
        upButton = buttonModels.find("**/InventoryButtonUp")
        downButton = buttonModels.find("**/InventoryButtonDown")
        rolloverButton = buttonModels.find("**/InventoryButtonRollover")

        buyText = TTLocalizer.CatalogBuyText

        if self['item'].isRental():
            buyText = TTLocalizer.CatalogRentText

        self.buyButton = DirectButton(
            parent=self,
            relief=None,
            pos=(0.2, 0, 0.15),
            scale=(0.7, 1, 0.8),
            text=buyText,
            text_scale=(0.06, 0.05),
            text_pos=(-0.005, -0.01),
            image=(
                upButton,
                downButton,
                rolloverButton,
                upButton,
            ),
            image_color=(1.0, 0.2, 0.2, 1),
            # Make the rollover button pop out
            image0_color=Vec4(1.0, 0.4, 0.4, 1),
            # Make the disabled button fade out
            image3_color=Vec4(1.0, 0.4, 0.4, 0.4),
            command=self.__handlePurchaseRequest,
        )
        #self.updateBuyButton()

        soundIcons = loader.loadModel('phase_5.5/models/gui/catalogSoundIcons')
        soundOn = soundIcons.find('**/sound07')

        soundOff = soundIcons.find('**/sound08')

        self.soundOnButton = DirectButton(
            parent=self,
            relief=None,
            pos=(0.2, 0, -0.15),
            scale=(0.7, 1, 0.8),
            #geom = soundOn,
            #text = TTLocalizer.CatalogSndOnText,
            text_scale=(0.06, 0.05),
            text_pos=(-0.005, -0.01),
            image=(
                upButton,
                downButton,
                rolloverButton,
                upButton,
            ),
            image_color=(0.2, 0.5, 0.2, 1),
            # Make the rollover button pop out
            image0_color=Vec4(0.4, 0.5, 0.4, 1),
            # Make the disabled button fade out
            image3_color=Vec4(0.4, 0.5, 0.4, 0.4),
            command=self.handleSoundOnButton,
        )
        self.soundOnButton.hide()
        soundOn.setScale(0.1)
        soundOn.reparentTo(self.soundOnButton)

        self.soundOffButton = DirectButton(
            parent=self,
            relief=None,
            pos=(0.2, 0, -0.15),
            scale=(0.7, 1, 0.8),
            #text = TTLocalizer.CatalogSndOffText,
            text_scale=(0.06, 0.05),
            text_pos=(-0.005, -0.01),
            image=(
                upButton,
                downButton,
                rolloverButton,
                upButton,
            ),
            image_color=(0.2, 1.0, 0.2, 1),
            # Make the rollover button pop out
            image0_color=Vec4(0.4, 1.0, 0.4, 1),
            # Make the disabled button fade out
            image3_color=Vec4(0.4, 1.0, 0.4, 0.4),
            command=self.handleSoundOffButton,
        )
        self.soundOffButton.hide()
        soundOff = self.soundOffButton.attachNewNode('soundOff')
        soundOn.copyTo(soundOff)
        #soundOff.setScale(0.1)
        soundOff.reparentTo(self.soundOffButton)

        upGButton = buttonModels.find("**/InventoryButtonUp")
        downGButton = buttonModels.find("**/InventoryButtonDown")
        rolloverGButton = buttonModels.find("**/InventoryButtonRollover")

        ##if len(base.localAvatar.friendsList) > 0:
        self.giftButton = DirectButton(
            parent=self,
            relief=None,
            pos=(0.2, 0, 0.15),
            scale=(0.7, 1, 0.8),
            text=TTLocalizer.CatalogGiftText,
            text_scale=(0.06, 0.05),
            text_pos=(-0.005, -0.01),
            image=(
                upButton,
                downButton,
                rolloverButton,
                upButton,
            ),
            image_color=(1.0, 0.2, 0.2, 1),
            # Make the rollover button pop out
            image0_color=Vec4(1.0, 0.4, 0.4, 1),
            # Make the disabled button fade out
            image3_color=Vec4(1.0, 0.4, 0.4, 0.4),
            command=self.__handleGiftRequest,
        )
        self.updateButtons()