(self, event)
| 652 | self.PopupMenu(menu) |
| 653 | |
| 654 | def changeLevel(self, event): |
| 655 | level = self.levelIds.get(event.Id) |
| 656 | |
| 657 | sChar = Character.getInstance() |
| 658 | char = self.charEditor.entityEditor.getActiveEntity() |
| 659 | if char.name in ("All 0", "All 5"): |
| 660 | return |
| 661 | selection = self.skillTreeListCtrl.GetSelection() |
| 662 | dataType, skillID = self.skillTreeListCtrl.GetItemData(selection) |
| 663 | |
| 664 | if level is not None: |
| 665 | sChar.changeLevel(char.ID, skillID, level, persist=True) |
| 666 | elif event.Id == self.revertID: |
| 667 | sChar.revertLevel(char.ID, skillID) |
| 668 | elif event.Id == self.saveID: |
| 669 | sChar.saveSkill(char.ID, skillID) |
| 670 | |
| 671 | # After saving the skill, we need to update not just the selected skill, but all open skills due to strict skill |
| 672 | # level setting. We don't want to refresh tree, as that will lose all expanded categories and users location |
| 673 | # within the tree. Thus, we loop through the tree and refresh the info. |
| 674 | # @todo: when collapsing branch, remove the data. This will make this loop more performant |
| 675 | |
| 676 | child = self.skillTreeListCtrl.GetFirstChild(self.root) |
| 677 | |
| 678 | def _setTreeSkillLevel(treeItem, skillID): |
| 679 | lvl, dirty = sChar.getSkillLevel(char.ID, skillID) |
| 680 | self.skillTreeListCtrl.SetItemText(treeItem, |
| 681 | 1, |
| 682 | _t("Level {}").format(int(lvl)) if not isinstance(lvl, str) else lvl) |
| 683 | |
| 684 | if not dirty: |
| 685 | self.skillTreeListCtrl.SetItemImage(treeItem, self.skillBookImageId) |
| 686 | |
| 687 | while child.IsOk(): |
| 688 | # child = Skill category |
| 689 | dataType, id = self.skillTreeListCtrl.GetItemData(child) |
| 690 | |
| 691 | if dataType == 'skill': |
| 692 | _setTreeSkillLevel(child, id) |
| 693 | else: |
| 694 | grand = self.skillTreeListCtrl.GetFirstChild(child) |
| 695 | while grand.IsOk(): |
| 696 | if self.skillTreeListCtrl.GetItemText(grand) != "dummy": |
| 697 | _, skillID = self.skillTreeListCtrl.GetItemData(grand) |
| 698 | _setTreeSkillLevel(grand, skillID) |
| 699 | grand = self.skillTreeListCtrl.GetNextSibling(grand) |
| 700 | |
| 701 | child = self.skillTreeListCtrl.GetNextSibling(child) |
| 702 | |
| 703 | dirtySkills = sChar.getDirtySkills(char.ID) |
| 704 | dirtyGroups = set([skill.item.group.ID for skill in dirtySkills]) |
| 705 | |
| 706 | parentID = self.skillTreeListCtrl.GetItemParent(selection) |
| 707 | parent = self.skillTreeListCtrl.GetItemData(parentID) |
| 708 | |
| 709 | if parent: |
| 710 | if parent[1] in dirtyGroups: |
| 711 | self.skillTreeListCtrl.SetItemImage(parentID, self.skillBookImageId) |
no test coverage detected