diff --git a/gui/builtinViews/fittingView.py b/gui/builtinViews/fittingView.py index f57d54adc..247003b55 100644 --- a/gui/builtinViews/fittingView.py +++ b/gui/builtinViews/fittingView.py @@ -436,10 +436,14 @@ class FittingView(d.Display): fit = sFit.getFit(self.activeFitID) typeID = fit.cargo[srcIdx].item.ID - sFit.moveCargoToModule(self.mainFrame.getActiveFit(), module.modPosition, srcIdx, - mstate.CmdDown() and module.isEmpty) + self.mainFrame.command.Submit(cmd.GuiCargoToModuleCommand( + self.mainFrame.getActiveFit(), + module.modPosition, + srcIdx, + mstate.CmdDown() and module.isEmpty)) - wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.mainFrame.getActiveFit(), action="modadd", typeID=typeID)) + + # wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.mainFrame.getActiveFit(), action="modadd", typeID=typeID)) def swapItems(self, x, y, srcIdx): """Swap two modules in fitting window""" diff --git a/gui/fitCommands/__init__.py b/gui/fitCommands/__init__.py index c3507a7e6..89a74b369 100644 --- a/gui/fitCommands/__init__.py +++ b/gui/fitCommands/__init__.py @@ -1,11 +1,9 @@ -from .moduleStateChange import GuiModuleStateChangeCommand -from .moduleAdd import GuiModuleAddCommand -from .moduleRemove import GuiModuleRemoveCommand -from .moduleAddCharge import GuiModuleAddChargeCommand -from .moduleSwapOrClone import GuiModuleSwapOrCloneCommand +from .guiToggleModuleState import GuiModuleStateChangeCommand +from .guiAddModule import GuiModuleAddCommand +from .guiRemoveModule import GuiModuleRemoveCommand +from .guiAddCharge import GuiModuleAddChargeCommand +from .guiSwapCloneModule import GuiModuleSwapOrCloneCommand from .guiRemoveCargo import GuiRemoveCargoCommand from .guiAddCargo import GuiAddCargoCommand -from .fitAddCargo import FitAddCargoCommand -from .fitRemoveCargo import FitRemoveCargoCommand from .guiRemoveImplant import GuiRemoveImplantCommand -from .guiAddImplant import GuiAddImplantCommand \ No newline at end of file +from .guiAddImplant import GuiAddImplantCommand diff --git a/gui/fitCommands/calc/__init__.py b/gui/fitCommands/calc/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/gui/fitCommands/fitAddCargo.py b/gui/fitCommands/calc/fitAddCargo.py similarity index 100% rename from gui/fitCommands/fitAddCargo.py rename to gui/fitCommands/calc/fitAddCargo.py diff --git a/gui/fitCommands/fitAddImplant.py b/gui/fitCommands/calc/fitAddImplant.py similarity index 100% rename from gui/fitCommands/fitAddImplant.py rename to gui/fitCommands/calc/fitAddImplant.py diff --git a/gui/fitCommands/fitAddModule.py b/gui/fitCommands/calc/fitAddModule.py similarity index 100% rename from gui/fitCommands/fitAddModule.py rename to gui/fitCommands/calc/fitAddModule.py diff --git a/gui/fitCommands/fitChangeState.py b/gui/fitCommands/calc/fitChangeState.py similarity index 100% rename from gui/fitCommands/fitChangeState.py rename to gui/fitCommands/calc/fitChangeState.py diff --git a/gui/fitCommands/fitCloneModule.py b/gui/fitCommands/calc/fitCloneModule.py similarity index 100% rename from gui/fitCommands/fitCloneModule.py rename to gui/fitCommands/calc/fitCloneModule.py diff --git a/gui/fitCommands/fitRemoveCargo.py b/gui/fitCommands/calc/fitRemoveCargo.py similarity index 87% rename from gui/fitCommands/fitRemoveCargo.py rename to gui/fitCommands/calc/fitRemoveCargo.py index 41fb57b9e..6b92278b3 100644 --- a/gui/fitCommands/fitRemoveCargo.py +++ b/gui/fitCommands/calc/fitRemoveCargo.py @@ -1,10 +1,6 @@ import wx -from service.fit import Fit -import gui.mainFrame -from gui import globalEvents as GE #from .helpers import ModuleInfoCache -from eos.saveddata.module import Module, State import eos.db from logbook import Logger pyfalog = Logger(__name__) @@ -47,7 +43,7 @@ class FitRemoveCargoCommand(wx.Command): return True def Undo(self): - from .fitAddCargo import FitAddCargoCommand # Avoid circular import + from gui.fitCommands.calc.fitAddCargo import FitAddCargoCommand # Avoid circular import cmd = FitAddCargoCommand(self.fitID, self.itemID, self.old_amount, True) cmd.Do() return True diff --git a/gui/fitCommands/fitRemoveImplant.py b/gui/fitCommands/calc/fitRemoveImplant.py similarity index 81% rename from gui/fitCommands/fitRemoveImplant.py rename to gui/fitCommands/calc/fitRemoveImplant.py index 509bbd40d..2a834878a 100644 --- a/gui/fitCommands/fitRemoveImplant.py +++ b/gui/fitCommands/calc/fitRemoveImplant.py @@ -1,10 +1,6 @@ import wx -from service.fit import Fit -import gui.mainFrame -from gui import globalEvents as GE #from .helpers import ModuleInfoCache -from eos.saveddata.module import Module, State import eos.db from logbook import Logger pyfalog = Logger(__name__) @@ -32,7 +28,7 @@ class FitRemoveImplantCommand(wx.Command): return True def Undo(self): - from .fitAddImplant import FitAddImplantCommand # Avoid circular import + from gui.fitCommands.calc.fitAddImplant import FitAddImplantCommand # Avoid circular import cmd = FitAddImplantCommand(self.fitID, self.old_implant) cmd.Do() return True diff --git a/gui/fitCommands/fitRemoveModule.py b/gui/fitCommands/calc/fitRemoveModule.py similarity index 86% rename from gui/fitCommands/fitRemoveModule.py rename to gui/fitCommands/calc/fitRemoveModule.py index 02d4c193b..876545718 100644 --- a/gui/fitCommands/fitRemoveModule.py +++ b/gui/fitCommands/calc/fitRemoveModule.py @@ -1,10 +1,6 @@ import wx -from service.fit import Fit -import gui.mainFrame -from gui import globalEvents as GE -from .helpers import ModuleInfoCache -from eos.saveddata.module import Module, State +from gui.fitCommands.helpers import ModuleInfoCache import eos.db from logbook import Logger pyfalog = Logger(__name__) @@ -48,7 +44,7 @@ class FitRemoveModuleCommand(wx.Command): return True def Undo(self): - from .fitAddModule import FitAddModuleCommand # avoids circular import + from gui.fitCommands.calc.fitAddModule import FitAddModuleCommand # avoids circular import for mod in self.modCache: cmd = FitAddModuleCommand(self.fitID, mod.itemID) cmd.Do() diff --git a/gui/fitCommands/fitReplaceModule.py b/gui/fitCommands/calc/fitReplaceModule.py similarity index 98% rename from gui/fitCommands/fitReplaceModule.py rename to gui/fitCommands/calc/fitReplaceModule.py index 0d9900b0e..9b1ecf2e3 100644 --- a/gui/fitCommands/fitReplaceModule.py +++ b/gui/fitCommands/calc/fitReplaceModule.py @@ -3,7 +3,7 @@ from service.fit import Fit import gui.mainFrame from gui import globalEvents as GE -from .helpers import ModuleInfoCache +from gui.fitCommands.helpers import ModuleInfoCache from eos.saveddata.module import Module, State import eos.db from logbook import Logger diff --git a/gui/fitCommands/fitSetCharge.py b/gui/fitCommands/calc/fitSetCharge.py similarity index 100% rename from gui/fitCommands/fitSetCharge.py rename to gui/fitCommands/calc/fitSetCharge.py diff --git a/gui/fitCommands/fitSwapModule.py b/gui/fitCommands/calc/fitSwapModule.py similarity index 100% rename from gui/fitCommands/fitSwapModule.py rename to gui/fitCommands/calc/fitSwapModule.py diff --git a/gui/fitCommands/cargoToModule.py b/gui/fitCommands/cargoToModule.py new file mode 100644 index 000000000..df47cac03 --- /dev/null +++ b/gui/fitCommands/cargoToModule.py @@ -0,0 +1,100 @@ +import wx +from service.fit import Fit + +import gui.mainFrame +from gui import globalEvents as GE +from gui.fitCommands.calc.fitSetCharge import FitSetChargeCommand +from logbook import Logger +pyfalog = Logger(__name__) + +class GuiCargoToModuleCommand(wx.Command): + """ + Moves cargo to fitting window. Can either do a copy, move, or swap with current module + If we try to copy/move into a spot with a non-empty module, we swap instead. + To avoid redundancy in converting Cargo item, this function does the + sanity checks as opposed to the GUI View. This is different than how the + normal .swapModules() does things, which is mostly a blind swap. + """ + + def __init__(self, fitID, moduleIdx, cargoIdx, copy=False): + # todo: instead of modules, needs to be positions. Dead objects are a thing + wx.Command.__init__(self, True, "Module State Change") + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.sFit = Fit.getInstance() + self.fitID = fitID + self.moduleIdx = moduleIdx + self.cargoIdx = cargoIdx + self.copy = copy + self.internal_history = wx.CommandProcessor() + + def Do(self): + sFit = Fit.getInstance() + fit = sFit.getFit(self.fitID) + module = fit.modules[self.moduleIdx] + cargo = fit.cargo[self.cargoIdx] + result = None + + # We're trying to move a charge from cargo to a slot. Use SetCharge command (don't respect move vs copy) + if sFit.isAmmo(cargo.item.ID): + result = self.internal_history.Submit(FitSetChargeCommand(self.fitID, [module], cargo.item.ID)) + # else: + # + # pyfalog.debug("Moving cargo item to module for fit ID: {0}", self.fitID) + # + # # Gather modules and convert Cargo item to Module, silently return if not a module + # try: + # cargoP = es_Module(cargo.item) + # cargoP.owner = fit + # if cargoP.isValidState(State.ACTIVE): + # cargoP.state = State.ACTIVE + # except: + # pyfalog.warning("Invalid item: {0}", cargo.item) + # return + # + # if cargoP.slot != module.slot: # can't swap modules to different racks + # return + # + # # remove module that we are trying to move cargo to + # fit.modules.remove(module) + # + # if not cargoP.fits(fit): # if cargo doesn't fit, rollback and return + # fit.modules.insert(moduleIdx, module) + # return + # + # fit.modules.insert(moduleIdx, cargoP) + # + # if not copyMod: # remove existing cargo if not cloning + # if cargo.amount == 1: + # fit.cargo.remove(cargo) + # else: + # cargo.amount -= 1 + # + # if not module.isEmpty: # if module is placeholder, we don't want to convert/add it + # moduleItem = module.item if not module.item.isAbyssal else module.baseItem + # for x in fit.cargo.find(moduleItem): + # x.amount += 1 + # break + # else: + # moduleP = es_Cargo(moduleItem) + # moduleP.amount = 1 + # fit.cargo.insert(cargoIdx, moduleP) + # + # eos.db.commit() + # self.recalc(fit) + # # + # # + # # + # # if self.clone: + # # result = self.internal_history.Submit(FitCloneModduleCommand(self.fitID, self.srcPosition, self.dstPosition)) + # # else: + # # result = self.internal_history.Submit(FitSwapModuleCommand(self.fitID, self.srcPosition, self.dstPosition)) + + if result: + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.fitID)) + return result + + def Undo(self): + for _ in self.internal_history.Commands: + self.internal_history.Undo() + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.fitID)) + return True diff --git a/gui/fitCommands/guiAddCargo.py b/gui/fitCommands/guiAddCargo.py index dbff1360c..db923c7d1 100644 --- a/gui/fitCommands/guiAddCargo.py +++ b/gui/fitCommands/guiAddCargo.py @@ -3,7 +3,7 @@ from service.fit import Fit import gui.mainFrame from gui import globalEvents as GE -from .fitAddCargo import FitAddCargoCommand +from .calc.fitAddCargo import FitAddCargoCommand class GuiAddCargoCommand(wx.Command): def __init__(self, fitID, itemID, amount=1, replace=False): diff --git a/gui/fitCommands/moduleAddCharge.py b/gui/fitCommands/guiAddCharge.py similarity index 94% rename from gui/fitCommands/moduleAddCharge.py rename to gui/fitCommands/guiAddCharge.py index 7dd4ba6ec..49b2a1680 100644 --- a/gui/fitCommands/moduleAddCharge.py +++ b/gui/fitCommands/guiAddCharge.py @@ -3,7 +3,7 @@ from service.fit import Fit import gui.mainFrame from gui import globalEvents as GE -from .fitSetCharge import FitSetChargeCommand +from .calc.fitSetCharge import FitSetChargeCommand class GuiModuleAddChargeCommand(wx.Command): def __init__(self, fitID, itemID, modules): diff --git a/gui/fitCommands/guiAddImplant.py b/gui/fitCommands/guiAddImplant.py index b01023aa3..33495398d 100644 --- a/gui/fitCommands/guiAddImplant.py +++ b/gui/fitCommands/guiAddImplant.py @@ -3,7 +3,7 @@ from service.fit import Fit import gui.mainFrame from gui import globalEvents as GE -from .fitAddImplant import FitAddImplantCommand +from .calc.fitAddImplant import FitAddImplantCommand class GuiAddImplantCommand(wx.Command): def __init__(self, fitID, itemID): diff --git a/gui/fitCommands/moduleAdd.py b/gui/fitCommands/guiAddModule.py similarity index 93% rename from gui/fitCommands/moduleAdd.py rename to gui/fitCommands/guiAddModule.py index e035dbfd0..20a27e23d 100644 --- a/gui/fitCommands/moduleAdd.py +++ b/gui/fitCommands/guiAddModule.py @@ -3,9 +3,8 @@ from service.fit import Fit import gui.mainFrame from gui import globalEvents as GE -from .helpers import ModuleInfoCache -from .fitAddModule import FitAddModuleCommand -from .fitReplaceModule import FitReplaceModuleCommand +from .calc.fitAddModule import FitAddModuleCommand +from .calc.fitReplaceModule import FitReplaceModuleCommand class GuiModuleAddCommand(wx.Command): def __init__(self, fitID, itemID, position=None): diff --git a/gui/fitCommands/guiRemoveCargo.py b/gui/fitCommands/guiRemoveCargo.py index f86b607d2..210252418 100644 --- a/gui/fitCommands/guiRemoveCargo.py +++ b/gui/fitCommands/guiRemoveCargo.py @@ -3,7 +3,7 @@ from service.fit import Fit import gui.mainFrame from gui import globalEvents as GE -from .fitRemoveCargo import FitRemoveCargoCommand +from .calc.fitRemoveCargo import FitRemoveCargoCommand class GuiRemoveCargoCommand(wx.Command): def __init__(self, fitID, itemID): diff --git a/gui/fitCommands/guiRemoveImplant.py b/gui/fitCommands/guiRemoveImplant.py index ebe906a35..af96355a4 100644 --- a/gui/fitCommands/guiRemoveImplant.py +++ b/gui/fitCommands/guiRemoveImplant.py @@ -3,7 +3,7 @@ from service.fit import Fit import gui.mainFrame from gui import globalEvents as GE -from .fitRemoveImplant import FitRemoveImplantCommand +from .calc.fitRemoveImplant import FitRemoveImplantCommand class GuiRemoveImplantCommand(wx.Command): def __init__(self, fitID, position): diff --git a/gui/fitCommands/moduleRemove.py b/gui/fitCommands/guiRemoveModule.py similarity index 96% rename from gui/fitCommands/moduleRemove.py rename to gui/fitCommands/guiRemoveModule.py index bcf2cf139..32dc8cedc 100644 --- a/gui/fitCommands/moduleRemove.py +++ b/gui/fitCommands/guiRemoveModule.py @@ -5,7 +5,7 @@ import gui.mainFrame from gui import globalEvents as GE from .helpers import ModuleInfoCache -from .fitRemoveModule import FitRemoveModuleCommand +from .calc.fitRemoveModule import FitRemoveModuleCommand class GuiModuleRemoveCommand(wx.Command): diff --git a/gui/fitCommands/moduleSwapOrClone.py b/gui/fitCommands/guiSwapCloneModule.py similarity index 91% rename from gui/fitCommands/moduleSwapOrClone.py rename to gui/fitCommands/guiSwapCloneModule.py index 799b7a915..bc283943c 100644 --- a/gui/fitCommands/moduleSwapOrClone.py +++ b/gui/fitCommands/guiSwapCloneModule.py @@ -3,8 +3,8 @@ from service.fit import Fit import gui.mainFrame from gui import globalEvents as GE -from .fitSwapModule import FitSwapModuleCommand -from .fitCloneModule import FitCloneModduleCommand +from gui.fitCommands.calc.fitSwapModule import FitSwapModuleCommand +from .calc.fitCloneModule import FitCloneModduleCommand class GuiModuleSwapOrCloneCommand(wx.Command): def __init__(self, fitID, srcPosition, dstPosition, clone=False): diff --git a/gui/fitCommands/moduleStateChange.py b/gui/fitCommands/guiToggleModuleState.py similarity index 95% rename from gui/fitCommands/moduleStateChange.py rename to gui/fitCommands/guiToggleModuleState.py index 167777bd1..0f2344e64 100644 --- a/gui/fitCommands/moduleStateChange.py +++ b/gui/fitCommands/guiToggleModuleState.py @@ -3,7 +3,7 @@ from service.fit import Fit import gui.mainFrame from gui import globalEvents as GE -from .fitChangeState import FitChangeStatesCommand +from .calc.fitChangeState import FitChangeStatesCommand class GuiModuleStateChangeCommand(wx.Command): def __init__(self, fitID, baseMod, modules, click): diff --git a/service/fit.py b/service/fit.py index c63ce4205..016f5989a 100644 --- a/service/fit.py +++ b/service/fit.py @@ -41,6 +41,20 @@ from utils.deprecated import deprecated pyfalog = Logger(__name__) +class DeferRecalc(): + def __init__(self, fitID): + self.fitID = fitID + self.sFit = Fit.getInstance() + + def __enter__(self): + self._recalc = self.sFit.recalc + self.sFit.recalc = lambda x: print('Deferred Recalc') + + def __exit__(self, *args): + self.sFit.recalc = self._recalc + self.sFit.recalc(self.fitID) + + class Fit(object): instance = None