Enable/disable edit menu options, and add color to character editor to show which skills are edited

This commit is contained in:
blitzmann
2015-09-24 22:11:31 -04:00
parent b844bdf986
commit a0f9fb6ad6
4 changed files with 49 additions and 11 deletions

View File

@@ -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):

View File

@@ -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()

View File

@@ -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()

View File

@@ -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))