textContainerWithSubIcon.py (6991B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\pointerTool\textContainerWithSubIcon.py 2 import carbonui.const as uiconst 3 from carbonui.primitives.container import Container 4 from carbonui.primitives.containerAutoSize import ContainerAutoSize 5 from carbonui.primitives.line import Line 6 from carbonui.primitives.sprite import Sprite 7 from eve.client.script.ui.control.eveLabel import EveLabelMedium, EveLabelLarge 8 from eve.client.script.ui.util.uix import GetTextHeight 9 import uihighlighting.ui.uiconst as highlightConst 10 11 class PointerContainerWithPath(Container): 12 13 def ApplyAttributes(self, attributes): 14 Container.ApplyAttributes(self, attributes) 15 self.pointerTextContainer = None 16 self.pointerTitleContainer = None 17 textAndIconObjects = attributes.get('textAndIconObjects', None) 18 titleAndIcon = attributes.get('titleAndIcon', None) 19 self.iconSize = attributes.get('iconSize', 24) 20 if titleAndIcon: 21 self._AddTitle(titleAndIcon) 22 if titleAndIcon and textAndIconObjects: 23 self._AddTitleLine() 24 if textAndIconObjects: 25 self.CreatePointerTextContainer() 26 for i, each in enumerate(textAndIconObjects): 27 left = i * each.indentAmount 28 self._AddTextAndIcon(left, each, bold=i == len(textAndIconObjects) - 1) 29 30 height = 0 31 if self.pointerTextContainer: 32 height += self.pointerTextContainer.height 33 height += self.pointerTitleLineContainer.height 34 if self.pointerTitleContainer: 35 height += self.pointerTitleContainer.height 36 self.height = max(self.iconSize, height) 37 38 def _AddTitle(self, titleAndTexture): 39 self.pointerTitleContainer = Container(parent=self, align=uiconst.TOTOP, name='pointerTitleContainer', width=self.width, height=0) 40 cont = Container(parent=self.pointerTitleContainer, align=uiconst.TOTOP, minHeight=self.iconSize, alignMode=uiconst.CENTERLEFT) 41 texturePath = titleAndTexture.GetTexturePath() 42 iconData = titleAndTexture.GetIconData() 43 left = 0 44 if texturePath: 45 iconSizes = titleAndTexture.GetIconSizes() 46 width, height = (self.iconSize, self.iconSize) if iconSizes is None else iconSizes 47 sprite = Sprite(name='icon', parent=cont, texturePath=texturePath, width=width, height=height, align=uiconst.CENTERLEFT) 48 left += sprite.width + 4 49 if iconSizes is None: 50 self.SetIconSize(sprite) 51 elif iconData: 52 maxIconDataSize = max(iconData.sizes) 53 iconSize = min(maxIconDataSize, self.iconSize) 54 sprite = Sprite(name='icon', parent=cont, texturePath=iconData, width=iconSize, height=iconSize, align=uiconst.CENTERLEFT) 55 left += sprite.width + 4 56 pointerTitle = EveLabelLarge(text=titleAndTexture.GetText(), parent=cont, align=uiconst.CENTER, width=self.pointerTitleContainer.width, state=uiconst.UI_DISABLED, idx=0, opacity=highlightConst.TITLE_OPACITY, color=highlightConst.TITLE_COLOR, left=left) 57 cont.height = GetTextHeight(pointerTitle.text, width=self.pointerTitleContainer.width - pointerTitle.left, fontsize=pointerTitle.fontsize) 58 self.pointerTitleContainer.height = cont.height 59 60 def _AddTitleLine(self): 61 self.pointerTitleLineContainer = Container(parent=self, align=uiconst.TOTOP, name='pointerTitleLineContainer', width=self.width, height=2 * highlightConst.TITLE_LINE_VERTICAL_PADDING) 62 pointerTitleLine = Line(name='pointerTitleLine', parent=self.pointerTitleLineContainer, align=uiconst.TOTOP, weight=highlightConst.TITLE_LINE_HEIGHT, opacity=highlightConst.TITLE_LINE_OPACITY, padTop=highlightConst.TITLE_LINE_VERTICAL_PADDING, padBottom=highlightConst.TITLE_LINE_VERTICAL_PADDING, color=highlightConst.TITLE_LINE_COLOR) 63 64 def CreatePointerTextContainer(self): 65 self.pointerTextContainer = ContainerAutoSize(parent=self, align=uiconst.TOTOP, name='pointerTextContainer', width=self.width, height=0, alignMode=uiconst.TOTOP) 66 67 def _AddTextAndIcon(self, contLeft, textAndIconObject, bold = False): 68 text = textAndIconObject.GetText() 69 texturePath = textAndIconObject.GetTexturePath() 70 iconData = textAndIconObject.GetIconData() 71 cont = Container(parent=self.pointerTextContainer, align=uiconst.TOTOP, minHeight=self.iconSize, alignMode=uiconst.CENTERLEFT, left=contLeft, padding=(0, 72 3, 73 contLeft, 74 3)) 75 indentChar = textAndIconObject.GetIndentChar() 76 if indentChar: 77 identLabel = EveLabelMedium(text=indentChar, parent=cont, align=uiconst.CENTERLEFT) 78 indentOffset = identLabel.textwidth 79 else: 80 indentOffset = 0 81 left = indentOffset 82 if texturePath: 83 iconSizes = textAndIconObject.GetIconSizes() 84 width, height = (self.iconSize, self.iconSize) if iconSizes is None else iconSizes 85 sprite = Sprite(name='icon', parent=cont, texturePath=texturePath, width=width, height=height, align=uiconst.CENTERLEFT, left=indentOffset + 2) 86 if not iconSizes: 87 self.SetIconSize(sprite) 88 left += sprite.left + sprite.width 89 elif iconData: 90 maxIconDataSize = max(iconData.sizes) 91 iconSize = min(maxIconDataSize, self.iconSize) 92 sprite = Sprite(name='icon', parent=cont, texturePath=iconData, width=iconSize, height=iconSize, align=uiconst.CENTERLEFT, left=indentOffset + 2) 93 left += sprite.left + sprite.width 94 else: 95 left += 6 96 labelWidth = self.pointerTextContainer.width - contLeft - left 97 if bold: 98 text = '<b>%s</b>' % text 99 pointerText = EveLabelMedium(text=text, parent=cont, align=uiconst.CENTERLEFT, state=uiconst.UI_DISABLED, opacity=highlightConst.TEXT_OPACITY, left=left, width=labelWidth) 100 cont.height = max(self.iconSize, GetTextHeight(text, width=labelWidth)) 101 self.pointerTextContainer.height = self.pointerTextContainer.height + cont.height + cont.padTop + cont.padBottom 102 103 def SetIconSize(self, sprite): 104 try: 105 textureWidth = sprite.renderObject.texturePrimary.atlasTexture.width 106 textureHeight = sprite.renderObject.texturePrimary.atlasTexture.height 107 newWidth = min(self.iconSize, max(16, textureWidth)) 108 newHeight = min(self.iconSize, max(16, textureHeight)) 109 widthRatio = newWidth / float(textureWidth) 110 heightRatio = newHeight / float(textureHeight) 111 if widthRatio != heightRatio: 112 smallerRatio = min(widthRatio, heightRatio) 113 newWidth = int(smallerRatio * textureWidth) 114 newHeight = int(smallerRatio * textureHeight) 115 sprite.width = int(newWidth) 116 sprite.height = int(newHeight) 117 except Exception as e: 118 pass