toggleButtonGroup.py (6494B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\control\toggleButtonGroup.py 2 from carbon.client.script.environment.AudioUtil import PlaySound 3 from carbonui import uiconst, Density 4 from carbonui.primitives.container import Container 5 from eve.client.script.ui.control.toggleButtonGroupButton import ToggleButtonGroupButton 6 7 class ToggleButtonGroup(Container): 8 default_align = uiconst.TOPLEFT 9 default_height = 32 10 default_selectSound = uiconst.SOUND_BUTTON_CLICK 11 default_btnClass = ToggleButtonGroupButton 12 default_isOptional = False 13 _button_size_dirty = False 14 15 def __init__(self, autoHeight = None, btnClass = None, callback = None, density = Density.NORMAL, height = None, isOptional = None, selectSound = None, **kwargs): 16 if btnClass is None: 17 btnClass = self.default_btnClass 18 if isOptional is None: 19 isOptional = self.default_isOptional 20 if selectSound is None: 21 selectSound = self.default_selectSound 22 if autoHeight is None: 23 autoHeight = btnClass.AUTO_HEIGHT_ENABLED_BY_DEFAULT 24 if height is None: 25 height = self.default_height 26 self._auto_height = autoHeight 27 self._button_class = btnClass 28 self._callback = callback 29 self._density = density 30 self._on_select_sound = selectSound 31 self._optional = isOptional 32 self._set_height = height 33 self._buttons_by_id = {} 34 self.buttons = [] 35 super(ToggleButtonGroup, self).__init__(height=height, **kwargs) 36 37 @property 38 def density(self): 39 return self._density 40 41 @density.setter 42 def density(self, value): 43 if self._density != value: 44 self._density = value 45 for button in self.buttons: 46 button.density = self._density 47 48 @property 49 def buttonsByID(self): 50 return dict(self._buttons_by_id) 51 52 def AddButton(self, btnID, label = '', panel = None, iconPath = None, iconSize = None, hint = None, isDisabled = False, colorSelected = None, btnClass = None, getMenu = None, **kw): 53 if btnClass is None: 54 btnClass = self._button_class 55 btn = btnClass(name=('Button_%s' % btnID), parent=self, controller=self, btnID=btnID, panel=panel, label=label, iconPath=iconPath, iconSize=iconSize, hint=hint, isDisabled=isDisabled, colorSelected=colorSelected, density=self._density, **kw) 56 self.buttons.append(btn) 57 self._buttons_by_id[btnID] = btn 58 self._button_size_dirty = True 59 if getMenu: 60 btn.GetMenu = lambda *args, **kwargs: getMenu(btnID) 61 for button in self.buttons: 62 button.OnButtonAdded() 63 64 return btn 65 66 def GetPanel(self, btnID): 67 return self._buttons_by_id[btnID].panel 68 69 def ClearButtons(self): 70 for btn in self.buttons: 71 btn.Close() 72 73 self.buttons = [] 74 self._buttons_by_id = {} 75 76 def UpdateAlignment(self, *args, **kwargs): 77 if self._button_size_dirty: 78 self._UpdateButtonWidth() 79 self._button_size_dirty = False 80 if self._auto_height: 81 minHeight = 0 82 for button in self.buttons: 83 try: 84 height = button.GetAutoHeight() 85 except AttributeError: 86 pass 87 else: 88 if height is not None: 89 minHeight = max(minHeight, height) 90 91 self.height = minHeight 92 return super(ToggleButtonGroup, self).UpdateAlignment(*args, **kwargs) 93 94 def _UpdateButtonWidth(self): 95 numButtons = len(self.buttons) 96 for i, button in enumerate(self.buttons): 97 isLast = i == numButtons - 1 98 button.align = uiconst.TOALL if isLast else uiconst.TOLEFT_PROP 99 button.width = 0 if isLast else 1.0 / numButtons 100 101 def DeselectAll(self): 102 oldBtnID = self.GetValue() 103 for btn in self.buttons: 104 btn.SetDeselected() 105 if btn.panel: 106 btn.panel.Hide() 107 108 if self._callback is not None: 109 self._callback(None, oldBtnID) 110 111 def GetSelected(self): 112 for btn in self.buttons: 113 if btn.IsSelected(): 114 return btn.btnID 115 116 def GetValue(self): 117 return self.GetSelected() 118 119 def SelectByID(self, btnID, animate = False): 120 for btn in self.buttons: 121 if btn.btnID == btnID: 122 self.Select(btn, animate) 123 124 def SetSelectedByID(self, btnID, animate = True): 125 for btn in self.buttons: 126 if btn.btnID == btnID: 127 self.SetSelected(btn.btnID, animate=animate) 128 129 def SelectFirst(self): 130 for btn in self.buttons: 131 if not btn.isDisabled: 132 self.Select(btn) 133 return 134 135 def SetSelected(self, btnID, animate = True): 136 self._DeselectCurrentlySelected(animate) 137 if btnID is not None: 138 self._SelectNewButton(animate, btnID) 139 140 def _SelectNewButton(self, animate, btnID): 141 btn = self.GetButton(btnID) 142 btn.SetSelected(animate=animate) 143 if btn.panel: 144 btn.panel.Show() 145 146 def GetButton(self, btnID): 147 return self._buttons_by_id[btnID] 148 149 def _DeselectCurrentlySelected(self, animate): 150 btnID = self.GetSelected() 151 if btnID is None: 152 return 153 btn = self.GetButton(btnID) 154 if btn: 155 btn.SetDeselected(animate=animate) 156 panel = btn.panel 157 if panel: 158 panel.Hide() 159 160 def Select(self, selectedBtn, animate = True, playSound = False, *args): 161 if selectedBtn.isDisabled: 162 return 163 if playSound: 164 PlaySound(self._on_select_sound) 165 oldBtnID = self.GetSelected() 166 self.SetSelected(selectedBtn.btnID, animate=animate) 167 if self._callback is not None: 168 self._callback(selectedBtn.btnID, oldBtnID) 169 170 def EnableButton(self, btnID): 171 for button in self.buttons: 172 if button.btnID == btnID: 173 button.label.opacity = 1 174 button.isDisabled = False 175 176 def DisableButton(self, btnID): 177 for button in self.buttons: 178 if button.btnID == btnID: 179 button.label.opacity = 0.4 180 button.isDisabled = True 181 182 def IsOptional(self): 183 return self._optional 184 185 def Flush(self): 186 self.ClearButtons()