radioButton.py (5473B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\carbonui\control\radioButton.py 2 from carbonui import uiconst 3 from carbonui.control.checkbox import Checkbox 4 from carbonui.primitives.container import Container 5 from carbonui.primitives.sprite import Sprite 6 from carbonui.uianimations import animations 7 from carbonui.util.various_unsorted import GetWindowAbove 8 from eve.client.script.ui import eveThemeColor 9 from eve.client.script.ui.control.tooltips import TooltipPanel 10 11 class RadioButton(Checkbox): 12 default_retval = None 13 default_groupname = None 14 15 def ApplyAttributes(self, attributes): 16 self.returnValue = attributes.get('retval', self.default_retval) 17 self._radioGroupName = attributes.get('groupname', self.default_groupname) 18 super(RadioButton, self).ApplyAttributes(attributes) 19 20 @property 21 def groupName(self): 22 return self._radioGroupName 23 24 def GetGroup(self): 25 if self._radioGroupName is not None: 26 return self._radioGroupName 27 return self.setting 28 29 def SetGroup(self, groupName): 30 force = groupName != self._radioGroupName 31 self._radioGroupName = groupName 32 if force: 33 self.ConstructCheckboxCont() 34 self.SetChecked(self._checked, 0) 35 36 def GetReturnValue(self): 37 return self.returnValue 38 39 def SetReturnValue(self, returnValue): 40 self.returnValue = returnValue 41 42 def _ConstructCheckmark(self): 43 self.checkMark = Sprite(name='self_ok', parent=self.checkboxCont, align=uiconst.CENTER, state=uiconst.UI_HIDDEN, pos=(0, 0, 16, 16), texturePath='res:/UI/Texture/classes/checkbox/radio_selected.png', color=eveThemeColor.THEME_FOCUS) 44 self.underlay = RadioButtonUnderlay(parent=self.checkboxCont, enabled=self._enabled) 45 46 def GetSelectedFromGroup(self): 47 ancestor = GetWindowAbove(self) or self.parent 48 for each in ancestor.FindByInstance(RadioButton): 49 if each.GetValue() and each.GetGroup() == self.GetGroup(): 50 return each 51 52 def GetGroupValue(self): 53 btn = self.GetSelectedFromGroup() 54 if btn: 55 return btn.GetReturnValue() 56 57 def ToggleState(self): 58 otherCbInGroup = self.FindOtherCbInGroup() 59 for eachCb in otherCbInGroup: 60 eachCb.SetChecked(0, 0) 61 62 if not self.destroyed: 63 self.SetChecked(1) 64 65 def FindOtherCbInGroup(self): 66 otherCbInGroup = [] 67 par = GetWindowAbove(self) 68 if par is None: 69 tooltipParent = self.parent 70 from carbonui.control.contextMenu.contextMenu import ContextMenu 71 while tooltipParent: 72 if isinstance(tooltipParent, (TooltipPanel, ContextMenu)): 73 par = tooltipParent 74 break 75 tooltipParent = tooltipParent.parent 76 77 if par is None: 78 par = self.parent 79 for each in par.FindByInstance(RadioButton): 80 if each != self and each.GetGroup() == self.GetGroup(): 81 otherCbInGroup.append(each) 82 83 return otherCbInGroup 84 85 def UpdateSettings(self): 86 if not self._checked: 87 return 88 if self.setting: 89 self.setting.set(self.returnValue) 90 elif self.settingsPath: 91 self._ApplySettingOld(self.returnValue) 92 93 def _GetSettingValue(self): 94 return self.setting.get() 95 96 def _GetIsCheckedSettingValue(self): 97 return self.returnValue == self._GetSettingValue() 98 99 def _on_setting_changed(self, value): 100 if value == self.returnValue: 101 self.SetChecked(True, report=False) 102 103 104 class RadioButtonUnderlay(Container): 105 UNDERLAY_OPACITY_NORMAL = 1.0 106 UNDERLAY_OPACITY_DISABLED = 0.5 107 108 def __init__(self, parent = None, bgParent = None, align = uiconst.TOALL, padding = 0, enabled = True): 109 self._hover = None 110 self._highlight = None 111 self._underlay = None 112 super(RadioButtonUnderlay, self).__init__(parent=parent, bgParent=bgParent, align=align, padding=padding) 113 self._hover = Sprite(parent=self, align=uiconst.TOALL, state=uiconst.UI_DISABLED, padding=-5, texturePath='res:/UI/Texture/classes/checkbox/radio_underlay_hover.png', color=eveThemeColor.THEME_FOCUS, opacity=0.0) 114 self._highlight = Sprite(parent=self, align=uiconst.TOALL, state=uiconst.UI_DISABLED, texturePath='res:/UI/Texture/classes/checkbox/radio_highlight.png', opacity=0.0) 115 self._underlay = Sprite(parent=self, align=uiconst.TOALL, state=uiconst.UI_DISABLED, texturePath='res:/UI/Texture/classes/checkbox/radio_underlay.png', opacity=self.UNDERLAY_OPACITY_NORMAL if enabled else self.UNDERLAY_OPACITY_DISABLED) 116 117 def Enable(self): 118 self._underlay.opacity = self.UNDERLAY_OPACITY_NORMAL 119 120 def Disable(self): 121 self._underlay.opacity = self.UNDERLAY_OPACITY_DISABLED 122 123 def Select(self, animate = True): 124 pass 125 126 def Deselect(self, animate = True): 127 pass 128 129 def OnMouseEnter(self, *args): 130 if self._hover is not None: 131 animations.FadeIn(self._hover, duration=0.1) 132 133 def OnMouseExit(self, *args): 134 if self._hover is not None: 135 animations.FadeOut(self._hover, duration=0.3) 136 137 def OnMouseDown(self, *args): 138 animations.FadeIn(self._highlight, duration=uiconst.TIME_ENTRY) 139 140 def OnMouseUp(self, *args): 141 animations.FadeOut(self._highlight, duration=uiconst.TIME_MOUSEUP)