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

panelVariations.py (9069B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\info\shipInfoPanels\panelVariations.py
      2 import eveicon
      3 import eveui
      4 import evetypes
      5 import uthread2
      6 from carbonui.primitives.container import Container
      7 from eve.client.script.ui.comparison.comparisonSettings import use_new_comparison_tool
      8 from eve.client.script.ui.comparison.comparisonWindow import ComparisonWindow
      9 from eve.client.script.ui.shared.info.shipInfoConst import DOWN_FRONT_RIGHT, TAB_VARIATIONS
     10 from carbonui.control.buttonIcon import ButtonIcon
     11 from eve.client.script.ui import eveColor
     12 from eve.client.script.ui.shared.neocom.compare import TypeCompare
     13 from utillib import KeyVal
     14 from carbon.client.script.environment.AudioUtil import PlaySound
     15 from carbonui.primitives.containerAutoSize import ContainerAutoSize
     16 from carbonui import Align, uiconst, TextColor, Density
     17 from carbonui.text.styles import TextHeader, TextDetail
     18 from eve.client.script.ui.shared.info.shipInfoPanels.panelBase import PanelBase
     19 from eve.client.script.ui.control.itemIcon import ItemIcon
     20 from carbonui.control.scrollContainer import ScrollContainer
     21 from eve.client.script.ui.shared.traits import TraitAttributeIcon, TraitsContainer
     22 from carbonui.control.button import Button
     23 from carbonui.button.const import ButtonVariant
     24 from localization import GetByLabel
     25 from carbonui.uianimations import animations
     26 from eve.common.script.sys import idCheckers
     27 
     28 class ShipItemIcon(ItemIcon):
     29 
     30     def __init__(self, *args, **kwargs):
     31         super(ShipItemIcon, self).__init__(*args, **kwargs)
     32         self.background_frame = eveui.Frame(name='background_frame', bgParent=self, color=eveColor.FOCUS_BLUE, opacity=0, padding=-1)
     33 
     34     def OnClick(self):
     35         PlaySound(uiconst.SOUND_BUTTON_CLICK)
     36         self.SetBpDataForCopy()
     37         sm.GetService('info').ShowInfo(self.typeID, self.itemID, abstractinfo=KeyVal(fullBlueprintData=self.bpData), selectTabType=TAB_VARIATIONS)
     38 
     39     def OnMouseEnter(self, *args):
     40         if self.IsOmegaOverlayVisible():
     41             self.omegaOverlay.OnMouseEnter()
     42             return
     43         animations.MorphScalar(self.background_frame, 'opacity', duration=0.3, startVal=0, endVal=1, curveType=uiconst.ANIM_SMOOTH)
     44 
     45     def OnMouseExit(self, *args):
     46         if self.IsOmegaOverlayVisible():
     47             self.omegaOverlay.OnMouseExit()
     48             return
     49         animations.MorphScalar(self.background_frame, 'opacity', duration=0.3, startVal=1, endVal=0, curveType=uiconst.ANIM_SMOOTH)
     50 
     51     def GetHint(self):
     52         return ''
     53 
     54     def LoadTooltipPanel(self, tooltipPanel, *args):
     55         tooltipPanel.LoadGeneric1ColumnTemplate()
     56         tooltipPanel.AddCaptionLarge(text=evetypes.GetName(self.typeID))
     57         wrapper = Container(align=Align.TOPRIGHT, width=300, height=450)
     58         traitCont = TraitsContainer(parent=wrapper, typeID=self.typeID, align=uiconst.TOTOP, traitAttributeIcons=True)
     59         wrapper.height = traitCont.height + 32
     60         tooltipPanel.AddCell(wrapper)
     61 
     62     def GetTooltipPointer(self):
     63         return uiconst.POINT_RIGHT_2
     64 
     65 
     66 class VariationsCard(eveui.ContainerAutoSize):
     67     default_align = Align.TOTOP
     68     default_alignMode = Align.TOTOP
     69     default_clipChildren = True
     70 
     71     def __init__(self, ship_type_id, *args, **kwargs):
     72         self._type_id = ship_type_id
     73         self._content = None
     74         self._item_icon = None
     75         super(VariationsCard, self).__init__(*args, **kwargs)
     76         self._construct_layout()
     77 
     78     def set_minimized(self):
     79         if self._item_icon.width == 64:
     80             return
     81         self._content.minHeight = 64
     82         self._item_icon.SetSize(64, 64)
     83         self._item_icon.SetTypeID(self._type_id)
     84         self.padBottom = 8
     85 
     86     def set_expanded(self):
     87         if self._item_icon.width == 92:
     88             return
     89         self._content.minHeight = 92
     90         self._item_icon.SetSize(92, 92)
     91         self._item_icon.SetTypeID(self._type_id)
     92         self.padBottom = 16
     93 
     94     def _construct_layout(self):
     95         eveui.Frame(name='background_frame', bgParent=self, texturePath='res:/UI/Texture/classes/Hangar/card_fill.png', cornerSize=16, opacity=0.05)
     96         self._content = eveui.ContainerAutoSize(parent=self, align=Align.TOTOP, alignMode=Align.TOTOP, minHeight=92, padding=8)
     97         icon_container = eveui.ContainerAutoSize(parent=self._content, align=Align.TOLEFT, padRight=8)
     98         self._item_icon = ShipItemIcon(parent=icon_container, align=Align.CENTER, typeID=self._type_id, height=92, width=92)
     99         top_container = eveui.Container(parent=self._content, align=Align.TOTOP, alignMode=Align.CENTERLEFT, height=20)
    100         ButtonIcon(parent=top_container, align=Align.TORIGHT, texturePath=eveicon.info, iconSize=16, width=20, height=20, padLeft=4, color=TextColor.SECONDARY, func=self._item_icon.OnClick)
    101         if sm.GetService('shipTree').IsInShipTree(self._type_id):
    102             ButtonIcon(parent=top_container, align=Align.TORIGHT, texturePath=eveicon.ship_tree, hint=GetByLabel('UI/InfoWindow/ShowInISIS'), iconSize=16, width=20, height=20, padLeft=4, color=TextColor.SECONDARY, func=self._open_ship_tree)
    103         texture = sm.GetService('bracket').GetBracketIcon(self._type_id)
    104         eveui.Sprite(parent=top_container, align=Align.CENTERLEFT, width=16, height=16, color=TextColor.NORMAL, texturePath=texture)
    105         text_container = eveui.Container(parent=top_container, align=Align.TOALL, padLeft=24)
    106         TextDetail(parent=text_container, align=Align.CENTERLEFT, text=evetypes.GetGroupName(self._type_id), color=TextColor.SECONDARY, maxLines=1, autoFadeSides=16)
    107         TextHeader(parent=self._content, align=Align.TOTOP, text=evetypes.GetName(self._type_id), padTop=4, padBottom=8, color=TextColor.HIGHLIGHT, maxLines=1, autoFadeSides=16)
    108         self._add_trait_icons(self._content)
    109 
    110     def _add_trait_icons(self, parent):
    111         trait_container = eveui.Container(name='ship_traits', parent=parent, align=Align.TOTOP, height=16, clipChildren=True)
    112         if self._type_id in cfg.infoBubbleTypeElements:
    113             data = cfg.infoBubbleTypeElements[self._type_id]
    114             attributeIDs = [ x[1] for x in sorted(data.items(), key=lambda d: int(d[0])) ]
    115             for index, attributeID in enumerate(attributeIDs):
    116                 icon = TraitAttributeIcon(parent=trait_container, align=uiconst.CENTERLEFT, attributeID=attributeID, width=16, height=16, left=24 * index, iconOpacity=0.3, clipChildren=True)
    117                 icon.OnClick = self.OnClick
    118                 icon.isDragObject = True
    119                 icon.GetDragData = self.GetDragData
    120                 icon.OnDropData = self.OnDropData
    121 
    122     def _open_ship_tree(self, *args, **kwargs):
    123         sm.GetService('shipTreeUI').OpenAndShowShip(self._type_id)
    124 
    125 
    126 class PanelVariations(PanelBase):
    127 
    128     def __init__(self, *args, **kwargs):
    129         self._variant_cards = []
    130         super(PanelVariations, self).__init__(*args, **kwargs)
    131 
    132     def _construct_content(self):
    133         uthread2.Yield()
    134         variants = self._get_variant_type_ids()
    135         self._compare_button = Button(parent=self.rightCont, align=uiconst.TOBOTTOM, label=GetByLabel('UI/Compare/CompareAll'), func=self.on_compare, args=())
    136         self._expanded_scroll = ScrollContainer(parent=self.rightCont, name='expanded_scroll', align=Align.TOALL)
    137         self._content = ContainerAutoSize(parent=self._expanded_scroll, align=Align.TOTOP)
    138         for type_id in variants:
    139             card = VariationsCard(ship_type_id=type_id, parent=self._content, padBottom=16)
    140             self._variant_cards.append(card)
    141 
    142     def _get_variant_type_ids(self):
    143         variants = evetypes.GetVariations(self._controller.type_id)
    144         variants.reverse()
    145         return variants
    146 
    147     def _enable_expanded_view(self):
    148         for card in self._variant_cards:
    149             card.set_expanded()
    150 
    151         self._compare_button.SetParent(self.rightCont, idx=0)
    152         self._content.SetParent(self._expanded_scroll)
    153 
    154     def _enable_minimized_view(self):
    155         for card in self._variant_cards:
    156             card.set_minimized()
    157 
    158         self._compare_button.SetParent(self.minimizedCont, idx=0)
    159         self._content.SetParent(self.content_scroll_minimized)
    160 
    161     def on_compare(self):
    162         if use_new_comparison_tool.is_enabled():
    163             type_ids = [ (type_id, None) for type_id in self._get_variant_type_ids() ]
    164             ComparisonWindow.open_and_compare_multiple(type_ids)
    165         else:
    166             wnd = TypeCompare.GetIfOpen()
    167             if wnd:
    168                 wnd.AddVariantsOf(self.typeID)
    169             else:
    170                 TypeCompare.Open(typeID=self.typeID)
    171 
    172     @classmethod
    173     def get_name(cls):
    174         return GetByLabel('UI/InfoWindow/TabNames/Variations')
    175 
    176     @classmethod
    177     def get_icon(cls):
    178         return eveicon.variation
    179 
    180     def get_camera_position(self):
    181         return DOWN_FRONT_RIGHT
    182 
    183     def get_tab_type(self):
    184         return TAB_VARIATIONS
    185 
    186     @classmethod
    187     def is_visible(cls, typeID, _itemID = None, _rec = None):
    188         if evetypes.GetVariations(typeID):
    189             return True
    190         return False