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

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()