browserMyCorpStructures.py (18651B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\structure\structureBrowser\browserMyCorpStructures.py 2 import gametime 3 import uthread 4 from carbon.common.script.util.timerstuff import AutoTimer 5 from carbonui.control.dragResizeCont import DragResizeCont 6 from carbonui.primitives.container import Container 7 from carbonui.util.bunch import Bunch 8 from eve.client.script.ui.control.eveScroll import Scroll 9 from eve.client.script.ui.control.scrollUtil import TabFinder 10 from carbonui.control.tabGroup import TabGroup 11 from eve.client.script.ui.shared.fitting.fittingUtil import EatSignalChangingErrors 12 from eve.client.script.ui.structure import ChangeSignalConnect 13 import eve.client.script.ui.structure.structureBrowser.browserUIConst as browserUIConst 14 from eve.client.script.ui.structure.structureBrowser.controllers.filterContController import FilterContControllerMyStructures 15 from eve.client.script.ui.structure.structureBrowser.controllers.structureEntryController import StructureEntryController 16 from eve.client.script.ui.structure.structureBrowser.corpStructureSettingsCont import CorpStructureSettingsCont 17 from eve.client.script.ui.structure.structureBrowser.entries.structureEntryMyCorp import StructureEntryMyCorp, StructureEntryMyCorpAllProfiles 18 from eve.client.script.ui.structure.structureBrowser.filterCont import FilterContMyStructures 19 from eve.client.script.ui.structure.structureBrowser.filterContUtil import IsFilteredOutByText, IsFilteredOutByServices 20 from eve.client.script.ui.structure.structureBrowser.moonminingEventsCont import MoonminingEventsCont 21 from eve.client.script.ui.structure.structureBrowser.structureProfiles import StructureProfiles 22 from eve.client.script.ui.structure.structureSettings.structureSettingsWnd import StructureProfileSettingCont 23 from localization import GetByLabel 24 import carbonui.const as uiconst 25 from eve.client.script.ui.control.eveLabel import EveCaptionSmall, EveLabelMedium, EveLabelLarge 26 27 class BrowserMyCorpStructures(Container): 28 default_name = 'BrowserMyStructures' 29 30 def __init__(self, **kwargs): 31 self.structureBrowserController = None 32 self.allStructuresProfileController = None 33 self.currentProfileLoaded = None 34 self.tabs = None 35 self.myFilterContController = None 36 self.isInitialized = False 37 self.display = False 38 self.structureListAndProfileSettingsCont = None 39 self.profileSettings = None 40 self.moonMiningEvents = None 41 self.corpStructureSettings = None 42 self.profileDescLabel = None 43 self.profileNameLabel = None 44 super(BrowserMyCorpStructures, self).__init__(**kwargs) 45 46 def ApplyAttributes(self, attributes): 47 super(BrowserMyCorpStructures, self).ApplyAttributes(attributes) 48 self.myFilterContController = FilterContControllerMyStructures() 49 self.structureBrowserController = attributes.structureBrowserController 50 51 def OnTabSelect(self): 52 self.LoadPanel() 53 54 def LoadPanel(self): 55 self.display = True 56 if self.isInitialized: 57 return 58 self.isInitialized = True 59 self.allStructuresProfileController = sm.GetService('structureControllers').GetAllStructuresProfileController() 60 self.ChangeSignalConnection(connect=True) 61 profileParent = DragResizeCont(name='profileParent', parent=self, align=uiconst.TOLEFT_PROP, minSize=0.1, maxSize=0.5, defaultSize=0.5, settingsID='myStructuresSplitter') 62 StructureProfiles(parent=profileParent, allStructuresProfileController=self.allStructuresProfileController, structureBrowserController=self.structureBrowserController) 63 self.structureListAndProfileSettingsCont = Container(name='structureListAndProfileSettingsCont', parent=self, padding=(4, 0, 4, 4)) 64 self.LoadTabs() 65 66 def ChangeSignalConnection(self, connect = True): 67 signalAndCallback = [(self.structureBrowserController.on_profile_selected, self.OnProfileSelected), 68 (self.allStructuresProfileController.on_profile_saved, self.OnProfileSaved), 69 (self.structureBrowserController.on_profile_deleted, self.OnProfileDeleted), 70 (self.structureBrowserController.on_corp_structures_changed, self.OnCorpStructuresChanged)] 71 ChangeSignalConnect(signalAndCallback, connect) 72 73 def LoadTabs(self): 74 self.VerifySelectedProfileIdIsValid() 75 profileID = self.structureBrowserController.GetSelectedProfileID() 76 self.structureListAndProfileSettingsCont.Flush() 77 myStructuresPanel = MyStructuresPanel(parent=self.structureListAndProfileSettingsCont, allStructuresProfileController=self.allStructuresProfileController, structureBrowserController=self.structureBrowserController, filterContController=self.myFilterContController) 78 tabs = [(GetByLabel('UI/StructureBrowser/StructuresWithProfile'), 79 myStructuresPanel, 80 None, 81 'myStructuresPanel', 82 None, 83 GetByLabel('UI/StructureBrowser/StructuresWithProfileHint'))] 84 if profileID != browserUIConst.ALL_PROFILES: 85 self.profileSettings = StructureProfileSettingCont(parent=self.structureListAndProfileSettingsCont, allStructuresProfileController=self.allStructuresProfileController, structureBrowserController=self.structureBrowserController) 86 profileTab = (GetByLabel('UI/StructureBrowser/ProfileSettings'), 87 self.profileSettings, 88 None, 89 'profileSettings', 90 None, 91 GetByLabel('UI/StructureBrowser/ProfileSettingsHint')) 92 tabs.append(profileTab) 93 self.moonMiningEvents = MoonminingEventsCont(parent=self.structureListAndProfileSettingsCont, structureBrowserController=self.structureBrowserController) 94 moonMiningTab = (GetByLabel('UI/Moonmining/UpcomingExtractionsTab'), 95 self.moonMiningEvents, 96 None, 97 'moonMiningEvents', 98 None, 99 GetByLabel('UI/Moonmining/UpcomingExtractionsTabHint')) 100 tabs.append(moonMiningTab) 101 if profileID == browserUIConst.ALL_PROFILES: 102 self.corpStructureSettings = CorpStructureSettingsCont(parent=self.structureListAndProfileSettingsCont, structureBrowserController=self.structureBrowserController) 103 corpSettingsTab = (GetByLabel('UI/StructureBrowser/CorpSettingsTab'), 104 self.corpStructureSettings, 105 None, 106 'corpStructureSettings', 107 None, 108 GetByLabel('UI/StructureBrowser/CorpSettingsTabHint')) 109 tabs.append(corpSettingsTab) 110 self.tabs = TabGroup(parent=self.structureListAndProfileSettingsCont, tabs=tabs, height=32, idx=0, padLeft=0, groupID='profile_structuresAndsettings', padTop=0) 111 self.profileDescLabel = EveLabelMedium(parent=self.structureListAndProfileSettingsCont, name='profileDescLabel', align=uiconst.TOTOP, idx=0) 112 self.profileNameLabel = EveCaptionSmall(parent=self.structureListAndProfileSettingsCont, name='profileNameLabel', align=uiconst.TOTOP, idx=0) 113 self.SetProfileName() 114 115 def VerifySelectedProfileIdIsValid(self): 116 profileID = self.structureBrowserController.GetSelectedProfileID() 117 validProfileIDs = sm.GetService('structureControllers').GetValidProfileIDs() 118 isProfileValid = profileID not in validProfileIDs 119 if isProfileValid: 120 self.structureBrowserController.SelectProfile(browserUIConst.ALL_PROFILES, sendSignal=False) 121 self.currentProfileLoaded = browserUIConst.ALL_PROFILES 122 123 def ForceProfileSettingsSelected(self): 124 if self.tabs: 125 self.tabs.AutoSelect() 126 127 def OnProfileSelected(self, profileID): 128 self.SetProfileName() 129 if self.currentProfileLoaded is None or self._ProfileTypeHasChanged(profileID): 130 self.LoadTabs() 131 self.currentProfileLoaded = profileID 132 133 def _ProfileTypeHasChanged(self, profileID): 134 if profileID == self.currentProfileLoaded: 135 return False 136 if browserUIConst.ALL_PROFILES not in (profileID, self.currentProfileLoaded): 137 return False 138 return True 139 140 def OnProfileSaved(self, profileID): 141 self.structureBrowserController.SetProfileChangedValue(False) 142 self.SetProfileName() 143 144 def OnProfileDeleted(self, profileID, selectedProfileChanged): 145 if selectedProfileChanged: 146 self.LoadTabs() 147 148 def OnCorpStructuresChanged(self): 149 if self.structureBrowserController.GetSelectedTab() != MyStructuresPanel.TAB_ID: 150 return 151 self.LoadTabs() 152 153 def SetProfileName(self): 154 if self.structureBrowserController.GetSelectedProfileID() == browserUIConst.ALL_PROFILES: 155 name = GetByLabel('UI/Structures/Browser/AnyProfile') 156 desc = '' 157 else: 158 selectedProfileID = self.structureBrowserController.GetSelectedProfileID() 159 selectedProfileController = self.allStructuresProfileController.GetSlimProfileController(selectedProfileID) 160 name = selectedProfileController.GetProfileName() 161 desc = selectedProfileController.GetProfileDescription() 162 self.profileNameLabel.text = name 163 self.profileDescLabel.text = desc 164 self.profileNameLabel.display = False 165 self.profileDescLabel.display = False 166 167 def Close(self): 168 if self.isInitialized: 169 with EatSignalChangingErrors(errorMsg='BrowserMyCorpStructures'): 170 self.ChangeSignalConnection(connect=False) 171 self.structureBrowserController = None 172 Container.Close(self) 173 174 175 class MyStructuresPanel(Container): 176 TAB_ID = 'STRUCTURES' 177 178 def __init__(self, **kwargs): 179 self.serviceChangedTimestamp = None 180 self.filterContController = None 181 self.allStructuresProfileController = None 182 self.allStructuresProfileController = None 183 self.topPanel = None 184 self.profileNameLabel = None 185 self.comboCont = None 186 self.scroll = None 187 self.serviceChangedTimer = None 188 self.structureBrowserController = None 189 self.isInitialized = False 190 super(MyStructuresPanel, self).__init__(**kwargs) 191 192 def ApplyAttributes(self, attributes): 193 self.serviceChangedTimestamp = gametime.GetWallclockTimeNow() 194 Container.ApplyAttributes(self, attributes) 195 self.filterContController = attributes.filterContController 196 self.allStructuresProfileController = attributes.allStructuresProfileController 197 self.structureBrowserController = attributes.structureBrowserController 198 self.ChangeSignalConnection(connect=True) 199 200 def ChangeSignalConnection(self, connect = True): 201 signalAndCallback = [(self.structureBrowserController.on_profile_selected, self.OnProfileSelected), 202 (self.allStructuresProfileController.on_profile_saved, self.OnProfileAssigned), 203 (self.allStructuresProfileController.on_profile_assigned, self.OnProfileAssigned), 204 (self.filterContController.on_text_filter_changed, self.OnTextFilterChanged), 205 (self.filterContController.on_lower_power_filter_changed, self.OnLowerPowerChanged), 206 (self.filterContController.structureTypeFilterController.on_filter_changed, self.OnStructuresChanged), 207 (self.filterContController.serviceFilterController.on_filter_changed, self.OnServiceSettingsChanged)] 208 ChangeSignalConnect(signalAndCallback, connect) 209 210 def OnTabSelect(self): 211 self.structureBrowserController.SetTabSelected(self.TAB_ID) 212 self.LoadPanel() 213 214 def LoadPanel(self): 215 if self.isInitialized: 216 self.UpdateScroll() 217 return 218 self.topPanel = Container(name='topPanel', parent=self, align=uiconst.TOTOP, height=20, padding=(0, 6, 0, 6)) 219 self.profileNameLabel = EveLabelLarge(text='', parent=self.topPanel, state=uiconst.UI_DISABLED, align=uiconst.TOPLEFT, top=2) 220 self.comboCont = FilterContMyStructures(name='filterContMyStructures', parent=self, filterContController=self.filterContController, padBottom=8) 221 self.scroll = Scroll(parent=self, id='MyStructuresScroll') 222 self.scroll.sr.fixedColumns = StructureEntryMyCorp.GetFixedColumns() 223 self.scroll.OnSelectionChange = self.OnScrollSelectionChange 224 self.scroll.GetTabStops = self.GetTabStops 225 self.UpdateScroll() 226 self.isInitialized = True 227 228 def GetTabStops(self, headertabs, idx = None): 229 decoClass = self.GetDecoClass() 230 return TabFinder().GetTabStops(self.scroll.sr.nodes, headertabs, decoClass, idx=idx) 231 232 def LoadProfile(self, profileID): 233 self.UpdateScroll() 234 235 def UpdateScroll(self): 236 if self.structureBrowserController.GetSelectedTab() != self.TAB_ID: 237 return 238 self.SetLabelProfileName() 239 decoClass = self.GetDecoClass() 240 scrollList, somethingFilteredOut = self.GetScrollList(decoClass=decoClass) 241 if somethingFilteredOut: 242 noContentHint = GetByLabel('UI/Structures/Browser/NoStructuresFoundWithFilters') 243 else: 244 noContentHint = GetByLabel('UI/Structures/Browser/NoStructuresFound') 245 structureServicesChecked = self._GetServicesChecked() 246 self.scroll.LoadContent(contentList=scrollList, headers=decoClass.GetHeaders(structureServicesChecked), noContentHint=noContentHint) 247 248 def SetLabelProfileName(self): 249 currentProfileID = self.structureBrowserController.GetSelectedProfileID() 250 c = self.allStructuresProfileController.GetSlimProfileController(currentProfileID) 251 if c: 252 text = c.GetProfileName() 253 displayTopPanel = True 254 else: 255 text = '' 256 displayTopPanel = False 257 self.profileNameLabel.text = text 258 self.topPanel.display = displayTopPanel 259 260 def IsFilteredOut(self, structureController): 261 currentProfileID = self.structureBrowserController.GetSelectedProfileID() 262 if currentProfileID != browserUIConst.ALL_PROFILES and currentProfileID != structureController.GetProfileID(): 263 return True 264 if self._IsFilteredOutByPower(structureController): 265 return True 266 if self._IsFilteredOutByStructureType(structureController): 267 return True 268 if self._IsFilteredOutByServices(structureController): 269 return True 270 if self._IsFilteredOutByText(structureController): 271 return True 272 return False 273 274 def _IsFilteredOutByPower(self, structureController): 275 if not self.filterContController.OnlyShowLowPower(): 276 return False 277 return not structureController.IsLowPower() 278 279 def _IsFilteredOutByStructureType(self, structureController): 280 if not self.filterContController.structureTypeFilterController.IsActive(): 281 return False 282 groupingsChecked = self.filterContController.GetStructureTypesChecked() 283 structureTypeID = structureController.GetTypeID() 284 if structureTypeID in groupingsChecked: 285 return False 286 else: 287 return True 288 289 def _IsFilteredOutByText(self, structureController): 290 filterText = self.filterContController.GetTextFilter() 291 return IsFilteredOutByText(structureController, filterText) 292 293 def _IsFilteredOutByServices(self, structureController): 294 filterContController = self.filterContController 295 return IsFilteredOutByServices(structureController, filterContController) 296 297 def GetScrollList(self, decoClass): 298 scrollList = [] 299 structureControllers = self.structureBrowserController.GetMyStructures() 300 somethingFilteredOut = False 301 structureServicesChecked = self._GetServicesChecked() 302 for controller in structureControllers: 303 if self.IsFilteredOut(controller): 304 somethingFilteredOut = True 305 continue 306 slimProfileController = self.allStructuresProfileController.GetSlimProfileController(controller.GetProfileID()) 307 node = Bunch(controller=controller, decoClass=decoClass, columnSortValues=decoClass.GetColumnSortValues(controller, slimProfileController, structureServicesChecked), charIndex=controller.GetName(), slimProfileController=slimProfileController, GetSortValue=decoClass.GetSortValue, structureServicesChecked=structureServicesChecked) 308 scrollList.append(node) 309 310 return (scrollList, somethingFilteredOut) 311 312 def _GetServicesChecked(self): 313 if self.filterContController.AreServiceFiltersDisbled(): 314 structureServicesChecked = browserUIConst.ALL_SERVICES 315 else: 316 structureServicesChecked = self.filterContController.GetServicesChecked() 317 return structureServicesChecked 318 319 def GetDecoClass(self): 320 allProfilesVisible = self.structureBrowserController.GetSelectedProfileID() == browserUIConst.ALL_PROFILES 321 if allProfilesVisible: 322 return StructureEntryMyCorpAllProfiles 323 else: 324 return StructureEntryMyCorp 325 326 def OnScrollSelectionChange(self, entries): 327 pass 328 329 def OnServiceCombo(self, *args): 330 self.UpdateScroll() 331 332 def OnTextFilterChanged(self): 333 self.UpdateScroll() 334 335 def OnLowerPowerChanged(self): 336 self.UpdateScroll() 337 338 def OnStructureTypeChanged(self): 339 self.UpdateScroll() 340 341 def OnStructuresChanged(self, *args): 342 self.UpdateScroll() 343 344 def OnServiceSettingsChanged(self, *args): 345 uthread.new(self.OnServiceSettingsChanged_thread) 346 347 def OnServiceSettingsChanged_thread(self): 348 DELAY = 500 349 recentlyLoaded = gametime.GetTimeDiff(self.serviceChangedTimestamp, gametime.GetWallclockTimeNow()) / const.MSEC < DELAY 350 if recentlyLoaded: 351 self.serviceChangedTimer = AutoTimer(DELAY, self.DoUpdateScroll) 352 else: 353 self.DoUpdateScroll() 354 355 def DoUpdateScroll(self): 356 self.serviceChangedTimestamp = gametime.GetWallclockTimeNow() 357 self.serviceChangedTimer = None 358 self.UpdateScroll() 359 360 def OnProfileSelected(self, profileID): 361 if not self or self.destroyed: 362 return 363 if self.structureBrowserController.GetSelectedTab() == self.TAB_ID: 364 self.LoadProfile(profileID) 365 366 def OnProfileAssigned(self, profileID): 367 self.UpdateScroll() 368 369 def Close(self): 370 with EatSignalChangingErrors(errorMsg='MyStructuresPanel'): 371 self.ChangeSignalConnection(connect=False) 372 self.filterContController = None 373 self.allStructuresProfileController = None 374 self.structureBrowserController = None 375 Container.Close(self)