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)