2019-11-02 17:27:54 -05:00
|
|
|
from direct.gui.DirectGui import *
|
2022-12-16 18:40:57 -06:00
|
|
|
from panda3d.core import *
|
2019-11-02 17:27:54 -05:00
|
|
|
from direct.showbase import DirectObject
|
2019-12-30 00:07:56 -06:00
|
|
|
from . import CatalogItem
|
2019-11-02 17:27:54 -05:00
|
|
|
from toontown.toonbase import ToontownGlobals
|
|
|
|
from toontown.toonbase import TTLocalizer
|
|
|
|
from otp.otpbase import OTPLocalizer
|
|
|
|
from toontown.toontowngui import TTDialog
|
|
|
|
NUM_ITEMS_SHOWN = 15
|
|
|
|
|
|
|
|
class CatalogChatItemPicker(DirectObject.DirectObject):
|
|
|
|
|
|
|
|
def __init__(self, callback, newMsg):
|
|
|
|
self.confirmDelete = None
|
|
|
|
self.doneCallback = callback
|
|
|
|
self.panel = DirectFrame(relief=None, geom=DGG.getDefaultDialogGeom(), geom_color=ToontownGlobals.GlobalDialogColor, geom_scale=(1.4, 1, 1.6), text=TTLocalizer.MessagePickerTitle % OTPLocalizer.CustomSCStrings[newMsg], text_pos=(0, 0.68), text_scale=0.05, text_wordwrap=24, pos=(0, 0, 0))
|
|
|
|
msgStrings = []
|
|
|
|
for msg in base.localAvatar.customMessages:
|
|
|
|
msgStrings.append(OTPLocalizer.CustomSCStrings[msg])
|
|
|
|
|
|
|
|
gui = loader.loadModel('phase_3.5/models/gui/friendslist_gui')
|
|
|
|
self.picker = DirectScrolledList(parent=self.panel, relief=None, pos=(0, 0, 0), incButton_image=(gui.find('**/FndsLst_ScrollUp'),
|
|
|
|
gui.find('**/FndsLst_ScrollDN'),
|
|
|
|
gui.find('**/FndsLst_ScrollUp_Rllvr'),
|
|
|
|
gui.find('**/FndsLst_ScrollUp')), incButton_relief=None, incButton_scale=(1.3, 1.3, -1.3), incButton_pos=(0, 0, -0.5), incButton_image3_color=Vec4(1, 1, 1, 0.2), decButton_image=(gui.find('**/FndsLst_ScrollUp'),
|
|
|
|
gui.find('**/FndsLst_ScrollDN'),
|
|
|
|
gui.find('**/FndsLst_ScrollUp_Rllvr'),
|
|
|
|
gui.find('**/FndsLst_ScrollUp')), decButton_relief=None, decButton_scale=(1.3, 1.3, 1.3), decButton_pos=(0, 0, 0.5), decButton_image3_color=Vec4(1, 1, 1, 0.2), itemFrame_pos=(0, 0, 0.39), itemFrame_scale=1.0, itemFrame_relief=DGG.SUNKEN, itemFrame_frameSize=(-0.55,
|
|
|
|
0.55,
|
|
|
|
-0.85,
|
|
|
|
0.06), itemFrame_frameColor=(0.85, 0.95, 1, 1), itemFrame_borderWidth=(0.01, 0.01), itemMakeFunction=self.makeMessageButton, itemMakeExtraArgs=[base.localAvatar.customMessages], numItemsVisible=NUM_ITEMS_SHOWN, items=msgStrings)
|
|
|
|
clipper = PlaneNode('clipper')
|
|
|
|
clipper.setPlane(Plane(Vec3(-1, 0, 0), Point3(0.55, 0, 0)))
|
|
|
|
clipNP = self.picker.attachNewNode(clipper)
|
|
|
|
self.picker.setClipPlane(clipNP)
|
|
|
|
gui.removeNode()
|
|
|
|
buttonModels = loader.loadModel('phase_3.5/models/gui/inventory_gui')
|
|
|
|
upButton = buttonModels.find('**/InventoryButtonUp')
|
|
|
|
downButton = buttonModels.find('**/InventoryButtonDown')
|
|
|
|
rolloverButton = buttonModels.find('**/InventoryButtonRollover')
|
|
|
|
exitButton = DirectButton(parent=self.panel, relief=None, pos=(0, 0, -0.7), text=TTLocalizer.MessagePickerCancel, text_scale=TTLocalizer.CCIPexitButton, text_pos=(-0.005, -0.01), text_fg=Vec4(1, 1, 1, 1), textMayChange=0, image=(upButton, downButton, rolloverButton), image_scale=1.1, image_color=(0, 0.6, 1, 1), command=self.__handleCancel)
|
|
|
|
buttonModels.removeNode()
|
|
|
|
return
|
|
|
|
|
|
|
|
def hide(self):
|
|
|
|
base.transitions.noTransitions()
|
|
|
|
self.panel.hide()
|
|
|
|
|
|
|
|
def show(self):
|
|
|
|
base.transitions.fadeScreen(0.5)
|
|
|
|
self.panel.setBin('gui-popup', 0)
|
|
|
|
self.panel.show()
|
|
|
|
|
|
|
|
def destroy(self):
|
|
|
|
base.transitions.noTransitions()
|
|
|
|
self.panel.destroy()
|
|
|
|
del self.panel
|
|
|
|
del self.picker
|
|
|
|
del self.doneCallback
|
|
|
|
if self.confirmDelete:
|
|
|
|
self.confirmDelete.cleanup()
|
|
|
|
del self.confirmDelete
|
|
|
|
self.confirmDelete = None
|
|
|
|
return
|
|
|
|
|
|
|
|
def makeMessageButton(self, name, number, *extraArgs):
|
|
|
|
msg = extraArgs[0][0][number]
|
|
|
|
return DirectButton(relief=None, text=OTPLocalizer.CustomSCStrings[msg], text_pos=(-0.5, 0, 0), text_scale=0.05, text_align=TextNode.ALeft, text1_bg=Vec4(1, 1, 0, 1), text2_bg=Vec4(0.5, 0.9, 1, 1), text3_fg=Vec4(0.4, 0.8, 0.4, 1), command=self.__handleDelete, extraArgs=[msg])
|
|
|
|
|
|
|
|
def __handleDelete(self, msg):
|
|
|
|
self.confirmDelete = TTDialog.TTGlobalDialog(doneEvent='confirmDelete', message=TTLocalizer.MessageConfirmDelete % OTPLocalizer.CustomSCStrings[msg], style=TTDialog.TwoChoice)
|
|
|
|
self.confirmDelete.msg = msg
|
|
|
|
self.hide()
|
|
|
|
self.confirmDelete.show()
|
|
|
|
self.accept('confirmDelete', self.__handleDeleteConfirm)
|
|
|
|
|
|
|
|
def __handleCancel(self):
|
|
|
|
self.doneCallback('cancel')
|
|
|
|
|
|
|
|
def __handleDeleteConfirm(self):
|
|
|
|
status = self.confirmDelete.doneStatus
|
|
|
|
msg = self.confirmDelete.msg
|
|
|
|
self.ignore('confirmDelete')
|
|
|
|
self.confirmDelete.cleanup()
|
|
|
|
del self.confirmDelete
|
|
|
|
self.confirmDelete = None
|
|
|
|
if status == 'ok':
|
|
|
|
self.doneCallback('pick', base.localAvatar.customMessages.index(msg))
|
|
|
|
else:
|
|
|
|
self.show()
|
|
|
|
return
|