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

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