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