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

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()