diff --git a/gui/builtinItemStatsViews/attributeSlider.py b/gui/builtinItemStatsViews/attributeSlider.py index 964f1458b..46e7abcc3 100644 --- a/gui/builtinItemStatsViews/attributeSlider.py +++ b/gui/builtinItemStatsViews/attributeSlider.py @@ -10,12 +10,13 @@ _ValueChanged, EVT_VALUE_CHANGED = wx.lib.newevent.NewEvent() class AttributeSliderChangeEvent: - def __init__(self, obj, old_value, new_value, old_percentage, new_percentage): + def __init__(self, obj, old_value, new_value, old_percentage, new_percentage, affect_modified_flag=True): self.__obj = obj self.__old = old_value self.__new = new_value self.__old_percent = old_percentage self.__new_percent = new_percentage + self.__affect_modified_flag = affect_modified_flag def GetObj(self): return self.__obj @@ -32,6 +33,10 @@ class AttributeSliderChangeEvent: def GetPercentage(self): return self.__new_percent + @property + def AffectsModifiedFlag(self): + return self.__affect_modified_flag + Object = property(GetObj) OldValue = property(GetOldValue) Value = property(GetValue) @@ -40,9 +45,9 @@ class AttributeSliderChangeEvent: class ValueChanged(_ValueChanged, AttributeSliderChangeEvent): - def __init__(self, obj, old_value, new_value, old_percentage, new_percentage): + def __init__(self, obj, old_value, new_value, old_percentage, new_percentage, affect_modified_flag=True): _ValueChanged.__init__(self) - AttributeSliderChangeEvent.__init__(self, obj, old_value, new_value, old_percentage, new_percentage) + AttributeSliderChangeEvent.__init__(self, obj, old_value, new_value, old_percentage, new_percentage, affect_modified_flag=affect_modified_flag) class AttributeSlider(wx.Panel): @@ -118,7 +123,7 @@ class AttributeSlider(wx.Panel): self.SetValue(self.GetValue()) evt.Skip() - def SetValue(self, value, post_event=True): + def SetValue(self, value, post_event=True, affect_modified_flag=True): self.ctrl.SetValue(value) invert_factor = -1 if self.inverse else 1 if value >= self.base_value: @@ -127,7 +132,7 @@ class AttributeSlider(wx.Panel): slider_percentage = (value - self.base_value) / (self.base_value - self.UserMinValue) * 100 * invert_factor self.slider.SetValue(slider_percentage) if post_event: - wx.PostEvent(self, ValueChanged(self, None, value, None, slider_percentage)) + wx.PostEvent(self, ValueChanged(self, None, value, None, slider_percentage, affect_modified_flag=affect_modified_flag)) def OnMouseWheel(self, evt): if evt.GetWheelRotation() > 0 and evt.GetWheelAxis() == wx.MOUSE_WHEEL_VERTICAL: diff --git a/gui/builtinItemStatsViews/itemMutator.py b/gui/builtinItemStatsViews/itemMutator.py index f70b8bf43..59d1ad171 100644 --- a/gui/builtinItemStatsViews/itemMutator.py +++ b/gui/builtinItemStatsViews/itemMutator.py @@ -172,7 +172,8 @@ class ItemMutatorList(wx.ScrolledWindow): self.SetSizer(sizer) def changeMutatedValue(self, evt): - self.isModified = True + if evt.AffectsModifiedFlag: + self.isModified = True m = self.event_mapping[evt.Object] value = evt.Value value = m.attribute.unit.ComplicateValue(value) @@ -195,7 +196,7 @@ class ItemMutatorList(wx.ScrolledWindow): for slider, m in self.event_mapping.items(): value = sFit.changeMutatedValuePrelim(m, m.baseValue) value = m.attribute.unit.SimplifyValue(value) - slider.SetValue(value) + slider.SetValue(value, affect_modified_flag=False) evt.Skip() def randomMutatedValues(self, evt): @@ -205,7 +206,7 @@ class ItemMutatorList(wx.ScrolledWindow): value = random.uniform(m.minValue, m.maxValue) value = sFit.changeMutatedValuePrelim(m, value) value = m.attribute.unit.SimplifyValue(value) - slider.SetValue(value) + slider.SetValue(value, affect_modified_flag=False) evt.Skip() def revertChanges(self, evt): @@ -215,23 +216,26 @@ class ItemMutatorList(wx.ScrolledWindow): if m.attrID in self.initialMutations: value = sFit.changeMutatedValuePrelim(m, self.initialMutations[m.attrID]) value = m.attribute.unit.SimplifyValue(value) - slider.SetValue(value) + slider.SetValue(value, affect_modified_flag=False) evt.Skip() def OnWindowClose(self): # Submit mutation changes sFit = Fit.getInstance() fit = sFit.getFit(self.carryingFitID) - if self.isModified and self.mod in fit.modules: - currentMutation = {} - for slider, m in self.event_mapping.items(): - # Sliders may have more up-to-date info than mutator in case we changed - # value in slider and without confirming it, decided to close window - value = slider.GetValue() - value = m.attribute.unit.ComplicateValue(value) - if value != m.value: - value = sFit.changeMutatedValuePrelim(m, value) - currentMutation[m.attrID] = value + if self.mod in fit.modules: + if self.isModified: + currentMutation = {} + for slider, m in self.event_mapping.items(): + # Sliders may have more up-to-date info than mutator in case we changed + # value in slider and without confirming it, decided to close window + value = slider.GetValue() + value = m.attribute.unit.ComplicateValue(value) + if value != m.value: + value = sFit.changeMutatedValuePrelim(m, value) + currentMutation[m.attrID] = value + else: + currentMutation = self.initialMutations mainFrame = gui.mainFrame.MainFrame.getInstance() mainFrame.getCommandForFit(self.carryingFitID).Submit(cmd.GuiChangeLocalModuleMutationCommand( fitID=self.carryingFitID,