attributeFields.py (7027B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\comparison\attributeFields.py 2 import carbonui 3 import carbonui.text.styles 4 import dogma.const 5 import eveicon 6 from carbonui import TextColor, Align, uiconst, TextAlign 7 from carbonui.control.buttonIcon import ButtonIcon 8 from carbonui.control.dragdrop.dragdata import TypeDragData 9 from carbonui.primitives.containerAutoSize import ContainerAutoSize 10 from carbonui.primitives.gradientSprite import GradientSprite 11 from carbonui.primitives.layoutGrid import LayoutGridRow 12 from carbonui.primitives.sprite import Sprite 13 from carbonui.uianimations import animations 14 from carbonui.uiconst import PickState, OutputMode 15 from eve.client.script.ui import eveColor 16 from eve.client.script.ui.comparison import comparisonSignals 17 from eve.client.script.ui.comparison.comparisonGridUtil import get_max_column_width 18 from eve.client.script.ui.control.itemIcon import ItemIcon 19 from eve.client.script.ui.control.skillTreeCont import SkillStateIcon 20 from eve.client.script.ui.shared.cloneGrade.omegaCloneIcon import OmegaCloneIcon 21 from eve.client.script.ui.shared.tooltip.skill import LoadSkillEntryTooltip 22 from evelink.client.handlers.local_service.endpoints import ShowInfo 23 from signals import Signal 24 from skills.client.skillController import SkillController 25 26 class GroupHeaderRow(LayoutGridRow): 27 default_state = uiconst.UI_NORMAL 28 29 def __init__(self, text, **kwargs): 30 super(GroupHeaderRow, self).__init__(**kwargs) 31 self.rows = [] 32 self.is_expanded = True 33 self._text = text 34 cont = ContainerAutoSize(parent=self, padding=(0, 16, 0, -8)) 35 self.icon = Sprite(parent=cont, align=Align.CENTERLEFT, pickState=PickState.OFF, texturePath=eveicon.caret_down, pos=(0, 0, 16, 16), color=TextColor.SECONDARY, outputMode=OutputMode.COLOR_AND_GLOW, glowBrightness=0.0) 36 self.header = carbonui.text.styles.TextHeader(parent=cont, align=Align.CENTERLEFT, color=TextColor.SECONDARY, text=text, left=24) 37 38 def attach_row(self, row): 39 self.rows.append(row) 40 41 def OnClick(self, *args): 42 self.is_expanded = not self.is_expanded 43 for row in self.rows: 44 row.display = self.is_expanded 45 46 self.icon.texturePath = eveicon.caret_down if self.is_expanded else eveicon.caret_right 47 if self.is_expanded: 48 self.header.text = self._text 49 else: 50 self.header.text = u'{} <color={}>{}</color>'.format(self._text, TextColor.SECONDARY.hex_argb, len(self.rows)) 51 52 def OnMouseEnter(self, *args): 53 animations.SpColorMorphTo(self.icon, endColor=TextColor.HIGHLIGHT, duration=0.3) 54 animations.MorphScalar(self.icon, 'glowBrightness', self.icon.glowBrightness, 1.0, duration=0.3) 55 56 def OnMouseExit(self, *args): 57 animations.SpColorMorphTo(self.icon, endColor=TextColor.SECONDARY, duration=0.3) 58 animations.MorphScalar(self.icon, 'glowBrightness', self.icon.glowBrightness, 0.0, duration=0.3) 59 60 61 class TextAttributeField(carbonui.text.styles.TextBody): 62 default_color = TextColor.HIGHLIGHT 63 64 def __init__(self, attribute, **kwargs): 65 super(TextAttributeField, self).__init__(**kwargs) 66 self.attribute = attribute 67 if attribute: 68 self.text = attribute.get_value_text_formatted() 69 if attribute.is_link: 70 self.pickState = PickState.ON 71 else: 72 self.text = '-' 73 self.rgba = TextColor.DISABLED 74 75 76 class SkillAttributeField(ContainerAutoSize): 77 default_align = Align.CENTERRIGHT 78 79 def __init__(self, skill_type_id = None, required_level = None, **kwargs): 80 super(SkillAttributeField, self).__init__(**kwargs) 81 self.skill_controller = SkillController(skill_type_id) 82 self.required_level = required_level 83 self.icon = SkillStateIcon(parent=self, align=Align.CENTERRIGHT, pickState=PickState.OFF, skill_controller=self.skill_controller, required_level=self.required_level, pos=(0, 0, 16, 16)) 84 85 def GetMenu(self): 86 return self.skill_controller.GetMenu() 87 88 def GetHint(self): 89 return self.icon.GetHint() 90 91 def LoadTooltipPanel(self, tooltipPanel, *args): 92 LoadSkillEntryTooltip(tooltipPanel, self.skill_controller.typeID, self.required_level) 93 94 def OnClick(self, *args): 95 ShowInfo(typeID=self.skill_controller.typeID) 96 97 98 class OmegaAttributeField(OmegaCloneIcon): 99 default_width = 24 100 default_height = 24 101 102 103 class TypeHeader(ContainerAutoSize): 104 isDragObject = True 105 default_alignMode = Align.TOPRIGHT 106 107 def __init__(self, comparable_type, is_compact = False, icon_size = 32, **kw): 108 super(TypeHeader, self).__init__(**kw) 109 self.comparable_type = comparable_type 110 self.is_compact = is_compact 111 self.on_remove = Signal('on_remove') 112 self.remove_btn = ButtonIcon(name='remove_btn', parent=self, align=Align.TOPRIGHT, pos=(icon_size + 4, 113 (icon_size - 16) / 2, 114 16, 115 16), display=False, texturePath=eveicon.close, func=self.OnRemoveBtn, pickState=PickState.ON) 116 self.icon = ItemIcon(name='icon', parent=self, align=Align.TOPRIGHT, pickState=PickState.OFF, pos=(0, 117 0, 118 icon_size, 119 icon_size), typeID=comparable_type.type_id, itemID=comparable_type.item_id) 120 carbonui.text.styles.TextBody(parent=self, align=Align.TOPRIGHT, text=self.comparable_type.get_name(), top=icon_size + 4, maxWidth=get_max_column_width(self.is_compact), maxLines=3, textAlign=TextAlign.RIGHT) 121 self.drag_line = GradientSprite(parent=self, align=Align.TOPRIGHT, display=False, pos=(0, 122 -8, 123 icon_size, 124 1), rgbData=((0.0, eveColor.WHITE[:3]),), alphaData=((0.0, 0.0), 125 (0.3, 0.5), 126 (0.7, 0.5), 127 (1.0, 0.0))) 128 129 def OnRemoveBtn(self, *args): 130 comparisonSignals.on_remove(self.comparable_type) 131 132 def GetMenu(self): 133 return sm.GetService('menu').GetMenuFromItemIDTypeID(self.comparable_type.item_id, self.comparable_type.type_id) 134 135 def OnClick(self, *args): 136 sm.GetService('info').ShowInfo(self.comparable_type.type_id, self.comparable_type.item_id) 137 138 def GetHint(self): 139 return self.icon.GetHint() 140 141 def OnMouseEnter(self, *args): 142 self.remove_btn.display = True 143 self.icon.OnMouseEnter() 144 145 def OnMouseExit(self, *args): 146 self.remove_btn.display = False 147 self.icon.OnMouseExit() 148 149 def OnDropData(self, dragSource, dragData): 150 comparisonSignals.on_dropped_in_front_of(dragData, self.comparable_type) 151 152 def _is_valid_drag_data(self, dragData): 153 return isinstance(dragData[0], TypeDragData) or hasattr(dragData[0], 'typeID') 154 155 def GetDragData(self): 156 return [TypeDragData(typeID=self.comparable_type.type_id)] 157 158 def OnDragEnter(self, dragSource, dragData): 159 if self._is_valid_drag_data(dragData): 160 self.drag_line.display = True 161 162 def OnDragExit(self, dragSource, dragData): 163 self.drag_line.display = False