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

cosmeticFitting.py (6230B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\fittingScreen\cosmetics\cosmeticFitting.py
      2 import uthread2
      3 from carbonui import uiconst
      4 from carbonui.primitives.container import Container
      5 from carbonui.primitives.sprite import Sprite
      6 from eve.client.script.ui.control.eveLoadingWheel import LoadingWheel
      7 from carbonui.control.tabGroup import TabGroup
      8 from eve.client.script.ui.shared.fitting.cleanShipButton import CleanShipButton
      9 from eve.client.script.ui.shared.fittingScreen.cosmetics.cosmeticFittingCenter import CosmeticFittingCenter
     10 from eve.client.script.ui.shared.fittingScreen.cosmetics.cosmeticFittingErrorScreen import CosmeticFittingErrorScreen
     11 from eve.client.script.ui.shared.fittingScreen.cosmetics.logos import LogoSelectionPanel
     12 from eve.client.script.ui.shared.skins.controller import FittingSkinPanelController
     13 from eve.client.script.ui.shared.skins.skinPanel import SkinPanel
     14 from localization import GetByLabel
     15 import eve.client.script.ui.shared.pointerTool.pointerToolConst as pConst
     16 PANEL_WIDTH = 416
     17 TAB_ID_SKINS = 'skins'
     18 TAB_ID_EMBLEMS = 'emblems'
     19 
     20 class CosmeticFitting(Container):
     21     __notifyevents__ = ['OnCurrentStructureStateChanged']
     22 
     23     def ApplyAttributes(self, attributes):
     24         Container.ApplyAttributes(self, attributes)
     25         self.cosmeticController = attributes.cosmeticController
     26         self.controller = attributes.controller
     27         self.skinPanel = None
     28         self._loadingWheel = None
     29         sm.RegisterNotify(self)
     30         self.ConstructLayout()
     31         self.controller.on_new_itemID.connect(self.UpdateShipType)
     32 
     33     def Close(self):
     34         sm.UnregisterNotify(self)
     35         self.controller.on_new_itemID.disconnect(self.UpdateShipType)
     36         super(CosmeticFitting, self).Close()
     37 
     38     def ConstructLayout(self):
     39         self.ConstructLeftPanel()
     40         self.centerParent = Container(name='centerParent', parent=self, align=uiconst.TOALL)
     41         self.cosmeticFittingCenter = CosmeticFittingCenter(parent=self.centerParent, controller=self.cosmeticController)
     42         Sprite(parent=self.centerParent, name='bg', align=uiconst.TOALL, texturePath='res:/UI/Texture/classes/Fitting/Cosmetics/cosmeticFittingBackground.png', state=uiconst.UI_DISABLED, padding=(-16, -16, -16, -16))
     43         self.cleanShipButton = CleanShipButton(name='cleanShipButton', parent=self, align=uiconst.BOTTOMRIGHT, controller=self.controller, display=not self.controller.ControllerForCategory() == const.categoryStructure)
     44 
     45     def ConstructLeftPanel(self):
     46         self.leftPanelContainer = Container(name='leftPanelContainer', parent=self, align=uiconst.TOLEFT, width=PANEL_WIDTH, padLeft=-8, padBottom=-8)
     47         self.ConstructCosmeticTypeTabGroup()
     48         self.ConstructSkinPanel()
     49         self._loadingWheel = LoadingWheel(parent=self.leftPanelContainer, align=uiconst.CENTER, width=64, height=64, state=uiconst.UI_HIDDEN)
     50         self.errorScreen = CosmeticFittingErrorScreen(name='errorScreen', parent=self.logosTabContainer, align=uiconst.TOALL, centralContWidth=PANEL_WIDTH)
     51         self.errorScreen.CloseScreen(animate=False)
     52         self.logoSelectionPanel = LogoSelectionPanel(name='logoSelectionPanel', parent=self.logosTabContainer, align=uiconst.TOLEFT, width=PANEL_WIDTH, fittingErrorCallback=self._OnEnableCosmeticsFailedCallback, controller=self.cosmeticController)
     53 
     54     def ConstructCosmeticTypeTabGroup(self):
     55         self.cosmeticTypeTabGroup = TabGroup(name='cosmeticTypeTabGroup', parent=self.leftPanelContainer, align=uiconst.TOTOP, groupID='CosmeticType', analyticID='CosmeticTypeTabGroup', callback=self.OnCosmeticTypeTabChange, padLeft=16)
     56         self.skinsTabContainer = Container(name='skinsTabContainer', parent=self.leftPanelContainer, align=uiconst.TOLEFT, width=PANEL_WIDTH, bgColor=(1.0, 1.0, 1.0, 0.05))
     57         self.logosTabContainer = Container(name='logosTabContainer', parent=self.leftPanelContainer, align=uiconst.TOALL, bgColor=(1.0, 1.0, 1.0, 0.05))
     58         self.cosmeticTypeTabGroup.AddTab(label=GetByLabel('UI/ShipCosmetics/Skins'), panel=self.skinsTabContainer, tabID=TAB_ID_SKINS, uniqueName=pConst.UNIQUE_NAME_FITTING_SKIN_BROWSER)
     59         self.cosmeticTypeTabGroup.AddTab(label=GetByLabel('UI/ShipCosmetics/Emblems'), panel=self.logosTabContainer, tabID=TAB_ID_EMBLEMS)
     60         self.cosmeticTypeTabGroup.AutoSelect()
     61 
     62     def ConstructSkinPanel(self):
     63         self.skinPanel = SkinPanel(name='skinPanel', parent=self.skinsTabContainer, align=uiconst.TOALL, controller=FittingSkinPanelController(fitting=self.cosmeticController), settingsPrefix='Fitting_SkinPanel', padding=12)
     64 
     65     def PopulateSkinPanel(self):
     66         if not self.skinPanel:
     67             return
     68         if not self.cosmeticTypeTabGroup.GetSelectedID() == TAB_ID_SKINS:
     69             return
     70         self.ShowLoadingWheel()
     71         self.skinPanel.SetPreviewType(self.controller.typeID)
     72         self.skinPanel.Load()
     73         self.HideLoadingWheel()
     74 
     75     def UpdateShipType(self, *args, **kwargs):
     76         self.skinPanel.SetPreviewType(self.controller.typeID)
     77 
     78     def ShowLoadingWheel(self):
     79         if self._loadingWheel:
     80             self._loadingWheel.state = uiconst.UI_DISABLED
     81 
     82     def HideLoadingWheel(self):
     83         if self._loadingWheel:
     84             self._loadingWheel.state = uiconst.UI_HIDDEN
     85 
     86     def OnCosmeticTypeTabChange(self, newTabID, _oldTabID):
     87         if newTabID == TAB_ID_SKINS:
     88             self.PopulateSkinPanel()
     89 
     90     def GoToTab(self, tabID):
     91         self.cosmeticTypeTabGroup.SelectByID(tabID)
     92 
     93     def OnCurrentStructureStateChanged(self, _solarSystemID, structureID, _state):
     94         if structureID != session.shipid:
     95             return
     96         uthread2.call_after_simtime_delay(self.skinPanel.Reload, 3)
     97 
     98     def AdjustErrorScreenPadding(self, padding):
     99         self.errorScreen.padding = (-padding[0],
    100          -padding[1],
    101          -padding[2],
    102          -padding[3])
    103 
    104     def _OnEnableCosmeticsFailedCallback(self):
    105         self.errorScreen.ShowScreen(GetByLabel('UI/Fitting/FittingWindow/Cosmetic/FittingFailedErrorMessage'), GetByLabel('UI/Fitting/FittingWindow/Cosmetic/FittingFailedButton'), self._CloseErrorScreen)
    106 
    107     def _CloseErrorScreen(self):
    108         self.errorScreen.CloseScreen(True)