fleetbroadcast.py (16625B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\fleet\fleetbroadcast.py 2 import eve.client.script.ui.shared.pointerTool.pointerToolConst as pConst 3 import evefleet.client 4 import localization 5 from carbonui import ButtonVariant, Density, uiconst 6 from carbonui.button.const import HEIGHT_COMPACT 7 from carbonui.control.button import Button 8 from carbonui.control.combo import Combo 9 from carbonui.control.window import Window 10 from carbonui.primitives.container import Container 11 from carbonui.primitives.fill import Fill 12 from eve.client.script.ui.control import eveLabel 13 from eve.client.script.ui.control.colorPanel import ColorPanel 14 from eve.client.script.ui.control.entries.checkbox import CheckboxEntry 15 from eve.client.script.ui.control.entries.generic import Generic 16 from eve.client.script.ui.control.entries.util import GetFromClass 17 from eve.client.script.ui.control.eveScroll import Scroll 18 from eve.client.script.ui.shared.fleet import fleetbroadcastexports as fleetbr, fleetBroadcastConst 19 from evefleet import BROADCAST_SHOW_OWN 20 from eve.common.script.sys.idCheckers import IsUniverseCelestial 21 from eveservices.menu import GetMenuService 22 from utillib import KeyVal 23 comboOptions = ((localization.GetByLabel('UI/Common/All'), 'all'), 24 (localization.GetByLabel('UI/Fleet/FleetBroadcast/BroadcastHistory'), 'broadcasthistory'), 25 (localization.GetByLabel('UI/Fleet/FleetBroadcast/MemberHistory'), 'memberhistory'), 26 (localization.GetByLabel('UI/Fleet/FleetBroadcast/LootHistory'), 'loothistory')) 27 28 class BroadcastHistoryPanel(Container): 29 __notifyevents__ = ['OnFleetBroadcast_Local', 30 'OnFleetLootEvent_Local', 31 'OnFleetBroadcastFilterChange', 32 'OnFleetJoin_Local', 33 'OnFleetLeave_Local', 34 'OnFleetMemberChanged_Local'] 35 36 def PostStartup(self): 37 sm.RegisterNotify(self) 38 self.sr.broadcastHistory = [] 39 self.broadcastMenuItems = [] 40 header = self 41 header.baseHeight = header.height 42 self.panelHistory = Container(name='panelHistory', parent=self) 43 historyType = settings.user.ui.Get('fleetHistoryFilter', 'broadcasthistory') 44 topCont = Container(parent=self.panelHistory, align=uiconst.TOTOP, height=HEIGHT_COMPACT) 45 self.combo = Combo(parent=topCont, options=comboOptions, name='filter', select=historyType, callback=self.LoadHistory, width=145, align=uiconst.TOPLEFT, uniqueUiName=pConst.UNIQUE_NAME_FLEET_HISTORY_FILTER, density=Density.COMPACT) 46 self.clearBtn = Button(parent=topCont, label=localization.GetByLabel('UI/Accessories/Calculator/Clear'), func=self.OnClear, align=uiconst.TOPRIGHT, density=Density.COMPACT, variant=ButtonVariant.GHOST) 47 self.scrollHistory = Scroll(name='allHistoryScroll', parent=self.panelHistory, align=uiconst.TOALL, padTop=4) 48 49 def ClearHistory(self, args): 50 fleetSvc = sm.GetService('fleet') 51 if args == 'broadcasthistory': 52 fleetSvc.broadcastHistory = [] 53 elif args == 'loothistory': 54 fleetSvc.lootHistory = [] 55 elif args == 'memberhistory': 56 fleetSvc.memberHistory = [] 57 elif args == 'all': 58 fleetSvc.broadcastHistory = [] 59 fleetSvc.lootHistory = [] 60 fleetSvc.memberHistory = [] 61 self.LoadHistory(self.combo, '', args) 62 63 def LoadPanel(self): 64 if not self.sr.Get('inited', 0): 65 self.PostStartup() 66 setattr(self.sr, 'inited', 1) 67 self.LoadHistory(self.combo, '', self.combo.selectedValue) 68 69 def LoadHistory(self, combo, label, value, *args): 70 sp = self.scrollHistory.GetScrollProportion() 71 self.scrollHistory.multiSelect = 1 72 self.scrollHistory.OnChar = self.OnScrollHistoryChar 73 if value == 'broadcasthistory': 74 scrolllist, hint = self.LoadBroadcastHistory() 75 self.scrollHistory.multiSelect = 0 76 self.scrollHistory.OnChar = self.OnScrollBroadcastChar 77 elif value == 'loothistory': 78 scrolllist, hint = self.LoadLootHistory() 79 elif value == 'memberhistory': 80 scrolllist, hint = self.LoadMemberHistory() 81 else: 82 scrolllist, hint = self.LoadAllHistory() 83 settings.user.ui.Set('fleetHistoryFilter', value) 84 self.scrollHistory.Load(contentList=scrolllist, scrollTo=sp, headers=[], noContentHint=hint) 85 86 def LoadAllHistory(self): 87 allHistory = [] 88 broadcastHistory, hint = self.LoadBroadcastHistory() 89 memberHistory, hint = self.LoadMemberHistory() 90 lootHistory, hint = self.LoadLootHistory() 91 allHistory.extend(broadcastHistory) 92 allHistory.extend(memberHistory) 93 allHistory.extend(lootHistory) 94 allHistory.sort(key=lambda x: x.time, reverse=True) 95 hint = localization.GetByLabel('UI/Fleet/FleetBroadcast/NoEventsYet') 96 return (allHistory, hint) 97 98 def LoadBroadcastHistory(self): 99 scrolllist = [] 100 broadcastHistory = sm.GetService('fleet').GetBroadcastHistory() 101 for kv in broadcastHistory: 102 data = self.GetBroadcastListEntry(kv) 103 data.Set('sort_%s' % localization.GetByLabel('UI/Common/DateWords/Time'), kv.time) 104 data.time = kv.time 105 data.OnClick = self.OnBroadcastClick 106 scrolllist.append(GetFromClass(BroadcastEntry, data)) 107 108 hint = localization.GetByLabel('UI/Fleet/FleetBroadcast/NoEventsYet') 109 return (scrolllist, hint) 110 111 def OnBroadcastClick(self, entry): 112 data = entry.sr.node.data 113 itemID = data.itemID 114 if data.itemID == session.shipid or session.shipid is None or data.itemID is None or IsUniverseCelestial(data.itemID): 115 return 116 GetMenuService().TacticalItemClicked(itemID) 117 118 def LoadLootHistory(self): 119 scrolllist = [] 120 lootHistory = sm.GetService('fleet').GetLootHistory() 121 for kv in lootHistory: 122 label = localization.GetByLabel('UI/Fleet/FleetBroadcast/BroadcastEventLoot', time=kv.time, charID=kv.charID, item=kv.typeID, itemQuantity=kv.quantity) 123 data = KeyVal(charID=kv.charID, label=label, GetMenu=self.GetLootMenu, data=kv) 124 data.Set('sort_%s' % localization.GetByLabel('UI/Common/DateWords/Time'), kv.time) 125 data.time = kv.time 126 scrolllist.append(GetFromClass(Generic, data)) 127 128 hint = localization.GetByLabel('UI/Fleet/FleetBroadcast/NoEventsYet') 129 return (scrolllist, hint) 130 131 def LoadMemberHistory(self): 132 scrolllist = [] 133 memberHistory = sm.GetService('fleet').GetMemberHistory() 134 for kv in memberHistory: 135 label = localization.GetByLabel('UI/Fleet/FleetBroadcast/Event', time=kv.time, eventLabel=kv.event) 136 data = KeyVal(charID=kv.charID, label=label, GetMenu=self.GetMemberMenu, data=kv) 137 data.Set('sort_%s' % localization.GetByLabel('UI/Common/DateWords/Time'), kv.time) 138 data.time = kv.time 139 scrolllist.append(GetFromClass(Generic, data)) 140 141 hint = localization.GetByLabel('UI/Fleet/FleetBroadcast/NoEventsYet') 142 return (scrolllist, hint) 143 144 def OpenSettings(self): 145 BroadcastSettings.Open() 146 147 def OnClear(self, *args): 148 selectedValue = self.combo.selectedValue 149 self.ClearHistory(selectedValue) 150 151 def OnScrollHistoryChar(self, *args): 152 Scroll.OnChar(self, *args) 153 154 def OnScrollBroadcastChar(self, *args): 155 return False 156 157 def GetBroadcastListEntry(self, data): 158 label = localization.GetByLabel('UI/Fleet/FleetBroadcast/Event', time=data.time, eventLabel=data.broadcastLabel) 159 colorcoded = settings.user.ui.Get(fleetBroadcastConst.BROADCAST_COLOR_SETTING % data.name, None) 160 data2 = KeyVal(charID=data.charID, label=label, GetMenu=self.GetBroadcastMenu, data=data, colorcoded=colorcoded) 161 return data2 162 163 def OnFleetLootEvent_Local(self): 164 selectedValue = self.combo.selectedValue 165 if selectedValue in ('loothistory', 'all'): 166 self.LoadHistory(self.combo, '', selectedValue) 167 168 def OnFleetJoin_Local(self, rec): 169 selectedValue = self.combo.selectedValue 170 if selectedValue in ('memberhistory', 'all'): 171 self.LoadHistory(self.combo, '', selectedValue) 172 173 def OnFleetLeave_Local(self, rec): 174 selectedValue = self.combo.selectedValue 175 if selectedValue in ('memberhistory', 'all'): 176 self.LoadHistory(self.combo, '', selectedValue) 177 178 def OnFleetMemberChanged_Local(self, *args): 179 selectedValue = self.combo.selectedValue 180 if selectedValue in ('memberhistory', 'all'): 181 self.LoadHistory(self.combo, '', selectedValue) 182 183 def GetBroadcastMenu(self, entry): 184 m = [] 185 data = entry.sr.node.data 186 func = getattr(fleetbr, 'GetMenu_%s' % data.name, None) 187 if func: 188 args = (data.charID, data.solarSystemID, data.itemID) 189 if getattr(data, 'typeID', None): 190 args += (data.typeID,) 191 m = func(*args) 192 m += [None] 193 m += fleetbr.GetMenu_Member(data.charID) 194 m += [None] 195 m += fleetbr.GetMenu_Ignore(data.name) 196 return m 197 198 def GetLootMenu(self, entry): 199 m = [] 200 data = entry.sr.node.data 201 m += GetMenuService().GetMenuFromItemIDTypeID(None, data.typeID, includeMarketDetails=True) 202 m += [None] 203 m += fleetbr.GetMenu_Member(data.charID) 204 return m 205 206 def GetMemberMenu(self, entry): 207 m = [] 208 data = entry.sr.node.data 209 m += fleetbr.GetMenu_Member(data.charID) 210 return m 211 212 def OnFleetBroadcast_Local(self, broadcast): 213 self.RefreshBroadcastHistory() 214 215 def OnFleetBroadcastFilterChange(self): 216 self.RefreshBroadcastHistory() 217 218 def RefreshBroadcastHistory(self): 219 selectedValue = self.combo.selectedValue 220 if selectedValue in ('broadcasthistory', 'all'): 221 self.LoadHistory(self.combo, '', selectedValue) 222 223 224 def CopyFunctions(class_, locals_): 225 for name, fn in class_.__dict__.iteritems(): 226 if type(fn) is type(CopyFunctions): 227 if name in locals_: 228 raise RuntimeError('What are you trying to do here?') 229 locals_[name] = fn 230 231 232 class BroadcastSettings(Window): 233 __guid__ = 'form.BroadcastSettings' 234 default_windowID = 'broadcastsettings' 235 default_captionLabelPath = 'UI/Fleet/FleetBroadcast/BroadcastSettings' 236 default_width = 480 237 default_height = 380 238 default_minSize = (300, 200) 239 240 def ApplyAttributes(self, attributes): 241 self.shareContainer = None 242 Window.ApplyAttributes(self, attributes) 243 self.sr.main.left = self.sr.main.width = self.sr.main.top = self.sr.main.height = uiconst.defaultPadding 244 eveLabel.EveLabelMedium(text=localization.GetByLabel('UI/Fleet/FleetBroadcast/BroadcastSettingsHelp'), parent=self.sr.main, align=uiconst.TOTOP, padding=(20, 0, 6, 0), state=uiconst.UI_NORMAL) 245 Container(name='push', parent=self.sr.main, align=uiconst.TOTOP, height=6) 246 shareParent = Container(name='shareParent', parent=self.sr.main, align=uiconst.TOBOTTOM, height=36, padTop=4) 247 self.sr.scrollBroadcasts = Scroll(name='scrollBroadcasts', parent=self.sr.main) 248 self.sr.scrollBroadcasts.multiSelect = 0 249 self.LoadFilters() 250 from eve.client.script.ui.control.draggableShareContainer import DraggableShareContainer 251 defaultText = localization.GetByLabel('UI/Fleet/FleetBroadcast/SharedBroadcastSettings', charID=session.charid) 252 currentText = settings.char.ui.Get('sharedBroadcastDragCont_name', '') 253 currentText = currentText.strip() or defaultText 254 self.shareContainer = DraggableShareContainer(parent=shareParent, currentText=currentText, defaultText=defaultText, align=uiconst.BOTTOMRIGHT, configName='sharedBroadcastDragCont', getDragDataFunc=self.OnFilterDragged, hintText=localization.GetByLabel('UI/Fleet/FleetBroadcast/ShareBroadcastSettingsHint'), maxLength=60) 255 256 def OnFilterDragged(self, text, *args): 257 text = text or localization.GetByLabel('UI/Fleet/FleetBroadcast/SharedBroadcastSettings', charID=session.charid) 258 broadcastSettings = self.GetDataForSharing() 259 data = {'broadcastSettings': broadcastSettings} 260 sharedSettingKeyVal = KeyVal(__guid__='fakeentry.BroadcastSharing', data=data, label=text) 261 return [sharedSettingKeyVal] 262 263 def GetDataForSharing(self): 264 nameToFlag = {y:x for x, y in fleetBroadcastConst.flagToName.iteritems()} 265 data = [] 266 for name in fleetBroadcastConst.broadcastNames.iterkeys(): 267 isChecked = bool(settings.user.ui.Get(fleetBroadcastConst.LISTEN_BROADCAST_SETTING % name, True)) 268 colorcoded = settings.user.ui.Get(fleetBroadcastConst.BROADCAST_COLOR_SETTING % name, None) 269 if name == BROADCAST_SHOW_OWN: 270 flag = BROADCAST_SHOW_OWN 271 else: 272 flag = nameToFlag.get(name) 273 data.append((flag, isChecked, colorcoded)) 274 275 return data 276 277 def LoadFilters(self): 278 scrolllist = [] 279 for name, labelName in fleetBroadcastConst.broadcastNames.iteritems(): 280 data = KeyVal() 281 if name == 'Event': 282 rngName = '' 283 else: 284 rng = fleetbr.GetBroadcastWhere(name) 285 rngName = fleetbr.GetBroadcastWhereName(rng) 286 if name == BROADCAST_SHOW_OWN: 287 data.showColorPicker = False 288 checkedDefault = False 289 else: 290 data.showColorPicker = True 291 checkedDefault = True 292 data.hint = '%s:<br>%s' % (localization.GetByLabel('UI/Fleet/FleetBroadcast/RecipientRange'), rngName) 293 data.label = localization.GetByLabel(labelName) 294 data.props = None 295 data.checked = bool(settings.user.ui.Get(fleetBroadcastConst.LISTEN_BROADCAST_SETTING % name, checkedDefault)) 296 data.cfgname = name 297 data.retval = None 298 data.colorcoded = settings.user.ui.Get(fleetBroadcastConst.BROADCAST_COLOR_SETTING % name, None) 299 data.OnChange = self.Filter_OnCheckBoxChange 300 scrolllist.append(GetFromClass(BroadcastSettingsEntry, data)) 301 302 self.sr.scrollBroadcasts.sr.id = 'scrollBroadcasts' 303 self.sr.scrollBroadcasts.Load(contentList=scrolllist) 304 305 def Filter_OnCheckBoxChange(self, cb, *args): 306 sm.GetService('fleet').SetListenBroadcast(cb.GetSettingsKey(), cb.checked) 307 308 def _OnResize(self, *args, **kw): 309 if self.shareContainer is None: 310 return 311 self.shareContainer.SetMaxWidth(self.width - 2 * self.shareContainer.left - 10) 312 313 314 class BroadcastSettingsEntry(CheckboxEntry): 315 colorList = [(1.0, 0.7, 0.0), 316 (1.0, 0.35, 0.0), 317 (0.75, 0.0, 0.0), 318 (0.1, 0.6, 0.1), 319 (0.0, 0.63, 0.57), 320 (0.2, 0.5, 1.0), 321 (0.0, 0.15, 0.6), 322 (0.0, 0.0, 0.0), 323 (0.7, 0.7, 0.7)] 324 325 def Startup(self, *args): 326 CheckboxEntry.Startup(self, *args) 327 self.colorPicker = evefleet.client.FleetColorPickerCont(parent=self, idx=0, callback=self.SetBroadcastTypeColor) 328 329 def Load(self, node): 330 CheckboxEntry.Load(self, node) 331 if node.showColorPicker: 332 self.colorPicker.display = True 333 self.colorPicker.SetCurrentFill(self.sr.node.colorcoded) 334 else: 335 self.colorPicker.display = False 336 337 def GetColorTooltipPointer(self): 338 return uiconst.POINT_LEFT_2 339 340 def GetTooltipDelay(self): 341 return 50 342 343 def SetBroadcastTypeColor(self, color, colorPicker, *args): 344 settings.user.ui.Set(fleetBroadcastConst.BROADCAST_COLOR_SETTING % self.sr.node.cfgname, color) 345 self.sr.node.colorcoded = color 346 sm.ScatterEvent('OnFleetBroadcastFilterChange') 347 348 def _OnResize(self): 349 w, h = self.GetAbsoluteSize() 350 availableWidth = w - self.sr.label.left - self.colorPicker.colorCont.width - 10 351 textwidth = self.sr.label.textwidth 352 if textwidth > availableWidth: 353 fadeEnd = availableWidth 354 self.sr.label.SetRightAlphaFade(fadeEnd, maxFadeWidth=20) 355 else: 356 self.sr.label.SetRightAlphaFade(0, maxFadeWidth=0) 357 358 359 class BroadcastEntry(Generic): 360 361 def Startup(self, *args): 362 Generic.Startup(self, *args) 363 self.colorcodedFill = Fill(bgParent=self, color=(0, 0, 0, 0)) 364 365 def Load(self, node): 366 Generic.Load(self, node) 367 if node.colorcoded: 368 fillColor = node.colorcoded + (0.25,) 369 self.colorcodedFill.SetRGBA(*fillColor)