Poodletooth-iLand/otp/login/MultiPageTextFrame.py
2015-03-03 17:10:12 -05:00

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')