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