diff --git a/eos/saveddata/character.py b/eos/saveddata/character.py index 747eea2e3..536fdd558 100644 --- a/eos/saveddata/character.py +++ b/eos/saveddata/character.py @@ -24,6 +24,7 @@ from eos.effectHandlerHelpers import HandledItem import eos.db import eos + class Character(object): __itemList = None __itemIDMap = None @@ -85,7 +86,7 @@ class Character(object): return all0 - def __init__(self, name, defaultLevel=None): + def __init__(self, name, defaultLevel=None, initSkills=True): self.name = name self.__owner = None self.defaultLevel = defaultLevel @@ -93,8 +94,9 @@ class Character(object): self.__skillIdMap = {} self.dirtySkills = set() - for item in self.getSkillList(): - self.addSkill(Skill(item.ID, self.defaultLevel)) + if initSkills: + for item in self.getSkillList(): + self.addSkill(Skill(item.ID, self.defaultLevel)) self.__implants = eos.saveddata.fit.HandledImplantBoosterList() self.apiKey = None @@ -164,6 +166,12 @@ class Character(object): self.dirtySkills = set() eos.db.commit() + def revertLevels(self): + for skill in self.dirtySkills: + skill.revert() + + self.dirtySkills = set() + def filteredSkillIncrease(self, filter, *args, **kwargs): for element in self.skills: if filter(element): @@ -190,7 +198,7 @@ class Character(object): skill.clear() def __deepcopy__(self, memo): - copy = Character("%s copy" % self.name) + copy = Character("%s copy" % self.name, initSkills=False) copy.apiKey = self.apiKey copy.apiID = self.apiID @@ -230,6 +238,9 @@ class Skill(HandledItem): def saveLevel(self): self.__level = self.activeLevel + def revert(self): + self.activeLevel = self.__level + @property def learned(self): return self.activeLevel is not None diff --git a/gui/mainFrame.py b/gui/mainFrame.py index 90eebfac5..651c76a30 100644 --- a/gui/mainFrame.py +++ b/gui/mainFrame.py @@ -420,6 +420,10 @@ class MainFrame(wx.Frame): self.Bind(wx.EVT_MENU, self.goForums, id = menuBar.forumId) # Save current character self.Bind(wx.EVT_MENU, self.saveChar, id = menuBar.saveCharId) + # Save current character as another character + self.Bind(wx.EVT_MENU, self.saveCharAs, id = menuBar.saveCharAsId) + # Save current character + self.Bind(wx.EVT_MENU, self.revertChar, id = menuBar.revertCharId) #Clipboard exports self.Bind(wx.EVT_MENU, self.exportToClipboard, id=wx.ID_COPY) @@ -490,6 +494,18 @@ class MainFrame(wx.Frame): sChr.saveCharacter(charID) wx.PostEvent(self, GE.CharListUpdated()) + def saveCharAs(self, event): + sChr = service.Character.getInstance() + charID = self.charSelection.getActiveCharacter() + sChr.saveCharacterAs(charID) + wx.PostEvent(self, GE.CharListUpdated()) + + def revertChar(self, event): + sChr = service.Character.getInstance() + charID = self.charSelection.getActiveCharacter() + sChr.revertCharacter(charID) + wx.PostEvent(self, GE.CharListUpdated()) + def AdditionsTabSelect(self, event): selTab = self.additionsSelect.index(event.GetId()) diff --git a/gui/mainMenuBar.py b/gui/mainMenuBar.py index 756bec594..fc01bb545 100644 --- a/gui/mainMenuBar.py +++ b/gui/mainMenuBar.py @@ -37,6 +37,8 @@ class MainMenuBar(wx.MenuBar): self.wikiId = wx.NewId() self.forumId = wx.NewId() self.saveCharId = wx.NewId() + self.saveCharAsId = wx.NewId() + self.revertCharId = wx.NewId() self.mainFrame = gui.mainFrame.MainFrame.getInstance() @@ -73,7 +75,8 @@ class MainMenuBar(wx.MenuBar): editMenu.Append(wx.ID_PASTE, pasteText, "Import a fit from the clipboard") editMenu.AppendSeparator() editMenu.Append(self.saveCharId, "Save Character") - + editMenu.Append(self.saveCharAsId, "Save Character As...") + editMenu.Append(self.revertCharId, "Revert Character") # Character menu windowMenu = wx.Menu() self.Append(windowMenu, "&Window") diff --git a/service/character.py b/service/character.py index 6e11b2c31..95f51f670 100644 --- a/service/character.py +++ b/service/character.py @@ -199,6 +199,21 @@ class Character(object): char = eos.db.getCharacter(charID) char.saveLevels() + def saveCharacterAs(self, charID): + """Save edited skills as a new character""" + char = eos.db.getCharacter(charID) + newChar = copy.deepcopy(char) + newChar.name = newChar.name + " (saved as)" + eos.db.save(newChar) + + # revert old char + char.revertLevels() + + def revertCharacter(self, charID): + """Rollback edited skills""" + char = eos.db.getCharacter(charID) + char.revertLevels() + def getSkillGroups(self): cat = eos.db.getCategory(16) groups = [] @@ -251,7 +266,7 @@ class Character(object): def getApiDetails(self, charID): char = eos.db.getCharacter(charID) - if char.chars is not None: + if char.chars is not None: chars = json.loads(char.chars) else: chars = None