From a0f9fb6ad615b3178d869d4dc8d867ba332a30da Mon Sep 17 00:00:00 2001 From: blitzmann Date: Thu, 24 Sep 2015 22:11:31 -0400 Subject: [PATCH] Enable/disable edit menu options, and add color to character editor to show which skills are edited --- eos/saveddata/character.py | 10 +++++++++- gui/characterEditor.py | 31 +++++++++++++++++++++++-------- gui/mainMenuBar.py | 12 +++++++++++- service/character.py | 7 ++++++- 4 files changed, 49 insertions(+), 11 deletions(-) diff --git a/eos/saveddata/character.py b/eos/saveddata/character.py index 536fdd558..7fecdde1f 100644 --- a/eos/saveddata/character.py +++ b/eos/saveddata/character.py @@ -114,6 +114,10 @@ class Character(object): for skillRow in skills: self.addSkill(Skill(skillRow["typeID"], skillRow["level"])) + @property + def ro(self): + return self == self.getAll0() or self == self.getAll5() + @property def owner(self): return self.__owner @@ -239,7 +243,11 @@ class Skill(HandledItem): self.__level = self.activeLevel def revert(self): - self.activeLevel = self.__level + self.level = self.__level + + @property + def isDirty(self): + return self.__level != self.activeLevel @property def learned(self): diff --git a/gui/characterEditor.py b/gui/characterEditor.py index 4f5012ae0..2384949cc 100644 --- a/gui/characterEditor.py +++ b/gui/characterEditor.py @@ -181,7 +181,6 @@ class CharacterEditor(wx.Frame): self.aview.Layout() def charChanged(self, event): - self.sview.skillTreeListCtrl.DeleteChildren(self.sview.root) self.sview.populateSkillTree() sChar = service.Character.getInstance() charID = self.getActiveCharacter() @@ -327,6 +326,10 @@ class SkillTreeView (wx.Panel): self.levelIds[id] = level self.levelChangeMenu.Append(id, "Level %d" % level) + self.levelChangeMenu.AppendSeparator() + self.revertID = wx.NewId() + self.levelChangeMenu.Append(self.revertID, "Revert") + self.levelChangeMenu.Bind(wx.EVT_MENU, self.changeLevel) self.SetSizer(pmainSizer) @@ -334,15 +337,22 @@ class SkillTreeView (wx.Panel): def populateSkillTree(self): sChar = service.Character.getInstance() + charID = self.Parent.Parent.getActiveCharacter() + char = sChar.getCharacter(charID) + dirtyGroups = set([skill.item.group.ID for skill in char.dirtySkills]) + groups = sChar.getSkillGroups() imageId = self.skillBookImageId root = self.root tree = self.skillTreeListCtrl + tree.DeleteChildren(root) for id, name in groups: childId = tree.AppendItem(root, name, imageId) tree.SetPyData(childId, id) tree.AppendItem(childId, "dummy") + if id in dirtyGroups: + tree.SetItemTextColour(childId, wx.BLUE) tree.SortChildren(root) @@ -359,8 +369,10 @@ class SkillTreeView (wx.Panel): for id, name in sChar.getSkills(tree.GetPyData(root)): iconId = self.skillBookImageId childId = tree.AppendItem(root, name, iconId, data=wx.TreeItemData(id)) - level = sChar.getSkillLevel(char, id) + level, dirty = sChar.getSkillLevel(char, id) tree.SetItemText(childId, "Level %d" % level if isinstance(level, int) else level, 1) + if dirty: + tree.SetItemTextColour(childId, wx.BLUE) tree.SortChildren(root) @@ -381,17 +393,20 @@ class SkillTreeView (wx.Panel): def changeLevel(self, event): level = self.levelIds.get(event.Id) - if level is not None: - sChar = service.Character.getInstance() - charID = self.Parent.Parent.getActiveCharacter() - selection = self.skillTreeListCtrl.GetSelection() - skillID = self.skillTreeListCtrl.GetPyData(selection) + sChar = service.Character.getInstance() + charID = self.Parent.Parent.getActiveCharacter() + selection = self.skillTreeListCtrl.GetSelection() + skillID = self.skillTreeListCtrl.GetPyData(selection) + if level is not None: self.skillTreeListCtrl.SetItemText(selection, "Level %d" % level if isinstance(level, int) else level, 1) sChar.changeLevel(charID, skillID, level) sChar.saveCharacter(charID) wx.PostEvent(self.Parent.Parent, GE.CharListUpdated()) - + elif event.Id == self.revertID: + sChar.revertLevel(charID, skillID) + self.populateSkillTree() + wx.PostEvent(self.Parent.Parent, GE.CharListUpdated()) event.Skip() diff --git a/gui/mainMenuBar.py b/gui/mainMenuBar.py index fc01bb545..f8224b195 100644 --- a/gui/mainMenuBar.py +++ b/gui/mainMenuBar.py @@ -23,6 +23,7 @@ import bitmapLoader import gui.mainFrame import gui.graphFrame import gui.globalEvents as GE +import service class MainMenuBar(wx.MenuBar): def __init__(self): @@ -119,5 +120,14 @@ class MainMenuBar(wx.MenuBar): self.Enable(wx.ID_SAVEAS, enable) self.Enable(wx.ID_COPY, enable) self.Enable(self.exportSkillsNeededId, enable) - event.Skip() + sChar = service.Character.getInstance() + charID = self.mainFrame.charSelection.getActiveCharacter() + char = sChar.getCharacter(charID) + + # enable/disable character saving stuff + self.Enable(self.saveCharId, not char.ro and char.isDirty) + self.Enable(self.saveCharAsId, char.isDirty) + self.Enable(self.revertCharId, char.isDirty) + + event.Skip() diff --git a/service/character.py b/service/character.py index a57296779..5f569094e 100644 --- a/service/character.py +++ b/service/character.py @@ -238,7 +238,7 @@ class Character(object): def getSkillLevel(self, charID, skillID): skill = eos.db.getCharacter(charID).getSkill(skillID) - return skill.level if skill.learned else "Not learned" + return (skill.level if skill.learned else "Not learned", skill.isDirty) def getCharName(self, charID): return eos.db.getCharacter(charID).name @@ -323,6 +323,11 @@ class Character(object): else: skill.level = level + def revertLevel(self, charID, skillID): + char = eos.db.getCharacter(charID) + skill = char.getSkill(skillID) + skill.revert() + def addImplant(self, charID, itemID): char = eos.db.getCharacter(charID) implant = eos.types.Implant(eos.db.getItem(itemID))