diff --git a/eos/db/gamedata/queries.py b/eos/db/gamedata/queries.py index ed75c62a8..957e4c657 100644 --- a/eos/db/gamedata/queries.py +++ b/eos/db/gamedata/queries.py @@ -109,6 +109,12 @@ def getAlphaClone(lookfor, eager=None): return item +def getAlphaCloneList(eager=None): + eager = processEager(eager) + clones = gamedata_session.query(AlphaClone).options(*eager).all() + return clones + + groupNameMap = {} diff --git a/eos/db/saveddata/character.py b/eos/db/saveddata/character.py index 7d0c5f14c..aa9a99c74 100644 --- a/eos/db/saveddata/character.py +++ b/eos/db/saveddata/character.py @@ -33,11 +33,12 @@ characters_table = Table("characters", saveddata_meta, Column("defaultChar", Integer), Column("chars", String, nullable=True), Column("defaultLevel", Integer, nullable=True), - Column("alphaClone", Integer, nullable=True), + Column("alphaCloneID", Integer, nullable=True), Column("ownerID", ForeignKey("users.ID"), nullable=True)) mapper(Character, characters_table, properties={ + "_Character__alphaCloneID": characters_table.c.alphaCloneID, "savedName": characters_table.c.name, "_Character__owner": relation( User, diff --git a/eos/saveddata/character.py b/eos/saveddata/character.py index 4ee3c25a0..cd5e278fd 100644 --- a/eos/saveddata/character.py +++ b/eos/saveddata/character.py @@ -99,6 +99,7 @@ class Character(object): self.__skills = [] self.__skillIdMap = {} self.dirtySkills = set() + self.alphaClone = None if initSkills: for item in self.getSkillList(): @@ -115,8 +116,10 @@ class Character(object): self.__skillIdMap[skill.itemID] = skill self.dirtySkills = set() - if self.alphaClone: - self.alphaClone = eos.db.getAlphaClone(self.alphaClone) + self.alphaClone = None + + if self.alphaCloneID: + self.alphaClone = eos.db.getAlphaClone(self.alphaCloneID) def apiUpdateCharSheet(self, skills): del self.__skills[:] @@ -144,6 +147,15 @@ class Character(object): def name(self, name): self.savedName = name + @property + def alphaCloneID(self): + return self.__alphaCloneID + + @alphaCloneID.setter + def alphaCloneID(self, cloneID): + self.__alphaCloneID = cloneID + self.alphaClone = eos.db.getAlphaClone(cloneID) if cloneID is not None else None + @property def skills(self): return self.__skills diff --git a/gui/characterEditor.py b/gui/characterEditor.py index bf7db18bf..82b47fd62 100644 --- a/gui/characterEditor.py +++ b/gui/characterEditor.py @@ -239,10 +239,25 @@ class SkillTreeView (wx.Panel): pmainSizer = wx.BoxSizer(wx.VERTICAL) + self.clonesChoice = wx.Choice(self, wx.ID_ANY, style=0) + i = self.clonesChoice.Append("Omega Clone", None) + self.clonesChoice.SetSelection(i) + pmainSizer.Add(self.clonesChoice, 0, wx.ALL | wx.EXPAND, 5) + + sChar = service.Character.getInstance() + self.alphaClones = sChar.getAlphaCloneList() + char = self.charEditor.entityEditor.getActiveEntity() + + for clone in self.alphaClones: + i = self.clonesChoice.Append(clone.alphaCloneName, clone.ID) + if clone.ID == char.alphaCloneID: + self.clonesChoice.SetSelection(i) + + self.clonesChoice.Bind(wx.EVT_CHOICE, self.cloneChanged) + tree = self.skillTreeListCtrl = wx.gizmos.TreeListCtrl(self, wx.ID_ANY, style=wx.TR_DEFAULT_STYLE | wx.TR_HIDE_ROOT) pmainSizer.Add(tree, 1, wx.EXPAND | wx.ALL, 5) - self.imageList = wx.ImageList(16, 16) tree.SetImageList(self.imageList) self.skillBookImageId = self.imageList.Add(BitmapLoader.getBitmap("skill_small", "gui")) @@ -262,7 +277,7 @@ class SkillTreeView (wx.Panel): tree.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.scheduleMenu) # bind the Character selection event - self.charEditor.entityEditor.Bind(wx.EVT_CHOICE, self.populateSkillTree) + self.charEditor.entityEditor.Bind(wx.EVT_CHOICE, self.charChanged) self.charEditor.Bind(GE.CHAR_LIST_UPDATED, self.populateSkillTree) srcContext = "skillItem" @@ -295,11 +310,30 @@ class SkillTreeView (wx.Panel): self.Layout() + def cloneChanged(self, event): + sChar = service.Character.getInstance() + sChar.setAlphaClone(self.charEditor.entityEditor.getActiveEntity(), event.ClientData) + self.populateSkillTree() + + def charChanged(self, event=None): + char = self.charEditor.entityEditor.getActiveEntity() + for i in range(self.clonesChoice.GetCount()): + cloneID = self.clonesChoice.GetClientData(i) + if char.alphaCloneID == cloneID: + self.clonesChoice.SetSelection(i) + + self.populateSkillTree(event) + def populateSkillTree(self, event=None): sChar = service.Character.getInstance() char = self.charEditor.entityEditor.getActiveEntity() dirtyGroups = set([skill.item.group.ID for skill in char.dirtySkills]) + if char.name in ("All 0", "All 5"): + self.clonesChoice.Disable() + else: + self.clonesChoice.Enable() + groups = sChar.getSkillGroups() imageId = self.skillBookImageId root = self.root diff --git a/service/character.py b/service/character.py index 802d11092..922b926c1 100644 --- a/service/character.py +++ b/service/character.py @@ -188,6 +188,9 @@ class Character(object): def all5ID(self): return self.all5().ID + def getAlphaCloneList(self): + return eos.db.getAlphaCloneList() + def getCharacterList(self): return eos.db.getCharacterList() @@ -233,6 +236,10 @@ class Character(object): skills.append((skill.ID, skill.name)) return skills + def setAlphaClone(self, char, cloneID): + char.alphaCloneID = cloneID + eos.db.commit() + def getSkillDescription(self, itemID): return eos.db.getItem(itemID).description