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