generic.py (8610B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\control\entries\generic.py 2 import carbonui 3 import carbonui.text.styles 4 import evetypes 5 import utillib 6 from carbonui import fontconst, uiconst 7 from carbonui.control.scrollentries import SE_BaseClassCore 8 from carbonui.primitives.fill import Fill 9 from carbonui.uicore import uicore 10 from carbonui.util.various_unsorted import GetAttrs 11 from eve.client.script.ui.control.eveLabel import EveLabelMedium 12 from eve.client.script.ui.control.infoIcon import InfoIcon 13 from eve.client.script.ui.util import uix 14 from eve.common.script.util.industryCommon import IsBlueprintCategory 15 from eveservices.menu import GetMenuService 16 from player_messaging.client.ui_message import prompt_player_fsd_dialog 17 LABEL_PADDING = 4 18 events = ('OnClick', 'OnMouseDown', 'OnMouseUp', 'OnDblClick', 'OnMouseHover') 19 20 class Generic(SE_BaseClassCore): 21 __guid__ = 'listentry.Generic' 22 __params__ = ['label'] 23 LABEL_PADDING = 4 24 DEFAULT_LABEL_STATE = uiconst.UI_DISABLED 25 26 def _OnClose(self): 27 for eventName in events: 28 setattr(self.sr, eventName, None) 29 30 SE_BaseClassCore._OnClose(self) 31 32 def Startup(self, *args): 33 self.sr.label = carbonui.text.styles.TextBody(name='entryLabel', text='', parent=self, left=self.labelLeftDefault, state=uiconst.UI_DISABLED, maxLines=1, align=uiconst.CENTERLEFT) 34 for eventName in events: 35 setattr(self.sr, eventName, None) 36 37 self.sr.infoicon = None 38 39 def Load(self, node): 40 self.sr.node = node 41 data = node 42 self.UpdateHint() 43 self.confirmOnDblClick = data.Get('confirmOnDblClick', 0) 44 self.typeID = data.Get('typeID', None) 45 self.itemID = data.Get('itemID', None) 46 if node.selected: 47 self.Select() 48 else: 49 self.Deselect() 50 if node.showinfo and node.typeID: 51 if not self.sr.infoicon: 52 self.sr.infoicon = InfoIcon(left=1, parent=self, idx=0, align=uiconst.CENTERRIGHT) 53 self.sr.infoicon.OnClick = self.ShowInfo 54 self.sr.infoicon.state = uiconst.UI_NORMAL 55 elif self.sr.infoicon: 56 self.sr.infoicon.state = uiconst.UI_HIDDEN 57 for eventName in events: 58 if data.Get(eventName, None): 59 setattr(self.sr, eventName, data.Get(eventName, None)) 60 61 preAutoUpdateFlag = self.sr.label.autoUpdate 62 self.sr.label.autoUpdate = False 63 sublevelCorrection = self.sr.node.scroll.sr.get('sublevelCorrection', 0) if self.sr.node.scroll else 0 64 sublevel = max(0, data.Get('sublevel', 0) - sublevelCorrection) 65 self.sr.label.maxLines = data.Get('maxLines', 1) 66 self.sr.label.left = self.labelLeftDefault + 16 * sublevel 67 self.sr.label.fontsize = data.Get('fontsize', fontconst.EVE_MEDIUM_FONTSIZE) 68 self.sr.label.letterspace = data.Get('hspace', 0) 69 self.sr.label.SetTextColor(data.Get('fontColor', EveLabelMedium.default_color)) 70 self.sr.label.text = self._GetText() 71 self.sr.label.Update() 72 self.sr.label.SetState(data.Get('labelState', self.DEFAULT_LABEL_STATE)) 73 self.sr.label.maxWidth = data.Get('labelMaxWidth', None) 74 self.sr.label.autoUpdate = preAutoUpdateFlag 75 76 def _GetText(self): 77 return self.sr.node.label 78 79 def UpdateHint(self): 80 data = self.sr.node 81 hint = data.hint 82 if hint is not None: 83 self.hint = hint 84 85 @classmethod 86 def GetHeight(cls, *args): 87 node, width = args 88 if node.vspace is not None: 89 node.height = uix.GetTextHeight(node.label, maxLines=node.maxLines) + node.vspace 90 else: 91 node.height = uix.GetTextHeight(node.label, maxLines=node.maxLines, width=node.labelMaxWidth) + cls.LABEL_PADDING 92 return node.height 93 94 def OnMouseHover(self, *args): 95 if self.sr.node and self.sr.node.Get('OnMouseHover', None): 96 self.sr.node.OnMouseHover(self) 97 98 def OnMouseEnter(self, *args): 99 SE_BaseClassCore.OnMouseEnter(self, *args) 100 if self.sr.node: 101 prompt_player_fsd_dialog('ListEntryEnter') 102 if self.sr.node.Get('OnMouseEnter', None): 103 self.sr.node.OnMouseEnter(self) 104 105 def OnMouseExit(self, *args): 106 SE_BaseClassCore.OnMouseExit(self, *args) 107 if self.sr.node: 108 if self.sr.node.Get('OnMouseExit', None): 109 self.sr.node.OnMouseExit(self) 110 111 def OnClick(self, *args): 112 if GetAttrs(self, 'sr', 'node'): 113 if self.sr.node.Get('selectable', 1): 114 self.sr.node.scroll.SelectNode(self.sr.node) 115 prompt_player_fsd_dialog('ListEntryClick') 116 if not self or self.destroyed: 117 return 118 if self.sr.node.Get('OnClick', None): 119 self.sr.node.OnClick(self) 120 121 def OnDblClick(self, *args): 122 if self.sr.node: 123 self.sr.node.scroll.SelectNode(self.sr.node) 124 if self.sr.node.Get('OnDblClick', None): 125 if isinstance(self.sr.node.OnDblClick, tuple): 126 func = self.sr.node.OnDblClick[0] 127 func(self, *self.sr.node.OnDblClick[1:]) 128 else: 129 self.sr.node.OnDblClick(self) 130 elif getattr(self, 'confirmOnDblClick', None): 131 uicore.registry.Confirm() 132 elif self.sr.node.Get('typeID', None): 133 self.ShowInfo() 134 135 def OnMouseDown(self, *args): 136 SE_BaseClassCore.OnMouseDown(self, *args) 137 if self.sr.node and self.sr.node.Get('OnMouseDown', None): 138 self.sr.node.OnMouseDown(self) 139 140 def OnMouseUp(self, *args): 141 SE_BaseClassCore.OnMouseUp(self, *args) 142 if not self or self.destroyed: 143 return 144 if self.sr.node and self.sr.node.Get('OnMouseUp', None): 145 self.sr.node.OnMouseUp(self) 146 147 def ShowInfo(self, *args): 148 if self.sr.node.Get('isStation', 0): 149 stationinfo = sm.GetService('ui').GetStationStaticInfo(self.itemID) 150 sm.GetService('info').ShowInfo(stationinfo.stationTypeID, self.itemID) 151 return 152 if self.sr.node.Get('typeID', None): 153 abstractinfo = self.sr.node.Get('abstractinfo', utillib.KeyVal()) 154 typeID = self.sr.node.Get('typeID', None) 155 itemID = self.sr.node.Get('itemID', None) or None 156 if IsBlueprintCategory(evetypes.GetCategoryID(typeID)): 157 isCopy = self.sr.node.isCopy 158 abstractinfo.bpData = sm.GetService('blueprintSvc').GetBlueprintTypeCopy(typeID=typeID, original=not isCopy) 159 sm.GetService('info').ShowInfo(typeID, itemID, abstractinfo=abstractinfo) 160 161 def GetMenu(self): 162 if not self.sr.node.Get('ignoreRightClick', 0): 163 self.OnClick() 164 if hasattr(self, 'sr'): 165 if self.sr.node and self.sr.node.Get('GetMenu', None): 166 return self.sr.node.GetMenu(self) 167 if getattr(self, 'itemID', None) or getattr(self, 'typeID', None): 168 return GetMenuService().GetMenuFromItemIDTypeID(getattr(self, 'itemID', None), getattr(self, 'typeID', None)) 169 return [] 170 171 def OnDropData(self, dragObj, nodes): 172 data = self.sr.node 173 if data.OnDropData: 174 data.OnDropData(dragObj, nodes) 175 176 def OnDragEnter(self, dragSource, dragData): 177 data = self.sr.node 178 if data.OnDragEnter: 179 data.OnDragEnter(dragSource, dragData) 180 181 def OnDragExit(self, dragSource, dragData): 182 data = self.sr.node 183 if data.OnDragExit: 184 data.OnDragExit(dragSource, dragData) 185 186 def DoSelectNode(self, toggle = 0): 187 self.sr.node.scroll.GetSelectedNodes(self.sr.node, toggle=toggle) 188 189 def GetRadialMenuIndicator(self, create = True, *args): 190 indicator = getattr(self, 'radialMenuIndicator', None) 191 if indicator and not indicator.destroyed: 192 return indicator 193 if not create: 194 return 195 self.radialMenuIndicator = Fill(bgParent=self, color=(1, 1, 1, 0.25), name='radialMenuIndicator') 196 return self.radialMenuIndicator 197 198 def ShowRadialMenuIndicator(self, slimItem, *args): 199 indicator = self.GetRadialMenuIndicator(create=True) 200 indicator.display = True 201 202 def HideRadialMenuIndicator(self, slimItem, *args): 203 indicator = self.GetRadialMenuIndicator(create=False) 204 if indicator: 205 indicator.display = False 206 207 @classmethod 208 def GetCopyData(cls, node): 209 return node.label