OutputCont.py (9653B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\industry\views\OutputCont.py 2 from math import pi 3 import blue 4 from carbon.client.script.environment.AudioUtil import PlaySound 5 from carbonui import uiconst 6 from carbonui.button.const import HEIGHT_NORMAL 7 from carbonui.control.combo import Combo 8 from carbonui.primitives.container import Container 9 from carbonui.primitives.stretchspritehorizontal import StretchSpriteHorizontal 10 from eve.client.script.ui.shared.industry.views.errorFrame import ErrorFrame 11 from eve.client.script.ui.shared.industry.views.industryTooltips import CostContainerTooltipPanel, TimeContainerTooltipPanel 12 from eve.client.script.ui.shared.industry.views.outcomeContainer import OutcomeContainer 13 from eve.client.script.ui.shared.neocom.wallet import walletUtil 14 from localization import GetByLabel 15 from eve.client.script.ui.control.eveLabel import EveLabelLarge 16 from eve.client.script.ui.shared.industry.views.industryCaptionLabel import IndustryCaptionLabel 17 from eve.client.script.ui.shared.industry.views.outputFramedContainers import FacilityContainer, InventoryOutputContainer, InventoryInputContainer 18 from eve.common.script.util.eveFormat import FmtISK 19 import uthread 20 from carbonui.uicore import uicore 21 from uihighlighting.uniqueNameConst import UNIQUE_NAME_INDUSTRY_OUTPUT, UNIQUE_NAME_INDUSTRY_INPUT 22 23 class OutputCont(Container): 24 25 def ApplyAttributes(self, attributes): 26 Container.ApplyAttributes(self, attributes) 27 self.jobData = attributes.jobData 28 self.ConstructTop() 29 self.ConstructBottom() 30 self.ConstructCenter() 31 self.ConstructCostAndTimeLabels() 32 self.bg = StretchSpriteHorizontal(parent=self, state=uiconst.UI_DISABLED, align=uiconst.TORIGHT_PROP, width=0.5, height=402, leftEdgeSize=400, rightEdgeSize=10, texturePath='res:/UI/Texture/Classes/Industry/Input/bg1Groups.png', rotation=pi) 33 self.UpdateState() 34 self.AnimEntry() 35 36 def ConstructCostAndTimeLabels(self): 37 self.labelCont = Container(name='labelCont', parent=self, align=uiconst.BOTTOMRIGHT, pos=(13, 38 7, 39 304, 40 HEIGHT_NORMAL), opacity=0.0) 41 self.timeCont = TimeContainer(parent=self.labelCont, align=uiconst.TOLEFT_PROP, width=0.45, jobData=self.jobData) 42 self.costCont = CostContainer(parent=self.labelCont, align=uiconst.TOLEFT_PROP, width=0.55, padLeft=2) 43 44 def ConstructTop(self): 45 self.topCont = Container(name='topCont', parent=self, align=uiconst.TOPRIGHT, pos=(13, 7, 377, 87), opacity=0.0) 46 self.facilityCont = FacilityContainer(parent=self.topCont, align=uiconst.TOPRIGHT) 47 self.invInputCont = InventoryInputContainer(parent=self.topCont, align=uiconst.BOTTOMRIGHT, opacity=0.0, uniqueUiName=UNIQUE_NAME_INDUSTRY_INPUT) 48 49 def ConstructBottom(self): 50 self.bottomCont = Container(name='bottomCont', parent=self, align=uiconst.BOTTOMRIGHT, pos=(0, 39, 377, 60), opacity=0.0) 51 self.invOutputCont = InventoryOutputContainer(parent=self.bottomCont, align=uiconst.CENTERRIGHT, left=13, uniqueUiName=UNIQUE_NAME_INDUSTRY_OUTPUT) 52 53 def ConstructCenter(self): 54 self.outcomeCont = OutcomeContainer(name='outcomeCont', parent=self, align=uiconst.CENTERRIGHT, opacity=0.0) 55 56 def OnRunsChanged(self): 57 self.UpdateState() 58 self.outcomeCont.OnRunsChanged() 59 60 def OnNewJobData(self, jobData): 61 self.jobData = jobData 62 self.facilityCont.OnNewJobData(jobData) 63 self.invOutputCont.OnNewJobData(jobData) 64 self.invInputCont.OnNewJobData(jobData) 65 self.outcomeCont.OnNewJobData(jobData) 66 self.timeCont.OnNewJobData(jobData) 67 self.costCont.OnNewJobData(jobData) 68 self.UpdateState() 69 self.AnimEntry() 70 71 def UpdateState(self): 72 self.state = uiconst.UI_DISABLED if self.jobData is None else uiconst.UI_PICKCHILDREN 73 self.costCont.UpdateState() 74 self.timeCont.UpdateState() 75 76 def AnimEntry(self): 77 if self.jobData: 78 toFadeIn = (self.outcomeCont, 79 self.topCont, 80 self.bottomCont, 81 self.invInputCont, 82 self.labelCont) 83 for obj in toFadeIn: 84 uicore.animations.FadeIn(obj) 85 86 uicore.animations.FadeTo(self.bg, 0.0, 1.0, duration=0.6, timeOffset=0.1) 87 else: 88 toFadeOut = (self.outcomeCont, 89 self.topCont, 90 self.bottomCont, 91 self.invInputCont, 92 self.labelCont) 93 for obj in toFadeOut: 94 uicore.animations.FadeOut(obj) 95 96 97 class TimeContainer(Container): 98 default_state = uiconst.UI_NORMAL 99 100 def ApplyAttributes(self, attributes): 101 Container.ApplyAttributes(self, attributes) 102 self.jobData = None 103 self.updateTimeThread = None 104 self.timeCaption = IndustryCaptionLabel(name='timeCaption', parent=self) 105 self.timeLabel = EveLabelLarge(name='timeLabel', parent=self, top=13) 106 self.errorFrame = ErrorFrame(bgParent=self, padding=(-2, -2, 0, -2)) 107 108 def UpdateState(self): 109 if self.updateTimeThread: 110 self.updateTimeThread.kill() 111 self.updateTimeThread = None 112 if not self.jobData: 113 self.timeLabel.text = '' 114 return 115 if self.jobData.IsInstalled(): 116 self.timeCaption.text = GetByLabel('UI/Industry/TimeLeft') 117 self.updateTimeThread = uthread.new(self.UpdateTimeThread) 118 else: 119 self.timeCaption.text = GetByLabel('UI/Industry/JobDuration') 120 self.timeLabel.text = self.jobData.GetJobTimeLeftLabel() 121 122 def UpdateTimeThread(self): 123 while not self.destroyed: 124 self.timeLabel.text = self.jobData.GetJobTimeLeftLabel() 125 blue.synchro.SleepWallclock(200) 126 127 def OnNewJobData(self, jobData): 128 self.jobData = jobData 129 self.UpdateState() 130 131 def LoadTooltipPanel(self, tooltipPanel, *args): 132 TimeContainerTooltipPanel(jobData=self.jobData, tooltipPanel=tooltipPanel) 133 134 def GetTooltipPosition(self): 135 return self.timeCaption.GetAbsolute() 136 137 def OnMouseEnter(self, *args): 138 PlaySound(uiconst.SOUND_BUTTON_HOVER) 139 140 141 WALLET_PERSONAL = 1 142 WALLET_CORP = 2 143 144 class CostContainer(Container): 145 default_state = uiconst.UI_NORMAL 146 default_padLeft = 4 147 148 def ApplyAttributes(self, attributes): 149 Container.ApplyAttributes(self, attributes) 150 self.jobData = None 151 self.costCaption = IndustryCaptionLabel(name='costCaption', parent=self, align=uiconst.TOTOP, text=GetByLabel('UI/Industry/JobCost')) 152 textCont = Container(parent=self) 153 self.walletCombo = Combo(name='walletCombo', parent=textCont, align=uiconst.TOLEFT, state=uiconst.UI_HIDDEN, callback=self.OnWalletCombo, iconOnly=True, width=48, top=1) 154 self.walletCombo.GetHint = self.GetWalletComboHint 155 self.costLabel = EveLabelLarge(name='costLabel', parent=textCont, align=uiconst.TOTOP, padLeft=4) 156 self.errorFrame = ErrorFrame(bgParent=self, padding=(0, -2, 0, -2)) 157 158 def UpdateWalletCombo(self): 159 if not self.jobData or not self.jobData.accounts or len(self.jobData.accounts) <= 1: 160 self.walletCombo.Hide() 161 return 162 self.walletCombo.Show() 163 options = [] 164 for ownerID, divisionID in sorted(self.jobData.accounts): 165 label = self.GetWalletName(ownerID, divisionID) 166 texturePath = self.GetWalletIcon(ownerID) 167 options.append((label, 168 (ownerID, divisionID), 169 None, 170 texturePath)) 171 172 self.walletCombo.LoadOptions(options) 173 if self.jobData: 174 self.walletCombo.SelectItemByValue(self.jobData.account) 175 176 def OnWalletCombo(self, combo, key, value): 177 self.jobData.account = value 178 179 def OnMouseEnter(self, *args): 180 PlaySound(uiconst.SOUND_BUTTON_HOVER) 181 182 def GetWalletName(self, ownerID, divisionID): 183 if ownerID == session.charid: 184 return GetByLabel('UI/Industry/PersonalWallet') 185 else: 186 divisionName = walletUtil.GetDivisionName(divisionID) 187 return GetByLabel('UI/Industry/CorporateWallet', divisionName=divisionName) 188 189 def GetWalletIcon(self, ownerID): 190 if ownerID == session.charid: 191 return 'res:/UI/Texture/Classes/Industry/iconPersonal.png' 192 else: 193 return 'res:/UI/Texture/Classes/Industry/iconCorp.png' 194 195 def GetWalletComboHint(self): 196 ownerID, divisionID = self.jobData.account 197 iskAmount = self.jobData.accounts[ownerID, divisionID] 198 iskAmount = FmtISK(iskAmount) 199 walletName = self.GetWalletName(ownerID, divisionID) 200 return GetByLabel('UI/Industry/WalletSelectionHint', walletName=walletName, iskAmount=iskAmount) 201 202 def OnNewJobData(self, jobData): 203 self.jobData = jobData 204 self.UpdateState() 205 206 def UpdateState(self): 207 if not self.jobData: 208 self.costLabel.text = '' 209 self.walletCombo.Hide() 210 return 211 if self.jobData.facility and self.jobData.activityID in self.jobData.facility.activities: 212 manufacturingCost = self.jobData.total_cost 213 self.costLabel.text = FmtISK(manufacturingCost, showFractionsAlways=False) 214 else: 215 self.costLabel.text = '-' 216 self.UpdateWalletCombo() 217 218 def LoadTooltipPanel(self, tooltipPanel, *args): 219 if self.jobData.facility: 220 CostContainerTooltipPanel(jobData=self.jobData, tooltipPanel=tooltipPanel) 221 222 def GetTooltipPosition(self): 223 return self.costCaption.GetAbsolute()