Fix replacing of modules

This commit is contained in:
DarkPhoenix
2019-03-03 09:46:27 +03:00
parent 18e03e46c3
commit d96146034a
3 changed files with 24 additions and 13 deletions

View File

@@ -979,6 +979,15 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
return copy
def rebase(self, item):
state = self.state
charge = self.charge
Module.__init__(self, item, self.baseItem, self.mutaplasmid)
self.state = state
self.charge = charge
for x in self.mutators.values():
Mutator(self, x.attribute, x.value)
def __repr__(self):
if self.item:
return "Module(ID={}, name={}) at {}".format(

View File

@@ -671,12 +671,13 @@ class MainFrame(wx.Frame):
def optimizeFitPrice(self, event):
sPrice = Price.getInstance()
fit = Fit.getInstance().getFit(self.getActiveFit())
fitID = self.getActiveFit()
fit = Fit.getInstance().getFit(fitID)
if fit:
# TODO: block/unblock UI while pyfa is working
def cb():
pass
def cb(changes):
if changes:
wx.PostEvent(self, GE.FitChanged(fitID=fitID))
sPrice.optimizeFitPrice(fit, cb, includeBetter=True, fetchTimeout=10)

View File

@@ -234,18 +234,19 @@ class Price:
def cb(replacementMap):
changes = False
for fitobj in self.fitObjectIter(fit):
if fitobj.item in replacementMap:
fitobj.item = replacementMap[fitobj.item]
changes = True
charge = getattr(fitobj, 'charge', None)
if charge and charge in replacementMap:
fitobj.charge = replacementMap[charge]
changes = True
for container in (fit.modules,):
for obj in container:
charge = getattr(obj, 'charge', None)
if charge is not None and charge in replacementMap:
obj.charge = replacementMap[charge]
changes = True
if obj.item in replacementMap:
obj.rebase(replacementMap[obj.item])
changes = True
if changes:
Fit.getInstance().refreshFit(fit.ID)
try:
callback()
callback(changes)
except Exception as e:
pyfalog.critical("Execution of callback from optimizeFitPrice failed.")
pyfalog.critical(e)