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

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)