mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-10-31 08:47:54 +00:00
80 lines
3.6 KiB
Python
80 lines
3.6 KiB
Python
from pandac.PandaModules import *
|
|
from direct.gui.DirectGui import *
|
|
from otp.otpbase import OTPLocalizer
|
|
|
|
class MultiPageTextFrame(DirectFrame):
|
|
defWidth = 1.8
|
|
defHeight = 0.9
|
|
|
|
def __init__(self, textList, width = defWidth, height = defHeight, wordWrap = None, hidePageNum = 0, pageChangeCallback = None, parent = aspect2d, **kw):
|
|
self.textList = textList
|
|
self.numPages = len(self.textList)
|
|
self.pageChangeCallback = pageChangeCallback
|
|
if not wordWrap:
|
|
wordWrap = round(18.8 * width)
|
|
hWidth = width / 2.0
|
|
hHeight = height / 2.0
|
|
optiondefs = (('relief', DGG.SUNKEN, None),
|
|
('frameSize', (-hWidth,
|
|
hWidth,
|
|
-hHeight,
|
|
hHeight), None),
|
|
('frameColor', (0.85, 0.85, 0.6, 1), None),
|
|
('borderWidth', (0.01, 0.01), None),
|
|
('text', '', None),
|
|
('text_pos', (-hWidth * 0.95, hHeight * 0.93), None),
|
|
('text_scale', 0.05, None),
|
|
('text_align', TextNode.ALeft, None),
|
|
('text_wordwrap', wordWrap, None))
|
|
self.defineoptions(kw, optiondefs)
|
|
DirectFrame.__init__(self, parent)
|
|
self.initialiseoptions(MultiPageTextFrame)
|
|
guiButton = loader.loadModel('phase_3/models/gui/quit_button')
|
|
buttonScale = 0.7 * (float(height) / self.defHeight)
|
|
buttonZ = -hHeight * 0.83
|
|
self.nextButton = DirectButton(parent=self, relief=None, scale=buttonScale, image=(guiButton.find('**/QuitBtn_UP'), guiButton.find('**/QuitBtn_DN'), guiButton.find('**/QuitBtn_RLVR')), image_scale=(0.75, 1, 1), pos=(hWidth * 0.35, 0, buttonZ), text=OTPLocalizer.MultiPageTextFrameNext, text_scale=0.05, text_pos=(0, -0.02), command=self.turnPage, extraArgs=[1])
|
|
self.prevButton = DirectButton(parent=self, relief=None, scale=buttonScale, image=(guiButton.find('**/QuitBtn_UP'), guiButton.find('**/QuitBtn_DN'), guiButton.find('**/QuitBtn_RLVR')), image_scale=(0.75, 1, 1), pos=(-hWidth * 0.35, 0, buttonZ), text=OTPLocalizer.MultiPageTextFramePrev, text_scale=0.05, text_pos=(0, -0.02), command=self.turnPage, extraArgs=[-1])
|
|
self.pageNum = DirectLabel(relief=None, parent=self, pos=(0, 0, -hHeight * 0.86), text='', text_scale=0.05, text_pos=(0, 0))
|
|
if hidePageNum:
|
|
self.pageNum.hide()
|
|
self.setPage(0)
|
|
guiButton.removeNode()
|
|
return
|
|
|
|
def setPageChangeCallback(self, callback):
|
|
self.pageChangeCallback = callback
|
|
self.setPage(self.curPage)
|
|
|
|
def setPage(self, pageNum):
|
|
self.curPage = max(0, min(self.numPages - 1, pageNum))
|
|
if self.numPages == 1:
|
|
self.nextButton.hide()
|
|
self.prevButton.hide()
|
|
self.curPage = 0
|
|
elif self.curPage == self.numPages - 1:
|
|
self.nextButton.hide()
|
|
self.prevButton.show()
|
|
elif self.curPage == 0:
|
|
self.nextButton.show()
|
|
self.prevButton.hide()
|
|
else:
|
|
self.nextButton.show()
|
|
self.prevButton.show()
|
|
self.pageNum['text'] = OTPLocalizer.MultiPageTextFramePage % (self.curPage + 1, self.numPages)
|
|
self['text'] = self.textList[self.curPage]
|
|
if self.pageChangeCallback:
|
|
self.pageChangeCallback(self.getCurPage())
|
|
|
|
def getCurPage(self):
|
|
return self.curPage
|
|
|
|
def turnPage(self, delta):
|
|
self.setPage(self.curPage + delta)
|
|
|
|
def acceptAgreementKeypresses(self):
|
|
self.accept('page_down-up', self.turnPage, extraArgs=[1])
|
|
self.accept('page_up-up', self.turnPage, extraArgs=[-1])
|
|
|
|
def ignoreAgreementKeypresses(self):
|
|
self.ignore('page_down-up')
|
|
self.ignore('page_up-up')
|