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

rewardsCont.py (10067B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\careerPortal\rewards\rewardsCont.py
      2 import carbonui.const as uiconst
      3 import logging
      4 import trinity
      5 import uthread2
      6 from carbonui.control.button import Button
      7 from carbonui.control.scrollContainer import ScrollContainer
      8 from carbonui.control.section import Section
      9 from carbonui.primitives.containerAutoSize import ContainerAutoSize
     10 from carbonui.primitives.flowcontainer import FlowContainer
     11 from carbonui.primitives.frame import Frame
     12 from carbonui.primitives.line import Line
     13 from carbonui.uianimations import animations
     14 from careergoals.client.career_goal_svc import get_career_goals_svc
     15 from careergoals.client.const import RewardLabel
     16 from careergoals.client.signal import on_goal_completed, on_reward_claimed, on_reward_claimed_failed
     17 from eve.client.script.ui import eveThemeColor, eveColor
     18 from eve.client.script.ui.control.eveLabel import EveCaptionLarge
     19 from eve.client.script.ui.shared.careerPortal.cpSignals import on_clicked_outside
     20 from eve.client.script.ui.shared.careerPortal.rewards.rewardEntry import GraduationRewardEntry, OmegaGraduationRewardEntry, OmegaRewardEntry, RewardEntry
     21 from eve.client.script.ui.util.uix import GetTextWidth, GetTextHeight
     22 from eveexceptions import ExceptionEater
     23 from localization import GetByLabel
     24 from eve.client.script.ui.shared.pointerTool import pointerToolConst as pConst
     25 logger = logging.getLogger(__name__)
     26 EXPANDED_WIDTH = 444
     27 REWARD_HEADER_PADDING = 24
     28 REWARD_HEADER_HEIGHT = 30
     29 REWARD_ENTRY_PADDING = 8
     30 SCROLL_CONTAINER_PADDING = 24
     31 DOT_SIZE_SMALL = 16
     32 DOT_SIZE_BIG = 32
     33 NO_CONTENT_HEIGHT = 150
     34 MAX_HEIGHT = 754
     35 
     36 class RewardsCont(Section):
     37     uniqueUiName = pConst.UNIQUE_NAME_ACP_REWARDS_CONTAINER
     38     default_state = uiconst.UI_NORMAL
     39     default_name = 'RewardsContainer'
     40     default_color = (0, 0, 0, 0.9)
     41 
     42     def ApplyAttributes(self, attributes):
     43         self._expanded = False
     44         self._lenRewardsLoading = 0
     45         super(RewardsCont, self).ApplyAttributes(attributes)
     46         self._collapsedWidth = 2 * REWARD_HEADER_PADDING + GetTextWidth(self.titleLabel.text, fontsize=self.titleLabel.fontsize, fontStyle=self.titleLabel.fontStyle)
     47         self._collapsedWidthWithBadge = self._collapsedWidth + 10
     48         self._collapsedHeight = 2 * REWARD_HEADER_PADDING + GetTextHeight(self.titleLabel.text, fontsize=self.titleLabel.fontsize, fontStyle=self.titleLabel.fontStyle)
     49         goal_data_controller = get_career_goals_svc().get_goal_data_controller()
     50         if goal_data_controller.get_claimable_rewards_count() > 0 or len(goal_data_controller.get_local_claimed_rewards()) > 0:
     51             uthread2.StartTasklet(self.ConstructExpandedView)
     52         else:
     53             self.ConstructCollapsedView()
     54         on_goal_completed.connect(self.AddClaimableGoal)
     55         on_reward_claimed.connect(self.OnRewardClaimed)
     56         on_clicked_outside.connect(self.OnClickedOutside)
     57         on_reward_claimed_failed.connect(self.OnRewardClaimedFailed)
     58 
     59     def _ConstructLine(self):
     60         Line(parent=self, align=uiconst.TOTOP, outputMode=trinity.Tr2SpriteTarget.COLOR_AND_GLOW, color=eveThemeColor.THEME_ACCENT)
     61 
     62     def Close(self):
     63         with ExceptionEater('disconnectSignals'):
     64             on_goal_completed.disconnect(self.AddClaimableGoal)
     65             on_reward_claimed.disconnect(self.OnRewardClaimed)
     66             on_clicked_outside.disconnect(self.OnClickedOutside)
     67             on_reward_claimed_failed.disconnect(self.OnRewardClaimedFailed)
     68         super(RewardsCont, self).Close()
     69 
     70     def _ConstructHeader(self):
     71         self._ConstructLine()
     72         self.headerContainer = FlowContainer(name='headerContainer', parent=self, align=uiconst.TOTOP, padding=(REWARD_HEADER_PADDING,
     73          REWARD_HEADER_PADDING,
     74          REWARD_HEADER_PADDING,
     75          REWARD_HEADER_PADDING), height=REWARD_HEADER_HEIGHT, contentSpacing=(8, 0))
     76         self.titleLabel = EveCaptionLarge(parent=ContainerAutoSize(parent=self.headerContainer, align=uiconst.NOALIGN), name='headerLabel', align=uiconst.CENTER, state=uiconst.UI_DISABLED, text=GetByLabel('UI/CareerPortal/YourRewards'))
     77         self.claimAllBtn = Button(parent=self.headerContainer, uniqueUiName=pConst.UNIQUE_NAME_ACP_CLAIM_ALL_BUTTON, label=GetByLabel('UI/CareerPortal/ClaimAllRewards'), align=uiconst.NOALIGN, func=self.ClaimAll)
     78         self._UpdateButtonState()
     79 
     80     def _ConstructMainContainer(self):
     81         self.rewardsScroll = ScrollContainer(name='rewardsScroll', parent=self, align=uiconst.TOALL, padding=(SCROLL_CONTAINER_PADDING,
     82          0,
     83          SCROLL_CONTAINER_PADDING,
     84          0))
     85 
     86     def _ConstructFrame(self):
     87         Frame(bgParent=self, texturePath='res:/UI/Texture/Shared/DarkStyle/panel1Corner_Solid.png', cornerSize=9, color=eveColor.BLACK, opacity=0.9)
     88 
     89     def _GetEntries(self):
     90         return self.rewardsScroll.mainCont.children
     91 
     92     def ClaimAll(self, *args):
     93         self.claimAllBtn.Disable()
     94         entries = self._GetEntries()
     95         self.lenRewardsLoading = len(entries)
     96         for entry in entries:
     97             entry.ClickClaim()
     98 
     99     @property
    100     def lenRewardsLoading(self):
    101         return self._lenRewardsLoading
    102 
    103     @lenRewardsLoading.setter
    104     def lenRewardsLoading(self, newValue):
    105         if newValue == 0:
    106             self._UpdateButtonState()
    107         self._lenRewardsLoading = newValue
    108 
    109     def ConstructCollapsedView(self):
    110         self._expanded = False
    111         self.rewardsScroll.Hide()
    112         self.claimAllBtn.Hide()
    113 
    114     def ConstructExpandedView(self):
    115         self._expanded = True
    116         self.width = EXPANDED_WIDTH
    117         goals_with_claimable_rewards = get_career_goals_svc().get_goal_data_controller().get_goals_with_claimable_rewards()
    118         for goal in goals_with_claimable_rewards:
    119             for reward_label in goal.get_unclaimed_reward_labels():
    120                 self._AddRewardEntry(goal, reward_label, False)
    121 
    122         goals_with_local_claimed_rewards = get_career_goals_svc().get_goal_data_controller().get_local_claimed_rewards()
    123         for goal_id, reward_labels in goals_with_local_claimed_rewards.iteritems():
    124             goal = get_career_goals_svc().get_goal_data_controller().get_goal(goal_id)
    125             if not goal:
    126                 logger.exception('failed to construct a reward entry for goal with claimed rewards, goal_id: %s', goal_id)
    127                 continue
    128             for reward_label in reward_labels:
    129                 self._AddRewardEntry(goal, reward_label, False)
    130 
    131         self._AdjustHeight()
    132 
    133     def AddClaimableGoal(self, goal_id):
    134         self._Expand()
    135         goal = get_career_goals_svc().get_goal_data_controller().get_goal(goal_id)
    136         if not goal:
    137             return
    138         if len(goal.get_unclaimed_rewards()) > 0:
    139             self.rewardsScroll.HideNoContentHint()
    140         for reward_label in goal.get_unclaimed_reward_labels():
    141             self._AddRewardEntry(goal, reward_label, False)
    142 
    143         self._UpdateButtonState()
    144 
    145     def _AddRewardEntry(self, goal, reward_label, move_to_top = True):
    146         if move_to_top:
    147             if len(self._GetEntries()) > 0:
    148                 self._GetEntries()[0].top = REWARD_ENTRY_PADDING
    149         entry = self.get_reward_entry_class(goal, reward_label)(parent=self.rewardsScroll, reward_label=reward_label, goal=goal)
    150         if move_to_top:
    151             entry.SetOrder(0)
    152         else:
    153             isFirst = entry.GetOrder() == 0
    154             entry.top = 0 if isFirst else REWARD_ENTRY_PADDING
    155         self._AdjustHeight()
    156 
    157     def get_reward_entry_class(self, goal, reward_label):
    158         is_omega = reward_label == RewardLabel.OMEGA
    159         if get_career_goals_svc().get_goal_data_controller().is_career_path_goal(goal.goal_id, None):
    160             if is_omega:
    161                 return OmegaGraduationRewardEntry
    162             return GraduationRewardEntry
    163         if is_omega:
    164             return OmegaRewardEntry
    165         return RewardEntry
    166 
    167     def _AdjustHeight(self):
    168         if self._expanded:
    169             newHeight = 78
    170             entries = self._GetEntries()
    171             for i, each in enumerate(entries):
    172                 padding = 0 if i == 0 else REWARD_ENTRY_PADDING
    173                 newHeight += each.height + padding
    174 
    175             self.height = min(newHeight + SCROLL_CONTAINER_PADDING, MAX_HEIGHT)
    176             self.rewardsScroll.padBottom = SCROLL_CONTAINER_PADDING if len(entries) >= 5 else 0
    177         else:
    178             self.height = self._collapsedHeight
    179 
    180     def OnRewardClaimed(self, *args):
    181         self._UpdateButtonState()
    182         if len(self._GetEntries()) <= 0:
    183             self._Collapse()
    184         self.lenRewardsLoading -= 1
    185 
    186     def OnRewardClaimedFailed(self, *args):
    187         self.lenRewardsLoading -= 1
    188 
    189     def OnClickedOutside(self):
    190         if self._expanded:
    191             self._Collapse()
    192 
    193     def OnClick(self, *args):
    194         if not self._expanded and len(self._GetEntries()) > 0:
    195             self._Expand()
    196 
    197     def _UpdateButtonState(self):
    198         self.claimAllBtn.enabled = get_career_goals_svc().get_goal_data_controller().get_claimable_rewards_count() > 0
    199 
    200     def _Expand(self):
    201         if not self._expanded:
    202             self._expanded = True
    203             self.align = uiconst.TOTOP
    204             self.rewardsScroll.Show()
    205             self.claimAllBtn.Show()
    206             animations.MorphScalar(self, 'width', startVal=self.width, endVal=EXPANDED_WIDTH, duration=0.2)
    207             for entry in self._GetEntries():
    208                 animations.FadeTo(entry, entry.opacity, 1.0, duration=0.2, timeOffset=0.2)
    209 
    210             self._AdjustHeight()
    211 
    212     def _Collapse(self):
    213         if self._expanded:
    214             self._expanded = False
    215             self.align = uiconst.TOPLEFT
    216             self.rewardsScroll.Hide()
    217             self.claimAllBtn.Hide()
    218             width = self._collapsedWidth
    219             animations.MorphScalar(self, 'width', startVal=self.displayWidth, endVal=width, duration=0.2)
    220             for entry in self._GetEntries():
    221                 animations.FadeTo(entry, entry.opacity, 0.0, duration=0.2)
    222 
    223             self.height = self._collapsedHeight