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

statefulButtonController.py (3203B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\control\statefulButtonController.py
      2 from eve.client.script.ui.const import buttonConst
      3 from localization import GetByLabel
      4 from signals.signal import Signal
      5 
      6 class StatefulButtonController(object):
      7     __notifyevents__ = ['OnDestinationSet',
      8      'OnClientEvent_WarpStarted',
      9      'OnClientEvent_WarpFinished',
     10      'OnWarpActive',
     11      'OnBallparkCall',
     12      'OnDockingProgressChanged',
     13      'OnClientEvent_UndockingAborted']
     14 
     15     def __init__(self, *args, **kwargs):
     16         self.onNewState = Signal(signalName='onNewState')
     17         self.onSetBusy = Signal(signalName='onSetBusy')
     18         self.buttonState = buttonConst.STATE_NONE
     19         super(StatefulButtonController, self).__init__(*args, **kwargs)
     20         sm.RegisterNotify(self)
     21 
     22     def OnDestinationSet(self, *args, **kwargs):
     23         self.SendNewStateSignal()
     24 
     25     def OnClientEvent_WarpStarted(self, *args):
     26         if self.buttonState not in (buttonConst.STATE_WARPTO, buttonConst.STATE_DOCK):
     27             return
     28         self.SendNewStateSignal()
     29         self.onSetBusy(buttonConst.STATE_PREPARING_WARP)
     30 
     31     def OnWarpActive(self, *args):
     32         if self.buttonState != buttonConst.STATE_PREPARING_WARP:
     33             return
     34         self.SendNewStateSignal()
     35 
     36     def OnClientEvent_WarpFinished(self, *args):
     37         if self.buttonState != buttonConst.STATE_WARPING:
     38             return
     39         self.SendNewStateSignal()
     40 
     41     def SendNewStateSignal(self):
     42         self.onNewState(self.GetButtonState())
     43 
     44     def OnBallparkCall(self, functionName, args):
     45         relevantShipEvents = ('FollowBall', 'Stop', 'GotoDirection', 'GotoPoint', 'Orbit')
     46         isBallMyShip = args[0] == session.shipid
     47         if isBallMyShip and functionName in relevantShipEvents:
     48             self.SendNewStateSignal()
     49 
     50     def OnDockingProgressChanged(self, progressFloat):
     51         if self.buttonState not in (buttonConst.STATE_UNDOCK, buttonConst.STATE_UNDOCKING):
     52             return
     53         self.SendNewStateSignal()
     54 
     55     def OnClientEvent_UndockingAborted(self, itemID):
     56         self.SendNewStateSignal()
     57 
     58     def IsButtonEnabled(self):
     59         return True
     60 
     61     def GetButtonTexturePath(self):
     62         return buttonConst.BUTTON_TEXTURE_PATH_BY_STATE.get(self.buttonState, None)
     63 
     64     def GetButtonLabel(self):
     65         buttonLabelPath = buttonConst.BUTTON_LABEL_PATH_BY_STATE.get(self.buttonState, None)
     66         if not buttonLabelPath:
     67             return
     68         return GetByLabel(buttonLabelPath)
     69 
     70     def GetButtonFunction(self):
     71         if self.buttonState in (buttonConst.STATE_UNDOCK, buttonConst.STATE_UNDOCKING):
     72             return lambda x: sm.GetService('undocking').UndockBtnClicked()
     73 
     74     def GetButtonState(self):
     75         self.buttonState = self._GetButtonState()
     76         return self.buttonState
     77 
     78     def _GetButtonState(self):
     79         return buttonConst.STATE_NONE
     80 
     81     def GetWarpingState(self):
     82         michelle = sm.GetService('michelle')
     83         if michelle.IsPreparingWarp():
     84             return buttonConst.STATE_PREPARING_WARP
     85         if michelle.InWarp():
     86             return buttonConst.STATE_WARPING
     87 
     88     def GetDisabledHint(self):
     89         pass