diff --git a/eos/saveddata/character.py b/eos/saveddata/character.py index 1c0c7cecf..c02f84464 100644 --- a/eos/saveddata/character.py +++ b/eos/saveddata/character.py @@ -49,7 +49,7 @@ class Character(object): if initSkills: for item in self.getSkillList(): - self.addSkill(Skill(item.ID, self.defaultLevel)) + self.addSkill(Skill(self, item.ID, self.defaultLevel)) self.__implants = HandledImplantBoosterList() self.apiKey = None @@ -123,7 +123,7 @@ class Character(object): del self.__skills[:] self.__skillIdMap.clear() for skillRow in skills: - self.addSkill(Skill(skillRow["typeID"], skillRow["level"])) + self.addSkill(Skill(self, skillRow["typeID"], skillRow["level"])) self.secStatus = secStatus @property @@ -190,7 +190,6 @@ class Character(object): else: return - self.__skills.append(skill) self.__skillIdMap[skill.itemID] = skill def removeSkill(self, skill): @@ -206,7 +205,7 @@ class Character(object): skill = self.__skillIdMap.get(item.ID) if skill is None: - skill = Skill(item, self.defaultLevel, False, True) + skill = Skill(self, item, self.defaultLevel, False, True) self.addSkill(skill) return skill @@ -220,7 +219,7 @@ class Character(object): return len(self.dirtySkills) > 0 def saveLevels(self): - if self == self.getAll5() or self == self.getAll0(): + if self.ro: raise ReadOnlyException("This character is read-only") for skill in self.dirtySkills.copy(): @@ -272,7 +271,7 @@ class Character(object): copy.apiID = self.apiID for skill in self.skills: - copy.addSkill(Skill(skill.itemID, skill.level, False, skill.learned)) + copy.addSkill(Skill(copy, skill.itemID, skill.level, False, skill.learned)) return copy @@ -297,7 +296,8 @@ class Character(object): class Skill(HandledItem): - def __init__(self, item, level=0, ro=False, learned=True): + def __init__(self, character, item, level=0, ro=False, learned=True): + self.character = character self.__item = item if not isinstance(item, int) else None self.itemID = item.ID if not isinstance(item, int) else item self.__level = level if learned else None @@ -321,7 +321,7 @@ class Skill(HandledItem): self.character.dirtySkills.remove(self) def revert(self): - self.level = self.__level + self.activeLevel = self.__level @property def isDirty(self): @@ -431,7 +431,7 @@ class Skill(HandledItem): return val def __deepcopy__(self, memo): - copy = Skill(self.item, self.level, self.__ro) + copy = Skill(self.character, self.item, self.level, self.__ro) return copy def __repr__(self): diff --git a/gui/characterEditor.py b/gui/characterEditor.py index c7862e817..6cd5d6761 100644 --- a/gui/characterEditor.py +++ b/gui/characterEditor.py @@ -93,7 +93,7 @@ class CharacterEntityEditor(EntityEditor): def getEntitiesFromContext(self): sChar = Character.getInstance() - charList = sorted(sChar.getCharacterList(), key=lambda c: c.name) + charList = sorted(sChar.getCharacterList(), key=lambda c: (not c.ro, c.name)) # Do some processing to ensure that we have All 0 and All 5 at the top all5 = sChar.all5() diff --git a/gui/characterSelection.py b/gui/characterSelection.py index e27fd62e2..13df550e8 100644 --- a/gui/characterSelection.py +++ b/gui/characterSelection.py @@ -125,7 +125,7 @@ class CharacterSelection(wx.Panel): activeChar = self.getActiveCharacter() choice.Clear() - charList = sChar.getCharacterList() + charList = sorted(sChar.getCharacterList(), key=lambda c: (not c.ro, c.name)) picked = False for char in charList: diff --git a/gui/mainFrame.py b/gui/mainFrame.py index fedba644c..ff86bc433 100644 --- a/gui/mainFrame.py +++ b/gui/mainFrame.py @@ -705,7 +705,8 @@ class MainFrame(wx.Frame, IPortUser): def ItemSelect(self, event): selItem = self.itemSelect.index(event.GetId()) - if selItem < len(self.marketBrowser.itemView.active): + activeListing = getattr(self.marketBrowser.itemView, 'active', None) + if activeListing and selItem < len(activeListing): wx.PostEvent(self, ItemSelected(itemID=self.marketBrowser.itemView.active[selItem].ID)) def CTabNext(self, event):