progressBar.py (10797B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\careerPortal\progressBar.py 2 import appConst 3 import trinity 4 from carbon.common.script.sys.serviceConst import ROLE_GML 5 from carbonui import uiconst 6 from carbonui.primitives.container import Container 7 from carbonui.primitives.containerAutoSize import ContainerAutoSize 8 from carbonui.primitives.frame import Frame 9 from carbonui.primitives.sprite import Sprite 10 from carbonui.primitives.stretchspritehorizontal import StretchSpriteHorizontal 11 from carbonui.uianimations import animations 12 from carbonui.uicore import uicore 13 from careergoals.client.career_goal_svc import get_career_goals_svc 14 from careergoals.client.signal import on_goal_progress_changed, on_goal_completed, on_definitions_loaded 15 from eve.client.script.ui import eveColor 16 from eve.client.script.ui.control.eveLabel import EveLabelMedium, EveCaptionSmall 17 from eve.client.script.ui.control.gauge import Gauge 18 from eve.client.script.ui.control.infoIcon import CheckMarkGlyphIcon 19 from eve.client.script.ui.control.itemIcon import ItemIcon 20 from eve.client.script.ui.shared.careerPortal.util import get_overall_progress_goals_description 21 from eve.client.script.ui.tooltips.tooltipsWrappers import TooltipHeaderDescriptionWrapper 22 from eve.client.script.ui.util.uix import QtyPopup 23 from localization import GetByLabel 24 ICON_SIZE = 24 25 GAUGE_CONT_HEIGHT = 30 26 GAUGE_HEIGHT = 4 27 GAUGE_PADDING = 1 28 MARKER_HEIGHT = 10 29 CRATE_SIZE = 86 30 31 class ProgressBar(Gauge): 32 default_state = uiconst.UI_NORMAL 33 default_backgroundColor = eveColor.BLACK 34 default_gaugeHeight = 10 35 default_height = 10 36 default_width = 0 37 default_color = eveColor.CRYO_BLUE 38 default_labelClass = EveCaptionSmall 39 normalGaugeColor = eveColor.CRYO_BLUE 40 fullGaugeColor = eveColor.SUCCESS_GREEN 41 42 def GetMenu(self): 43 if session and session.role & ROLE_GML: 44 menu = [['QA: Progress', self._Debug_ProgressGoal]] 45 return menu 46 47 def _Debug_ProgressGoal(self): 48 ret = QtyPopup(minvalue=0, setvalue=1) 49 if ret and 'qty' in ret: 50 for goal in get_career_goals_svc().get_goal_data_controller().get_overall_goals(): 51 get_career_goals_svc().get_goal_data_controller().admin_progress_goal(goal.goal_id, ret['qty']) 52 53 def ApplyAttributes(self, attributes): 54 super(ProgressBar, self).ApplyAttributes(attributes) 55 self.markerByGoalID = {} 56 self.progressHint = None 57 self.frame = Frame(parent=self.gaugeCont, opacity=1.2, color=self.normalGaugeColor, idx=0) 58 self.bgGauge = Container(parent=self.gaugeCont, name='bgGauge', align=uiconst.TOPLEFT_PROP, clipChildren=True, width=0.0, height=self.default_gaugeHeight, state=uiconst.UI_DISABLED) 59 self.bgGaugeGradient = self._CreateGradient(parent=self.bgGauge, color=eveColor.LEAFY_GREEN) 60 self.gauge.opacity = 0.8 61 self.gaugeCont.clipChildren = False 62 self.gaugeCont.state = uiconst.UI_PICKCHILDREN 63 self._InitGaugeWithGoalData() 64 on_goal_progress_changed.connect(self.OnGoalProgressChanged) 65 on_goal_completed.connect(self.OnGoalCompleted) 66 on_definitions_loaded.connect(self._InitGaugeWithGoalData) 67 68 def _CreateGradient(self, parent, color): 69 gradient = super(ProgressBar, self)._CreateGradient(parent, color) 70 gradient.outputMode = uiconst.OUTPUT_COLOR_AND_GLOW 71 gradient.glowBrightness = 0.3 72 return gradient 73 74 def _InitGaugeWithGoalData(self): 75 goal_data_controller = get_career_goals_svc().get_goal_data_controller() 76 self.currentProgress = goal_data_controller.get_overall_progress() 77 color = self.fullGaugeColor if goal_data_controller.are_all_overall_goals_completed() else self.normalGaugeColor 78 self.SetColor(color) 79 self.frame.color = color 80 max_target = goal_data_controller.get_max_overall_target() 81 self.CreateMarkers(goal_data_controller.get_overall_goals(), max_target) 82 self.SetValue(self.currentProgress / float(max_target), animate=False) 83 self.tooltipPanelClassInfo = TooltipHeaderDescriptionWrapper(header=self._GetProgressBarTitle(), description=self._GetProgressBarDescription()) 84 85 def CreateMarkers(self, overall_goals, max_target): 86 if not max_target: 87 return 88 for i, goal in enumerate(overall_goals): 89 percentValue = float(goal.definition.target_value) / float(max_target) 90 goal_rewards = goal.definition.rewards 91 if not goal_rewards: 92 continue 93 reward = goal_rewards[0] 94 typeID = reward.type_id 95 color = self.fullGaugeColor if goal.is_completed() else self.normalGaugeColor 96 self.ShowMarker(percentValue, width=RewardMarker.default_width, color=color, rewardTypeID=typeID, completed=goal.is_completed(), goalID=goal.goal_id, index=i) 97 98 def SetValue(self, value, frequency = 10.0, animate = True, timeOffset = 0.0, duration = 0.6, flash = True): 99 if animate: 100 animations.MorphScalar(self.bgGauge, 'width', self.bgGauge.width, value, duration=duration, curveSet=self._GetCorrectCurveSet(), callback=lambda : animations.FadeOut(self.progressHint, duration=0.4, callback=self.progressHint.Close)) 101 super(ProgressBar, self).SetValue(value, frequency, animate, timeOffset + 1.0, duration, flash=False) 102 103 def Close(self): 104 on_goal_progress_changed.disconnect(self.OnGoalProgressChanged) 105 on_goal_completed.disconnect(self.OnGoalCompleted) 106 on_definitions_loaded.disconnect(self._InitGaugeWithGoalData) 107 super(ProgressBar, self).Close() 108 109 def _CreateBackgroundFill(self, backgroundColor): 110 super(ProgressBar, self)._CreateBackgroundFill(backgroundColor) 111 StretchSpriteHorizontal(name='backgroundGlowSprite', parent=self, align=uiconst.TOTOP_NOPUSH, height=18, rightEdgeSize=6, leftEdgeSize=6, top=-14, padding=(-4, 0, -4, 0), texturePath='res:/UI/Texture/classes/careerPortal/progressBarBackgroundGlow.png', outputMode=uiconst.OUTPUT_COLOR_AND_GLOW, color=self.normalGaugeColor) 112 113 def _CreateMarker(self, color, value, width, **kwargs): 114 marker = RewardMarker(parent=self, top=0.5, left=value, width=width, state=uiconst.UI_NORMAL, color=color, idx=0, opacity=0, **kwargs) 115 animations.FadeIn(marker, duration=1.0, timeOffset=kwargs.get('index', 0) / 4 + 0.1, curveType=uiconst.ANIM_OVERSHOT2) 116 self.markerByGoalID[kwargs.get('goalID', None)] = marker 117 return marker 118 119 def SetText(self, text): 120 super(ProgressBar, self).SetText(text) 121 self.label.align = uiconst.TOPLEFT 122 self.label.top = -28 123 self.label.width = self.label.MeasureTextSize(self.label.text)[0] 124 125 def GetTooltipPosition(self): 126 l, t = self.gauge.GetCurrentAbsolutePosition() 127 w, h = self.gauge.GetCurrentAbsoluteSize() 128 return (l + w, 129 t, 130 10, 131 10) 132 133 def OnGoalProgressChanged(self, goal_id, progress_value): 134 goal_data_controller = get_career_goals_svc().get_goal_data_controller() 135 if not goal_data_controller.is_overall_goal(goal_id): 136 return 137 self._ShowProgressHint(progress_value) 138 self.currentProgress = goal_data_controller.get_overall_progress() 139 self.SetValue(self.currentProgress / float(goal_data_controller.get_max_overall_target())) 140 self.SetColor(self.fullGaugeColor if goal_data_controller.are_all_overall_goals_completed() else self.normalGaugeColor) 141 self.tooltipPanelClassInfo.headerText = self._GetProgressBarTitle() 142 143 def _ShowProgressHint(self, newProgress): 144 if self.progressHint: 145 self.progressHint.Close() 146 l, t = self.gauge.GetCurrentAbsolutePosition() 147 w, h = self.gauge.GetCurrentAbsoluteSize() 148 self.progressHint = ContainerAutoSize(name='careerPortalProgressHint', parent=uicore.layer.hint, pos=(l + w, 149 t - 20, 150 0, 151 16)) 152 Sprite(parent=self.progressHint, align=uiconst.TOLEFT, texturePath='res:/UI/Texture/classes/careerPortal/career_point_icon.png', width=16, height=16, color=eveColor.LEAFY_GREEN) 153 EveLabelMedium(parent=self.progressHint, align=uiconst.TOLEFT, text='+%s' % (newProgress - self.currentProgress), color=eveColor.LEAFY_GREEN, left=4) 154 155 def OnGoalCompleted(self, goal_id): 156 if not get_career_goals_svc().get_goal_data_controller().is_overall_goal(goal_id): 157 return 158 marker = self.markerByGoalID.get(goal_id, None) 159 if not marker: 160 return 161 marker.MarkCompleted() 162 163 def _GetProgressBarTitle(self): 164 goal_data_controller = get_career_goals_svc().get_goal_data_controller() 165 title = GetByLabel('UI/CareerPortal/OverallCareerPoints', currentPoints=goal_data_controller.get_overall_progress(), totalPoints=goal_data_controller.get_max_overall_target()) 166 return title 167 168 def _GetProgressBarDescription(self): 169 return get_overall_progress_goals_description() 170 171 172 class RewardMarker(Container): 173 default_name = 'CareerRewardMarker' 174 default_align = uiconst.TOPLEFT_PROP 175 default_height = 48 176 default_width = 36 177 default_rewardTypeID = appConst.typeSkillInjector 178 179 def __init__(self, *args, **kwargs): 180 super(RewardMarker, self).__init__(*args, **kwargs) 181 self.rewardTypeID = kwargs.get('rewardTypeID', self.default_rewardTypeID) 182 self.color = kwargs.get('color', eveColor.CRYO_BLUE) 183 self.ConstructLayout() 184 if kwargs.get('completed', False): 185 self.MarkCompleted() 186 187 def ConstructLayout(self): 188 self.successIcon = CheckMarkGlyphIcon(parent=self, align=uiconst.CENTER, pos=(0, 0, 16, 16), opacity=0, state=uiconst.UI_HIDDEN) 189 self.itemIcon = ItemIcon(parent=self, align=uiconst.CENTER, pos=(0, 0, 22, 22), typeID=self.rewardTypeID) 190 self.itemIcon.techIcon.Hide() 191 self.GetHint = self.itemIcon.GetHint 192 self.hexagon = Sprite(name='hexagon', parent=self, align=uiconst.CENTER, pos=(0, 0, 58, 58), texturePath='res:/UI/Texture/classes/careerPortal/hexagon.png', textureSecondaryPath=self._GetMaskTexturePath(), outputMode=uiconst.OUTPUT_COLOR_AND_GLOW, glowBrightness=0.8, spriteEffect=trinity.TR2_SFX_MODULATE, color=self.color, state=uiconst.UI_DISABLED) 193 194 def _GetMaskTexturePath(self): 195 if self.left == 1: 196 return 'res:/UI/Texture/classes/careerPortal/hexagon_mask_right.png' 197 else: 198 return 'res:/UI/Texture/classes/careerPortal/hexagon_mask.png' 199 200 def MarkCompleted(self): 201 self.successIcon.state = uiconst.UI_DISABLED 202 self.successIcon.opacity = 1 203 self.itemIcon.opacity = 0.4 204 self.hexagon.spriteEffect = Sprite.default_spriteEffect