multiTrainingOverlay.py (7978B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\monetization\multiTrainingOverlay.py 2 from carbonui import AxisAlignment, uiconst 3 from carbonui.primitives.container import Container 4 from carbonui.primitives.containerAutoSize import ContainerAutoSize 5 from carbonui.primitives.flowcontainer import FlowContainer 6 from carbonui.primitives.frame import Frame 7 from carbonui.primitives.sprite import Sprite 8 from carbonui.uianimations import animations 9 from carbonui.util.color import Color 10 from carbonui.control.button import Button 11 from carbonui.control.checkbox import Checkbox 12 from eve.client.script.ui.control.eveIcon import Icon 13 from eve.client.script.ui.control.eveLabel import EveCaptionLarge, EveLabelLargeBold, EveLabelMedium 14 from eve.client.script.ui.control.infoIcon import InfoIcon 15 from eve.client.script.ui.shared.monetization.events import LogMultiPilotTrainingOpenAurOffer, LogMultiPilotTrainingOpenIskOffer 16 from eve.client.script.ui.shared.vgs.button import BuyButtonAur, BuyButtonIsk 17 from eve.common.script.util.eveFormat import RoundISK 18 import evetypes 19 from inventorycommon.const import typeMultiTrainingToken 20 from inventorycommon.typeHelpers import GetAveragePrice 21 import localization 22 from player_messaging.client import get_supressed_result, set_suppress_result 23 24 class MultiTrainingOverlay(Container): 25 SUPPRESS_KEY = 'MultiplePilotTraining' 26 CONTENT_LEFT = 140 27 CHARACTERS_LEFT = -180 28 default_align = uiconst.TOALL 29 default_clipChildren = True 30 default_state = uiconst.UI_HIDDEN 31 32 def ApplyAttributes(self, attributes): 33 super(MultiTrainingOverlay, self).ApplyAttributes(attributes) 34 self.Layout() 35 36 def Layout(self): 37 self.compactMode = False 38 Frame(bgParent=self, texturePath='res:/UI/Texture/classes/Monetization/vignette.png', cornerSize=150) 39 self.characters = Sprite(parent=self, align=uiconst.CENTER, state=uiconst.UI_DISABLED, left=self.CHARACTERS_LEFT, top=10, texturePath='res:/UI/Texture/classes/Monetization/characters.png', width=299, height=355) 40 self.content = ContainerAutoSize(parent=self, align=uiconst.CENTER, left=self.CONTENT_LEFT, width=340) 41 EveCaptionLarge(parent=self.content, align=uiconst.TOTOP, text=localization.GetByLabel('UI/SkillQueue/MultiTrainingOverlay/MultiplePilotTraining')) 42 EveLabelMedium(parent=self.content, align=uiconst.TOTOP, top=4, text=localization.GetByLabel('UI/SkillQueue/MultiTrainingOverlay/MultiTrainingMessageTop')) 43 itemCont = ContainerAutoSize(parent=self.content, align=uiconst.TOTOP, alignMode=uiconst.TOTOP, top=12) 44 itemIconCont = ContainerAutoSize(parent=itemCont, align=uiconst.TOLEFT, padding=(0, 8, 0, 8)) 45 Icon(parent=itemIconCont, align=uiconst.TOPLEFT, state=uiconst.UI_DISABLED, size=64, typeID=typeMultiTrainingToken) 46 Sprite(parent=itemIconCont, align=uiconst.TOPLEFT, state=uiconst.UI_DISABLED, texturePath='res:/UI/Texture/classes/InvItem/bgNormal.png', width=64, height=64) 47 EveLabelLargeBold(parent=itemCont, align=uiconst.TOTOP, padding=(8, 8, 24, 0), text=evetypes.GetName(typeMultiTrainingToken)) 48 InfoIcon(parent=itemCont, align=uiconst.TOPRIGHT, top=8, typeID=typeMultiTrainingToken) 49 self.estimatePriceLabel = EveLabelMedium(parent=itemCont, align=uiconst.TOTOP, padding=(8, 0, 8, 6), color=Color.GRAY5) 50 buyButtonCont = FlowContainer(parent=itemCont, align=uiconst.TOTOP, padding=(8, 0, 8, 8), contentSpacing=(8, 0)) 51 MultiTrainingBuyButtonIsk(parent=buyButtonCont, align=uiconst.NOALIGN, typeID=typeMultiTrainingToken) 52 MultiTrainingBuyButtonAur(parent=buyButtonCont, align=uiconst.NOALIGN, types=[typeMultiTrainingToken]) 53 EveLabelMedium(parent=self.content, align=uiconst.TOTOP, top=12, text=localization.GetByLabel('UI/SkillQueue/MultiTrainingOverlay/MultiTrainingMessageBottom')) 54 dismissCont = FlowContainer(parent=self.content, align=uiconst.TOTOP, padding=(8, 24, 8, 0), contentAlignment=AxisAlignment.CENTER, contentSpacing=(8, 4)) 55 Button(parent=dismissCont, align=uiconst.NOALIGN, label=localization.GetByLabel('UI/SkillQueue/MultiTrainingOverlay/Dismiss'), func=lambda *args: self.Dismiss()) 56 self.suppressCheckbox = Checkbox(parent=dismissCont, align=uiconst.NOALIGN, width=200, text=localization.GetByLabel('UI/Common/SuppressionShowMessage'), checked=self.suppressed, callback=self.OnSuppressChanged) 57 58 def OnSuppressChanged(self, checkbox): 59 self.suppressed = self.suppressCheckbox.GetValue() 60 61 @classmethod 62 def IsSuppressed(cls): 63 return get_supressed_result(cls.SUPPRESS_KEY, False) 64 65 @property 66 def suppressed(self): 67 return self.IsSuppressed() 68 69 @suppressed.setter 70 def suppressed(self, suppressed): 71 if suppressed: 72 set_suppress_result(self.SUPPRESS_KEY, suppressed) 73 else: 74 set_suppress_result(self.SUPPRESS_KEY, None) 75 sm.GetService('settings').SaveSettings() 76 77 def ShouldDisplay(self): 78 if self.suppressed: 79 return False 80 if sm.GetService('skillqueue').SkillInTraining() is not None: 81 return False 82 return sm.GetService('skillqueue').IsAllCharacterTrainingSlotsUsed() 83 84 def Display(self): 85 self.Load() 86 self.Enable() 87 self.AnimShow() 88 89 def Load(self): 90 self.UpdateEstimatedPrice() 91 self.suppressCheckbox.SetValue(self.suppressed) 92 93 def UpdateEstimatedPrice(self): 94 try: 95 tokenAveragePrice = GetAveragePrice(typeMultiTrainingToken) 96 except KeyError: 97 tokenAveragePrice = None 98 99 if not tokenAveragePrice: 100 text = localization.GetByLabel('UI/SkillQueue/MultiTrainingOverlay/EstimatedPriceUnknown') 101 else: 102 amount = RoundISK(tokenAveragePrice) 103 text = localization.GetByLabel('UI/SkillQueue/MultiTrainingOverlay/EstimatedPrice', amount=amount) 104 self.estimatePriceLabel.SetText(text) 105 106 def Dismiss(self): 107 self.Disable() 108 self.AnimHide() 109 110 def AnimShow(self): 111 self.Show() 112 animations.FadeTo(self, duration=0.4) 113 if not self.compactMode: 114 animations.FadeTo(self.characters, timeOffset=0.3) 115 animations.FadeTo(self.content, timeOffset=0.3) 116 117 def AnimHide(self): 118 animations.FadeOut(self, duration=0.4) 119 120 def EnterCompactMode(self): 121 if self.compactMode: 122 return 123 self.compactMode = True 124 animations.FadeOut(self.characters, duration=0.2) 125 animations.MorphScalar(self.characters, 'left', startVal=self.characters.left, endVal=self.CHARACTERS_LEFT - 60, duration=0.3) 126 animations.MorphScalar(self.content, 'left', startVal=self.content.left, endVal=0, duration=0.3) 127 128 def ExitCompactMode(self): 129 if not self.compactMode: 130 return 131 self.compactMode = False 132 animations.FadeIn(self.characters, duration=0.2) 133 animations.MorphScalar(self.characters, 'left', startVal=self.characters.left, endVal=self.CHARACTERS_LEFT, duration=0.3) 134 animations.MorphScalar(self.content, 'left', startVal=self.content.left, endVal=self.CONTENT_LEFT, duration=0.3) 135 136 def UpdateAlignment(self, budgetLeft = 0, budgetTop = 0, budgetWidth = 0, budgetHeight = 0, updateChildrenOnly = False): 137 if budgetWidth < 640: 138 self.EnterCompactMode() 139 else: 140 self.ExitCompactMode() 141 return super(MultiTrainingOverlay, self).UpdateAlignment(budgetLeft, budgetTop, budgetWidth, budgetHeight, updateChildrenOnly) 142 143 144 class MultiTrainingBuyButtonIsk(BuyButtonIsk): 145 146 def OpenMarketWindow(self): 147 super(MultiTrainingBuyButtonIsk, self).OpenMarketWindow() 148 LogMultiPilotTrainingOpenIskOffer() 149 150 151 class MultiTrainingBuyButtonAur(BuyButtonAur): 152 153 def OpenOfferWindow(self): 154 super(MultiTrainingBuyButtonAur, self).OpenOfferWindow() 155 LogMultiPilotTrainingOpenAurOffer()