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

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