item.py (6080B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\control\entries\item.py 2 import itertools 3 import evetypes 4 import metaGroups 5 import utillib 6 from carbonui import uiconst 7 from carbonui.primitives.container import Container 8 from carbonui.uicore import uicore 9 from eve.client.script.ui.control.entries.divider import DividerEntry 10 from eve.client.script.ui.control.entries.generic import events, Generic 11 from eve.client.script.ui.control.entries.header import Header 12 from eve.client.script.ui.control.entries.util import GetFromClass 13 from eve.client.script.ui.control.infoIcon import InfoIcon 14 from eve.client.script.ui.control.itemIcon import ItemIcon 15 from eve.client.script.ui.shared.tooltip.dynamicItem import AddDynamicItemAttributes 16 from eve.client.script.ui.shared.traits import HasTraits, TraitsContainer 17 from eveservices.menu import GetMenuService 18 19 class Item(Generic): 20 __guid__ = 'listentry.Item' 21 __params__ = ['itemID', 'typeID', 'label'] 22 isDragObject = True 23 ICON_SIZE = 24 24 25 def Startup(self, *args): 26 Generic.Startup(self, args) 27 self.labelCont = Container(name='labelCont', parent=self, padRight=16) 28 self.sr.label.SetParent(self.labelCont) 29 self.sr.label.left = 8 30 self.sr.label.autoFadeSides = 16 31 self.sr.infoicon = InfoIcon(left=2, parent=self, idx=0, align=uiconst.CENTERRIGHT) 32 self.sr.infoicon.OnClick = self.ShowInfo 33 self.sr.icon = ItemIcon(parent=self, pos=(1, 34 0, 35 self.ICON_SIZE, 36 self.ICON_SIZE), align=uiconst.CENTERLEFT, idx=0) 37 for eventName in events: 38 setattr(self.sr, eventName, None) 39 40 def Load(self, node): 41 self.sr.node = node 42 self.itemID = node.itemID 43 self.typeID = node.typeID 44 self.isStation = node.Get('isStation', 0) 45 self.confirmOnDblClick = node.Get('confirmOnDblClick', 0) 46 self.showTooltip = node.Get('showTooltip', True) 47 self.disableIcon = node.Get('disableIcon', False) 48 showinfo = node.Get('showinfo', True) 49 if node.getIcon and self.typeID: 50 self.sr.icon.state = uiconst.UI_DISABLED if self.disableIcon else uiconst.UI_NORMAL 51 self.sr.icon.SetTypeIDandItemID(self.typeID, self.itemID, isCopy=getattr(node, 'isCopy', False)) 52 self.sr.label.left = self.ICON_SIZE + 8 + node.get('sublevel', 0) * 16 53 self.sr.icon.left = node.get('sublevel', 0) * 16 54 else: 55 self.sr.icon.state = uiconst.UI_HIDDEN 56 self.sr.label.left = 8 + node.get('sublevel', 0) * 16 57 self.sr.label.text = node.label 58 self.hint = node.Get('hint', '') 59 if showinfo and (self.typeID or self.isStation): 60 self.sr.infoicon.state = uiconst.UI_NORMAL 61 else: 62 self.sr.infoicon.state = uiconst.UI_HIDDEN 63 for eventName in events: 64 if node.Get(eventName, None): 65 setattr(self.sr, eventName, node.Get(eventName, None)) 66 67 if node.Get('selected', 0): 68 self.Select() 69 else: 70 self.Deselect() 71 self.labelCont.padRight = 0 if self.sr.infoicon.state == uiconst.UI_HIDDEN else 16 72 self.sr.label.Update() 73 74 def GetHeight(self, *args): 75 node, width = args 76 node.height = 29 77 return node.height 78 79 def GetMenu(self): 80 if not self.sr.node.Get('ignoreRightClick', 0): 81 self.OnClick() 82 if self.sr.node.Get('GetMenu', None): 83 return self.sr.node.GetMenu(self) 84 if self.itemID: 85 return GetMenuService().GetMenuFromItemIDTypeID(self.itemID, self.typeID, includeMarketDetails=True) 86 if self.typeID: 87 if getattr(self.sr.node, 'isCopy', False): 88 bpData = sm.GetService('blueprintSvc').GetBlueprintTypeCopy(self.typeID, original=False) 89 abstractInfo = utillib.KeyVal(bpData=bpData) 90 else: 91 abstractInfo = None 92 return GetMenuService().GetMenuFromItemIDTypeID(None, self.typeID, includeMarketDetails=True, abstractInfo=abstractInfo) 93 return [] 94 95 def GetDragData(self, *args): 96 return self.sr.node.scroll.GetSelectedNodes(self.sr.node) 97 98 def LoadTooltipPanel(self, tooltipPanel, *args): 99 if self.IsUnder(uicore.layer.menu): 100 return 101 if not self.showTooltip: 102 return 103 if HasTraits(self.typeID): 104 tooltipPanel.LoadGeneric1ColumnTemplate() 105 tooltipPanel.AddSpacer(width=300, height=1) 106 TraitsContainer(parent=tooltipPanel, typeID=self.typeID, padding=7) 107 if self.itemID: 108 tooltipPanel.LoadGeneric1ColumnTemplate() 109 AddDynamicItemAttributes(tooltipPanel, self.itemID, self.typeID) 110 loadTooltipPanelFunc = self.sr.node.Get('LoadTooltipPanelFunc', None) 111 if loadTooltipPanelFunc: 112 loadTooltipPanelFunc(tooltipPanel, self.itemID, self.typeID) 113 114 def OnMouseEnter(self, *args): 115 Generic.OnMouseEnter(self, *args) 116 self.sr.icon.OnMouseEnter() 117 118 def OnMouseExit(self, *args): 119 Generic.OnMouseExit(self, *args) 120 self.sr.icon.OnMouseExit() 121 122 123 def GetItemEntriesByMetaGroup(typeIDs): 124 sortKeys = [] 125 for typeID in typeIDs: 126 metaGroupID = evetypes.GetMetaGroupID(typeID) or 1 127 metaLevel = evetypes.GetMetaLevel(typeID) 128 name = evetypes.GetName(typeID) 129 sortKeys.append((metaGroupID, 130 metaLevel, 131 name, 132 typeID)) 133 134 entries = [] 135 it = itertools.groupby(sorted(sortKeys), key=lambda x: x[0]) 136 for metaGroupID, variants in it: 137 headerData = {'line': metaGroupID, 138 'label': metaGroups.get_name(metaGroupID), 139 'text': None} 140 entries.append(GetFromClass(Header, headerData)) 141 for _, _, name, typeID in variants: 142 itemData = {'typeID': typeID, 143 'label': name, 144 'getIcon': 1} 145 entries.append(GetFromClass(Item, itemData)) 146 147 entries.append(GetFromClass(DividerEntry)) 148 149 return entries