sovHubPage.py (7667B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\neocom\Alliances\sovHubs\sovHubPage.py 2 import carbonui.text.styles 3 from collections import defaultdict 4 import carbonui 5 import locks 6 import uthread2 7 from carbon.common.script.sys.serviceConst import ROLE_PROGRAMMER 8 from carbonui.control.button import Button 9 from carbonui.control.scroll import Scroll 10 from carbonui.primitives.container import Container 11 from carbonui.uicore import uicore 12 from eve.client.script.ui.control.entries.util import GetFromClass 13 from eve.client.script.ui.shared.neocom.Alliances.sovHubs.expandedSovHubEntry import ExpandedSovHubEntry 14 from eve.client.script.ui.shared.neocom.Alliances.sovHubs.filterCont import HubPageFilterCont, IsFilteredOutByLocation, IsFilteredByName 15 from eve.client.script.ui.shared.neocom.Alliances.sovHubs.sovHubEntry import SovHubEntry 16 from eve.client.script.ui.shared.neocom.Alliances.sovHubs.sovHubEntryController import SovHubEntryController, ValueStorage, UNDEFINED 17 from eveexceptions import ExceptionEater 18 from expiringdict import ExpiringDict 19 from inventorycommon.const import typeInfrastructureHub, typeTerritorialClaimUnit 20 from localization import GetByLabel 21 from sovereignty.client.quasarCallWrapper import QuasarCallWrapper 22 from threadutils import throttled 23 24 class SovHubPage(Container): 25 is_loaded = False 26 filterCont = None 27 __notifyevents__ = ['OnHubUpgradesStateChanged'] 28 29 def __init__(self, **kw): 30 super(SovHubPage, self).__init__(**kw) 31 self._valueStorageByHubID = ExpiringDict(1000, 300) 32 33 def ApplyAttributes(self, attributes): 34 super(SovHubPage, self).ApplyAttributes(attributes) 35 sm.RegisterNotify(self) 36 37 def DebugReload(self, *args): 38 self.is_loaded = False 39 self.Flush() 40 self.Load() 41 42 def Load(self, *args): 43 if self.is_loaded: 44 return 45 with locks.TempLock('SovHubPage:Load'): 46 if self.is_loaded: 47 return 48 carbonui.text.styles.TextHeadline(parent=self, text=GetByLabel('UI/Sovereignty/HubPage/SovereigntyHubs'), align=carbonui.Align.TOTOP) 49 self.filterCont = HubPageFilterCont(parent=self, align=carbonui.Align.TOTOP, height=30, top=20, padBottom=16) 50 self.filterCont.on_filters_changed.connect(self.OnFilterChanged) 51 self.scroll = Scroll(parent=self) 52 self.scroll.sortGroups = True 53 self.scroll.reverseGroupSortEnabled = True 54 self.scroll.sr.id = 'sovhubPage_scroll' 55 self.scroll.sr.defaultColumnWidth = SovHubEntry.GetDefaultColumnWidth() 56 self.scroll.RefreshSort = self.RefreshSort 57 self.LoadScroll() 58 self.is_loaded = True 59 60 def RefreshSort(self, *args, **kwargs): 61 Scroll.RefreshSort(self.scroll, *args, **kwargs) 62 uthread2.call_after_wallclocktime_delay(self.CheckSorted_throttled, 3) 63 64 @throttled(2) 65 def CheckSorted_throttled(self): 66 if self.destroyed: 67 return 68 self._CheckSorted() 69 70 def _CheckSorted(self): 71 if self.destroyed: 72 return 73 sortValues = self.GetSortValues() 74 if UNDEFINED in sortValues: 75 self.scroll.Sort(self.scroll.GetSortBy(), self.scroll.GetSortDirection()) 76 77 def GetSortValues(self): 78 idx = None 79 headers = self.scroll.GetColumns() 80 sortBy = self.scroll.GetSortBy() 81 if sortBy in headers: 82 idx = headers.index(sortBy) 83 direction = self.scroll.GetSortDirection() 84 sortValues = [ SovHubEntry.GetSortValue(node, sortBy, direction, idx) for node in self.scroll.GetNodes() ] 85 return sortValues 86 87 def OnFilterChanged(self): 88 self.LoadScroll() 89 90 def LoadScroll(self): 91 sovHubsByItemID, solarSystemIDs = self.GetMySovHubsAndSystems() 92 self.Prime(solarSystemIDs) 93 quasarCallWrapper = QuasarCallWrapper(sm.GetService('sovHubSvc'), sm.GetService('sovereigntyResourceSvc')) 94 headers = SovHubEntry.GetHeaders() 95 filterText = self.filterCont.textFilter.GetValue().strip().lower() 96 scrollList = [] 97 numFilteredOut = 0 98 for sovHubID, sovHubInfo in sovHubsByItemID.iteritems(): 99 entryID = ('SovHubEntry', sovHubID) 100 uicore.registry.SetListGroupOpenState(entryID, 0) 101 controller = SovHubEntryController(sovHubID, sovHubInfo.typeID, sovHubInfo.solarSystemID, sovHubInfo.campaignState, sovHubInfo.vulnerabilityState, sovHubInfo, quasarCallWrapper) 102 if self.IsFilteredOut(sovHubID, sovHubInfo, controller, filterText): 103 numFilteredOut += 1 104 continue 105 valueStorage = self._valueStorageByHubID.get(sovHubID, None) 106 if valueStorage is None: 107 valueStorage = ValueStorage() 108 self._valueStorageByHubID[sovHubID] = valueStorage 109 controller.valueStorage = valueStorage 110 entry = GetFromClass(SovHubEntry, {'GetSubContent': self.GetSubContent, 111 'entryController': controller, 112 'id': entryID, 113 'groupItems': [controller], 114 'isListEntry': True, 115 'ignoreRightClick': True, 116 'GetSortValue': SovHubEntry.GetSortValue}) 117 scrollList.append(entry) 118 119 if numFilteredOut: 120 noContentHint = GetByLabel('UI/Sovereignty/HubPage/NoSovHubsFilteredOut') 121 else: 122 noContentHint = GetByLabel('UI/Sovereignty/HubPage/NoSovHubs') 123 self.scroll.LoadContent(contentList=scrollList, noContentHint=noContentHint, headers=headers) 124 125 def IsFilteredOut(self, sovHubID, sovHubInfo, controller, filterText): 126 if IsFilteredOutByLocation(sovHubID, sovHubInfo, controller): 127 return True 128 if IsFilteredByName(controller, filterText): 129 return True 130 return False 131 132 def GetMySovHubsAndSystems(self): 133 structuresPerSolarsystem = sm.GetService('sov').GetSovereigntyStructuresInfoForAlliance() 134 tcuByItemID = {} 135 sovHubByItemID = {} 136 solarSystemIDs = set() 137 for ssID, structureList in structuresPerSolarsystem.iteritems(): 138 for structure in structureList: 139 if structure.typeID == typeInfrastructureHub and structure.corporationID == session.corpid: 140 sovHubByItemID[structure.itemID] = structure 141 solarSystemIDs.add(ssID) 142 elif structure.typeID == typeTerritorialClaimUnit: 143 tcuByItemID[structure.itemID] = structure 144 145 return ({itemID:hubInfo for itemID, hubInfo in sovHubByItemID.iteritems() if itemID in tcuByItemID}, solarSystemIDs) 146 147 def GetSubContent(self, nodeData, newitems = 0): 148 scrolllist = [] 149 for controller in nodeData.groupItems: 150 entry = GetFromClass(ExpandedSovHubEntry, {'entryController': controller}) 151 scrolllist.append(entry) 152 153 return scrolllist 154 155 def Prime(self, solarSystemIDs): 156 cfg.evelocations.Prime(solarSystemIDs) 157 cfg.evelocations.Prime({cfg.mapSystemCache.Get(solarsystemID).regionID for solarsystemID in solarSystemIDs}) 158 cfg.evelocations.Prime({cfg.mapSystemCache.Get(solarsystemID).constellationID for solarsystemID in solarSystemIDs}) 159 160 def OnHubUpgradesStateChanged(self, hubID, installedUpgrades): 161 self._valueStorageByHubID.pop(hubID, None) 162 163 def Close(self): 164 with ExceptionEater('SovHubPage:Failed to disconnect signal'): 165 if self.filterCont: 166 self.filterCont.on_filters_changed.disconnect(self.OnFilterChanged) 167 super(SovHubPage, self).Close()