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

comparisonScroll.py (4464B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\comparison\comparisonScroll.py
      2 import eveformat
      3 import evetypes
      4 import inventorycommon
      5 import metaGroups
      6 from carbonui import TextColor
      7 from carbonui.control.scroll import Scroll
      8 from dogma import data as dogma_data
      9 from eve.client.script.ui.control.entries.util import GetFromClass
     10 from eve.common.script.util import eveFormat
     11 from eveservices.menu import GetMenuService
     12 from localization import GetByLabel
     13 from signals import Signal
     14 from utillib import KeyVal
     15 from eve.client.script.ui.control.entries.item import Item
     16 from eve.client.script.ui.control.eveLabel import EveLabelMedium
     17 
     18 class CompareItem(Item):
     19     LABEL_PADDING = 16
     20     ICON_SIZE = 32
     21 
     22     @classmethod
     23     def GetHeight(cls, node, width):
     24         _, height = EveLabelMedium.MeasureTextSize(node.label, maxLines=node.maxLines, width=node.labelMaxWidth)
     25         node.height = height + cls.LABEL_PADDING
     26         return node.height
     27 
     28 
     29 class ComparisonScroll(Scroll):
     30     default_id = 'typecompare_typescroll'
     31 
     32     def __init__(self, **kw):
     33         super(ComparisonScroll, self).__init__(**kw)
     34         self.on_drop_data = Signal()
     35         self.on_remove_entry = Signal()
     36         self.sr.content.OnDropData = self.OnDropData
     37         self.ShowHint(GetByLabel('UI/Compare/CompareToolHint'))
     38 
     39     def populate_scroll(self, types, attribute_ids):
     40         scrolllist, headers = self.get_scroll_list(types, attribute_ids)
     41         self.Load(contentList=scrolllist, headers=headers, noContentHint=GetByLabel('UI/Compare/CompareToolHint'))
     42 
     43     def OnDropData(self, dragSource, dragData):
     44         self.on_drop_data(dragSource, dragData)
     45 
     46     def get_scroll_list(self, types, attribute_ids):
     47         if not types:
     48             return ([], [])
     49         scrolllist = []
     50         headers = [GetByLabel('/Carbon/UI/Common/TypeName'), GetByLabel('UI/Compare/MetaGroup')]
     51         for type_data in types:
     52             data = self._GetTypeScrollEntryData(type_data, attribute_ids)
     53             scrolllist.append(GetFromClass(CompareItem, data))
     54 
     55         for attribute_id in attribute_ids:
     56             displayNameRaw = dogma_data.get_attribute_display_name(attribute_id)
     57             displayName = eveformat.replace_text_ignoring_tags(displayNameRaw, old=' ', new='<br>')
     58             headers.append(displayName)
     59 
     60         treatedHeaders = []
     61         for each in headers:
     62             treatedHeaders.append(each.replace(' ', '<br>'))
     63 
     64         return (scrolllist, treatedHeaders)
     65 
     66     def _GetTypeScrollEntryData(self, comparable_type, attribute_ids):
     67         data = KeyVal(typeID=comparable_type.type_id, itemID=comparable_type.item_id)
     68         typeName = evetypes.GetName(comparable_type.type_id)
     69         metaGroupID = evetypes.GetMetaGroupIDOrNone(comparable_type.type_id)
     70         text = '%s<t>%s' % (typeName, metaGroups.get_name(metaGroupID))
     71         data.Set('sort_%s' % GetByLabel('/Carbon/UI/Common/TypeName'), typeName)
     72         data.Set('sort_%s' % GetByLabel('UI/Compare/MetaGroup'), metaGroupID)
     73         for attribute_id in attribute_ids:
     74             attribute = comparable_type.get_attribute(attribute_id)
     75             if not attribute:
     76                 text += '<t><color={}>-</color>'.format(TextColor.DISABLED.hex_argb)
     77                 continue
     78             displayNameRaw = dogma_data.get_attribute_display_name(attribute.attribute_id)
     79             sort_key = eveformat.replace_text_ignoring_tags(displayNameRaw, old=' ', new='<br>')
     80             sort_value = comparable_type.get_attribute_value(attribute.attribute_id)
     81             data.Set('sort_%s' % sort_key, sort_value)
     82             text += '<t>%s' % attribute.get_value_text_formatted()
     83 
     84         data.label = text
     85         data.getIcon = 1
     86         data.GetMenu = self.GetEntryMenu
     87         data.viewMode = 'details'
     88         data.OnDropData = self.OnDropData
     89         data.comparable_type = comparable_type
     90         return data
     91 
     92     def GetEntryMenu(self, item):
     93         m = GetMenuService().GetMenuFromItemIDTypeID(None, item.typeID, includeMarketDetails=True).filter(['UI/Compare/CompareButton'])
     94         item.DoSelectNode()
     95         sel = self.GetSelected()
     96         text = GetByLabel('UI/Commands/Remove')
     97         if len(sel) > 1:
     98             text = GetByLabel('UI/Commands/RemoveMultiple', itemcount=len(sel))
     99         m += [(text, self.RemoveEntry, (item,))]
    100         return m
    101 
    102     def RemoveEntry(self, item):
    103         self.on_remove_entry(item.sr.node.comparable_type)