Implement simple skill import/export functionality, and some cleanup top pass tox

This commit is contained in:
blitzmann
2017-08-14 23:21:26 -04:00
parent fdba8d147f
commit 47cbc71e8a
9 changed files with 79 additions and 9 deletions

View File

@@ -15,4 +15,4 @@ def handler(fit, module, context, **kwargs):
if 'effect' in kwargs: if 'effect' in kwargs:
strModifier *= ModifiedAttributeDict.getResistance(fit, kwargs['effect']) strModifier *= ModifiedAttributeDict.getResistance(fit, kwargs['effect'])
fit.ecmProjectedStr *= strModifier fit.ecmProjectedStr *= strModifier

View File

@@ -346,7 +346,7 @@ class Skill(HandledItem):
return self.activeLevel or 0 return self.activeLevel or 0
def setLevel(self, level, persist=False): def setLevel(self, level, persist=False, ignoreRestrict=False):
if (level < 0 or level > 5) and level is not None: if (level < 0 or level > 5) and level is not None:
raise ValueError(str(level) + " is not a valid value for level") raise ValueError(str(level) + " is not a valid value for level")
@@ -356,7 +356,9 @@ class Skill(HandledItem):
self.activeLevel = level self.activeLevel = level
if eos.config.settings['strictSkillLevels']: # todo: have a way to do bulk skill level editing. Currently, everytime a single skill is changed, this runs,
# which affects performance. Should have a checkSkillLevels() or something that is more efficient for bulk.
if not ignoreRestrict and eos.config.settings['strictSkillLevels']:
start = time.time() start = time.time()
for item, rlevel in self.item.requiredFor.iteritems(): for item, rlevel in self.item.requiredFor.iteritems():
if item.group.category.ID == 16: # Skill category if item.group.category.ID == 16: # Skill category

View File

@@ -444,4 +444,4 @@ class ItemAffectedBy(wx.Panel):
treeitem = self.affectedBy.AppendItem(child, display, attrIcon) treeitem = self.affectedBy.AppendItem(child, display, attrIcon)
self.affectedBy.SetPyData(treeitem, saved) self.affectedBy.SetPyData(treeitem, saved)
self.treeItems.append(treeitem) self.treeItems.append(treeitem)

View File

@@ -9,6 +9,7 @@ from service.market import Market
from service.attribute import Attribute from service.attribute import Attribute
from gui.utils.numberFormatter import formatAmount from gui.utils.numberFormatter import formatAmount
class ItemCompare(wx.Panel): class ItemCompare(wx.Panel):
def __init__(self, parent, stuff, item, items, context=None): def __init__(self, parent, stuff, item, items, context=None):
# Start dealing with Price stuff to get that thread going # Start dealing with Price stuff to get that thread going

View File

@@ -127,4 +127,4 @@ class ItemEffects(wx.Panel):
self.effectList.RefreshRows() self.effectList.RefreshRows()
self.Layout() self.Layout()
self.Thaw() self.Thaw()
event.Skip() event.Skip()

View File

@@ -14,4 +14,4 @@ class ItemTraits(wx.Panel):
self.traits.SetPage(item.traits.traitText) self.traits.SetPage(item.traits.traitText)
mainSizer.Add(self.traits, 1, wx.ALL | wx.EXPAND, 0) mainSizer.Add(self.traits, 1, wx.ALL | wx.EXPAND, 0)
self.Layout() self.Layout()

View File

