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()