From 1db6b3372cd27b7fb26903449b7e25c3268dea6a Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Fri, 9 Jan 2026 20:54:35 +0100 Subject: [PATCH] Add "up to" all skill buttons --- gui/builtinContextMenus/skillAffectors.py | 33 +++++++++++++++++++---- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/gui/builtinContextMenus/skillAffectors.py b/gui/builtinContextMenus/skillAffectors.py index ebcd24bb4..4dc254f13 100644 --- a/gui/builtinContextMenus/skillAffectors.py +++ b/gui/builtinContextMenus/skillAffectors.py @@ -79,7 +79,7 @@ class ChangeAffectingSkills(ContextMenuSingle): label = _t("Level %s") % i id = ContextMenuSingle.nextID() - self.skillIds[id] = (skill, i) + self.skillIds[id] = (skill, i, False) # False = not "up" for individual skills menuItem = wx.MenuItem(rootMenu, id, label, kind=wx.ITEM_RADIO) rootMenu.Bind(wx.EVT_MENU, self.handleSkillChange, menuItem) return menuItem @@ -97,11 +97,24 @@ class ChangeAffectingSkills(ContextMenuSingle): # For "All", only show levels 1-5 (not "Not Learned") for i in range(1, 6): id = ContextMenuSingle.nextID() - self.skillIds[id] = (None, i) # None indicates "All" was selected + self.skillIds[id] = (None, i, False) # None indicates "All" was selected, False = not "up" label = _t("Level %s") % i menuItem = wx.MenuItem(rootMenu if msw else grandSubAll, id, label, kind=wx.ITEM_RADIO) grandSubAll.Bind(wx.EVT_MENU, self.handleSkillChange, menuItem) grandSubAll.Append(menuItem) + + # Add separator + grandSubAll.AppendSeparator() + + # Add "Up Level 1..5" entries + for i in range(1, 6): + id = ContextMenuSingle.nextID() + self.skillIds[id] = (None, i, True) # None indicates "All" was selected, True = "up" only + label = _t("Up Level %s") % i + menuItem = wx.MenuItem(rootMenu if msw else grandSubAll, id, label, kind=wx.ITEM_RADIO) + grandSubAll.Bind(wx.EVT_MENU, self.handleSkillChange, menuItem) + grandSubAll.Append(menuItem) + sub.Append(allItem) # Add separator @@ -126,13 +139,23 @@ class ChangeAffectingSkills(ContextMenuSingle): return sub def handleSkillChange(self, event): - skill, level = self.skillIds[event.Id] + skill, level, up = self.skillIds[event.Id] if skill is None: # "All" was selected for s in self.skills: - self.sChar.changeLevel(self.charID, s.item.ID, level) + if up: + # Only increase skill if it's below the target level + if not s.learned or s.level < level: + self.sChar.changeLevel(self.charID, s.item.ID, level) + else: + self.sChar.changeLevel(self.charID, s.item.ID, level) else: - self.sChar.changeLevel(self.charID, skill.item.ID, level) + if up: + # Only increase skill if it's below the target level + if not skill.learned or skill.level < level: + self.sChar.changeLevel(self.charID, skill.item.ID, level) + else: + self.sChar.changeLevel(self.charID, skill.item.ID, level) fitID = self.mainFrame.getActiveFit() self.sFit.changeChar(fitID, self.charID)