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

label_text.py (12587B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\control\entries\label_text.py
      2 import blue
      3 from carbon.common.script.sys.serviceConst import ROLE_GML
      4 from carbonui import fontconst, uiconst
      5 from carbonui.control.contextMenu.menuData import MenuData
      6 from carbonui.control.scrollentries import SE_BaseClassCore
      7 from carbonui.primitives.container import Container
      8 from eve.client.script.ui.control.entries.text import Text
      9 from eve.client.script.ui.control.eveIcon import Icon
     10 from eve.client.script.ui.control.eveLabel import EveLabelMedium, EveLabelSmall, EveLabelSmallBold
     11 from eve.client.script.ui.control.infoIcon import InfoIcon, MoreInfoIcon
     12 from eve.client.script.ui.shared.info.infoUtil import GetColoredText, PrepareInfoTextForAttributeHint, GetAttributeTooltipTitleAndDescription
     13 from eve.client.script.ui.util import uix
     14 
     15 class LabelText(SE_BaseClassCore):
     16     __guid__ = 'listentry.LabelText'
     17 
     18     def Startup(self, args):
     19         self.sr.label = EveLabelSmall(text='', parent=self, left=8, top=4, state=uiconst.UI_DISABLED, bold=True)
     20         self.sr.text = EveLabelMedium(text='', parent=self, left=0, top=4, align=uiconst.TOALL, state=uiconst.UI_DISABLED)
     21 
     22     def Load(self, node):
     23         self.sr.node = node
     24         self.sr.label.text = self.name = self.sr.node.label
     25         self.sr.text.left = int(self.sr.node.Get('textpos', 128)) + 4
     26         self.sr.text.text = self.sr.node.text
     27         if self.sr.node.Get('labelAdjust', 0):
     28             self.sr.label.width = self.sr.node.Get('labelAdjust', 0)
     29 
     30     def GetHeight(self, *args):
     31         node, width = args
     32         textpos = min(256, int(node.Get('textpos', 128)))
     33         height = uix.GetTextHeight(node.label, fontsize=fontconst.EVE_SMALL_FONTSIZE, width=textpos + 8, hspace=0, linespace=12)
     34         maxDescWidth = None
     35         if node.Get('scaleWithDesc', True):
     36             maxDescWidth = width - textpos
     37         height = max(height, uix.GetTextHeight(node.text, fontsize=fontconst.EVE_MEDIUM_FONTSIZE, width=maxDescWidth, hspace=0, linespace=12) + 2)
     38         node.height = max(19, height + 4)
     39         return node.height
     40 
     41 
     42 class LabelTextTop(Text):
     43     __guid__ = 'listentry.LabelTextTop'
     44     default_showHilite = True
     45 
     46     def Startup(self, *args):
     47         self.sr.infoicon = InfoIcon(left=2, parent=self, idx=0, align=uiconst.CENTERRIGHT)
     48         self.sr.infoicon.OnClick = self.ShowInfo
     49         self.sr.icon = Icon(parent=self, pos=(1, 2, 24, 24), align=uiconst.TOPLEFT, idx=0, ignoreSize=True)
     50         self.sr.label = EveLabelSmall(text='', parent=self, left=8, top=2, state=uiconst.UI_DISABLED)
     51         self.textClipper = Container(parent=self)
     52         self.sr.text = EveLabelMedium(parent=self.textClipper, left=8, top=12, state=uiconst.UI_DISABLED, maxLines=1, align=uiconst.TOPLEFT, autoFadeSides=32)
     53 
     54     def Load(self, node):
     55         Text.Load(self, node)
     56         if self.sr.infoicon.display:
     57             self.textClipper.padRight = 20
     58         else:
     59             self.textClipper.padRight = 0
     60         self.sr.label.text = self.sr.node.label
     61         self.sr.label.left = self.sr.text.left
     62         self.sr.text.top = self.sr.label.top + self.sr.label.textheight
     63 
     64     def GetHeight(self, *args):
     65         node, width = args
     66         labelheight = uix.GetTextHeight(node.label, fontsize=fontconst.EVE_SMALL_FONTSIZE, maxLines=1, uppercase=1)
     67         textheight = uix.GetTextHeight(node.text, fontsize=fontconst.EVE_MEDIUM_FONTSIZE, maxLines=1)
     68         node.height = 2 + labelheight + textheight
     69         return node.height
     70 
     71     @classmethod
     72     def GetCopyData(cls, node):
     73         return '%s\t%s' % (node.label, unicode(node.text))
     74 
     75 
     76 class LabelTextSides(Text):
     77     __guid__ = 'listentry.LabelTextSides'
     78     default_showHilite = True
     79 
     80     def Startup(self, *args):
     81         Text.Startup(self, args)
     82         self.sr.label = EveLabelMedium(text='', parent=self, left=8, top=0, state=uiconst.UI_DISABLED, align=uiconst.CENTERLEFT)
     83         self.sr.text.SetAlign(uiconst.CENTERRIGHT)
     84         self.sr.text.top = 0
     85         self.sr.infoicon.SetAlign(uiconst.CENTERRIGHT)
     86         self.sr.infoicon.top = 0
     87         self.sr.infoicon.left = 6
     88 
     89     def Load(self, node):
     90         Text.Load(self, node)
     91         self.sr.label.text = self.sr.node.label
     92         if self.sr.infoicon.display:
     93             self.sr.text.left = 26
     94         else:
     95             self.sr.text.left = 8
     96         self.sr.text.top = 0
     97         if not self.sr.icon.display and node.get('iconID', None) is None:
     98             self.sr.label.left = 8
     99         else:
    100             self.sr.label.left = self.sr.icon.width + 4
    101 
    102     def GetHeight(self, *args):
    103         node, width = args
    104         node.height = 30
    105         return 30
    106 
    107     def _OnSizeChange_NoBlock(self, newWidth, newHeight):
    108         textWidth = self.sr.text.textwidth
    109         availableTextWidth = newWidth - textWidth - self.sr.label.left - 10
    110         self.sr.label.SetRightAlphaFade(fadeEnd=availableTextWidth, maxFadeWidth=20)
    111 
    112     @classmethod
    113     def GetCopyData(cls, node):
    114         return '%s\t%s' % (node.label, unicode(node.text))
    115 
    116 
    117 class LabelTextSidesAttributes(LabelTextSides):
    118     __guid__ = 'listentry.LabelTextSidesAttributes'
    119 
    120     def Load(self, node):
    121         LabelTextSides.Load(self, node)
    122         modifiedAttribute = node.modifiedAttribute
    123         if modifiedAttribute:
    124             coloredText = GetColoredText(modifiedAttribute, text=self.sr.text.text)
    125             self.sr.text.text = coloredText
    126             PrepareInfoTextForAttributeHint(self.sr.text, modifiedAttribute, node.itemID, node.extraModifyingAttrIDs, node.extraModifyingFactors)
    127 
    128     def GetMenu(self):
    129         m = MenuData()
    130         if session.role & ROLE_GML > 0:
    131             node = self.sr.node
    132             m.AddEntry('GM - attributeID: %s' % node.attributeID, lambda : blue.pyos.SetClipboardData(str(node.attributeID)))
    133             import webbrowser
    134             m.AddEntry('Edit in FSD Editor', lambda : webbrowser.open('http://localhost:8000/dogma/attributes/{}/edit'.format(node.attributeID)))
    135         m += LabelTextSides.GetMenu(self)
    136         return m
    137 
    138     def LoadTooltipPanel(self, tooltipPanel, *args):
    139         tooltipTitleText, tooltipDescriptionText = GetAttributeTooltipTitleAndDescription(self.sr.node.attributeID)
    140         if tooltipTitleText:
    141             tooltipPanel.LoadStandardSpacing()
    142             tooltipPanel.columns = 1
    143             tooltipPanel.AddMediumHeader(text=tooltipTitleText)
    144             tooltipPanel.AddLabelMedium(text=tooltipDescriptionText, wrapWidth=240)
    145 
    146 
    147 class LabelTextSidesMoreInfo(LabelTextSides):
    148     __guid__ = 'listentry.LabelTextSidesMoreInfo'
    149     default_showHilite = True
    150 
    151     def Startup(self, *args):
    152         LabelTextSides.Startup(self, args)
    153         self.sr.moreinfoicon = MoreInfoIcon(left=2, parent=self, idx=0, align=uiconst.CENTERRIGHT)
    154         self.sr.moreinfoicon.SetAlign(uiconst.CENTERRIGHT)
    155         self.sr.moreinfoicon.top = 0
    156         self.sr.moreinfoicon.left = 6
    157         self.sr.infoicon.display = False
    158 
    159     def Load(self, node):
    160         LabelTextSides.Load(self, node)
    161         self.sr.text.left = 26
    162         self.sr.moreinfoicon.hint = node.get('moreInfoHint', '')
    163 
    164 
    165 class LabelMultilineTextTop(LabelTextSides):
    166     __guid__ = 'listentry.LabelMultilineTextTop'
    167 
    168     def Startup(self, *args):
    169         LabelTextSides.Startup(self, args)
    170         self.sr.label.SetAlign(uiconst.TOPLEFT)
    171         self.sr.label.top = 10
    172         self.sr.text.maxLines = None
    173         self.rightTextCont = []
    174 
    175     def Load(self, node):
    176         LabelTextSides.Load(self, node)
    177         self.sr.text.display = False
    178         rightTextLabels = node.rightTextLabels
    179         for i, (txt, hint) in enumerate(rightTextLabels):
    180             if i < len(self.rightTextCont):
    181                 cont = self.rightTextCont[i]
    182                 txtLabel = cont.txtLabel
    183             else:
    184                 cont = Container(parent=self, align=uiconst.TOTOP)
    185                 txtLabel = EveLabelMedium(text='', parent=cont, left=8, top=0, state=uiconst.UI_DISABLED, maxLines=1, align=uiconst.TOPRIGHT)
    186                 cont.txtLabel = txtLabel
    187                 self.rightTextCont.append(cont)
    188             if i == 0:
    189                 cont.top = 10
    190             txtLabel.text = txt
    191             txtLabel.hint = hint or ''
    192             txtLabel.state = uiconst.UI_NORMAL if hint else uiconst.UI_DISABLED
    193             cont.display = True
    194             cont.height = uix.GetTextHeight(txt, fontsize=fontconst.EVE_MEDIUM_FONTSIZE)
    195 
    196         for cont in self.rightTextCont[len(rightTextLabels):]:
    197             cont.display = False
    198 
    199     def GetHeight(self, *args):
    200         node, width = args
    201         labelheight = uix.GetTextHeight(node.label, fontsize=fontconst.EVE_SMALL_FONTSIZE, maxLines=1, uppercase=1)
    202         rightTextLabels = node.rightTextLabels
    203         firstTxt = rightTextLabels[0][0] if rightTextLabels else ''
    204         textheight = uix.GetTextHeight(firstTxt, fontsize=fontconst.EVE_MEDIUM_FONTSIZE, maxLines=None)
    205         node.height = 2 + labelheight + textheight * len(rightTextLabels)
    206         return node.height
    207 
    208     @classmethod
    209     def GetCopyData(cls, node):
    210         rightTxt = '\n\t'.join([ x[0] for x in node.rightTextLabels ])
    211         return '%s\t%s' % (node.label, rightTxt)
    212 
    213 
    214 class IconLabelText(SE_BaseClassCore):
    215     __guid__ = 'listentry.IconLabelText'
    216     ICON_POS_REPLACES_LABEL = 0
    217     ICON_POS_REPLACES_TEXT = 1
    218     ICON_POS_IN_FRONT_OF_LABEL = 2
    219     ICON_POS_BEHIND_LABEL = 3
    220     ICON_POS_IN_FRONT_OF_TEXT = 4
    221     ICON_POS_BEHIND_TEXT = 5
    222     ICON_POS_NO_ICON = 6
    223     iconSize = 16
    224     margin = 4
    225     defaultTextWidth = 128
    226 
    227     def Startup(self, args):
    228         self.sr.label = EveLabelSmallBold(text='', parent=self, left=8, top=4, state=uiconst.UI_DISABLED)
    229         self.sr.text = EveLabelSmall(text='', parent=self, left=0, top=4, align=uiconst.TOALL, state=uiconst.UI_DISABLED)
    230 
    231     def Load(self, node):
    232         self.sr.node = node
    233         iconPositioning = self.sr.node.Get('iconPositioning', IconLabelText.ICON_POS_IN_FRONT_OF_LABEL)
    234         self.iconID = self.sr.node.Get('icon', None)
    235         if self.iconID is None:
    236             iconPositioning = IconLabelText.ICON_POS_NO_ICON
    237         hasLabel = True
    238         hasText = True
    239         if iconPositioning == IconLabelText.ICON_POS_REPLACES_LABEL:
    240             hasLabel = False
    241             textOffset = self.margin
    242             self.InsertIcon(textOffset)
    243         elif iconPositioning == IconLabelText.ICON_POS_REPLACES_TEXT:
    244             hasText = False
    245             textOffset = int(self.sr.node.Get('textpos', self.defaultTextWidth)) + self.margin
    246             self.InsertIcon(textOffset)
    247         elif iconPositioning == IconLabelText.ICON_POS_IN_FRONT_OF_LABEL:
    248             textOffset = self.margin
    249             self.InsertIcon(textOffset)
    250             textOffset += self.sr.icon.width
    251             self.sr.label.left = textOffset + self.margin
    252         elif iconPositioning == IconLabelText.ICON_POS_IN_FRONT_OF_TEXT:
    253             textOffset = self.margin + self.sr.text.left
    254             self.InsertIcon(textOffset)
    255             textOffset += self.sr.icon.width
    256             self.sr.text.left = textOffset + self.margin
    257         if hasLabel:
    258             self.sr.label.text = self.name = self.sr.node.label
    259             if self.sr.node.Get('labelAdjust', 0):
    260                 self.sr.label.width = self.sr.node.Get('labelAdjust', 0)
    261         if hasText:
    262             self.sr.text.left = int(self.sr.node.Get('textpos', self.defaultTextWidth)) + self.margin
    263             self.sr.text.text = self.sr.node.text
    264         if iconPositioning == IconLabelText.ICON_POS_BEHIND_LABEL:
    265             textOffset = self.margin + self.sr.label.left + self.sr.label.width
    266             self.InsertIcon(textOffset)
    267         elif iconPositioning == IconLabelText.ICON_POS_BEHIND_TEXT:
    268             textOffset = self.margin + self.sr.text.left + self.sr.text.width
    269             self.InsertIcon(textOffset)
    270 
    271     def InsertIcon(self, offset):
    272         self.sr.icon = Icon(icon=self.iconID, parent=self, pos=(offset,
    273          1,
    274          self.iconSize,
    275          self.iconSize), align=uiconst.TOPLEFT, idx=0)
    276 
    277     def GetHeight(self, *args):
    278         node, width = args
    279         height = IconLabelText.GetDynamicHeight(node, width)
    280         node.height = height
    281         return height
    282 
    283     @staticmethod
    284     def GetDynamicHeight(node, width):
    285         textpos = node.Get('textpos', 128)
    286         labelWidth, labelHeight = EveLabelSmallBold.MeasureTextSize(node.label, width=width)
    287         descWidth, descHeight = EveLabelSmall.MeasureTextSize(node.text, width=width - textpos)
    288         height = max(19, labelHeight, descHeight)
    289         return height + 8