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

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)