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

sidePanelButtons.py (10111B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\fittingScreen\sidePanelButtons.py
      2 import math
      3 import signals
      4 import trinity
      5 from carbonui.primitives.container import Container
      6 from carbonui.primitives.gridcontainer import GridContainer
      7 from carbonui.primitives.sprite import Sprite
      8 from carbonui.primitives.transform import Transform
      9 from eve.client.script.ui.control.glowSprite import GlowSprite
     10 from eve.client.script.ui.control.themeColored import FrameThemeColored
     11 from eve.client.script.ui.util.uiComponents import Component, ButtonEffect
     12 import carbonui.const as uiconst
     13 from signals.signalUtil import ChangeSignalConnect
     14 from carbonui.uicore import uicore
     15 OPACITY_MOUSE_DOWN = 3.0
     16 OPACITY_IDLE = 0.5
     17 
     18 @Component(ButtonEffect(opacityIdle=OPACITY_IDLE, opacityHover=2.0, opacityMouseDown=OPACITY_IDLE, bgElementFunc=lambda parent, _: parent.hilite, audioOnEntry=uiconst.SOUND_BUTTON_HOVER, audioOnClick=uiconst.SOUND_BUTTON_CLICK))
     19 
     20 class SidePanelButton(Container):
     21     default_state = uiconst.UI_NORMAL
     22     normalOpacity = 1.0
     23     disabledOpacity = 0.2
     24     hiliteTexture = 'res:/UI/Texture/Shared/sideButton_Over.png'
     25     selectedTexture = 'res:/UI/Texture/Shared/sideButton_Down.png'
     26     normalFrameTexture = 'res:/UI/Texture/Shared/sideButton_Up.png'
     27 
     28     def ApplyAttributes(self, attributes):
     29         super(SidePanelButton, self).ApplyAttributes(attributes)
     30         self.controller = attributes.controller
     31         self._isEnabled = True
     32         self.isOnRightOfContent = attributes.isOnRightOfContent
     33         self.onClick = attributes.onClick
     34         self.isSelected = False
     35         self.configName = attributes.configName
     36         self.iconSize = attributes.iconSize or 40
     37         self.tabText = attributes.tabText
     38         texturePath = attributes.texturePath
     39         frameRotation = self.GetRotations()
     40         self.icon = Sprite(parent=self, align=uiconst.CENTER, state=uiconst.UI_DISABLED, width=self.iconSize, height=self.iconSize, texturePath=texturePath, spriteEffect=trinity.TR2_SFX_COLOROVERLAY)
     41         frameCont = Transform(name='frameCont', parent=self, align=uiconst.TOALL, rotation=frameRotation)
     42         self.selectedFrame = FrameThemeColored(name='selectedFrame', parent=frameCont, state=uiconst.UI_DISABLED, texturePath=self.selectedTexture, colorType=uiconst.COLORTYPE_UIHILIGHT, opacity=1.0)
     43         self.selectedFrame.display = False
     44         self.hilite = FrameThemeColored(name='hilite', parent=frameCont, state=uiconst.UI_DISABLED, texturePath=self.hiliteTexture, colorType=uiconst.COLORTYPE_UIHILIGHT)
     45         frame = FrameThemeColored(parent=frameCont, state=uiconst.UI_DISABLED, texturePath=self.normalFrameTexture, colorType=uiconst.COLORTYPE_UIBASECONTRAST)
     46         self.SetSelectedBtnState(self.isSelected, animate=False)
     47         self.ChangeSignalConnection()
     48 
     49     def ChangeSignalConnection(self, connect = True):
     50         signalAndCallback = [(self.controller.on_selected_changed, self.OnSelectedChanged), (self.controller.on_btn_enabled, self.OnEnableBtn), (self.controller.on_btn_disabled, self.OnDisableBtn)]
     51         ChangeSignalConnect(signalAndCallback, connect)
     52 
     53     def GetRotations(self):
     54         if self.isOnRightOfContent:
     55             frameRotation = 0
     56         else:
     57             frameRotation = math.pi
     58         return frameRotation
     59 
     60     def OnClick(self, *args):
     61         if self._isEnabled:
     62             self.controller.OnBtnClicked(self.configName)
     63 
     64     def OnMouseDown(self, *args):
     65         if self._isEnabled:
     66             uicore.animations.FadeTo(self.hilite, self.hilite.opacity, OPACITY_MOUSE_DOWN, duration=0.1)
     67 
     68     def OnSelectedChanged(self, selectedBtnConfig):
     69         isSelected = selectedBtnConfig == self.configName
     70         self.SetSelectedBtnState(isSelected)
     71 
     72     def SetSelectedBtnState(self, isSelected, animate = True):
     73         self.isSelected = isSelected
     74         if self.isSelected:
     75             self.selectedFrame.display = True
     76         else:
     77             self.selectedFrame.display = False
     78             self.hilite.StopAnimations()
     79             self.hilite.opacity = OPACITY_IDLE
     80         if isSelected and animate:
     81             uicore.animations.MorphScalar(self.selectedFrame, 'opacity', 0, 1, duration=0.7, curveType=uiconst.ANIM_OVERSHOT)
     82 
     83     def OnEnableBtn(self, btnConfigName):
     84         if btnConfigName == self.configName:
     85             self.Enable()
     86 
     87     def Enable(self, *args):
     88         self.SetEnabled()
     89         self.SetOpacity(self.normalOpacity)
     90 
     91     def OnDisableBtn(self, btnConfigName):
     92         if btnConfigName == self.configName:
     93             self.Disable()
     94 
     95     def Disable(self, *args):
     96         self.SetDisabled()
     97         self.SetOpacity(self.disabledOpacity)
     98 
     99     def SetEnabled(self):
    100         self._isEnabled = True
    101 
    102     def SetDisabled(self):
    103         self._isEnabled = False
    104 
    105     def LoadTooltipPanel(self, tooltipPanel, *args):
    106         tooltipPanel.LoadGeneric1ColumnTemplate()
    107         tooltipPanel.AddLabelLarge(text=self.tabText)
    108 
    109 
    110 class SidePanelTabGroup(GridContainer):
    111     default_btnWidth = 45
    112     default_btnHeight = 40
    113     default_iconSize = 40
    114     default_height = 100
    115     default_width = default_btnWidth
    116     default_lines = 2
    117     default_columns = 1
    118     default_isOnRightOfContent = True
    119     default_isToggleBtn = True
    120 
    121     def ApplyAttributes(self, attributes):
    122         GridContainer.ApplyAttributes(self, attributes)
    123         self.isOnRightOfContent = attributes.get('isOnRightOfContent', self.default_isOnRightOfContent)
    124         isToggleBtn = attributes.get('isToggleBtn', self.default_isToggleBtn)
    125         selectedTab = attributes.selectedTab
    126         self.btnsDict = {}
    127         self.func = attributes.func
    128         settingName = attributes.settingName
    129         tabBtnData = attributes.tabBtnData
    130         self.btnWidth = attributes.get('btnWidth', self.default_btnWidth)
    131         self.btnHeight = attributes.get('btnHeight', self.default_btnHeight)
    132         self.iconSize = attributes.get('iconSize', self.default_iconSize)
    133         if isToggleBtn:
    134             self.controller = ToggleTabBtnController(onClickFunc=self.func, settingName=settingName)
    135         else:
    136             self.controller = TabBtnController(onClickFunc=self.func, settingName=settingName)
    137         self.AddBtns(tabBtnData, selectedTab)
    138 
    139     def AddBtns(self, btnData, selectedTab):
    140         self.Flush()
    141         self.btnsDict.clear()
    142         padTopBottom = 2
    143         for eachData in btnData:
    144             tabText, configName, texturePath, uniqueUiName = eachData
    145             btn = SidePanelButton(parent=self, name=configName, configName=configName, tabText=tabText, align=uiconst.TOALL, opacity=1.0, isOnRightOfContent=self.isOnRightOfContent, padTop=padTopBottom, padBottom=padTopBottom, controller=self.controller, iconSize=self.iconSize, texturePath=texturePath, uniqueUiName=uniqueUiName)
    146             self.btnsDict[configName] = btn
    147 
    148         self.controller.SetAsSelected(selectedTab)
    149         numBtns = len(self.btnsDict)
    150         self.height = numBtns * (self.btnHeight + 2 * padTopBottom)
    151         self.lines = numBtns
    152 
    153     def SetSelectedBtn(self, configName):
    154         self.controller.SetAsSelected(configName)
    155 
    156     def GetButton(self, configName):
    157         return self.btnsDict.get(configName, None)
    158 
    159     def GetButtons(self):
    160         return self.btnsDict
    161 
    162     def Enable(self):
    163         if self.controller:
    164             self.controller.Enable()
    165 
    166     def Disable(self):
    167         if self.controller:
    168             self.controller.Disable()
    169 
    170     def EnableBtns(self, btnNames):
    171         for eachBtnName in btnNames:
    172             self.controller.EnableBtn(eachBtnName)
    173 
    174     def DisableBtns(self, btnNames):
    175         selectedBtn = self.controller.GetSelectedBtn()
    176         disablingSelected = selectedBtn in btnNames
    177         for eachBtnName in btnNames:
    178             self.controller.DisableBtn(eachBtnName)
    179 
    180         if disablingSelected:
    181             for eachBtnName in self.btnsDict.iterkeys():
    182                 if eachBtnName not in btnNames:
    183                     self.controller.OnBtnClicked(eachBtnName)
    184                     return
    185 
    186     def Close(self):
    187         self.controller = None
    188         Container.Close(self)
    189 
    190 
    191 class SidePanelTabGroupSmall(SidePanelTabGroup):
    192     default_btnWidth = 36
    193     default_btnHeight = 32
    194     default_iconSize = 32
    195 
    196 
    197 class TabBtnController(object):
    198 
    199     def __init__(self, onClickFunc, settingName):
    200         self.settingName = settingName
    201         self.btnSelected = self.GetSettingValue()
    202         self.onClickFunc = onClickFunc
    203         self.on_selected_changed = signals.Signal(signalName='on_selected_changed')
    204         self.on_btn_disabled = signals.Signal(signalName='on_btn_disabled')
    205         self.on_btn_enabled = signals.Signal(signalName='on_btn_enabled')
    206         self._isEnabled = True
    207 
    208     def OnBtnClicked(self, btnConfigName):
    209         if not self._isEnabled:
    210             return
    211         newSelected = btnConfigName
    212         self.ChangeSettingValue(newSelected)
    213         self.onClickFunc(newSelected)
    214         self.SetAsSelected(newSelected)
    215 
    216     def SetAsSelected(self, btnConfigName):
    217         self.btnSelected = btnConfigName
    218         self.on_selected_changed(btnConfigName)
    219 
    220     def EnableBtn(self, btnConfigName):
    221         self.on_btn_enabled(btnConfigName)
    222 
    223     def DisableBtn(self, btnConfigName):
    224         self.on_btn_disabled(btnConfigName)
    225 
    226     def GetSelectedBtn(self):
    227         return self.btnSelected
    228 
    229     def ResetSelected(self):
    230         self.btnSelected = ''
    231 
    232     def GetSettingValue(self):
    233         return settings.user.ui.Get(self.settingName, '')
    234 
    235     def ChangeSettingValue(self, newValue):
    236         settings.user.ui.Set(self.settingName, newValue)
    237 
    238     def Enable(self):
    239         self._isEnabled = True
    240 
    241     def Disable(self):
    242         self._isEnabled = False
    243 
    244 
    245 class ToggleTabBtnController(TabBtnController):
    246 
    247     def OnBtnClicked(self, btnConfigName):
    248         if not self._isEnabled:
    249             return
    250         if self.btnSelected == btnConfigName:
    251             newSelected = ''
    252         else:
    253             newSelected = btnConfigName
    254         self.ChangeSettingValue(newSelected)
    255         self.onClickFunc(newSelected)
    256         self.SetAsSelected(newSelected)