diff --git a/gui/builtinContextMenus/itemRemove.py b/gui/builtinContextMenus/itemRemove.py index dca400c5d..d6b8f79f1 100644 --- a/gui/builtinContextMenus/itemRemove.py +++ b/gui/builtinContextMenus/itemRemove.py @@ -39,7 +39,7 @@ class ItemRemove(ContextMenu): self.mainFrame.command.Submit(cmd.FitModuleRemoveCommand(fitID, modules)) return # the command takes care of the PostEvent elif srcContext in ("fittingCharge", "projectedCharge"): - sFit.setAmmo(fitID, None, selection) + self.mainFrame.command.Submit(cmd.FitModuleAddChargeCommand(fitID, None, selection)) elif srcContext == "droneItem": sFit.removeDrone(fitID, fit.drones.index(selection[0])) elif srcContext == "fighterItem": diff --git a/gui/builtinContextMenus/moduleAmmoPicker.py b/gui/builtinContextMenus/moduleAmmoPicker.py index 93ff48754..59f6c3391 100644 --- a/gui/builtinContextMenus/moduleAmmoPicker.py +++ b/gui/builtinContextMenus/moduleAmmoPicker.py @@ -11,7 +11,7 @@ import gui.globalEvents as GE from gui.contextMenu import ContextMenu from gui.bitmap_loader import BitmapLoader from service.settings import ContextMenuSettings - +import gui.fitCommands as cmd class ModuleAmmoPicker(ContextMenu): DAMAGE_TYPES = ("em", "explosive", "kinetic", "thermal") @@ -228,11 +228,8 @@ class ModuleAmmoPicker(ContextMenu): event.Skip() return - sFit = Fit.getInstance() fitID = self.mainFrame.getActiveFit() - - sFit.setAmmo(fitID, charge.ID if charge is not None else None, self.modules) - wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) + self.mainFrame.command.Submit(cmd.FitModuleAddChargeCommand(fitID, charge.ID if charge is not None else None, self.modules)) ModuleAmmoPicker.register() diff --git a/gui/builtinContextMenus/moduleGlobalAmmoPicker.py b/gui/builtinContextMenus/moduleGlobalAmmoPicker.py index 5e516e68f..81bce6649 100644 --- a/gui/builtinContextMenus/moduleGlobalAmmoPicker.py +++ b/gui/builtinContextMenus/moduleGlobalAmmoPicker.py @@ -7,7 +7,7 @@ from gui.builtinContextMenus.moduleAmmoPicker import ModuleAmmoPicker from eos.db.saveddata.queries import getFit as db_getFit from service.fit import Fit from service.settings import ContextMenuSettings - +import gui.fitCommands as cmd class ModuleGlobalAmmoPicker(ModuleAmmoPicker): def __init__(self): @@ -40,8 +40,7 @@ class ModuleGlobalAmmoPicker(ModuleAmmoPicker): if mod.itemID == selectedModule.itemID: allModules.append(mod) - sFit.setAmmo(fitID, charge.ID if charge is not None else None, allModules) - wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) + self.mainFrame.command.Submit(cmd.FitModuleAddChargeCommand(fitID, charge.ID if charge is not None else None, allModules)) def display(self, srcContext, selection): if not self.settings.get('moduleGlobalAmmoPicker'): diff --git a/gui/builtinViews/fittingView.py b/gui/builtinViews/fittingView.py index 47255542f..84678bb8f 100644 --- a/gui/builtinViews/fittingView.py +++ b/gui/builtinViews/fittingView.py @@ -379,8 +379,7 @@ class FittingView(d.Display): sel = self.GetNextSelected(sel) if len(modules) > 0: - sFit.setAmmo(fitID, itemID, modules) - wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) + self.mainFrame.command.Submit(cmd.FitModuleAddChargeCommand(fitID, itemID, modules)) else: self.mainFrame.command.Submit(cmd.FitModuleAddCommand(fitID, itemID)) diff --git a/gui/fitCommands/__init__.py b/gui/fitCommands/__init__.py index 3aaaf1409..9ed595da5 100644 --- a/gui/fitCommands/__init__.py +++ b/gui/fitCommands/__init__.py @@ -1,3 +1,4 @@ from .moduleStateChange import FitModuleStateChangeCommand from .moduleAdd import FitModuleAddCommand -from .moduleRemove import FitModuleRemoveCommand \ No newline at end of file +from .moduleRemove import FitModuleRemoveCommand +from .moduleAddCharge import FitModuleAddChargeCommand \ No newline at end of file diff --git a/gui/fitCommands/moduleAddCharge.py b/gui/fitCommands/moduleAddCharge.py new file mode 100644 index 000000000..c125230b9 --- /dev/null +++ b/gui/fitCommands/moduleAddCharge.py @@ -0,0 +1,30 @@ +import wx +from service.fit import Fit + +import gui.mainFrame +from gui import globalEvents as GE + + +class FitModuleAddChargeCommand(wx.Command): + def __init__(self, fitID, itemID, modules): + wx.Command.__init__(self, True, "Module Charge Add") + # todo: evaluate mutaplasmid modules + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.sFit = Fit.getInstance() + self.fitID = fitID + self.itemID = itemID + self.positions = {mod.modPosition: mod.chargeID for mod in modules} + + def Do(self): + fit = self.sFit.getFit(self.fitID) + self.sFit.setAmmo(self.fitID, self.itemID, [fit.modules[i] for i in self.positions.keys()]) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.fitID)) + return True + + def Undo(self): + fit = self.sFit.getFit(self.fitID) + for position, chargeID in self.positions.items(): + self.sFit.setAmmo(self.fitID, chargeID, [fit.modules[position]], False) + self.sFit.recalc(self.fitID) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.fitID)) + return True