class OptionItemGui(DirectFrame): Width = PiratesGuiGlobals.OptionItemWidth Height = PiratesGuiGlobals.OptionItemHeight TOPLEVEL_GUI_FILE = 'models/gui/toplevel_gui' CHAR_GUI_FILE = 'models/gui/char_gui' def __init__(self, item, parent=None, textScale=None, itemHeight=None, frameColor=(0.1, 0.1, 1, 0.08), titleWrapLen=None, **kw): if itemHeight == None: itemHeight = OptionItemGui.Height optiondefs = (('state', DGG.NORMAL, None), ('frameColor', frameColor, None), ('borderWidth', PiratesGuiGlobals.BorderWidth, None), ('frameSize', (0.0, OptionItemGui.Width, 0.0, itemHeight), None)) self.defineoptions(kw, optiondefs) DirectFrame.__init__(self, parent) self.initialiseoptions(OptionItemGui) self.textScale = 0.04 if textScale: self.textScale = textScale self.item = item self.value = '' self.optionUI = None self.selectedItem = None self.borderFrame = None self.optionType = None self.titleWrapLen = titleWrapLen return def setup(self): self.optionType = self.item['ValueType'] self._createIface() def destroy(self): self._destroyIface() DirectFrame.destroy(self) self.ignoreAll() def _createIface(self): self._createLabel() self._createOptionEntry() def _createLabel(self): if self.optionType == PiratesGuiGlobals.UIItemType_Choice: self.titleWrapLen = None textFg = PiratesGuiGlobals.TextFG1 self.descText = DirectLabel(parent=self, relief=None, text=self.item['Text'] + ':', text_align=TextNode.ALeft, text_scale=self.textScale, text_fg=textFg, text_shadow=PiratesGuiGlobals.TextShadow, text_wordwrap=self.titleWrapLen, textMayChange=1, pos=(0, 0, self.getHeight() / 2)) return def _createOptionEntry(self): if self.optionType == PiratesGuiGlobals.UIItemType_Label: self.optionUI = DirectLabel( parent=self, relief=None, text=str(self.item['Value']), text_align=TextNode.ALeft, text_scale=self.textScale, text_shadow=PiratesGuiGlobals.TextShadow, textMayChange=1, pos=(0.3, 0, self.getHeight() / 2)) elif self.optionType == PiratesGuiGlobals.UIItemType_Choice: lookoutUI = loader.loadModel('models/gui/lookout_gui') check_on = lookoutUI.find('**/lookout_submit') check_off = lookoutUI.find('**/lookout_submit_disabled') if self.value == '': self.value = 0 self.optionItems = DirectCheckButton(parent=self, scale=0.05, indicatorValue=self.value, boxImageScale=4, command=self.itemChecked, pos=(0.78, 0, self.getHeight() / 2)) elif self.optionType == PiratesGuiGlobals.UIItemType_ListItem: lookoutUI = loader.loadModel('models/gui/lookout_gui') charUI = loader.loadModel(self.CHAR_GUI_FILE) charGui_slider = charUI.find('**/chargui_slider_large') charGui_slider_thumb = charUI.find('**/chargui_slider_node') self.optionItems = ListFrame(0.4, None, 'blah', self, frameColor=(0, 0, 0, 0)) self.optionItems.itemBuffer = 0.008 self.optionItems.setup() self.optionUI = DirectScrolledFrame( parent=self, frameSize=(0, 0.45, 0, 0.3), relief=DGG.GROOVE, state=DGG.NORMAL, frameColor=(0, 0, 0, 0), borderWidth=PiratesGuiGlobals.BorderWidth, canvasSize=(0, 0.38, 0, self.optionItems['frameSize'][3]), verticalScroll_frameColor=(0, 0, 0, 0), verticalScroll_thumb_frameColor=(0, 0, 0, 0), verticalScroll_incButton_frameColor=(0, 0, 0, 0), verticalScroll_decButton_frameColor=(0, 0, 0, 0), verticalScroll_image=charGui_slider, verticalScroll_image_scale=(0.12, 1, 0.28), verticalScroll_image_pos=(0.4195, 0, 0.15), verticalScroll_image_hpr=(0, 0, 90), verticalScroll_frameSize=(0, PiratesGuiGlobals.ScrollbarSize, 0, OptionItemGui.Height * 3), verticalScroll_thumb_image=charGui_slider_thumb, verticalScroll_thumb_image_scale=(0.35, 0.35, 0.35), sortOrder=5, pos=(0.3, 0, self.getHeight() / 2 - 0.15)) self.optionUI.guiItem.getVerticalSlider().clearLeftButton() self.optionUI.guiItem.getVerticalSlider().clearRightButton() self.optionUI.guiItem.getVerticalSlider().setRange(-1, 1) self.optionUI.guiItem.getHorizontalSlider().clearLeftButton() self.optionUI.guiItem.getHorizontalSlider().clearRightButton() self.optionUI.guiItem.getHorizontalSlider().setRange(-1, 1) self.createFrame() self.optionItems.reparentTo(self.optionUI.getCanvas()) return def getItemChangeMsg(self): return self.taskName('gameTypeChanged') def getItemList(self): itemList = [] for currValue in self.item['Values']: itemList.append({ 'Type': 'Literal', 'Text': str(currValue), 'Value': currValue }) return itemList def createNewItem(self, item, parent, itemType=None, columnWidths=[], color=None): newItem = ButtonListItem(item, 0.08, 0.38, parent, parentList=self, txtColor=color, pressEffect=False, image=GuiButton.GuiButton.genericButton, frameColor=(0, 0, 0, 0), textScale=0.05) newItem.setup() return newItem def _destroyIface(self): self.removeFrame() self.descText.destroy() del self.descText if self.optionUI: self.optionUI.destroy() del self.optionUI def _handleItemChange(self): self._destroyIface() self._createIface() def itemSelect(self, item): for currItem in self.optionItems.items: currItem.setSelected(False) item.setSelected(True) self.selectedItem = item def itemChecked(self, status): self.value = status def getOptionValuePair(self): option = self.item['Option'] value = self.value if self.selectedItem: value = self.selectedItem.value return [str(option), str(value)] def createFrame(self): self.removeFrame() self.borderFrame = BorderFrame(parent=self, pos=(0.5, 0, 0.15), scale=(0.57, 1, 0.33)) self.borderFrame.setBackgroundVisible(False) def removeFrame(self): if self.borderFrame: self.borderFrame.removeNode() self.borderFrame = None return
class OptionItemGui(DirectFrame): Width = PiratesGuiGlobals.OptionItemWidth Height = PiratesGuiGlobals.OptionItemHeight TOPLEVEL_GUI_FILE = 'models/gui/toplevel_gui' CHAR_GUI_FILE = 'models/gui/char_gui' def __init__(self, item, parent = None, textScale = None, itemHeight = None, frameColor = (0.10000000000000001, 0.10000000000000001, 1, 0.080000000000000002), titleWrapLen = None, **kw): if itemHeight == None: itemHeight = OptionItemGui.Height optiondefs = (('state', DGG.NORMAL, None), ('frameColor', frameColor, None), ('borderWidth', PiratesGuiGlobals.BorderWidth, None), ('frameSize', (0.0, OptionItemGui.Width, 0.0, itemHeight), None)) self.defineoptions(kw, optiondefs) DirectFrame.__init__(self, parent) self.initialiseoptions(OptionItemGui) self.textScale = 0.040000000000000001 if textScale: self.textScale = textScale self.item = item self.value = '' self.optionUI = None self.selectedItem = None self.borderFrame = None self.optionType = None self.titleWrapLen = titleWrapLen def setup(self): self.optionType = self.item['ValueType'] self._createIface() def destroy(self): self._destroyIface() DirectFrame.destroy(self) self.ignoreAll() def _createIface(self): self._createLabel() self._createOptionEntry() def _createLabel(self): if self.optionType == PiratesGuiGlobals.UIItemType_Choice: self.titleWrapLen = None textFg = PiratesGuiGlobals.TextFG1 self.descText = DirectLabel(parent = self, relief = None, text = self.item['Text'] + ':', text_align = TextNode.ALeft, text_scale = self.textScale, text_fg = textFg, text_shadow = PiratesGuiGlobals.TextShadow, text_wordwrap = self.titleWrapLen, textMayChange = 1, pos = (0, 0, self.getHeight() / 2)) def _createOptionEntry(self): if self.optionType == PiratesGuiGlobals.UIItemType_Label: self.optionUI = DirectLabel(parent = self, relief = None, text = str(self.item['Value']), text_align = TextNode.ALeft, text_scale = self.textScale, text_shadow = PiratesGuiGlobals.TextShadow, textMayChange = 1, pos = (0.29999999999999999, 0, self.getHeight() / 2)) elif self.optionType == PiratesGuiGlobals.UIItemType_Choice: lookoutUI = loader.loadModel('models/gui/lookout_gui') check_on = lookoutUI.find('**/lookout_submit') check_off = lookoutUI.find('**/lookout_submit_disabled') if self.value == '': self.value = 0 self.optionItems = DirectCheckButton(parent = self, scale = 0.050000000000000003, indicatorValue = self.value, boxImageScale = 4, command = self.itemChecked, pos = (0.78000000000000003, 0, self.getHeight() / 2)) elif self.optionType == PiratesGuiGlobals.UIItemType_ListItem: lookoutUI = loader.loadModel('models/gui/lookout_gui') charUI = loader.loadModel(self.CHAR_GUI_FILE) charGui_slider = charUI.find('**/chargui_slider_large') charGui_slider_thumb = charUI.find('**/chargui_slider_node') self.optionItems = ListFrame(0.40000000000000002, None, 'blah', self, frameColor = (0, 0, 0, 0)) self.optionItems.itemBuffer = 0.0080000000000000002 self.optionItems.setup() self.optionUI = DirectScrolledFrame(parent = self, frameSize = (0, 0.45000000000000001, 0, 0.29999999999999999), relief = DGG.GROOVE, state = DGG.NORMAL, frameColor = (0, 0, 0, 0), borderWidth = PiratesGuiGlobals.BorderWidth, canvasSize = (0, 0.38, 0, self.optionItems['frameSize'][3]), verticalScroll_frameColor = (0, 0, 0, 0), verticalScroll_thumb_frameColor = (0, 0, 0, 0), verticalScroll_incButton_frameColor = (0, 0, 0, 0), verticalScroll_decButton_frameColor = (0, 0, 0, 0), verticalScroll_image = charGui_slider, verticalScroll_image_scale = (0.12, 1, 0.28000000000000003), verticalScroll_image_pos = (0.41949999999999998, 0, 0.14999999999999999), verticalScroll_image_hpr = (0, 0, 90), verticalScroll_frameSize = (0, PiratesGuiGlobals.ScrollbarSize, 0, OptionItemGui.Height * 3), verticalScroll_thumb_image = charGui_slider_thumb, verticalScroll_thumb_image_scale = (0.34999999999999998, 0.34999999999999998, 0.34999999999999998), sortOrder = 5, pos = (0.29999999999999999, 0, self.getHeight() / 2 - 0.14999999999999999)) self.optionUI.guiItem.getVerticalSlider().clearLeftButton() self.optionUI.guiItem.getVerticalSlider().clearRightButton() self.optionUI.guiItem.getVerticalSlider().setRange(-1, 1) self.optionUI.guiItem.getHorizontalSlider().clearLeftButton() self.optionUI.guiItem.getHorizontalSlider().clearRightButton() self.optionUI.guiItem.getHorizontalSlider().setRange(-1, 1) self.createFrame() self.optionItems.reparentTo(self.optionUI.getCanvas()) def getItemChangeMsg(self): return self.taskName('gameTypeChanged') def getItemList(self): itemList = [] for currValue in self.item['Values']: itemList.append({ 'Type': 'Literal', 'Text': str(currValue), 'Value': currValue }) return itemList def createNewItem(self, item, parent, itemType = None, columnWidths = [], color = None): newItem = ButtonListItem(item, 0.080000000000000002, 0.38, parent, parentList = self, txtColor = color, pressEffect = False, image = GuiButton.GuiButton.genericButton, frameColor = (0, 0, 0, 0), textScale = 0.050000000000000003) newItem.setup() return newItem def _destroyIface(self): self.removeFrame() self.descText.destroy() del self.descText if self.optionUI: self.optionUI.destroy() del self.optionUI def _handleItemChange(self): self._destroyIface() self._createIface() def itemSelect(self, item): for currItem in self.optionItems.items: currItem.setSelected(False) item.setSelected(True) self.selectedItem = item def itemChecked(self, status): self.value = status def getOptionValuePair(self): option = self.item['Option'] value = self.value if self.selectedItem: value = self.selectedItem.value return [ str(option), str(value)] def createFrame(self): self.removeFrame() self.borderFrame = BorderFrame(parent = self, pos = (0.5, 0, 0.14999999999999999), scale = (0.56999999999999995, 1, 0.33000000000000002)) self.borderFrame.setBackgroundVisible(False) def removeFrame(self): if self.borderFrame: self.borderFrame.removeNode() self.borderFrame = None
class LookoutListItem(ButtonListItem.ButtonListItem): def __init__(self, itemInfo, imageTexCardName, itemHeight, itemWidth, parent=None, parentList=None, textScale=None, txtColor=None, wantFrame=False, **kw): ButtonListItem.ButtonListItem.__init__(self, itemInfo, itemHeight, itemWidth, parent, parentList, textScale, txtColor, **None) self.initialiseoptions(LookoutListItem) lookoutUI = loader.loadModel(imageTexCardName) iconImage = itemInfo.get('Icon') self.imageRef = None if iconImage: self.imageRef = lookoutUI.find('**/' + iconImage) self.descText = itemInfo.get('Desc') self.title = None self.desc = None self.icon = None self.activityListBorderFrame = None self.wantFrame = wantFrame self.bind(DGG.ENTER, self.mouseEnter) self.bind(DGG.EXIT, self.mouseLeave) def _createIface(self): xOff = 0.02 wordwrap = 20 yOff = 0.065000000000000002 if self.imageRef: self.icon = OnscreenImage(image=self.imageRef, pos=(0.10000000000000001, 0, 0.082000000000000003), scale=(0.59999999999999998, 0.59999999999999998, 0.59999999999999998), parent=self) xOff = 0.20000000000000001 wordwrap = 15 if self.descText: self.desc = DirectLabel(parent=self, state=DGG.DISABLED, relief=None, text=self.descText, text_align=TextNode.ALeft, text_scale=0.029999999999999999, text_fg=PiratesGuiGlobals.TextFG1, text_shadow=PiratesGuiGlobals.TextShadow, text_wordwrap=wordwrap, textMayChange=1, pos=(xOff + 0.01, 0, 0.055)) yOff = 0.095000000000000001 self.title = DirectLabel(parent=self, state=DGG.DISABLED, relief=None, text=self.item, text_align=TextNode.ALeft, text_scale=0.070000000000000007, text_fg=PiratesGuiGlobals.TextFG1, text_shadow=PiratesGuiGlobals.TextShadow, textMayChange=1, pos=(xOff, 0, yOff)) if self.wantFrame: self.createListFrame() def _destroyIface(self): if self.icon: self.icon.removeNode() self.icon = None if self.title: self.title.removeNode() self.title = None if self.desc: self.desc.removeNode() self.desc = None def _handleItemChange(self): self._destroyIface() self._createIface() def setSelected(self, selected): self.selected = selected return None if selected: print 'selected' self.createListFrame() else: self.clearListFrame() def createListFrame(self): self.clearListFrame() self.activityListBorderFrame = BorderFrame( parent=self, pos=(0.375, 0, 0.082000000000000003), scale=(0.75, 1, 0.16500000000000001), borderScale=0.20000000000000001) self.activityListBorderFrame.setBackgroundVisible(False) self.activityListBorderFrame.setColorScale(0.40000000000000002, 0.40000000000000002, 0.40000000000000002, 1) def clearListFrame(self): if self.activityListBorderFrame: self.activityListBorderFrame.removeNode() self.activityListBorderFrame = None def mouseEnter(self, event): if self.wantFrame == False: self.createListFrame() if self.activityListBorderFrame: self.activityListBorderFrame.setColorScale(1, 1, 1, 1) self.activityListBorderFrame['borderScale'] = 0.25 def mouseLeave(self, event): if self.wantFrame and self.activityListBorderFrame: self.activityListBorderFrame.setColorScale(0.40000000000000002, 0.40000000000000002, 0.40000000000000002, 1) self.activityListBorderFrame['borderScale'] = 0.20000000000000001 else: self.clearListFrame()
class LookoutListItem(ButtonListItem.ButtonListItem): def __init__(self, itemInfo, imageTexCardName, itemHeight, itemWidth, parent = None, parentList = None, textScale = None, txtColor = None, wantFrame = False, **kw): ButtonListItem.ButtonListItem.__init__(self, itemInfo, itemHeight, itemWidth, parent, parentList, textScale, txtColor, **kw) self.initialiseoptions(LookoutListItem) lookoutUI = loader.loadModel(imageTexCardName) iconImage = itemInfo.get('Icon') self.imageRef = None if iconImage: self.imageRef = lookoutUI.find('**/' + iconImage) self.descText = itemInfo.get('Desc') self.title = None self.desc = None self.icon = None self.activityListBorderFrame = None self.wantFrame = wantFrame self.bind(DGG.ENTER, self.mouseEnter) self.bind(DGG.EXIT, self.mouseLeave) def _createIface(self): xOff = 0.02 wordwrap = 20 yOff = 0.065000000000000002 if self.imageRef: self.icon = OnscreenImage(image = self.imageRef, pos = (0.10000000000000001, 0, 0.082000000000000003), scale = (0.59999999999999998, 0.59999999999999998, 0.59999999999999998), parent = self) xOff = 0.20000000000000001 wordwrap = 15 if self.descText: self.desc = DirectLabel(parent = self, state = DGG.DISABLED, relief = None, text = self.descText, text_align = TextNode.ALeft, text_scale = 0.029999999999999999, text_fg = PiratesGuiGlobals.TextFG1, text_shadow = PiratesGuiGlobals.TextShadow, text_wordwrap = wordwrap, textMayChange = 1, pos = (xOff + 0.01, 0, 0.055)) yOff = 0.095000000000000001 self.title = DirectLabel(parent = self, state = DGG.DISABLED, relief = None, text = self.item, text_align = TextNode.ALeft, text_scale = 0.070000000000000007, text_fg = PiratesGuiGlobals.TextFG1, text_shadow = PiratesGuiGlobals.TextShadow, textMayChange = 1, pos = (xOff, 0, yOff)) if self.wantFrame: self.createListFrame() def _destroyIface(self): if self.icon: self.icon.removeNode() self.icon = None if self.title: self.title.removeNode() self.title = None if self.desc: self.desc.removeNode() self.desc = None def _handleItemChange(self): self._destroyIface() self._createIface() def setSelected(self, selected): self.selected = selected return None if selected: print 'selected' self.createListFrame() else: self.clearListFrame() def createListFrame(self): self.clearListFrame() self.activityListBorderFrame = BorderFrame(parent = self, pos = (0.375, 0, 0.082000000000000003), scale = (0.75, 1, 0.16500000000000001), borderScale = 0.20000000000000001) self.activityListBorderFrame.setBackgroundVisible(False) self.activityListBorderFrame.setColorScale(0.40000000000000002, 0.40000000000000002, 0.40000000000000002, 1) def clearListFrame(self): if self.activityListBorderFrame: self.activityListBorderFrame.removeNode() self.activityListBorderFrame = None def mouseEnter(self, event): if self.wantFrame == False: self.createListFrame() if self.activityListBorderFrame: self.activityListBorderFrame.setColorScale(1, 1, 1, 1) self.activityListBorderFrame['borderScale'] = 0.25 def mouseLeave(self, event): if self.wantFrame and self.activityListBorderFrame: self.activityListBorderFrame.setColorScale(0.40000000000000002, 0.40000000000000002, 0.40000000000000002, 1) self.activityListBorderFrame['borderScale'] = 0.20000000000000001 else: self.clearListFrame()