Implement simple skill import/export functionality, and some cleanup top pass tox
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user