browserFacilities.py (8150B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\industry\browserFacilities.py 2 from carbonui.control.combo import Combo 3 from carbonui.primitives.container import Container 4 from carbonui.util.bunch import Bunch 5 from eve.client.script.ui.control.eveScroll import Scroll 6 from eve.client.script.ui.quickFilter import QuickFilterEdit 7 from eve.client.script.ui.shared.industry import industryUIConst 8 from eve.client.script.ui.shared.industry.industryUIConst import ACTIVITY_NAMES 9 from eve.client.script.ui.shared.industry.facilityEntry import FacilityEntry 10 from eve.client.script.ui.shared.industry.viewModeButtons import ViewModeButtons 11 import industry 12 import localization 13 import carbonui.const as uiconst 14 import blue 15 from eve.common.script.sys import idCheckers 16 OWNER_ANY = 1 17 OWNER_NPC = 2 18 OWNER_CORP = 3 19 RANGE_MAX_SKILL = -2 20 RANGE_REGION = -1 21 RANGE_OPTIONS = [('UI/Generic/CurrentSystem', 0), 22 ('UI/Industry/RangeWithin5Jumps', 5), 23 ('UI/Industry/RangeWithin10Jumps', 10), 24 ('UI/Generic/CurrentRegion', RANGE_REGION), 25 ('UI/Industry/RangeMaxSkill', RANGE_MAX_SKILL)] 26 27 class BrowserFacilities(Container): 28 default_name = 'BrowserFacilities' 29 __notifyevents__ = ['OnFacilitiesReloaded'] 30 31 def ApplyAttributes(self, attributes): 32 Container.ApplyAttributes(self, attributes) 33 sm.RegisterNotify(self) 34 self.callback = attributes.callback 35 self.isInitialized = False 36 37 def _OnClose(self, *args): 38 sm.UnregisterNotify(self) 39 40 def OnTabSelect(self): 41 if self.isInitialized: 42 self.UpdateScroll() 43 return 44 self.isInitialized = True 45 self.topPanel = Container(name='topPanel', parent=self, align=uiconst.TOTOP, height=32, padding=(0, 6, 0, 6)) 46 self.scroll = Scroll(parent=self, id='InstallationBrowser') 47 self.scroll.OnSelectionChange = self.OnScrollSelectionChange 48 self.ownerCombo = Combo(name='ownerCombo', parent=self.topPanel, align=uiconst.TOLEFT, callback=self.OnOwnerCombo, options=self.GetOwnerOptions(), select=settings.user.ui.Get('BrowserFacilitiesOwner', 0), width=120, padRight=4) 49 self.activityCombo = Combo(name='activityCombo', parent=self.topPanel, align=uiconst.TOLEFT, callback=self.OnActivityCombo, options=self.GetActivityOptions(), select=settings.user.ui.Get('BrowserFacilitiesActivity', 0), width=120, padRight=4, maxVisibleEntries=7) 50 self.rangeCombo = Combo(name='rangeCombo', parent=self.topPanel, align=uiconst.TOLEFT, callback=self.OnRangeCombo, options=self.GetRangeOptions(), select=settings.user.ui.Get('BrowserFacilitiesRange', 0), width=140, padRight=4) 51 self.viewModeButtons = ViewModeButtons(parent=self.topPanel, align=uiconst.TORIGHT, controller=self, settingsID='IndustryBlueprintBrowserViewMode') 52 self.filterEdit = QuickFilterEdit(name='searchField', parent=self.topPanel, maxLength=64, align=uiconst.TORIGHT, OnClearFilter=self.OnFilterEditCleared, padRight=4, width=144) 53 self.filterEdit.ReloadFunction = self.OnFilterEdit 54 self.UpdateScroll() 55 56 def OnFacilitiesReloaded(self, *args): 57 if self.isInitialized and self.display: 58 self.UpdateScroll() 59 60 def OnScrollSelectionChange(self, entries, activityID = None): 61 self.callback(entries[0].facilityData) 62 63 def OnFilterEdit(self): 64 self.UpdateScroll() 65 66 def OnFilterEditCleared(self): 67 self.UpdateScroll() 68 69 def UpdateScroll(self): 70 self.scroll.ShowLoading() 71 blue.pyos.synchro.Yield() 72 installations = self.GetInstallationData() 73 scrollList = self.GetScrollList(installations) 74 self.scroll.sr.defaultColumnWidth = FacilityEntry.GetDefaultColumnWidth() 75 self.scroll.sr.fixedColumns = FacilityEntry.GetFixedColumns(self.viewModeButtons.GetViewMode()) 76 self.scroll.LoadContent(contentList=scrollList, headers=FacilityEntry.GetHeaders(showTax=self.activityCombo.GetValue() in industry.ACTIVITIES), noContentHint=localization.GetByLabel('UI/Industry/NoFacilitiesFound')) 77 self.scroll.HideLoading() 78 79 def GetInstallationData(self): 80 installations = sm.GetService('facilitySvc').GetFacilities() 81 cfg.evelocations.Prime((facilityData.facilityID for facilityData in installations)) 82 cfg.eveowners.Prime((facilityData.ownerID for facilityData in installations)) 83 return installations 84 85 def GetScrollList(self, installations): 86 scrollList = [] 87 if installations: 88 sm.GetService('facilitySvc').InitMaxActivityModifiers() 89 showTax = self.activityCombo.GetValue() in industry.ACTIVITIES 90 for facilityData in installations: 91 blue.pyos.BeNice() 92 jumps = self.GetJumpsTo(facilityData.solarSystemID) 93 if self.IsFilteredOut(facilityData): 94 continue 95 activityID = self.activityCombo.GetValue() 96 node = Bunch(facilityData=facilityData, decoClass=FacilityEntry, sortValues=FacilityEntry.GetColumnSortValues(facilityData, jumps, activityID, showTax), viewMode=self.viewModeButtons.GetViewMode(), jumps=jumps, charIndex=facilityData.GetName(), activityID=activityID) 97 scrollList.append(node) 98 99 return scrollList 100 101 def IsFilteredOut(self, facilityData): 102 if not facilityData.activities: 103 return True 104 filterText = self.filterEdit.GetValue().strip().lower() 105 if filterText: 106 text = facilityData.GetName() + facilityData.GetOwnerName() + facilityData.GetTypeName() 107 if text.lower().find(filterText) == -1: 108 return True 109 activityValue = self.activityCombo.GetValue() 110 if activityValue and activityValue not in facilityData.activities: 111 return True 112 ownerValue = self.ownerCombo.GetValue() 113 if ownerValue != OWNER_ANY: 114 isCorporation = facilityData.ownerID == session.corpid 115 if not isCorporation and ownerValue != OWNER_NPC: 116 return True 117 if isCorporation and ownerValue != OWNER_CORP: 118 return True 119 solarSystemID = facilityData.solarSystemID 120 if idCheckers.IsWormholeSystem(solarSystemID) and solarSystemID != session.solarsystemid2: 121 return True 122 rangeValue = self.rangeCombo.GetValue() 123 if rangeValue != RANGE_MAX_SKILL: 124 if rangeValue == RANGE_REGION and cfg.mapSystemCache.Get(solarSystemID).regionID != session.regionid: 125 return True 126 if 0 <= rangeValue < self.GetJumpsTo(solarSystemID): 127 return True 128 return False 129 130 def GetJumpsTo(self, solarsystemID): 131 return sm.GetService('clientPathfinderService').GetJumpCountFromCurrent(solarsystemID) 132 133 def OnViewModeChanged(self, viewMode): 134 self.UpdateScroll() 135 136 def OnRangeCombo(self, combo, key, value): 137 settings.user.ui.Set('BrowserFacilitiesRange', value) 138 self.UpdateScroll() 139 140 def GetRangeOptions(self): 141 return [ (localization.GetByLabel(label), value) for label, value in RANGE_OPTIONS ] 142 143 def OnActivityCombo(self, combo, key, value): 144 settings.user.ui.Set('BrowserFacilitiesActivity', value) 145 self.UpdateScroll() 146 147 def GetActivityOptions(self): 148 ret = [ (localization.GetByLabel(ACTIVITY_NAMES[activityID]), 149 activityID, 150 None, 151 industryUIConst.ACTIVITY_ICONS_SMALL[activityID]) for activityID in industry.ACTIVITIES ] 152 ret.insert(0, (localization.GetByLabel('UI/Industry/AllActivities'), 0)) 153 return ret 154 155 def GetOwnerOptions(self): 156 return [(localization.GetByLabel('UI/Industry/AllFacilities'), OWNER_ANY), (localization.GetByLabel('UI/Industry/PublicFacilities'), 157 OWNER_NPC, 158 None, 159 'res:/UI/Texture/Classes/Inventory/readOnly.png'), (localization.GetByLabel('UI/Industry/CorpOwnedFacilities'), 160 OWNER_CORP, 161 None, 162 'res:/UI/Texture/Classes/Industry/iconCorp.png')] 163 164 def OnOwnerCombo(self, combo, key, value): 165 settings.user.ui.Set('BrowserFacilitiesOwner', value) 166 self.UpdateScroll()