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

structureBrowserController.py (7466B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\structure\structureBrowser\controllers\structureBrowserController.py
      2 from eve.client.script.ui.structure.structureBrowser.controllers.structureEntryController import StructureEntryController
      3 from localization import GetByLabel
      4 from player_messaging.client.ui_message import prompt_player_fsd_dialog
      5 from signals import Signal
      6 import carbonui.const as uiconst
      7 import eve.client.script.ui.structure.structureBrowser.browserUIConst as browserUIConst
      8 import structures
      9 
     10 class StructureBrowserController(object):
     11     __notifyevents__ = ['OnStructureStateChanged',
     12      'OnStructuresReloaded',
     13      'OnCorporationStructuresReloaded',
     14      'OnProfileSettingsChange']
     15     STATION_TYPE_CONFIGID = -const.categoryStation
     16 
     17     def __init__(self):
     18         self.tabSelected = 0
     19         self.categoryIDSelected = structures.CATEGORY_HULL_DOCKING
     20         self.profileChanged = False
     21         self.selectedProfile = browserUIConst.ALL_PROFILES
     22         self.on_structure_state_changed = Signal(signalName='on_structure_state_changed')
     23         self.on_structures_changed = Signal(signalName='on_structures_changed')
     24         self.on_corp_structures_changed = Signal(signalName='on_corp_structures_changed')
     25         self.on_category_selected = Signal(signalName='on_category_selected')
     26         self.on_profile_selected = Signal(signalName='on_profile_selected')
     27         self.on_profile_deleted = Signal(signalName='on_profile_deleted')
     28         self.on_default_profile_set = Signal(signalName='on_default_profile_set')
     29         self.myStructureControllers = {}
     30         self.allStructuresControllers = {}
     31         sm.RegisterNotify(self)
     32 
     33     def OnProfileSettingsChange(self, profileIDs):
     34         currentProfile = self.GetSelectedProfileID()
     35         if currentProfile in profileIDs:
     36             if self.HasProfileChanged():
     37                 headerText = GetByLabel('UI/StructureBrowser/ProfileWasModifiedHeader')
     38                 questionText = GetByLabel('UI/StructureBrowser/ProfileWasModifiedBody')
     39                 if prompt_player_fsd_dialog('CustomQuestion', {'header': headerText,
     40                  'question': questionText}, uiconst.YESNO) != uiconst.ID_YES:
     41                     return
     42             self.selectedProfile = None
     43             self.SelectProfile(currentProfile, askQuestion=False)
     44 
     45     def GetMyStructures(self):
     46         structuresInfo = sm.GetService('structureDirectory').GetCorporationStructures()
     47         stationControllers = self._GetControllersFromStructureList(browserUIConst.IGNORE_RANGE, structuresInfo, self.myStructureControllers)
     48         return stationControllers
     49 
     50     def GetAllStructures(self, rangeSelected):
     51         structuresInfo = sm.GetService('structureDirectory').GetStructures()
     52         stationControllers = self._GetControllersFromStructureList(rangeSelected, structuresInfo, self.allStructuresControllers)
     53         return stationControllers
     54 
     55     def _GetControllersFromStructureList(self, rangeSelected, structuresInfo, cacheDict):
     56         cacheDict.clear()
     57         stationControllers = []
     58 
     59         def IsInRange(info):
     60             if rangeSelected == browserUIConst.IGNORE_RANGE:
     61                 return True
     62             if rangeSelected == const.rangeSolarSystem and session.solarsystemid2 != info['solarSystemID']:
     63                 return False
     64             if rangeSelected == const.rangeConstellation:
     65                 solarsystemInfo = cfg.mapSystemCache.Get(info['solarSystemID'])
     66                 if solarsystemInfo.constellationID != session.constellationid:
     67                     return False
     68             return True
     69 
     70         idsToPrime = {eachInfo['structureID'] for eachInfo in structuresInfo.itervalues()}
     71         idsToPrime.union({eachInfo['solarSystemID'] for eachInfo in structuresInfo.itervalues()})
     72         cfg.evelocations.Prime(idsToPrime)
     73         ownersToPrime = {eachInfo['ownerID'] for eachInfo in structuresInfo.itervalues()}
     74         cfg.eveowners.Prime(ownersToPrime)
     75         for eachInfo in structuresInfo.itervalues():
     76             if not IsInRange(eachInfo):
     77                 continue
     78             eachInfo['services'] = self.PruneServices(eachInfo['typeID'], eachInfo['services'])
     79             sController = StructureEntryController(eachInfo)
     80             cacheDict[eachInfo['structureID']] = sController
     81             stationControllers.append(sController)
     82 
     83         return stationControllers
     84 
     85     @staticmethod
     86     def PruneServices(structureTypeID, structureServices):
     87         if structureTypeID in structures.STRUCTURES_WITHOUT_ONLINE_SERVICES:
     88             return {x:y for x, y in structureServices.iteritems() if x not in structures.ONLINE_SERVICES}
     89         return structureServices
     90 
     91     def SetTabSelected(self, tabSelected):
     92         self.tabSelected = tabSelected
     93 
     94     def GetSelectedTab(self):
     95         return self.tabSelected
     96 
     97     def OnStructureStateChanged(self, solarSystemID, structureID, state):
     98         sController = self.myStructureControllers.get(structureID, None)
     99         if sController is None:
    100             return
    101         sController.StructureStateChanged(structureID, state)
    102 
    103     def OnStructuresReloaded(self):
    104         self.on_structures_changed()
    105 
    106     def OnCorporationStructuresReloaded(self):
    107         self.on_corp_structures_changed()
    108 
    109     def SelectCategory(self, categoryID):
    110         self.categoryIDSelected = categoryID
    111         self.on_category_selected(categoryID)
    112 
    113     def GetSelectedCategory(self):
    114         return self.categoryIDSelected
    115 
    116     def SetProfileChangedValue(self, value):
    117         self.profileChanged = value
    118 
    119     def HasProfileChanged(self):
    120         return self.profileChanged
    121 
    122     def PlayerWantsToLeaveProfile(self):
    123         if not self.HasProfileChanged():
    124             return True
    125         headerText = GetByLabel('UI/StructureBrowser/UnsavedChanges')
    126         questionText = GetByLabel('UI/StructureBrowser/UnsavedChangesQuestion')
    127         ret = prompt_player_fsd_dialog('CustomQuestion', {'header': headerText,
    128          'question': questionText}, uiconst.YESNO)
    129         if ret == uiconst.ID_YES:
    130             return True
    131         return False
    132 
    133     def SelectProfile(self, profileID, sendSignal = True, askQuestion = True):
    134         validProfileIDs = sm.GetService('structureControllers').GetValidProfileIDs()
    135         if profileID not in validProfileIDs:
    136             profileID = browserUIConst.ALL_PROFILES
    137         newProfileSelected = self.selectedProfile != profileID
    138         if askQuestion and newProfileSelected and not self.PlayerWantsToLeaveProfile():
    139             return
    140         if newProfileSelected:
    141             self.SetProfileChangedValue(False)
    142         self.selectedProfile = profileID
    143         if sendSignal:
    144             self.on_profile_selected(profileID)
    145 
    146     def GetSelectedProfileID(self):
    147         return self.selectedProfile
    148 
    149     def ProfileDeleted(self, profileID):
    150         if self.GetSelectedProfileID() == profileID:
    151             selectedProfileChanged = True
    152             self.selectedProfile = browserUIConst.ALL_PROFILES
    153         else:
    154             selectedProfileChanged = False
    155         self.on_profile_deleted(profileID, selectedProfileChanged)
    156 
    157     @staticmethod
    158     def SetProfileSettingsSelected(settingID):
    159         settings.user.tabgroups.Set(settingID, 1)
    160         settings.user.tabgroups.Delete('%s_names' % settingID)
    161         settings.user.tabgroups.Set('profile_structuresAndsettings', 1)
    162         settings.user.tabgroups.Delete('%s_names' % 'profile_structuresAndsettings')