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

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)