comparisonGrid.py (3801B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\comparison\comparisonGrid.py 2 import eveicon 3 from carbonui import Align, PickState, uiconst 4 from carbonui.button.menu import MenuButtonIcon 5 from carbonui.control.contextMenu.menuData import MenuData 6 from carbonui.control.scrollContainer import ScrollContainer 7 from carbonui.decorative.blurredSceneUnderlay import BlurredSceneUnderlay 8 from carbonui.primitives.layoutGrid import LayoutGrid 9 from dogma.attributes import uiAttributeGroups 10 from eve.client.script.ui.comparison import attributeFields 11 from eve.client.script.ui.comparison import comparisonSignals, comparisonSettings 12 from eve.client.script.ui.comparison.attributeFilterButtonIcon import AttributeFilterButtonIcon 13 from eve.client.script.ui.comparison.comparisonGridRow import AttributeComparisonLayoutGridRow 14 from eve.client.script.ui.comparison.comparisonGridUtil import is_compact, get_icon_size 15 from localization import GetByLabel 16 17 class ComparisonGrid(ScrollContainer): 18 default_name = 'ComparisonGrid' 19 20 def __init__(self, type_comparer, **kwargs): 21 super(ComparisonGrid, self).__init__(**kwargs) 22 self.type_comparer = type_comparer 23 self.top_row = None 24 self.layout_grid = LayoutGrid(parent=self, cellPadding=(8, 8), pickState=PickState.CHILDREN) 25 self.ShowNoContentHint(GetByLabel('UI/Compare/CompareToolHint')) 26 27 def OnDropData(self, dragSource, dragData): 28 comparisonSignals.on_drop_data(dragSource, dragData) 29 30 def populate_types(self, attribute_ids): 31 self.layout_grid.Flush() 32 comparable_types = self.type_comparer.get_comparable_types() 33 if not comparable_types: 34 self.ShowNoContentHint(GetByLabel('UI/Compare/CompareToolHint')) 35 return 36 if not attribute_ids: 37 self.ShowNoContentHint(GetByLabel('UI/Compare/NoAttributesSelected')) 38 return 39 self.HideNoContentHint() 40 num_types = len(comparable_types) 41 self.layout_grid.columns = num_types + 1 42 self.construct_header() 43 for group_id, _attribute_ids in self.type_comparer.get_common_attribute_ids_by_groupname(attribute_ids).items(): 44 header = self.layout_grid.AddRow(rowClass=attributeFields.GroupHeaderRow, text=GetByLabel(uiAttributeGroups.name_by_group_id[group_id])) 45 self.construct_rows(_attribute_ids, comparable_types, header, num_types) 46 47 self.top_row = self.layout_grid.children[0] 48 self.top_row.align = uiconst.TOTOP_STICKY 49 50 def construct_rows(self, attribute_ids, comparable_types, header, num_types): 51 show_bg = False 52 for attribute_id in attribute_ids: 53 attributes = [ comparable_type.get_attribute(attribute_id) for comparable_type in comparable_types ] 54 if not attributes: 55 continue 56 row = self.layout_grid.AddRow(rowClass=AttributeComparisonLayoutGridRow, attributes=attributes, comparable_types=comparable_types, is_compact=is_compact(num_types), show_bg=show_bg) 57 show_bg = not show_bg 58 header.attach_row(row) 59 60 def construct_header(self): 61 row = self.layout_grid.AddRow(name='top_row', state=uiconst.UI_NORMAL) 62 BlurredSceneUnderlay(bgParent=row, padRight=-1000) 63 row.AddCell() 64 comparable_types = self.type_comparer.get_comparable_types() 65 num_types = len(comparable_types) 66 for comparable_type in comparable_types: 67 attributeFields.TypeHeader(parent=row, comparable_type=comparable_type, align=Align.TOPRIGHT, icon_size=get_icon_size(num_types), pickState=PickState.ON, is_compact=is_compact(num_types)) 68 69 def OnScrolledVertical(self, posFraction): 70 if self.top_row: 71 self.top_row.FlagAlignmentDirty()