fleetBroadcastCont.py (11419B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\fleet\fleetBroadcastCont.py 2 import math 3 import evefleet 4 import eveicon 5 import localization 6 from carbonui import const as uiconst, TextColor 7 from carbonui.button.menu import MenuButtonIcon 8 from carbonui.control.buttonIcon import ButtonIcon 9 from carbonui.control.contextMenu.menuData import MenuData 10 from carbonui.primitives.container import Container 11 from carbonui.primitives.containerAutoSize import ContainerAutoSize 12 from carbonui.primitives.sprite import Sprite 13 from carbonui.uianimations import animations 14 from carbonui.uicore import uicore 15 from carbonui.window.segment.underlay import WindowSegmentUnderlay 16 from clientsettings.setting import CharSettingBool 17 from eve.client.script.ui.control import eveIcon, eveLabel 18 from eve.client.script.ui.shared.fleet import fleetBroadcastConst, fleetbroadcastexports 19 from eve.client.script.ui.shared.fleet.fleetBroadcastConst import broadcastButtonIDs 20 from eve.client.script.ui.shared.fleet.fleetbroadcastexports import fleetBroadcastScopeSetting 21 from eve.client.script.ui.shared.fleet.fleetConst import FLEET_BROADCASTS_VISIBLE_SETTING 22 from eve.client.script.ui.shared.pointerTool import pointerToolConst as pConst 23 from eve.common.script.sys.idCheckers import IsUniverseCelestial 24 ICONS_BY_SCOPE = {evefleet.BROADCAST_DOWN: 'res:/UI/Texture/Icons/73_16_28.png', 25 evefleet.BROADCAST_UP: 'res:/UI/Texture/Icons/73_16_27.png', 26 evefleet.BROADCAST_ALL: 'res:/UI/Texture/Icons/73_16_29.png'} 27 uniqueUINameByBroadcastID = {evefleet.BROADCAST_HEAL_ARMOR: pConst.UNIQUE_NAME_BROADCAST_ARMOR, 28 evefleet.BROADCAST_HEAL_SHIELD: pConst.UNIQUE_NAME_BROADCAST_SHIELD} 29 ICONSIZE_SMALL = 16 30 ICONSIZE_LARGE = 32 31 THRESHOLD_WIDTH = 330 32 33 class FleetBroadcastCont(ContainerAutoSize): 34 __notifyevents__ = ['OnFleetBroadcast_Local', 'OnBroadcastScopeChange'] 35 36 def ApplyAttributes(self, attributes): 37 super(FleetBroadcastCont, self).ApplyAttributes(attributes) 38 sm.RegisterNotify(self) 39 innerPadding = attributes.innerPadding 40 self.lastBroadcast = None 41 self.iconSize = None 42 WindowSegmentUnderlay(name='bgFill', bgParent=self) 43 self.mainCont = ContainerAutoSize(name='mainCont', parent=self, align=uiconst.TOTOP) 44 self.lastBroadcastCont = Container(name='lastBroadcastCont', parent=self.mainCont, align=uiconst.TOTOP, state=uiconst.UI_NORMAL, height=18) 45 self.buttonCont = Container(name='broadcastButtonCont', parent=self.mainCont, align=uiconst.TOTOP, padTop=4, uniqueUiName=pConst.UNIQUE_NAME_FLEET_BROADCAST_ICONS) 46 self.toggleButton = ButtonIcon(name='broadcastExpanderIcon', parent=self.lastBroadcastCont, align=uiconst.CENTERRIGHT, pos=(0, 0, 16, 16), iconSize=7, texturePath='res:/UI/Texture/classes/Neocom/arrowUp.png', func=self.ToggleBroadcasts, uniqueUiName=pConst.UNIQUE_NAME_FLEET_SHOW_BROADCASTS) 47 self.ConstructLastBroadcastBanner() 48 self.UpdateBroadcastButtonState() 49 self.SetInnerPadding(innerPadding) 50 51 def ReconstructBroadcastButtons(self): 52 self.buttonCont.Flush() 53 self.buttonCont.height = self.iconSize 54 settingBtn = MenuButtonIcon(parent=self.buttonCont, align=uiconst.CENTERRIGHT, width=24, height=24, iconSize=16, texturePath=eveicon.settings, get_menu_func=self._GetBroadcastBtnSettings, hint=localization.GetByLabel('UI/Common/Settings')) 55 self.scopeSprite = Sprite(parent=self.buttonCont, align=uiconst.CENTERRIGHT, pos=(28, 0, 16, 16), uniqueUiName=pConst.UNIQUE_NAME_FLEET_BROADCAST_SCOPE, func=self.CycleBroadcastScope) 56 self.UpdateScopeButton() 57 for i, broadcastID in enumerate(broadcastButtonIDs): 58 iconSetting = CharSettingBool('fleet_broadcast_icon_settings_%s' % broadcastID, True) 59 isVisbile = iconSetting.get() 60 if isVisbile: 61 self.ConstructBroadcastButton(broadcastID) 62 63 def _GetBroadcastBtnSettings(self): 64 menuData = MenuData() 65 menuData.AddLabel(localization.GetByLabel('UI/Fleet/FleetBroadcast/BroadcastButtonsToDisplay')) 66 for i, broadcastID in enumerate(broadcastButtonIDs): 67 iconSetting = CharSettingBool('fleet_broadcast_icon_settings_%s' % broadcastID, True) 68 iconSetting.on_change.connect(self.OnBroadcastIconChanged) 69 menuData.AddCheckbox(text=fleetbroadcastexports.GetBroadcastName(broadcastID), setting=iconSetting) 70 71 menuData.AddSeparator() 72 menuData.AddLabel(localization.GetByLabel('UI/Fleet/FleetBroadcast/WhoReceivesBroadcasts')) 73 for scopeID in [evefleet.BROADCAST_ALL, evefleet.BROADCAST_DOWN, evefleet.BROADCAST_UP]: 74 menuData.AddRadioButton(fleetbroadcastexports.GetBroadcastScopeName(scopeID), scopeID, fleetBroadcastScopeSetting) 75 76 return menuData 77 78 def OnBroadcastIconChanged(self, *args): 79 w, h = self.GetAbsoluteSize() 80 if w: 81 self.iconSize = self._GetButtonIconSize(w) 82 self.ReconstructBroadcastButtons() 83 84 def _GetButtonIconSize(self, width): 85 numIcons = 0 86 for broadcastID in broadcastButtonIDs: 87 iconSetting = CharSettingBool('fleet_broadcast_icon_settings_%s' % broadcastID, True) 88 if iconSetting.get(): 89 numIcons += 1 90 91 totalLargeWidth = numIcons * (ICONSIZE_LARGE + 8) 92 totalSpaceNeeded = totalLargeWidth + 50 93 if numIcons and width > totalSpaceNeeded: 94 return ICONSIZE_LARGE 95 else: 96 return ICONSIZE_SMALL 97 98 def ConstructBroadcastButton(self, broadcastID): 99 BroadcastButton(parent=self.buttonCont, align=uiconst.TOLEFT, padRight=4 if self.iconSize == ICONSIZE_LARGE else 8, width=self.iconSize, iconSize=self.iconSize, height=0, hint=fleetbroadcastexports.GetBroadcastName(broadcastID), broadcastID=broadcastID, texturePath=self._GetBroadcastIcon(broadcastID), func=lambda *args: sm.GetService('fleet').SendBroadcast(broadcastID), uniqueUiName=uniqueUINameByBroadcastID.get(broadcastID, None)) 100 101 def _GetBroadcastIcon(self, broadcastID): 102 if self.iconSize == ICONSIZE_SMALL: 103 return fleetBroadcastConst.iconsByBroadcastType[broadcastID] 104 else: 105 return fleetBroadcastConst.iconsLargeByBroadcastType[broadcastID] 106 107 def ToggleBroadcasts(self, *args): 108 FLEET_BROADCASTS_VISIBLE_SETTING.toggle() 109 self.UpdateBroadcastButtonState() 110 111 def UpdateBroadcastButtonState(self): 112 if FLEET_BROADCASTS_VISIBLE_SETTING.is_enabled(): 113 self.buttonCont.Hide() 114 self.toggleButton.SetRotation(0) 115 else: 116 self.buttonCont.Show() 117 self.toggleButton.SetRotation(math.pi) 118 119 def SetInnerPadding(self, padding): 120 self.mainCont.padding = padding 121 122 def ConstructLastBroadcastBanner(self): 123 lastBroadcastBanner = Container(name='lastBroadcastBanner', parent=self.lastBroadcastCont, state=uiconst.UI_NORMAL) 124 lastBroadcastBanner.GetMenu = self.GetLastBroadcastMenu 125 lastBroadcastBanner.OnClick = self.OnLastBroadcastClick 126 lastBroadcastBanner.GetHint = self.GetLastBroadcastHint 127 self.bannerIcon = eveIcon.Sprite(name='bannerIcon', parent=lastBroadcastBanner, align=uiconst.CENTERLEFT, pos=(4, 0, 16, 16), state=uiconst.UI_DISABLED, texturePath='res:/UI/Texture/Icons/44_32_29.png', color=TextColor.NORMAL) 128 self.bannerLabel = eveLabel.EveLabelMedium(name='bannerLabel', text=localization.GetByLabel('UI/Fleet/FleetBroadcast/NoBroadcasts'), parent=lastBroadcastBanner, align=uiconst.CENTERLEFT, left=26, autoFadeSides=32) 129 130 def GetLastBroadcastHint(self): 131 if not self.lastBroadcast: 132 return None 133 member = sm.GetService('fleet').GetMemberInfo(int(self.lastBroadcast.charID)) 134 if member: 135 rank_name = fleetbroadcastexports.GetRankName(member) 136 else: 137 rank_name = localization.GetByLabel('UI/Fleet/Ranks/FleetMember') 138 scope_name = fleetbroadcastexports.GetBroadcastScopeName(self.lastBroadcast.scope, self.lastBroadcast.where) 139 return localization.GetByLabel('UI/Fleet/FleetBroadcast/BroadcastNotificationHint', eventLabel=self.lastBroadcast.broadcastLabel, time=self.lastBroadcast.time, charID=self.lastBroadcast.charID, range=scope_name, role=rank_name) 140 141 def CycleBroadcastScope(self, *args): 142 sm.GetService('fleet').CycleBroadcastScope() 143 144 def GetLastBroadcastMenu(self): 145 if not self.lastBroadcast: 146 return 147 m = [] 148 func = fleetbroadcastexports.GetMenuFunc(self.lastBroadcast.name) 149 if func: 150 args = (self.lastBroadcast.charID, self.lastBroadcast.solarSystemID, self.lastBroadcast.itemID) 151 if getattr(self.lastBroadcast, 'typeID', None): 152 args += (self.lastBroadcast.typeID,) 153 m = func(*args) 154 m += [None] 155 m += fleetbroadcastexports.GetMenu_Member(self.lastBroadcast.charID) 156 m += [None] 157 m += fleetbroadcastexports.GetMenu_Ignore(self.lastBroadcast.name) 158 return m 159 160 def UpdateScopeButton(self): 161 scope = sm.GetService('fleet').broadcastScope 162 self.scopeSprite.hint = localization.GetByLabel('UI/Fleet/FleetBroadcast/BroadcastScopeHint', scope=fleetbroadcastexports.GetBroadcastScopeName(scope)) 163 texturePath = ICONS_BY_SCOPE.get(scope, 'res:/UI/Texture/Icons/73_16_28.png') 164 self.scopeSprite.SetTexturePath(texturePath) 165 166 def OnLastBroadcastClick(self): 167 if not uicore.uilib.Key(uiconst.VK_CONTROL) or self.lastBroadcast.itemID == session.shipid or session.shipid is None or self.lastBroadcast.itemID is None or IsUniverseCelestial(self.lastBroadcast.itemID): 168 return 169 itemID = self.lastBroadcast.itemID 170 if sm.GetService('target').IsInTargetingRange(itemID): 171 sm.GetService('target').TryLockTarget(itemID) 172 173 def OnFleetBroadcast_Local(self, broadcast): 174 self.lastBroadcast = broadcast 175 self.bannerLabel.text = self.lastBroadcast.broadcastLabel 176 texturePath = fleetBroadcastConst.iconsByBroadcastType.get(self.lastBroadcast.name, 'res:/UI/Texture/Icons/44_32_29.png') 177 self.bannerIcon.SetTexturePath(texturePath) 178 animations.FadeTo(self.bannerIcon, 1.0, 0.0, duration=0.7, loops=3, curveType=uiconst.ANIM_WAVE) 179 180 def OnBroadcastScopeChange(self): 181 self.UpdateScopeButton() 182 183 def _OnSizeChange_NoBlock(self, width, height): 184 oldIconSize = self.iconSize 185 self.iconSize = self._GetButtonIconSize(width) 186 if self.iconSize != oldIconSize: 187 self.ReconstructBroadcastButtons() 188 189 190 class BroadcastButton(ButtonIcon): 191 192 def ApplyAttributes(self, attributes): 193 super(BroadcastButton, self).ApplyAttributes(attributes) 194 self.broadcastID = attributes.broadcastID 195 196 def LoadTooltipPanel(self, tooltipPanel, *args): 197 if not self.broadcastID: 198 return 199 cmdName = 'CmdFleetBroadcast_%s' % self.broadcastID 200 cmd = uicore.cmd.commandMap.GetCommandByName(cmdName) 201 shortcutStr = cmd.GetShortcutAsString() 202 tooltipPanel.LoadGeneric3ColumnTemplate() 203 tooltipPanel.AddLabelMedium(text=self.hint, cellPadding=(0, 0, 7, 0), colSpan=tooltipPanel.columns - 1, width=200, autoFitToText=True) 204 if shortcutStr: 205 tooltipPanel.AddShortcutCell(shortcutStr) 206 else: 207 tooltipPanel.AddCell()