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)