From fbb192404f95f6b05cd8582092b864618596a2ed Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Wed, 10 Apr 2019 09:51:07 +0300 Subject: [PATCH] Add undo support to muta->normal conversion --- gui/builtinContextMenus/mutaplasmids.py | 10 +++--- gui/fitCommands/__init__.py | 1 + gui/fitCommands/guiMutaConvert.py | 10 ++++-- gui/fitCommands/guiMutaRevert.py | 48 +++++++++++++++++++++++++ 4 files changed, 60 insertions(+), 9 deletions(-) create mode 100644 gui/fitCommands/guiMutaRevert.py diff --git a/gui/builtinContextMenus/mutaplasmids.py b/gui/builtinContextMenus/mutaplasmids.py index e4b24a66f..ecc284123 100644 --- a/gui/builtinContextMenus/mutaplasmids.py +++ b/gui/builtinContextMenus/mutaplasmids.py @@ -3,7 +3,7 @@ import wx import gui.globalEvents as GE import gui.mainFrame -from gui.fitCommands import GuiMutaConvertCommand +from gui.fitCommands import GuiMutaConvertCommand, GuiMutaRevertCommand from gui.contextMenu import ContextMenu from service.fit import Fit from service.settings import ContextMenuSettings @@ -64,12 +64,10 @@ class MutaplasmidCM(ContextMenu): mutaplasmid=mutaplasmid)) def activate(self, fullContext, selection, i): - sFit = Fit.getInstance() - fitID = self.mainFrame.getActiveFit() - mod = selection[0] - sFit.changeModule(fitID, mod.modPosition, mod.baseItemID) - wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) + self.mainFrame.command.Submit(GuiMutaRevertCommand( + fitID=self.mainFrame.getActiveFit(), + position=mod.modPosition)) def getBitmap(self, context, selection): return None diff --git a/gui/fitCommands/__init__.py b/gui/fitCommands/__init__.py index 5d8ea66ec..919ca83b6 100644 --- a/gui/fitCommands/__init__.py +++ b/gui/fitCommands/__init__.py @@ -38,3 +38,4 @@ from .guiImportMutatedModule import GuiImportMutatedModuleCommand from .guiSetSpoolup import GuiSetSpoolup from .guiRebaseItems import GuiRebaseItemsCommand from .guiMutaConvert import GuiMutaConvertCommand +from .guiMutaRevert import GuiMutaRevertCommand diff --git a/gui/fitCommands/guiMutaConvert.py b/gui/fitCommands/guiMutaConvert.py index b56fa2807..8e991cb50 100644 --- a/gui/fitCommands/guiMutaConvert.py +++ b/gui/fitCommands/guiMutaConvert.py @@ -1,6 +1,5 @@ import wx -import eos.db import gui.mainFrame from gui import globalEvents as GE from service.fit import Fit @@ -18,8 +17,13 @@ class GuiMutaConvertCommand(wx.Command): self.mutaplasmid = mutaplasmid def Do(self): - fit = eos.db.getFit(self.fitID) + sFit = Fit.getInstance() + fit = sFit.getFit(self.fitID) oldMod = fit.modules[self.position] + if oldMod.isEmpty: + return False + if oldMod.isMutated: + return False success = self.internal_history.Submit(FitReplaceModuleCommand( fitID=self.fitID, @@ -33,7 +37,7 @@ class GuiMutaConvertCommand(wx.Command): if not success: return False - Fit.getInstance().recalc(self.fitID) + sFit.recalc(self.fitID) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.fitID)) return True diff --git a/gui/fitCommands/guiMutaRevert.py b/gui/fitCommands/guiMutaRevert.py new file mode 100644 index 000000000..f91b4a8a6 --- /dev/null +++ b/gui/fitCommands/guiMutaRevert.py @@ -0,0 +1,48 @@ +import wx + +import gui.mainFrame +from gui import globalEvents as GE +from service.fit import Fit +from .calc.fitReplaceModule import FitReplaceModuleCommand + + +class GuiMutaRevertCommand(wx.Command): + + def __init__(self, fitID, position): + wx.Command.__init__(self, True, "Convert Item to Normal") + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.internal_history = wx.CommandProcessor() + self.fitID = fitID + self.position = position + + def Do(self): + sFit = Fit.getInstance() + fit = sFit.getFit(self.fitID) + oldMod = fit.modules[self.position] + if oldMod.isEmpty: + return False + if not oldMod.isMutated: + return False + + success = self.internal_history.Submit(FitReplaceModuleCommand( + fitID=self.fitID, + position=self.position, + newItemID=oldMod.baseItemID, + newBaseItemID=None, + newMutaplasmidID=None, + newMutations=None, + newState=oldMod.state, + newCharge=oldMod.charge)) + if not success: + return False + + sFit.recalc(self.fitID) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.fitID)) + return True + + def Undo(self): + for _ in self.internal_history.Commands: + self.internal_history.Undo() + Fit.getInstance().recalc(self.fitID) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.fitID)) + return True