logos.py (6459B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\fittingScreen\cosmetics\logos.py 2 from carbonui import const as uiconst 3 from carbonui.control.scrollContainer import ScrollContainer 4 from carbonui.primitives.container import Container 5 from eve.client.script.ui.control.eveLabel import EveLabelMedium 6 from eve.client.script.ui.control.loadingContainer import LoadingContainer, LoadingSpriteSize 7 from eve.client.script.ui.shared.fittingScreen.cosmetics.logoGroups import AllianceLogoGroup, CorporationLogoGroup 8 from shipcosmetics.common.const import CosmeticsType 9 from shipcosmetics.client.fittingsgateway.fittingsSignals import on_ship_cosmetics_changed 10 from shipcosmetics.client.licensegateway.licenseSignals import on_ship_cosmetics_license_change 11 from localization import GetByLabel 12 13 class LogoSelectionPanel(Container): 14 __notifyevents__ = ['ProcessActiveShipChanged', 'OnSessionChanged', 'OnCorporationChanged'] 15 16 def ApplyAttributes(self, attributes): 17 self._fittingErrorCallback = attributes.fittingErrorCallback 18 self.cosmeticController = attributes.controller 19 super(LogoSelectionPanel, self).ApplyAttributes(attributes) 20 self.loadingCont = None 21 self._ConstructContents() 22 sm.RegisterNotify(self) 23 on_ship_cosmetics_changed.connect(self.OnShipCosmeticsChanged) 24 on_ship_cosmetics_license_change.connect(self.OnLicenseStatusChanged) 25 self.cosmeticController.on_new_itemID.connect(self.OnNewItem) 26 27 def Close(self, *args): 28 sm.UnregisterNotify(self) 29 on_ship_cosmetics_changed.disconnect(self.OnShipCosmeticsChanged) 30 on_ship_cosmetics_license_change.disconnect(self.OnLicenseStatusChanged) 31 self.cosmeticController.on_new_itemID.disconnect(self.OnNewItem) 32 super(LogoSelectionPanel, self).Close() 33 34 def _ConstructContents(self): 35 self.loadingCont = LoadingContainer(parent=self, name='loadingCont', align=uiconst.TOALL, loadingSpriteSize=LoadingSpriteSize.LARGE, failureStateMessage=GetByLabel('UI/Fitting/FittingWindow/Cosmetic/FetchLicensesFailedErrorMessage'), retryBtnLabel=GetByLabel('UI/Fitting/FittingWindow/Cosmetic/FetchingFailedButton')) 36 scrollCont = ScrollContainer(parent=self.loadingCont, name='scrollCont', align=uiconst.TOALL) 37 self.noLogosLabel = EveLabelMedium(parent=self.loadingCont, align=uiconst.CENTER, text=GetByLabel('UI/ShipCosmetics/LogoSelectionUnavailable')) 38 self.noLogosLabel.display = False 39 self.allianceLogoGroup = AllianceLogoGroup(name='allianceLogoGroup', parent=scrollCont, align=uiconst.TOTOP, padTop=12, errorCallback=self._fittingErrorCallback) 40 self.allianceLogoGroup.display = False 41 self.corporationLogoGroup = CorporationLogoGroup(name='corporationLogoGroup', parent=scrollCont, align=uiconst.TOTOP, errorCallback=self._fittingErrorCallback) 42 self.corporationLogoGroup.display = False 43 self.loadingCont.LoadContent(loadCallback=self._LoadDataCallback) 44 45 def _LoadDataCallback(self): 46 logoData = self.FetchLogoData(True) 47 self.UpdateLogoEntries(logoData) 48 49 def _QuickLoadDataCallback(self): 50 logoData = self.FetchLogoData(False) 51 self.UpdateLogoEntries(logoData) 52 53 def QuickContentReload(self): 54 self.loadingCont.LoadContent(loadCallback=self._QuickLoadDataCallback) 55 56 def UpdateLogoEntries(self, logoData): 57 self.noLogosLabel.display = logoData is None 58 self.allianceLogoGroup.display = logoData is not None 59 self.corporationLogoGroup.display = logoData is not None 60 if logoData is not None: 61 self.allianceLogoGroup.UpdateLayout(logoData) 62 self.corporationLogoGroup.UpdateLayout(logoData) 63 64 def FetchLogoData(self, forceRefresh = False): 65 existingLicenses = sm.GetService('cosmeticsLicenseSvc').get_ship_licenses_for_ship_type(sm.GetService('godma').GetItem(session.shipid).typeID) 66 ownedLicenses = sm.GetService('cosmeticsLicenseSvc').get_owned_ship_licenses_for_ship(session.shipid, force_refresh=forceRefresh) 67 selectedCosmetics = sm.GetService('cosmeticsSvc').get_enabled_ship_cosmetics(session.shipid, forceRefresh=forceRefresh, raises=True) 68 existing_alliance_license = None 69 existing_corp_license = None 70 for license in existingLicenses: 71 if license.cosmeticType == CosmeticsType.ALLIANCE_LOGO: 72 existing_alliance_license = license 73 elif license.cosmeticType == CosmeticsType.CORPORATION_LOGO: 74 existing_corp_license = license 75 76 owned_alliance_license = None 77 owned_corp_license = None 78 for license in ownedLicenses: 79 if license.cosmeticType == CosmeticsType.ALLIANCE_LOGO: 80 owned_alliance_license = license 81 elif license.cosmeticType == CosmeticsType.CORPORATION_LOGO: 82 owned_corp_license = license 83 84 logoData = LogoData(existence=LogoProperties(alliance=existing_alliance_license, corporation=existing_corp_license), eligibility=LogoProperties(alliance=owned_alliance_license, corporation=owned_corp_license), selection=LogoProperties(alliance=owned_alliance_license if CosmeticsType.ALLIANCE_LOGO in selectedCosmetics else None, corporation=owned_corp_license if CosmeticsType.CORPORATION_LOGO in selectedCosmetics else None)) 85 return logoData 86 87 def OnSessionChanged(self, _isremote, _session, change): 88 if 'corpid' in change.keys() or 'allianceid' in change.keys(): 89 self.QuickContentReload() 90 91 def OnShipCosmeticsChanged(self, _ship_id, _cosmetics_types): 92 self.QuickContentReload() 93 94 def OnLicenseStatusChanged(self, _cosmeticsLicenseID, _enable): 95 self.QuickContentReload() 96 97 def ProcessActiveShipChanged(self, _shipID, _oldShipID): 98 self.QuickContentReload() 99 100 def OnCorporationChanged(self, _corpID, _change): 101 self.QuickContentReload() 102 103 def OnNewItem(self, *args): 104 self.QuickContentReload() 105 106 107 class LogoProperties(object): 108 109 def __init__(self, alliance = None, corporation = None): 110 self.alliance = alliance 111 self.corporation = corporation 112 113 114 class LogoData(object): 115 116 def __init__(self, existence = LogoProperties(), eligibility = LogoProperties(), selection = LogoProperties()): 117 self.existence = existence 118 self.eligibility = eligibility 119 self.selection = selection