diff --git a/gui/builtinItemStatsViews/attributeSlider.py b/gui/builtinItemStatsViews/attributeSlider.py index 127d3c1b8..f26be8492 100644 --- a/gui/builtinItemStatsViews/attributeSlider.py +++ b/gui/builtinItemStatsViews/attributeSlider.py @@ -9,12 +9,16 @@ _ValueChanged, EVT_VALUE_CHANGED = wx.lib.newevent.NewEvent() class AttributeSliderChangeEvent: - def __init__(self, old_value, new_value, old_percentage, new_percentage): + def __init__(self, obj, old_value, new_value, old_percentage, new_percentage): + self.__obj = obj self.__old = old_value self.__new = new_value self.__old_percent = old_percentage self.__new_percent = new_percentage + def GetObj(self): + return self.__obj + def GetOldValue(self): return self.__old @@ -27,6 +31,7 @@ class AttributeSliderChangeEvent: def GetPercentage(self): return self.__new_percent + Object = property(GetObj) OldValue = property(GetOldValue) Value = property(GetValue) OldPercentage = property(GetOldPercentage) @@ -34,17 +39,17 @@ class AttributeSliderChangeEvent: class ValueChanged(_ValueChanged, AttributeSliderChangeEvent): - def __init__(self, old_value, new_value, old_percentage, new_percentage): + def __init__(self, obj, old_value, new_value, old_percentage, new_percentage): _ValueChanged.__init__(self) - AttributeSliderChangeEvent.__init__(self, old_value, new_value, old_percentage, new_percentage) + AttributeSliderChangeEvent.__init__(self, obj, old_value, new_value, old_percentage, new_percentage) class AttributeSlider(wx.Panel): # Slider which abstracts users values from internal values (because the built in slider does not deal with floats # and the like), based on http://wxpython-users.wxwidgets.narkive.com/ekgBzA7u/anyone-ever-thought-of-a-floating-point-slider - def __init__(self, parent, baseValue, minMod, maxMod, inverse=False): - wx.Panel.__init__(self, parent) + def __init__(self, parent, baseValue, minMod, maxMod, inverse=False, id=-1): + wx.Panel.__init__(self, parent, id=id) self.parent = parent @@ -88,7 +93,7 @@ class AttributeSlider(wx.Panel): self.SetValue(self.ctrl.GetValue()) evt.Skip() - def SetValue(self, value): + def SetValue(self, value, post_event=True): # todo: check this against values that might be 2.5x and whatnot mod = value / self.base_value self.ctrl.SetValue(value) @@ -103,7 +108,8 @@ class AttributeSlider(wx.Panel): if self.inverse: slider_percentage *= -1 self.slider.SetValue(slider_percentage) - wx.PostEvent(self, ValueChanged(None, value, None, slider_percentage)) + if post_event: + wx.PostEvent(self, ValueChanged(self, None, value, None, slider_percentage)) class TestAttributeSlider(wx.Frame): diff --git a/gui/builtinItemStatsViews/itemMutator.py b/gui/builtinItemStatsViews/itemMutator.py index a8130f9a2..dd9e2c228 100644 --- a/gui/builtinItemStatsViews/itemMutator.py +++ b/gui/builtinItemStatsViews/itemMutator.py @@ -1,17 +1,8 @@ # noinspection PyPackageRequirements import wx -from eos.saveddata.mode import Mode -from eos.saveddata.character import Skill -from eos.saveddata.implant import Implant -from eos.saveddata.booster import Booster -from eos.saveddata.drone import Drone -from eos.saveddata.fighter import Fighter -from eos.saveddata.module import Module -from eos.saveddata.ship import Ship -from eos.saveddata.citadel import Citadel -from eos.saveddata.fit import Fit -from .attributeSlider import AttributeSlider +from service.fit import Fit +from .attributeSlider import AttributeSlider, EVT_VALUE_CHANGED import gui.mainFrame from gui.contextMenu import ContextMenu @@ -31,9 +22,13 @@ class ItemMutator(wx.Panel): self.goodColor = wx.Colour(96, 191, 0) self.badColor = wx.Colour(255, 64, 0) + self.event_mapping = {} + for m in sorted(stuff.mutators.values(), key=lambda x: x.attribute.displayName): slider = AttributeSlider(self, m.baseValue, m.minMod, m.maxMod, not m.highIsGood) - slider.SetValue(m.value) + slider.SetValue(m.value, False) + slider.Bind(EVT_VALUE_CHANGED, self.changeMutatedValue) + self.event_mapping[slider] = m headingSizer = wx.BoxSizer(wx.HORIZONTAL) # create array for the two ranges @@ -102,3 +97,11 @@ class ItemMutator(wx.Panel): self.SetSizer(mainSizer) self.Layout() + + def changeMutatedValue(self, evt): + m = self.event_mapping[evt.Object] + value = evt.Value + sFit = Fit.getInstance() + + sFit.changeMutatedValue(m, value) + diff --git a/service/fit.py b/service/fit.py index 774b2965c..306887bfb 100644 --- a/service/fit.py +++ b/service/fit.py @@ -517,6 +517,13 @@ class Fit(object): eos.db.commit() self.recalc(fit) + def changeMutatedValue(self, mutator, value): + pyfalog.debug("Changing mutated value for {} / {}: {} => {}".format(mutator.module, mutator.module.mutaplasmid, mutator.value, value)) + mutator.value = value + + eos.db.commit() + #self.recalc(fit) + def appendModule(self, fitID, itemID): pyfalog.debug("Appending module for fit ({0}) using item: {1}", fitID, itemID) fit = eos.db.getFit(fitID)