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

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