NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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)