detailsEntry.py (9931B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\careerPortal\panels\detailsEntry.py 2 import eveicon 3 import evetypes 4 import math 5 from carbonui import Align, ButtonStyle, PickState, TextColor, uiconst 6 from carbonui.text.styles import TextBody 7 from carbonui.control.button import Button 8 from carbonui.primitives.container import Container 9 from carbonui.primitives.containerAutoSize import ContainerAutoSize 10 from carbonui.primitives.fill import Fill 11 from carbonui.primitives.gradientSprite import GradientSprite 12 from carbonui.primitives.sprite import Sprite 13 from carbonui.primitives.stretchspritehorizontal import StretchSpriteHorizontal 14 from careergoals.client.const import RewardType 15 from eve.client.script.ui import eveColor 16 from eve.client.script.ui.control.tooltips import TooltipPanel 17 from eve.client.script.ui.control.utilButtons.showInfoButton import ShowInfoButton 18 from eve.client.script.ui.shared.cloneGrade import open_omega_upgrade_window 19 from omega.client.clone_grade_svc import get_clone_grade_svc 20 from eve.client.script.ui.shared.careerPortal.util import get_skill_point_icon_for_reward 21 from eve.client.script.ui.tooltips.tooltipsWrappers import TooltipBaseWrapper 22 from eve.common.lib.vgsConst import CATEGORYTAG_GAMETIME 23 from inventorycommon.const import typeKredits 24 from localization import GetByLabel 25 DEFAULT_PADDING = 4 26 27 class BaseDetailsEntry(Container): 28 default_name = 'DetailsEntry' 29 default_align = Align.TOTOP 30 default_height = 32 31 default_top = DEFAULT_PADDING 32 icon_size = 28 33 icon_opacity = 1.0 34 35 def __init__(self, text, texture_path = None, *args, **kwargs): 36 super(BaseDetailsEntry, self).__init__(*args, **kwargs) 37 self.text = text 38 self.texture_path = texture_path 39 self.construct_layout() 40 41 def construct_layout(self): 42 self.content = Container(name='content', parent=self) 43 self.construct_background() 44 self.construct_icon() 45 self.construct_name_label() 46 47 def construct_background(self): 48 self.background_container = Container(name='background_container', parent=self, state=uiconst.UI_DISABLED) 49 self.construct_background_fill() 50 51 def construct_background_fill(self): 52 Fill(parent=self.background_container, color=self.background_fill_color, opacity=self.background_fill_opacity) 53 54 def construct_icon(self): 55 self.icon_container = Container(name='icon_container', parent=self.content, align=Align.TOLEFT, pos=(8, 56 0, 57 self.icon_size, 58 self.icon_size)) 59 self.icon = Sprite(name='icon', parent=self.icon_container, align=Align.CENTER, texturePath=self.texture_path, opacity=self.icon_opacity, pos=(0, 60 0, 61 self.icon_size, 62 self.icon_size)) 63 64 def construct_name_label(self): 65 self.name_label_container = Container(name='name_label_container', parent=self.content, left=12) 66 self.name_label = TextBody(name='name_label', parent=self.name_label_container, align=Align.TOTOP, text=self.text, color=self.text_color, top=7) 67 68 @property 69 def background_fill_color(self): 70 return Fill.default_color 71 72 @property 73 def background_fill_opacity(self): 74 index = self.GetOrder() 75 if index: 76 if index % 2 == 0: 77 return 0.03 78 return 0 79 return 0 80 81 @property 82 def text_color(self): 83 return TextColor.NORMAL 84 85 86 class AlphaRewardDetailsEntry(BaseDetailsEntry): 87 88 def __init__(self, reward, *args, **kwargs): 89 self._reward = reward 90 self._type_id = None 91 super(AlphaRewardDetailsEntry, self).__init__(*args, **kwargs) 92 93 def construct_layout(self): 94 if self._reward.reward_type == RewardType.SP: 95 self.texture_path = get_skill_point_icon_for_reward(self._reward) 96 super(AlphaRewardDetailsEntry, self).construct_layout() 97 self.construct_info_icon() 98 if not self.texture_path: 99 if self._reward.reward_type == RewardType.TYPE_ID: 100 self._type_id = self._reward.type_id 101 elif self._reward.reward_type == RewardType.ISK: 102 self._type_id = typeKredits 103 if self._type_id: 104 sm.GetService('photo').GetIconByType(self.icon, self._type_id) 105 self.icon.OnClick = self.on_icon_click 106 107 def construct_info_icon(self): 108 if self._reward.reward_type != RewardType.TYPE_ID: 109 return 110 info_icon_container = Container(name='info_icon_container', parent=self.content, align=Align.TORIGHT, pos=(DEFAULT_PADDING, 111 0, 112 20, 113 20)) 114 ShowInfoButton(name='info_icon', parent=info_icon_container, align=Align.CENTER, typeID=self._reward.type_id) 115 116 def on_icon_click(self, *args): 117 sm.GetService('info').ShowInfo(self._type_id) 118 119 120 class OmegaRewardDetailsEntry(AlphaRewardDetailsEntry): 121 __notifyevents__ = ['OnSubscriptionChanged'] 122 123 def __init__(self, *args, **kwargs): 124 super(OmegaRewardDetailsEntry, self).__init__(*args, **kwargs) 125 sm.RegisterNotify(self) 126 127 def Close(self): 128 try: 129 sm.UnregisterNotify(self) 130 finally: 131 super(OmegaRewardDetailsEntry, self).Close() 132 133 def construct_layout(self): 134 super(OmegaRewardDetailsEntry, self).construct_layout() 135 self.construct_omega_icon() 136 self.construct_locked_icon() 137 self.construct_frame() 138 self.update() 139 140 def construct_background_fill(self): 141 self.background_container.Flush() 142 self.background_container.padding = (1, 1, 1, 1) 143 GradientSprite(name='gradient', parent=self.background_container, align=Align.TOALL, rgbData=((0.0, eveColor.BLACK[:3]), (1.0, self.background_fill_color[:3])), alphaData=((0.0, 0.0), (self.background_fill_opacity, self.background_fill_opacity)), rotation=math.pi * 0.5) 144 145 def construct_omega_icon(self): 146 omega_icon_container = Container(name='omega_icon_container', parent=self.content, align=Align.TORIGHT, pos=(DEFAULT_PADDING, 147 0, 148 16, 149 16)) 150 Sprite(name='omega_icon', parent=omega_icon_container, align=Align.CENTER, texturePath=eveicon.omega, pos=(0, 0, 16, 16)) 151 152 def construct_locked_icon(self): 153 self.locked_icon = Sprite(name='locked_icon', parent=self.icon_container, align=Align.CENTER, pickState=PickState.OFF, texturePath=eveicon.locked, color=eveColor.OMEGA_YELLOW, pos=(0, 0, 16, 16), display=False, idx=0) 154 155 def construct_frame(self): 156 frame_container = Container(name='frame_container', parent=self, state=uiconst.UI_DISABLED) 157 StretchSpriteHorizontal(bgParent=frame_container, texturePath='res:/UI/Texture/classes/careerPortal/frame_small.png', leftEdgeSize=4, rightEdgeSize=4) 158 159 def update(self): 160 if self.has_omega: 161 self.icon.opacity = 1.0 162 self.name_label_container.opacity = 1.0 163 self.state = uiconst.UI_PICKCHILDREN 164 self.tooltipPanelClassInfo = None 165 self.locked_icon.display = False 166 else: 167 self.icon.opacity = 0.5 168 self.name_label_container.opacity = 0.5 169 self.state = uiconst.UI_NORMAL 170 self.tooltipPanelClassInfo = OmegaLockedTooltip(self.text, self._type_id) 171 self.locked_icon.display = True 172 173 def OnSubscriptionChanged(self): 174 self.construct_background_fill() 175 self.update() 176 177 @property 178 def background_fill_color(self): 179 return eveColor.OMEGA_YELLOW 180 181 @property 182 def background_fill_opacity(self): 183 return 0.025 184 185 @property 186 def text_color(self): 187 return eveColor.OMEGA_YELLOW 188 189 @property 190 def has_omega(self): 191 return get_clone_grade_svc().is_omega_with_grace_period() 192 193 194 class GoalInfoDetailsEntry(BaseDetailsEntry): 195 icon_size = 16 196 197 def __init__(self, value, *args, **kwargs): 198 self.value = value 199 super(GoalInfoDetailsEntry, self).__init__(*args, **kwargs) 200 201 def construct_layout(self): 202 super(GoalInfoDetailsEntry, self).construct_layout() 203 self.construct_value_label() 204 205 def construct_value_label(self): 206 value_label_container = ContainerAutoSize(name='value_label_container', parent=self, align=Align.TORIGHT, left=DEFAULT_PADDING) 207 TextBody(name='value_label', parent=value_label_container, align=Align.CENTERLEFT, text=self.value, color=self.text_color) 208 209 210 class CareerPointsDetailsEntry(BaseDetailsEntry): 211 icon_opacity = 0.5 212 213 214 class OmegaLockedTooltip(TooltipBaseWrapper): 215 216 def __init__(self, text, type_id, *args, **kwargs): 217 self.text = text 218 self._type_id = type_id 219 super(OmegaLockedTooltip, self).__init__(*args, **kwargs) 220 221 def CreateTooltip(self, parent, owner, idx): 222 self.tooltipPanel = TooltipPanel(parent=parent, owner=owner, idx=idx) 223 self.tooltipPanel.LoadGeneric1ColumnTemplate() 224 self.tooltipPanel.SetState(uiconst.UI_NORMAL) 225 self.tooltipPanel.AddSpriteLabel(texturePath=eveicon.omega, label=GetByLabel('UI/CareerPortal/OmegaReward'), labelColor=eveColor.OMEGA_YELLOW, labelOffset=8, bold=True, iconSize=16) 226 self.tooltipPanel.AddDivider() 227 self.tooltipPanel.AddLabelMedium(text=self.text, bold=True, wrapWidth=300, colSpan=self.tooltipPanel.columns) 228 if self._type_id: 229 self.tooltipPanel.AddSpacer() 230 self.tooltipPanel.AddLabelMedium(text=evetypes.GetDescription(self._type_id), wrapWidth=300, colSpan=self.tooltipPanel.columns) 231 self.tooltipPanel.AddSpacer(height=12) 232 self.tooltipPanel.AddCell(Button(label=GetByLabel('UI/CareerPortal/UpgradeToClaim'), texturePath=eveicon.omega, style=ButtonStyle.MONETIZATION, func=self.on_upgrade_button_click), colSpan=self.tooltipPanel.columns) 233 return self.tooltipPanel 234 235 def on_upgrade_button_click(self, *args): 236 open_omega_upgrade_window()