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

campaign_cont.py (4774B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\theatersOfWar\landingPage\campaign_cont.py
      2 import logging
      3 from campaigns.client.errors import CampaignStatsRequestError
      4 from campaigns.client.v1.signals import on_campaign_completed
      5 from carbonui import Align, PickState
      6 from carbonui.primitives.container import Container
      7 from carbonui.primitives.containerAutoSize import ContainerAutoSize
      8 from carbonui.primitives.layoutGrid import LayoutGrid
      9 from carbonui.primitives.sprite import Sprite
     10 from eve.client.script.ui.control.loadingContainer import LoadingContainer
     11 from eve.client.script.ui.shared.theatersOfWar.campaigns.campaign_progress import CampaignProgress
     12 from eve.client.script.ui.shared.theatersOfWar.landingPage.landingPageWidgets import WidgetContWithContent
     13 from eveexceptions import ExceptionEater
     14 from localization import GetByLabel
     15 logger = logging.getLogger(__name__)
     16 BG_WIDTH = 552
     17 BG_HEIGHT = 712
     18 TOP_PADDING = 48
     19 
     20 class LandingPageCampaignCont(WidgetContWithContent):
     21 
     22     def ApplyAttributes(self, attributes):
     23         self.progress_cont_by_campaign_id = {}
     24         super(LandingPageCampaignCont, self).ApplyAttributes(attributes)
     25         self.window_controller = attributes.window_controller
     26         self.campaign_panel_controller = attributes.campaign_panel_controller
     27         self.background_cont = Container(parent=self, padding=(-24,
     28          -TOP_PADDING,
     29          -24,
     30          -TOP_PADDING))
     31         self.campaign_bg = Sprite(parent=self.background_cont, align=Align.CENTERTOP, pos=(0,
     32          0,
     33          BG_WIDTH,
     34          BG_HEIGHT), pickState=PickState.OFF, texturePath=self.campaign_panel_controller.campaign_landing_page_bg_path)
     35         self.set_header(self.campaign_panel_controller.campaign_landing_page_title)
     36         self.set_sub_header(GetByLabel('UI/Campaigns/GoalProgress'))
     37         self._construct_ui()
     38         self.connect_signals()
     39 
     40     def connect_signals(self):
     41         on_campaign_completed.connect(self.on_campaign_competed)
     42         self.campaign_panel_controller.on_contribution_completed_objective.connect(self.on_objective_completed_by_contribution)
     43 
     44     def disconnect_signals(self):
     45         on_campaign_completed.disconnect(self.on_campaign_competed)
     46         self.campaign_panel_controller.on_contribution_completed_objective.disconnect(self.on_objective_completed_by_contribution)
     47 
     48     def _construct_ui(self):
     49         self.loadingCont = LoadingContainer(parent=self.content_cont, failureStateMessage=GetByLabel('UI/Sovereignty/SovHub/HubWnd/FailedToFetchData'), retryBtnLabel=GetByLabel('UI/Personalization/PaintTool/ErrorRetry'), align=Align.TOTOP, height=120)
     50         grid_parent = ContainerAutoSize(parent=self.loadingCont, align=Align.TOTOP)
     51         self.grid = LayoutGrid(parent=grid_parent, align=Align.CENTER, columns=4)
     52         self.content_cont.SetAlign(Align.TOBOTTOM)
     53 
     54     def load_ui(self):
     55         self.grid.Flush()
     56         self.loadingCont.LoadContent(loadCallback=self._load_ui)
     57 
     58     def _load_ui(self):
     59         self.grid.Flush()
     60         all_campaigns_in_set = self.campaign_panel_controller.get_campaigns()
     61         self.grid.columns = len(all_campaigns_in_set)
     62         self.progress_cont_by_campaign_id.clear()
     63         for campaign in all_campaigns_in_set:
     64             p = CampaignProgress(parent=self.grid, icon_texture_path=campaign.textures.icon_path, pickState=PickState.ON, window_controller=self.window_controller, campaign_controller=campaign)
     65             self.progress_cont_by_campaign_id[campaign.campaign_id] = p
     66 
     67         self._update_campaigns()
     68 
     69     def _update_campaigns(self):
     70         all_campaigns_in_set = self.campaign_panel_controller.get_campaigns()
     71         for campaign in all_campaigns_in_set:
     72             cont = self.progress_cont_by_campaign_id.get(campaign.campaign_id, None)
     73             if cont:
     74                 try:
     75                     cont.load_progess_values()
     76                 except CampaignStatsRequestError:
     77                     logger.exception('Failed to get campaign stats')
     78                     cont.set_values('-', '-', 0)
     79 
     80     def _OnSizeChange_NoBlock(self, width, height):
     81         height += 2 * TOP_PADDING
     82         percentage = height / float(BG_HEIGHT)
     83         newHeight = int(percentage * BG_HEIGHT)
     84         newWidth = int(percentage * BG_WIDTH)
     85         self.campaign_bg.height = newHeight
     86         self.campaign_bg.width = newWidth
     87 
     88     def on_campaign_competed(self, campaign_id):
     89         self._update_campaigns()
     90 
     91     def on_objective_completed_by_contribution(self, objective_id, campaign_id):
     92         self._update_campaigns()
     93 
     94     def Close(self):
     95         super(LandingPageCampaignCont, self).Close()
     96         with ExceptionEater('Closing LandingPageCampaignCont'):
     97             self.disconnect_signals()