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

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()