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

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