sovHubWnd.py (11089B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\sov\sovHub\sovHubWnd.py 2 import carbonui.text.styles 3 import eveicon 4 import uthread2 5 from carbon.common.script.sys.serviceConst import ROLE_PROGRAMMER 6 from carbonui.button.group import ButtonGroup 7 from carbonui.control.button import Button 8 from carbonui.control.buttonIcon import ButtonIcon 9 from carbonui.control.window import Window 10 from carbonui.primitives.container import Container 11 from carbonui.primitives.containerAutoSize import ContainerAutoSize 12 from carbonui.primitives.layoutGrid import LayoutGrid 13 from eve.client.script.ui.control.loadingContainer import LoadingContainer 14 from eve.client.script.ui.shared.mapView.mapViewConst import VIEWMODE_MARKERS_SETTINGS, MAPVIEW_PRIMARY_ID, MARKERS_OPTION_SOV_HUBS 15 from eve.client.script.ui.shared.mapView.mapViewSettings import GetMapViewSetting, SetMapViewSetting 16 from eve.client.script.ui.shared.mapView.settings import classic_map_enabled_setting 17 from eve.client.script.ui.shared.sov.sovHub.changesWarning import LoadSaveBtnTooltipPanel 18 from eve.client.script.ui.shared.sov.sovHub.hubController import HubController 19 import carbonui 20 from eve.client.script.ui.shared.sov.sovHub.resourceConts import PowerCont, WorkforceCont 21 from eve.client.script.ui.shared.sov.sovHub.fuelConts import FuelMagmaCont, FuelIceCont, StartupCostCont 22 from eve.client.script.ui.shared.sov.sovHub.editSections import TransitCont, AclSectionCont 23 from eve.client.script.ui.shared.sov.sovHub.summaryCont import SummaryCont 24 from eve.client.script.ui.shared.sov.sovHub.upgradeScrollCont import UpgradeScrollCont 25 from eve.client.script.ui.shared.sov.threadedLoader import ThreadedLoader 26 from eveexceptions import ExceptionEater, UserError 27 from localization import GetByLabel 28 import carbonui.const as uiconst 29 from player_messaging.client.ui_message import prompt_player_fsd_dialog 30 31 def OpenSovHubWnd(itemID, solarSystemID): 32 wnd = SovHubWnd.GetIfOpen(windowInstanceID=itemID) 33 if wnd and not wnd.destroyed: 34 wnd.Maximize() 35 if not wnd.hubController.IsSameItemID(itemID): 36 wnd.LoadWindow(itemID, solarSystemID) 37 else: 38 SovHubWnd.Open(itemID=itemID, solarSystemID=solarSystemID, windowInstanceID=itemID) 39 40 41 class SovHubWnd(Window): 42 __guid__ = 'SovHubWnd' 43 default_minSize = [960, 590] 44 default_windowID = 'sovHubWnd' 45 default_captionLabelPath = 'UI/Sovereignty/SovHub/HubWnd/SovHub' 46 default_isCompact = True 47 48 def DebugReload(self, *args): 49 itemID = self.hubController.itemID 50 solarSystemID = self.hubController.solarSystemID 51 self.Close() 52 OpenSovHubWnd(itemID, solarSystemID) 53 54 def ApplyAttributes(self, attributes): 55 self.hubController = None 56 self.scrollCont = None 57 self.threadedLoader = ThreadedLoader('SovHubWnd') 58 super(SovHubWnd, self).ApplyAttributes(attributes) 59 itemID = attributes.itemID 60 solarSystemID = attributes.solarSystemID 61 try: 62 self.hubController = HubController(itemID, solarSystemID) 63 except UserError: 64 self.Close() 65 raise 66 67 self.caption = self.hubController.GetHubName() 68 self.ConstructUI() 69 classic_map_enabled_setting.on_change.connect(self.OnClassicMapChanged) 70 self.hubController.on_order_changed.connect(self.OnOrderChanged) 71 self.hubController.on_online_state_changed.connect(self.OnOnlineStateChanged) 72 self.hubController.on_upgrades_changed.connect(self.OnUpgradesChanged) 73 self.hubController.workforceController.on_workforce_changed.connect(self.OnWorkforceChanged) 74 self.on_end_scale.connect(self.OnEndScale) 75 self.loadingCont.LoadContent(loadCallback=self.LoadWindow) 76 77 def ConstructUI(self): 78 self.loadingCont = LoadingContainer(parent=self.content, failureStateMessage=GetByLabel('UI/Sovereignty/SovHub/HubWnd/FailedToFetchData'), retryBtnLabel=GetByLabel('UI/Personalization/PaintTool/ErrorRetry')) 79 self.rightCont = Container(name='rightCont', parent=self.loadingCont, align=carbonui.Align.TORIGHT, width=300, clipChildren=True, padLeft=24) 80 self.leftCont = Container(name='leftCont', parent=self.loadingCont, align=carbonui.Align.TOALL) 81 btnGroup = ButtonGroup(parent=self.leftCont) 82 self.saveChangesBtn = Button(label=GetByLabel('UI/Sovereignty/SovHub/HubWnd/SaveChanges'), func=self.SaveChanges) 83 self.saveChangesBtn.LoadTooltipPanel = self.LoadSaveBtnTooltipPanel 84 self.saveChangesBtn.Disable() 85 btnGroup.add_button(self.saveChangesBtn) 86 self.topCont = ContainerAutoSize(name='topCont', parent=self.leftCont, align=carbonui.Align.TOTOP, alignMode=carbonui.Align.TOTOP) 87 self.nameLabel = carbonui.text.styles.TextHeader(parent=self.topCont, text=self.hubController.GetHubName(), align=carbonui.Align.TOTOP, maxLines=1, top=0, padLeft=26) 88 self.mapBtn = ButtonIcon(parent=self.topCont, align=carbonui.Align.TOPLEFT, pos=(6, 4, 16, 16), texturePath=eveicon.location, func=self.ShowOnMap) 89 self.SetMapBtnStateAndHint() 90 self.summaryCont = SummaryCont(parent=self.topCont, hubController=self.hubController, top=6, padLeft=10) 91 self.scrollCont = UpgradeScrollCont(parent=self.leftCont, hubController=self.hubController) 92 self.ConstructRightSide() 93 94 def LoadWindow(self): 95 self.hubController.PrimeData() 96 self.threadedLoader.StartLoading(self.LoadScroll_thread, self) 97 self.threadedLoader.StartLoading(self.LoadTopCont_thread, self) 98 self.powerCont.LoadContAsync() 99 self.workforceCont.LoadContAsync() 100 self.threadedLoader.StartLoading(self.transitCont.LoadSection, self.transitCont) 101 self.threadedLoader.StartLoading(self.aclSectionCont.LoadSection, self.aclSectionCont) 102 self.threadedLoader.StartLoading(self.fuelCont.LoadUI, self.fuelCont) 103 self.threadedLoader.StartLoading(self.iceCont.LoadUI, self.iceCont) 104 self.threadedLoader.StartLoading(self.startupCont.LoadUI, self.startupCont) 105 106 def LoadScroll_thread(self): 107 self.scrollCont.LoadScroll() 108 109 def SaveChanges(self, *args): 110 with self.saveChangesBtn.busy_context: 111 try: 112 self.UpdateWndState() 113 self.hubController.SaveChanges() 114 finally: 115 uthread2.StartTasklet(self.UpdateWndState) 116 117 def UpdateWndState(self): 118 if self.saveChangesBtn.busy: 119 self.scrollCont.Disable() 120 else: 121 self.scrollCont.Enable() 122 123 def UpdateBtn(self): 124 if self.hubController.AreThereUnsavedChanges(): 125 self.saveChangesBtn.Enable() 126 else: 127 self.saveChangesBtn.Disable() 128 129 def OnOrderChanged(self): 130 self._UpdateWnd() 131 132 def OnOnlineStateChanged(self, typeID): 133 self.UpdateBtn() 134 135 def OnUpgradesChanged(self): 136 self._UpdateWnd() 137 138 def OnWorkforceChanged(self): 139 self._UpdateWnd() 140 141 def _UpdateWnd(self): 142 self.threadedLoader.StartLoading(self.LoadScroll_thread, self) 143 self.UpdateBtn() 144 145 def LoadTopCont_thread(self): 146 self.summaryCont.LoadSummary() 147 148 def ConstructRightSide(self): 149 cont = ContainerAutoSize(parent=self.rightCont, align=carbonui.Align.TOTOP) 150 self.powerCont = PowerCont(parent=self.rightCont, controller=self.hubController) 151 self.hubController.on_online_state_changed.connect(self.powerCont.LoadContAsync) 152 self.hubController.on_upgrades_changed.connect(self.powerCont.LoadContAsync) 153 self.workforceCont = WorkforceCont(parent=self.rightCont, controller=self.hubController, top=10) 154 self.hubController.on_online_state_changed.connect(self.workforceCont.LoadContAsync) 155 self.hubController.workforceController.on_workforce_changed.connect(self.workforceCont.LoadContAsync) 156 self.hubController.on_upgrades_changed.connect(self.workforceCont.LoadContAsync) 157 self.transitCont = TransitCont(parent=self.rightCont, align=carbonui.Align.TOTOP, workforceController=self.hubController.workforceController) 158 self.aclSectionCont = AclSectionCont(parent=self.rightCont, align=carbonui.Align.TOTOP, controller=self.hubController, top=20, canEdit=self.hubController.CanEditACL()) 159 header = carbonui.text.styles.TextDetail(parent=self.rightCont, text=GetByLabel('UI/Sovereignty/SovHub/HubWnd/FuelLevels'), color=carbonui.TextColor.SECONDARY, align=carbonui.Align.TOTOP, pickState=carbonui.PickState.ON, top=20) 160 cont = Container(parent=self.rightCont, align=carbonui.Align.TOTOP, height=120, top=0) 161 fuelGrid = LayoutGrid(parent=cont, columns=2, cellSpacing=10, align=carbonui.Align.CENTER) 162 self.fuelCont = FuelMagmaCont(parent=fuelGrid, hubController=self.hubController) 163 self.iceCont = FuelIceCont(parent=fuelGrid, hubController=self.hubController) 164 self.startupCont = StartupCostCont(parent=self.rightCont, hubController=self.hubController, top=10) 165 166 def LoadSaveBtnTooltipPanel(self, tooltipPanel, *args): 167 LoadSaveBtnTooltipPanel(tooltipPanel, self.hubController) 168 169 def OnEndScale(self, *args): 170 if self.scrollCont is None or self.scrollCont.destroyed: 171 return 172 self.scrollCont.OnWndEndScale() 173 174 def OnClassicMapChanged(self, *args): 175 self.SetMapBtnStateAndHint() 176 177 def SetMapBtnStateAndHint(self): 178 usingOldMap = classic_map_enabled_setting.is_enabled() 179 if usingOldMap: 180 self.mapBtn.Disable() 181 self.mapBtn.hint = GetByLabel('UI/Sovereignty/ShowSovHubOnMapOldMapActive') 182 else: 183 self.mapBtn.Enable() 184 self.mapBtn.hint = GetByLabel('UI/Sovereignty/ShowSovHubOnMap') 185 186 def ShowOnMap(self, *args): 187 self.ForceMarkersOn() 188 solarSystemID = self.hubController.solarSystemID 189 sm.GetService('menu').ShowInMap(itemID=solarSystemID) 190 191 def ForceMarkersOn(self): 192 settingGroupKey = VIEWMODE_MARKERS_SETTINGS 193 mapViewID = MAPVIEW_PRIMARY_ID 194 currentActive = set(GetMapViewSetting(settingGroupKey, mapViewID)) 195 if MARKERS_OPTION_SOV_HUBS in currentActive: 196 return 197 currentActive.add(MARKERS_OPTION_SOV_HUBS) 198 SetMapViewSetting(settingGroupKey, list(currentActive), mapViewID) 199 sm.ScatterEvent('OnSovHubMarkersChanged') 200 201 def CloseByUser(self, *args): 202 if self.hubController and self.hubController.AreThereUnsavedChanges(): 203 if prompt_player_fsd_dialog('ConfirmCloseSovHubWnd', {}, uiconst.YESNO, suppress=uiconst.ID_YES) != uiconst.ID_YES: 204 return 205 super(SovHubWnd, self).CloseByUser() 206 207 def Close(self, *args, **kwds): 208 with ExceptionEater('Closing SovHubWnd'): 209 if self.hubController: 210 self.hubController.Disconnect() 211 self.hubController = None 212 self.on_end_scale.disconnect(self.OnEndScale) 213 classic_map_enabled_setting.on_change.disconnect(self.OnClassicMapChanged) 214 super(SovHubWnd, self).Close(*args, **kwds)