From 05b9d1e6071850fb09618f08d21fa18e6bdb3701 Mon Sep 17 00:00:00 2001 From: blitzmann Date: Fri, 25 Sep 2015 12:13:17 -0400 Subject: [PATCH] Fixed some bugs, added character action buttons on editor --- eos/saveddata/character.py | 9 +++--- gui/characterEditor.py | 62 +++++++++++++++++++++++++++++++++----- 2 files changed, 59 insertions(+), 12 deletions(-) diff --git a/eos/saveddata/character.py b/eos/saveddata/character.py index 670c90faf..06559b8eb 100644 --- a/eos/saveddata/character.py +++ b/eos/saveddata/character.py @@ -164,14 +164,14 @@ class Character(object): if self == self.getAll5() or self == self.getAll0(): raise ReadOnlyException("This character is read-only") - for skill in self.dirtySkills: + for skill in self.dirtySkills.copy(): skill.saveLevel() self.dirtySkills = set() eos.db.commit() def revertLevels(self): - for skill in self.dirtySkills: + for skill in self.dirtySkills.copy(): skill.revert() self.dirtySkills = set() @@ -269,10 +269,11 @@ class Skill(HandledItem): raise ReadOnlyException() self.activeLevel = level + self.character.dirtySkills.add(self) + if self.activeLevel == self.__level and self in self.character.dirtySkills: self.character.dirtySkills.remove(self) - else: - self.character.dirtySkills.add(self) + @property def item(self): diff --git a/gui/characterEditor.py b/gui/characterEditor.py index be8ee3e42..13c6af087 100644 --- a/gui/characterEditor.py +++ b/gui/characterEditor.py @@ -59,14 +59,12 @@ class CharacterEditor(wx.Frame): self.charChoice = wx.Choice(self, wx.ID_ANY, style=0) self.navSizer.Add(self.charChoice, 1, wx.ALL | wx.EXPAND, 5) - self.refreshCharacterList() + charList = sChar.getCharacterList() - ''' for id, name, active in charList: i = self.charChoice.Append(name, id) if active: self.charChoice.SetSelection(i) - ''' buttons = (("new", wx.ART_NEW), ("rename", bitmapLoader.getBitmap("rename", "icons")), @@ -113,12 +111,26 @@ class CharacterEditor(wx.Frame): bSizerButtons = wx.BoxSizer(wx.HORIZONTAL) + self.btnSave = wx.Button(self, wx.ID_ANY, "Save") + self.btnSaveAs = wx.Button(self, wx.ID_ANY, "Save As...") + self.btnRevert = wx.Button(self, wx.ID_ANY, "Revert") self.btnOK = wx.Button(self, wx.ID_OK) + + bSizerButtons.Add(self.btnSave, 0, wx.ALL, 5) + bSizerButtons.Add(self.btnSaveAs, 0, wx.ALL, 5) + bSizerButtons.Add(self.btnRevert, 0, wx.ALL, 5) + bSizerButtons.AddStretchSpacer() bSizerButtons.Add(self.btnOK, 0, wx.ALL, 5) + + + self.btnSave.Bind(wx.EVT_BUTTON, self.saveChar) + self.btnSaveAs.Bind(wx.EVT_BUTTON, self.saveCharAs) + self.btnRevert.Bind(wx.EVT_BUTTON, self.revertChar) self.btnOK.Bind(wx.EVT_BUTTON, self.editingFinished) - mainSizer.Add(bSizerButtons, 0, wx.ALIGN_RIGHT, 5) + mainSizer.Add(bSizerButtons, 0, wx.EXPAND, 5) + self.btnRestrict() self.SetSizer(mainSizer) self.Layout() @@ -131,17 +143,29 @@ class CharacterEditor(wx.Frame): self.registerEvents() + def btnRestrict(self): + sChar = service.Character.getInstance() + charID = self.getActiveCharacter() + char = sChar.getCharacter(charID) + + # enable/disable character saving stuff + self.btnSave.Enable(not char.ro and char.isDirty) + self.btnSaveAs.Enable(char.isDirty) + self.btnRevert.Enable(char.isDirty) def refreshCharacterList(self, event=None): sChar = service.Character.getInstance() charList = sChar.getCharacterList() + active = self.getActiveCharacter() self.charChoice.Clear() - for id, name, active in charList: + for id, name, _ in charList: i = self.charChoice.Append(name, id) - if active: + if active == id: self.charChoice.SetSelection(i) + self.btnRestrict() + def editingFinished(self, event): del self.disableWin wx.PostEvent(self.mainFrame, GE.CharListUpdated()) @@ -152,6 +176,27 @@ class CharacterEditor(wx.Frame): self.Bind(GE.CHAR_LIST_UPDATED, self.refreshCharacterList) self.charChoice.Bind(wx.EVT_CHOICE, self.charChanged) + def saveChar(self, event): + sChr = service.Character.getInstance() + charID = self.getActiveCharacter() + sChr.saveCharacter(charID) + self.sview.populateSkillTree() + wx.PostEvent(self, GE.CharListUpdated()) + + def saveCharAs(self, event): + charID = self.getActiveCharacter() + dlg = SaveCharacterAs(self, charID) + dlg.ShowModal() + dlg.Destroy() + self.sview.populateSkillTree() + + def revertChar(self, event): + sChr = service.Character.getInstance() + charID = self.getActiveCharacter() + sChr.revertCharacter(charID) + self.sview.populateSkillTree() + wx.PostEvent(self, GE.CharListUpdated()) + def closeEvent(self, event): del self.disableWin wx.PostEvent(self.mainFrame, GE.CharListUpdated()) @@ -339,6 +384,7 @@ class SkillTreeView (wx.Panel): sChar = service.Character.getInstance() charID = self.Parent.Parent.getActiveCharacter() dirtySkills = sChar.getDirtySkills(charID) + print dirtySkills dirtyGroups = set([skill.item.group.ID for skill in dirtySkills]) groups = sChar.getSkillGroups() @@ -719,6 +765,7 @@ class SaveCharacterAs(wx.Dialog): def __init__(self, parent, charID): wx.Dialog.__init__(self, parent, title="Save Character As...", size=wx.Size(300, 60)) self.charID = charID + self.parent = parent sChar = service.Character.getInstance() name = sChar.getCharName(charID) bSizer1 = wx.BoxSizer(wx.HORIZONTAL) @@ -737,9 +784,8 @@ class SaveCharacterAs(wx.Dialog): def change(self, event): sChar = service.Character.getInstance() - mainFrame = gui.mainFrame.MainFrame.getInstance() sChar.saveCharacterAs(self.charID, self.input.GetLineText(0)) - wx.PostEvent(mainFrame, GE.CharListUpdated()) + wx.PostEvent(self.parent, GE.CharListUpdated()) event.Skip() self.Destroy()