@@ -35,6 +35,9 @@ from service.character import Character
from service.network import AuthenticationError, TimeoutError from service.network import AuthenticationError, TimeoutError
from service.market import Market from service.market import Market
from logbook import Logger from logbook import Logger
from gui.utils.clipboard import toClipboard, fromClipboard
pyfalog = Logger(__name__) pyfalog = Logger(__name__)
@@ -199,6 +202,7 @@ class CharacterEditor(wx.Frame):
self.btnSaveChar.Enable(not char.ro and char.isDirty) self.btnSaveChar.Enable(not char.ro and char.isDirty)
self.btnSaveAs.Enable(char.isDirty) self.btnSaveAs.Enable(char.isDirty)
self.btnRevert.Enable(char.isDirty) self.btnRevert.Enable(char.isDirty)
self.sview.importBtn.Enable(not char.ro)
def refreshCharacterList(self, event=None): def refreshCharacterList(self, event=None):
"""This is only called when we save a modified character""" """This is only called when we save a modified character"""
@@ -333,6 +337,26 @@ class SkillTreeView(wx.Panel):
bSizerButtons = wx.BoxSizer(wx.HORIZONTAL) bSizerButtons = wx.BoxSizer(wx.HORIZONTAL)
bSizerButtons.Add(self.btnSecStatus, 0, wx.ALL, 5) bSizerButtons.Add(self.btnSecStatus, 0, wx.ALL, 5)
bSizerButtons.AddSpacer((0, 0), 1, wx.EXPAND, 5)
importExport = (("Import", wx.ART_FILE_OPEN, "from"),
("Export", wx.ART_FILE_SAVE_AS, "to"))
for name, art, direction in importExport:
bitmap = wx.ArtProvider.GetBitmap(art, wx.ART_BUTTON)
btn = wx.BitmapButton(self, wx.ID_ANY, bitmap)
btn.SetMinSize(btn.GetSize())
btn.SetMaxSize(btn.GetSize())
btn.Layout()
setattr(self, "{}Btn".format(name.lower()), btn)
btn.Enable(True)
btn.SetToolTipString("%s skills %s clipboard" % (name, direction))
bSizerButtons.Add(btn, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_RIGHT | wx.ALL, 5)
btn.Bind(wx.EVT_BUTTON, getattr(self, "{}Skills".format(name.lower())))
pmainSizer.Add(bSizerButtons, 0, wx.EXPAND, 5) pmainSizer.Add(bSizerButtons, 0, wx.EXPAND, 5)
# bind the Character selection event # bind the Character selection event
@@ -368,6 +392,48 @@ class SkillTreeView(wx.Panel):
self.Layout() self.Layout()
def importSkills(self, evt):
dlg = wx.MessageDialog(self, "Importing skills into this character will set the skill levels as pending. " +
"To save the skills permanently, please click the Save button at the bottom of the window after importing"
, "Import Skills", wx.OK)
dlg.ShowModal()
dlg.Destroy()
text = fromClipboard().strip()
if text:
char = self.charEditor.entityEditor.getActiveEntity()
try:
lines = text.splitlines()
for l in lines:
skill, level = l.strip()[:-1].strip(), int(l.strip()[-1])
skill = char.getSkill(skill)
if skill:
skill.setLevel(level, ignoreRestrict=True)
except Exception as e:
dlg = wx.MessageDialog(self, "There was an error importing skills, please see log file", "Error", wx.ICON_ERROR)
dlg.ShowModal()
dlg.Destroy()
pyfalog.error(e)
finally:
self.charEditor.btnRestrict()
self.populateSkillTree()
self.charEditor.entityEditor.refreshEntityList(char)
def exportSkills(self, evt):
char = self.charEditor.entityEditor.getActiveEntity()
skills = sorted(char.__class__.getSkillNameMap().keys())
list = ""
for s in skills:
skill = char.getSkill(s)
list += "{} {}\n".format(skill.item.name, skill.level)
toClipboard(list)
def onSecStatus(self, event): def onSecStatus(self, event):
sChar = Character.getInstance() sChar = Character.getInstance()
char = self.charEditor.entityEditor.getActiveEntity() char = self.charEditor.entityEditor.getActiveEntity()

View File

@@ -254,10 +254,10 @@ class CharacterSelection(wx.Panel):
def exportSkills(self, evt): def exportSkills(self, evt):
skillsMap = self._buildSkillsTooltipCondensed(self.reqs, skillsMap={}) skillsMap = self._buildSkillsTooltipCondensed(self.reqs, skillsMap={})
list = "" list = ""
for skill in skillsMap: for key in sorted(skillsMap):
for i in range(1, int(skillsMap[skill])): list += "%s %d\n" % (key, skillsMap[key])
list += skill + " " + str(i) + "\n"
toClipboard(list) toClipboard(list)

View File

@@ -35,6 +35,7 @@ from gui.builtinItemStatsViews.itemEffects import ItemEffects
from gui.builtinItemStatsViews.itemAffectedBy import ItemAffectedBy from gui.builtinItemStatsViews.itemAffectedBy import ItemAffectedBy
from gui.builtinItemStatsViews.itemProperties import ItemProperties from gui.builtinItemStatsViews.itemProperties import ItemProperties
class ItemStatsDialog(wx.Dialog): class ItemStatsDialog(wx.Dialog):
counter = 0 counter = 0