submitButton.py (7122B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\industry\submitButton.py 2 import math 3 from carbonui import uiconst 4 from carbonui.primitives.sprite import Sprite 5 from carbonui.util.color import Color 6 from eve.client.script.ui.control.buttons import OPACITY_LABEL_IDLE 7 from carbonui.control.button import Button 8 from eve.client.script.ui.control.eveLabel import Label 9 from eve.client.script.ui.shared.industry import industryUIConst 10 from eve.client.script.ui.shared.industry.views.errorFrame import ErrorFrame 11 from eve.client.script.ui.shared.industry.views.industryTooltips import SubmitButtonTooltipPanel 12 import industry 13 import trinity 14 import uthread 15 from eveexceptions import UserError 16 from localization import GetByLabel 17 from carbonui.uicore import uicore 18 19 class PrimaryButton(Button): 20 21 def ApplyAttributes(self, attributes): 22 Button.ApplyAttributes(self, attributes) 23 self.tooltipErrors = None 24 self.isStopPending = False 25 self.isArrowsAnimating = False 26 self.func = self.ClickFunc 27 self._incoming_label = None 28 29 def GetTranslation(self): 30 return self.width / 120.0 / 6.0 31 32 def GetColor(self): 33 if self.IsErrorPresent() or self.isStopPending: 34 return industryUIConst.COLOR_RED 35 else: 36 return Color.GRAY2 37 38 def IsErrorPresent(self): 39 return False 40 41 def AnimateArrows(self): 42 self.busy = True 43 44 def StopAnimateArrows(self): 45 self.busy = False 46 47 def HideArrows(self): 48 self.StopAnimateArrows() 49 50 def UpdateState(self): 51 self.UpdateLabel() 52 self.UpdateArrowsByState() 53 self.UpdateBlinkByState() 54 self.UpdateIsEnabledByState() 55 56 def UpdateBlinkByState(self): 57 if self.IsBlinking(): 58 self.Blink(time=3000) 59 else: 60 self.Blink(False) 61 62 def IsBlinking(self): 63 return False 64 65 def UpdateIsEnabledByState(self): 66 pass 67 68 def UpdateArrowsByState(self): 69 if self.IsErrorPresent(): 70 self.Disable() 71 else: 72 self.Enable() 73 74 def IsActive(self): 75 return True 76 77 def UpdateLabel(self): 78 self.label = self.GetText() 79 80 def GetText(self): 81 return GetByLabel('UI/Industry/Start') 82 83 def SetLabelAnimated(self, text): 84 uthread.new(self._SetLabelAnimated, text) 85 86 def _SetLabelAnimated(self, text): 87 self._incoming_label = text 88 uicore.animations.FadeOut(self.sr.label, duration=0.15, sleep=True) 89 self.SetLabel(self._incoming_label) 90 uicore.animations.FadeIn(self.sr.label, duration=0.3) 91 92 def LoadTooltipPanel(self, tooltipPanel, *args): 93 pass 94 95 def ClickFunc(self, *args): 96 pass 97 98 def OnMouseEnter(self, *args): 99 Button.OnMouseEnter(self, *args) 100 101 102 class SubmitButton(PrimaryButton): 103 104 def ApplyAttributes(self, attributes): 105 PrimaryButton.ApplyAttributes(self, attributes) 106 self.jobData = attributes.jobData 107 108 def OnNewJobData(self, jobData): 109 self.oldJobData = self.jobData 110 self.jobData = jobData 111 self.isStopPending = False 112 if self.jobData: 113 self.jobData.on_updated.connect(self.OnJobUpdated) 114 self.jobData.on_errors.connect(self.OnJobUpdated) 115 self.UpdateState() 116 117 def OnJobUpdated(self, *args): 118 self.UpdateState() 119 120 def GetColor(self): 121 if not self.jobData or self.jobData.status == industry.STATUS_DELIVERED: 122 return Color.GRAY2 123 if self.jobData.errors or self.isStopPending: 124 return industryUIConst.COLOR_RED 125 color = industryUIConst.GetJobColor(self.jobData) 126 if self.jobData and self.jobData.status == industry.STATUS_UNSUBMITTED: 127 color = Color(*color).SetAlpha(0.5).GetRGBA() 128 return color 129 130 def IsErrorPresent(self): 131 return self.jobData.errors 132 133 def UpdateState(self): 134 self.UpdateLabel() 135 if not self.jobData: 136 return 137 self.UpdateArrowsByState() 138 self.UpdateBlinkByState() 139 self.UpdateIsEnabledByState() 140 141 def UpdateBlinkByState(self): 142 if self.jobData.status == industry.STATUS_READY: 143 self.Blink(time=3000) 144 else: 145 self.Blink(False) 146 147 def UpdateIsEnabledByState(self): 148 if self.jobData and self.IsErrorPresent(): 149 self.Disable() 150 else: 151 self.Enable() 152 153 def IsBlinking(self): 154 return self.jobData.status == industry.STATUS_READY 155 156 def UpdateArrowsByState(self): 157 if self.jobData.status == industry.STATUS_INSTALLED: 158 if not self.oldJobData or self.oldJobData.status != industry.STATUS_INSTALLED: 159 self.AnimateArrows() 160 elif self.jobData.status == industry.STATUS_DELIVERED: 161 self.HideArrows() 162 else: 163 self.StopAnimateArrows() 164 165 def GetText(self): 166 if not self.jobData or self.jobData.status == industry.STATUS_UNSUBMITTED: 167 return GetByLabel('UI/Industry/Start') 168 if self.jobData.status in (industry.STATUS_INSTALLED, industry.STATUS_PAUSED): 169 if self.isStopPending: 170 return GetByLabel('UI/Common/Confirm') 171 else: 172 return GetByLabel('UI/Industry/Stop') 173 elif self.jobData.status == industry.STATUS_READY: 174 return GetByLabel('UI/Industry/Deliver') 175 176 def ClickFunc(self, *args): 177 if self.jobData.IsInstalled(): 178 if self.jobData.status == industry.STATUS_READY: 179 sm.GetService('industrySvc').CompleteJob(self.jobData.jobID, self.jobData.solarSystemID) 180 sm.GetService('audio').SendUIEvent('ind_jobDelivered') 181 elif self.isStopPending: 182 try: 183 sm.GetService('industrySvc').CancelJob(self.jobData.jobID, self.jobData.solarSystemID) 184 finally: 185 self.isStopPending = False 186 self.UpdateState() 187 188 else: 189 self.isStopPending = True 190 self.UpdateState() 191 else: 192 try: 193 self.Disable() 194 if not self.IsErrorPresent(): 195 self.AnimateArrows() 196 sm.GetService('industrySvc').InstallJob(self.jobData) 197 sm.GetService('audio').SendUIEvent('ind_jobStarted') 198 except UserError as exception: 199 if getattr(exception, 'msg', None) == 'IndustryValidationError': 200 self.tooltipErrors = exception.args[1]['errors'] 201 uicore.uilib.tooltipHandler.RefreshTooltipForOwner(self) 202 raise 203 finally: 204 self.Enable() 205 self.StopAnimateArrows() 206 207 def LoadTooltipPanel(self, tooltipPanel, *args): 208 if self.tooltipErrors is not None: 209 errors = self.tooltipErrors 210 self.tooltipErrors = None 211 else: 212 errors = self.jobData.errors 213 SubmitButtonTooltipPanel(status=self.jobData.status, errors=errors, tooltipPanel=tooltipPanel)