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