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

paragonLpStorePanel.py (10138B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\station\loyaltyPointStore\paragonLpStorePanel.py
      2 import evetypes
      3 import copy
      4 from carbonui.button.const import HEIGHT_NORMAL
      5 from eve.client.script.ui.control.entries.util import GetFromClass
      6 from eve.client.script.ui.cosmetics.structure.cosmeticLicenseErrorScreen import CosmeticLicenseErrorScreen
      7 from eve.client.script.ui.station.loyaltyPointStore.lpOfferEntry import AllianceLogoLPOfferEntry, CorporationLogoLPOfferEntry, LPOfferEntry, on_cosmetic_license_purchase_failed
      8 from eve.client.script.ui.station.loyaltyPointStore.lpOfferEntry2 import LPOfferEntry2
      9 from eve.client.script.ui.station.loyaltyPointStore.paragonLpStoreFilters import ParagonLPStoreFilters
     10 from eve.client.script.ui.station.loyaltyPointStore.paragonLpStoreConst import FILTER_ACQUIRED, FILTER_ALLIANCE_EMBLEMS, FILTER_ALL_FACTIONS, FILTER_ALL_HULLS, FILTER_CORP_EMBLEMS, FILTER_EMPIRE_FACTIONS, FILTER_FACTION, FILTER_HULL, FILTER_OTHER_FACTIONS
     11 from eve.common.lib import appConst
     12 from carbonui import uiconst
     13 from inventorycommon.const import typeLoyaltyPointsHeraldry
     14 from localization import GetByLabel
     15 from eve.client.script.ui.control.infoNotice import InfoNotice
     16 from eve.client.script.ui.station.loyaltyPointStore.lpStorePanel import LPStorePanel
     17 from shipcosmetics.client.licensegateway.licenseSignals import on_enable_heraldry_purchase_flag_change
     18 from shipcosmetics.common.const import CosmeticsType
     19 _BUY_BUTTON_COLUMN_EMPTY_TITLE = ' '
     20 _BUY_BUTTON_COLUMN_MIN_WIDTH = 220
     21 REWARD_COLUMN_WIDTH_MIN = 568
     22 COST_COLUMN_WIDTH_MIN = 105
     23 
     24 class ParagonLPStorePanel(LPStorePanel):
     25     __notifyevents__ = ['OnLPStoreParagonFilterChange']
     26 
     27     def ApplyAttributes(self, attributes):
     28         self.cosmeticsLicenseSvc = sm.GetService('cosmeticsLicenseSvc')
     29         self.fetchFreshCosmeticLicenses = True
     30         self._errorScreenPadding = attributes.errorScreenPadding
     31         super(ParagonLPStorePanel, self).ApplyAttributes(attributes)
     32         on_cosmetic_license_purchase_failed.connect(self._OnCosmeticLicensePurchaseFailed)
     33         on_enable_heraldry_purchase_flag_change.connect(self._OnHeraldryPurchaseFlagChanged)
     34         sm.RegisterNotify(self)
     35 
     36     def _OnClose(self, *args):
     37         on_cosmetic_license_purchase_failed.disconnect(self._OnCosmeticLicensePurchaseFailed)
     38         on_enable_heraldry_purchase_flag_change.disconnect(self._OnHeraldryPurchaseFlagChanged)
     39         super(ParagonLPStorePanel, self)._OnClose(*args)
     40 
     41     def ConstructTopParent(self):
     42         padding = (-self._errorScreenPadding[0],
     43          -self._errorScreenPadding[1],
     44          -self._errorScreenPadding[2],
     45          -self._errorScreenPadding[3])
     46         self.errorScreen = CosmeticLicenseErrorScreen(name='errorScreen', parent=self, align=uiconst.TOALL, padding=padding)
     47         self.errorScreen.CloseScreen(animate=False)
     48         super(ParagonLPStorePanel, self).ConstructTopParent()
     49 
     50     def ConstructInfoCont(self):
     51         super(ParagonLPStorePanel, self).ConstructInfoCont()
     52         InfoNotice(name='autoInjectInfo', parent=self.topParent, align=uiconst.TOTOP, labelText=GetByLabel('UI/ShipCosmetics/AutoInjectNotice'))
     53         if self.cosmeticsLicenseSvc.is_emblem_lp_cost_removed():
     54             InfoNotice(name='experimentInfo', parent=self.topParent, align=uiconst.TOTOP, labelText='LP Costs for all Emblems have been reduced to zero for the purpose of this mass test', padTop=6)
     55 
     56     def ConstructFilterCont(self):
     57         self.filters = ParagonLPStoreFilters(parent=self.topParent, name='filters', align=uiconst.TOTOP, height=HEIGHT_NORMAL, padding=(0, 32, 0, 16), filterEditClearedCallback=self.RefreshOffers, filterEditCallback=self.RefreshOffers, corpID=self.corpID)
     58 
     59     def RefreshPresets(self):
     60         pass
     61 
     62     def _GetStoreOffers(self):
     63         if self.cosmeticsLicenseSvc.are_heraldry_purchases_enabled():
     64             return sm.GetService('lpstore').GetOffers(self.corpID)
     65         else:
     66             return []
     67 
     68     def OnLPStoreParagonFilterChange(self):
     69         self.RefreshOffers()
     70 
     71     def _ProcessOffers(self, storeOffers, filters, textFilter):
     72         offers = []
     73         if self.cosmeticsLicenseSvc.are_heraldry_purchases_enabled():
     74             try:
     75                 ownedLicenses = self.cosmeticsLicenseSvc.get_owned_ship_licenses(force_refresh=self.fetchFreshCosmeticLicenses)
     76                 if self.fetchFreshCosmeticLicenses:
     77                     self.fetchFreshCosmeticLicenses = False
     78             except RuntimeError:
     79                 ownedLicenses = []
     80                 self.errorScreen.ShowScreen(GetByLabel('UI/LPStore/FetchLicensesFailedErrorMessage'), GetByLabel('UI/LPStore/FetchLicensesFailedErrorSubtext'), GetByLabel('UI/LPStore/FetchingFailedButton'), self._RetryFetchingCosmeticsLicenses)
     81 
     82         def IsLicenseOwned(license):
     83             for ownedLicense in ownedLicenses:
     84                 if ownedLicense.fsdTypeID == license.fsdTypeID:
     85                     return True
     86 
     87             return False
     88 
     89         for offer in storeOffers:
     90             if evetypes.GetGroupID(offer.typeID) == appConst.groupShipCosmeticLicense:
     91                 cosmeticLicense = self.cosmeticsLicenseSvc.get_by_ship_license_type_id(offer.typeID)
     92                 offer['isOwned'] = IsLicenseOwned(cosmeticLicense)
     93                 offer['shipTypeID'] = cosmeticLicense.shipTypeID
     94                 offer['cosmeticType'] = cosmeticLicense.cosmeticType
     95                 if self.cosmeticsLicenseSvc.is_emblem_lp_cost_removed():
     96                     offer = copy.deepcopy(offer)
     97                     offer.lpCost = 0
     98                 sortID = 'sort_%s' % GetByLabel('UI/LPStore/EMCost')
     99                 offer[sortID] = offer.lpCost
    100                 if not self.Check(offer, filters, textFilter):
    101                     continue
    102                 if cosmeticLicense.cosmeticType == CosmeticsType.ALLIANCE_LOGO:
    103                     offers.append(GetFromClass(AllianceLogoLPOfferEntry, offer))
    104                 elif cosmeticLicense.cosmeticType == CosmeticsType.CORPORATION_LOGO:
    105                     offers.append(GetFromClass(CorporationLogoLPOfferEntry, offer))
    106             else:
    107                 offers.append(GetFromClass(LPOfferEntry, offer))
    108 
    109         return offers
    110 
    111     def Check(self, offer, filters, textFilter = ''):
    112         if textFilter and evetypes.GetName(offer.typeID).lower().find(textFilter) < 0:
    113             return False
    114         if not hasattr(offer, 'shipTypeID') or not hasattr(offer, 'isOwned') or not hasattr(offer, 'cosmeticType'):
    115             return False
    116         includedCosmeticsTypes = []
    117         for f, value in filters.iteritems():
    118             if f == FILTER_FACTION and value != FILTER_ALL_FACTIONS:
    119                 factionID = evetypes.GetFactionID(offer.shipTypeID)
    120                 if value == FILTER_OTHER_FACTIONS:
    121                     if factionID in FILTER_EMPIRE_FACTIONS:
    122                         return False
    123                 elif factionID is None or factionID != value:
    124                     return False
    125             groupID = evetypes.GetGroupID(offer.shipTypeID)
    126             if f == FILTER_HULL and value != FILTER_ALL_HULLS:
    127                 if groupID != value:
    128                     return False
    129             if f == FILTER_CORP_EMBLEMS and value:
    130                 includedCosmeticsTypes.append(CosmeticsType.CORPORATION_LOGO)
    131             if f == FILTER_ALLIANCE_EMBLEMS and value:
    132                 includedCosmeticsTypes.append(CosmeticsType.ALLIANCE_LOGO)
    133             if f == FILTER_ACQUIRED and value:
    134                 if offer.isOwned:
    135                     return False
    136 
    137         if offer.cosmeticType not in includedCosmeticsTypes:
    138             return False
    139         return True
    140 
    141     def _GetHeaders(self):
    142         headers = [GetByLabel('UI/LPStore/Reward')]
    143         requirements = self.lpSvc.GetRequirements(self.corpID)
    144         for requirementColumn in requirements:
    145             costLabelPath = requirementColumn.costLabelPath
    146             if costLabelPath:
    147                 costLabel = GetByLabel(costLabelPath)
    148                 headers.append(costLabel)
    149 
    150         if self.hasStandingsRequirement:
    151             headers.append(GetByLabel('UI/LPStore/StandingsRequired'))
    152         headers.append(_BUY_BUTTON_COLUMN_EMPTY_TITLE)
    153         return headers
    154 
    155     def _GetMinColumnWidths(self):
    156         minColumnWidths = {GetByLabel('UI/LPStore/Reward'): REWARD_COLUMN_WIDTH_MIN}
    157         requirements = self.lpSvc.GetRequirements(self.corpID)
    158         for requirementColumn in requirements:
    159             costLabelPath = requirementColumn.costLabelPath
    160             if costLabelPath:
    161                 costLabel = GetByLabel(costLabelPath)
    162                 minColumnWidths[costLabel] = COST_COLUMN_WIDTH_MIN
    163 
    164         if self.hasStandingsRequirement:
    165             minColumnWidths[GetByLabel('UI/LPStore/StandingsRequired')] = 86
    166         minColumnWidths[_BUY_BUTTON_COLUMN_EMPTY_TITLE] = _BUY_BUTTON_COLUMN_MIN_WIDTH
    167         return minColumnWidths
    168 
    169     def _RetryFetchingCosmeticsLicenses(self):
    170         self.errorScreen.CloseScreen(True)
    171         self.Refresh()
    172 
    173     def _OnHeraldryPurchaseFlagChanged(self, _flagValue):
    174         if self.offerRefreshDespammerInitiated:
    175             self.RefreshOffers()
    176 
    177     def _CloseErrorScreen(self):
    178         self.errorScreen.CloseScreen(True)
    179 
    180     def _OnCosmeticLicensePurchaseFailed(self):
    181         self.errorScreen.ShowScreen(GetByLabel('UI/LPStore/CosmeticLicensePurchaseFailedError'), GetByLabel('UI/LPStore/CosmeticLicensePurchaseFailedSubtext'), GetByLabel('UI/LPStore/CosmeticLicensePurchaseFailedButton'), self._CloseErrorScreen)
    182 
    183     def _GetCorpLPsLabel(self, lpAmount):
    184         return GetByLabel('UI/Common/TypeAmount', item=typeLoyaltyPointsHeraldry, amount=lpAmount)
    185 
    186     def _GetSortByLabel(self):
    187         return GetByLabel('UI/LPStore/EMCost')
    188 
    189     def _GetExchangeRateHint(self, fromCorpName, toCorpName):
    190         return GetByLabel('UI/LPStore/ExchangeRateNotDefinedEM', fromCorpName=fromCorpName, toCorpName=toCorpName)
    191 
    192     def _OnSizeChange_NoBlock(self, *args):
    193         super(ParagonLPStorePanel, self)._OnSizeChange_NoBlock(*args)
    194         if hasattr(self, 'errorScreen'):
    195             self.errorScreen.AdjustWidth(args[0])