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

statefulButton.py (3103B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\control\statefulButton.py
      2 from carbonui.control.button import Button
      3 from eve.client.script.ui.const import buttonConst
      4 from signals.signalUtil import ChangeSignalConnect
      5 
      6 class StatefulButton(Button):
      7     default_iconSize = 24
      8     default_name = 'StatefulButton'
      9 
     10     def ApplyAttributes(self, attributes):
     11         self.controller = attributes.get('controller', None)
     12         self.UpdateVisibility = attributes.get('UpdateVisibility', None)
     13         super(StatefulButton, self).ApplyAttributes(attributes)
     14         if self.controller:
     15             self.ChangeSignalConnect()
     16             self.UpdateState()
     17 
     18     def ChangeSignalConnect(self, connect = True):
     19         if not self.controller:
     20             return
     21         signalAndCallback = [(self.controller.onNewState, self.UpdateState), (self.controller.onSetBusy, self.SetBusy)]
     22         ChangeSignalConnect(signalAndCallback, connect)
     23 
     24     def UpdateState(self, state = None):
     25         if not self.controller:
     26             return
     27         buttonState = self.controller.GetButtonState() if not state else state
     28         if not buttonState:
     29             return
     30         if buttonState == buttonConst.STATE_NONE:
     31             self.Hide()
     32             return
     33         self.Show()
     34         if self.UpdateVisibility:
     35             self.UpdateVisibility()
     36         if buttonState in buttonConst.BUTTON_DISABLED_STATES or not self.controller.IsButtonEnabled():
     37             self.Disable()
     38             self.SetHint(self.controller.GetDisabledHint())
     39         else:
     40             self.Enable()
     41             self.SetHint(None)
     42         if buttonState in buttonConst.ACTIVE_BUTTON_STATES:
     43             self.SetBusy(buttonState)
     44         else:
     45             self.SetActive()
     46             self.texturePath = self.controller.GetButtonTexturePath()
     47         self.SetFunc(self.controller.GetButtonFunction())
     48         self.SetLabel(self.controller.GetButtonLabel())
     49 
     50     def OnClick(self, *args):
     51         super(StatefulButton, self).OnClick(*args)
     52         self.UpdateState()
     53 
     54     def SetController(self, controller):
     55         if self.controller == controller:
     56             return
     57         self.controller = controller
     58         self.ChangeSignalConnect()
     59         self.UpdateState()
     60 
     61     def Disable(self):
     62         if self.controller.buttonState == buttonConst.STATE_NONE:
     63             return
     64         super(StatefulButton, self).Disable()
     65 
     66     def Enable(self):
     67         if self.controller.buttonState == buttonConst.STATE_NONE:
     68             return
     69         super(StatefulButton, self).Enable()
     70 
     71     def SetBusy(self, buttonState):
     72         if self.busy:
     73             return
     74         if buttonState != buttonConst.STATE_UNDOCKING:
     75             self.Disable()
     76         self.texturePath = None
     77         self.busy = True
     78 
     79     def SetActive(self):
     80         if not self.busy:
     81             return
     82         self.Enable()
     83         self.busy = False
     84         self.texturePath = self.controller.GetButtonTexturePath()
     85 
     86     def Close(self):
     87         self.ChangeSignalConnect(connect=False)
     88         super(StatefulButton, self).Close()