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)