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

skillsCataloguePanel.py (6568B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\skillPlan\skillsCatalogue\skillsCataloguePanel.py
      2 import blue
      3 import uthread
      4 from carbonui import uiconst
      5 from carbonui.primitives.container import Container
      6 from eve.client.script.ui.control.eveLabel import EveCaptionLarge, EveLabelLarge
      7 from eve.client.script.ui.quickFilter import QuickFilterEdit
      8 from eve.client.script.ui.skillPlan.browser.skillFilterCombo import SkillFilterCombo
      9 from eve.client.script.ui.skillPlan.controls.skillPlanLine import SkillPlanLine
     10 from eve.client.script.ui.skillPlan.skillsCatalogue.skillGroupBrowser import SkillGroupBrowser
     11 from eve.client.script.ui.skillPlan.skillsCatalogue.skillGroupSkillsBrowser import SkillGroupSkillsBrowser
     12 from localization import GetByLabel
     13 from skills.skillConst import FILTER_SHOWALL, FILTER_HAVEPREREQUISITS
     14 
     15 class SkillsCataloguePanel(Container):
     16     __notifyevents__ = ['OnSkillQueueChanged',
     17      'OnFreeSkillPointsChanged_Local',
     18      'OnSkillsChanged',
     19      'OnSkillQueueRefreshed']
     20     default_show_primary_buttons = True
     21 
     22     def ApplyAttributes(self, attributes):
     23         super(SkillsCataloguePanel, self).ApplyAttributes(attributes)
     24         self.updateSkillPointsThread = None
     25         self.isConstructed = False
     26         self.skillGroupSkillsBrowser = None
     27         self.skillPointsLabel = None
     28         sm.RegisterNotify(self)
     29 
     30     def ConstructLayout(self):
     31         self.topCont = Container(parent=self, name='topCont', height=32, align=uiconst.TOTOP)
     32         self.ConstructTopCont()
     33         self.skillPointsLabel = EveLabelLarge(parent=self, name='skillPointsLabel', align=uiconst.TOTOP)
     34         self.UpdateNumberOfSkillPoints()
     35         self.skillGroupBrowser = SkillGroupBrowser(parent=self, align=uiconst.TOTOP, height=0, padTop=16)
     36         self.skillGroupBrowser.onSkillSelected.connect(self.OnSkillGroupSelected)
     37         SkillPlanLine(parent=self, align=uiconst.TOTOP, state=uiconst.UI_DISABLED, padTop=16)
     38         self.ConstructSkillGroupSkillsBrowser()
     39         SkillPlanLine(parent=self, align=uiconst.TOBOTTOM, state=uiconst.UI_DISABLED)
     40         self.isConstructed = True
     41 
     42     def Show(self, *args):
     43         super(SkillsCataloguePanel, self).Show(*args)
     44         if not self.isConstructed:
     45             self.ConstructLayout()
     46 
     47     def ConstructSkillGroupSkillsBrowser(self):
     48         self.skillGroupSkillsBrowser = SkillGroupSkillsBrowser(parent=self, align=uiconst.TOALL, padding=(0, 16, 0, 16), showPrimaryButton=self.default_show_primary_buttons)
     49 
     50     def ConstructTopCont(self):
     51         self.skillsCaption = EveCaptionLarge(parent=self.topCont, align=uiconst.TOPLEFT, text=GetByLabel('UI/SkillPlan/Skills'))
     52         self.textFilterEdit = QuickFilterEdit(parent=self.topCont, align=uiconst.TORIGHT, width=140)
     53         self.textFilterEdit.ReloadFunction = self.OnQuickFilter
     54         prefskey, select = self.GetPrefsKeyAndSelect()
     55         self.skillFilterCombo = SkillFilterCombo(name='skillFilterCombo', parent=self.topCont, align=uiconst.TORIGHT, padRight=8, width=140, callback=self.OnSkillFilterCombo, prefskey=prefskey, select=select)
     56 
     57     def GetPrefsKeyAndSelect(self):
     58         configName = 'skillCatalogueCombo'
     59         prefskey = ('char', 'ui', configName)
     60         selectValue = settings.char.ui.Get(configName, FILTER_SHOWALL)
     61         return (prefskey, selectValue)
     62 
     63     def ReconstructSkillEntries(self):
     64         skills = self.GetSkillsFilteredAndSorted()
     65         self.skillGroupSkillsBrowser.ReconstructSkillEntries(skills)
     66         self.UpdateSkillGroupNumFilteredLabels()
     67 
     68     def UpdateSkillGroupNumFilteredLabels(self):
     69         for i, groupEntry in enumerate(self.skillGroupBrowser.GetAllSkillGroups()):
     70             skills = groupEntry.controller.GetSkillsFiltered(self.skillFilterCombo.GetValue(), self.textFilterEdit.GetValue())
     71             numSkills = len(skills)
     72             groupEntry.SetNumSkills(numSkills, i)
     73 
     74     def GetSkillsFilteredAndSorted(self):
     75         filterID = self.skillFilterCombo.GetValue()
     76         txtFilter = self.textFilterEdit.GetValue()
     77         if txtFilter:
     78             controllers = self.skillGroupBrowser.GetAllSkillGroupControllers()
     79         else:
     80             controllers = [self.skillGroupSkillsBrowser.controller]
     81         ret = []
     82         for controller in controllers:
     83             ret.extend(controller.GetSkillsFiltered(filterID, txtFilter))
     84 
     85         return sorted(ret, key=lambda x: x.GetName())
     86 
     87     def OnSkillGroupSelected(self, groupID):
     88         self.ResetQuickFilter()
     89         self.skillGroupSkillsBrowser.SetGroupID(groupID)
     90         self.ReconstructSkillEntries()
     91 
     92     def OnSkillFilterCombo(self, *args):
     93         self.skillFilterCombo.UpdateSettings()
     94         self.ReconstructSkillEntries()
     95 
     96     def OnQuickFilter(self, *args):
     97         self.ReconstructSkillEntries()
     98 
     99     def ResetQuickFilter(self):
    100         self.textFilterEdit.SetValue('', docallback=False)
    101 
    102     def _StartUpdateSkillPointsThread(self):
    103         if not self.updateSkillPointsThread:
    104             self.updateSkillPointsThread = uthread.new(self._UpdateNumberOfSkillPointsThread)
    105 
    106     def _UpdateNumberOfSkillPointsThread(self):
    107         while not self.destroyed:
    108             activeSkill = sm.GetService('skillqueue').SkillInTraining()
    109             if not activeSkill:
    110                 break
    111             totalSkillPoints = sm.GetService('skillqueue').GetEstimatedTotalSkillPoints()
    112             self.skillPointsLabel.text = GetByLabel('UI/CharacterSheet/CharacterSheetWindow/SkillTabs/SkillPoints', skillPoints=totalSkillPoints)
    113             blue.pyos.synchro.Sleep(2000)
    114 
    115         self.updateSkillPointsThread = None
    116 
    117     def UpdateNumberOfSkillPoints(self):
    118         if self.skillPointsLabel:
    119             skillPoints = sm.GetService('skills').GetTotalSkillPointsForCharacter()
    120             self.skillPointsLabel.text = GetByLabel('UI/CharacterSheet/CharacterSheetWindow/SkillTabs/SkillPoints', skillPoints=skillPoints)
    121             self._StartUpdateSkillPointsThread()
    122 
    123     def OnSkillQueueChanged(self):
    124         self._OnSkillsStateChanged()
    125 
    126     def OnSkillsChanged(self, *args):
    127         self._OnSkillsStateChanged()
    128 
    129     def OnSkillQueueRefreshed(self):
    130         self._OnSkillsStateChanged()
    131 
    132     def OnFreeSkillPointsChanged_Local(self):
    133         self._OnSkillsStateChanged()
    134 
    135     def _OnSkillsStateChanged(self):
    136         if not self.isConstructed:
    137             return
    138         self.skillGroupSkillsBrowser.UpdateEntries()
    139         self.UpdateNumberOfSkillPoints()
    140         if self.skillFilterCombo.GetValue() == FILTER_HAVEPREREQUISITS:
    141             self.ReconstructSkillEntries()