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