skill_list.py (3121B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\expertSystems\client\ui\skill_list.py 2 from __future__ import division 3 import math 4 import blue 5 import evetypes 6 import threadutils 7 from carbonui import uiconst 8 from carbonui.primitives.gridcontainer import GridContainer 9 from carbonui.uianimations import animations 10 from expertSystems.client.ui.skill_row import SkillRow 11 from expertSystems.client.util import get_localized_sort_key 12 13 class DynamicGridContainer(GridContainer): 14 15 def __init__(self, cell_height, max_cell_width, **kwargs): 16 self.cell_height = cell_height 17 self.max_cell_width = max_cell_width 18 super(DynamicGridContainer, self).__init__(**kwargs) 19 20 def UpdateAlignment(self, budgetLeft = 0, budgetTop = 0, budgetWidth = 0, budgetHeight = 0, updateChildrenOnly = False): 21 width, _ = self.GetCurrentAbsoluteSize() 22 columns = max(1, int(math.ceil(width / self.max_cell_width))) 23 if columns != self.columns: 24 self.columns = columns 25 lines = max(1, int(math.ceil(len(self.children) / columns))) 26 if lines != self.lines: 27 self.lines = lines 28 height = self.lines * self.cell_height 29 if height != self.height: 30 self.height = height 31 return super(DynamicGridContainer, self).UpdateAlignment(budgetLeft, budgetTop, budgetWidth, budgetHeight, updateChildrenOnly) 32 33 34 class SkillList(DynamicGridContainer): 35 36 def __init__(self, skills = None, max_cell_width = 300, **kwargs): 37 self._skills = skills 38 super(SkillList, self).__init__(cell_height=SkillRow.default_height, max_cell_width=max_cell_width, **kwargs) 39 self.update_skills() 40 self.skill_rows = [] 41 42 @property 43 def skills(self): 44 return self._skills 45 46 @skills.setter 47 def skills(self, skills): 48 self._skills = skills 49 self.update_skills() 50 51 def on_select_skill_row(self, skill_row, deselect_others = True): 52 if deselect_others: 53 for row in self.skill_rows: 54 if row == skill_row: 55 continue 56 row.deselect() 57 58 skill_row.select() 59 60 def SelectAll(self): 61 for row in self.skill_rows: 62 row.select() 63 64 def Copy(self): 65 copyStrings = [] 66 for row in self.skill_rows: 67 if row.selected: 68 copyStrings.append(row.get_copy_data()) 69 70 blue.pyos.SetClipboardData('\n'.join(copyStrings)) 71 72 @threadutils.highlander_threaded 73 def update_skills(self): 74 self.Flush() 75 if not self._skills: 76 return 77 sorted_skills = sorted(self._skills.iteritems(), key=lambda skill_id__: get_localized_sort_key(evetypes.GetName(skill_id__[0]))) 78 for i, (skill_id, level) in enumerate(sorted_skills): 79 skill_row = SkillRow(parent=self, align=uiconst.TOTOP, skill_type_id=skill_id, required_level=level, rowSelectFunc=self.on_select_skill_row) 80 self.skill_rows.append(skill_row) 81 animations.FadeTo(skill_row, startVal=0.0, endVal=1.0, duration=0.3, timeOffset=i * 0.02)