diff --git a/gui/builtinAdditionPanes/boosterView.py b/gui/builtinAdditionPanes/boosterView.py index 999d61e7c..96a5fff74 100644 --- a/gui/builtinAdditionPanes/boosterView.py +++ b/gui/builtinAdditionPanes/boosterView.py @@ -48,6 +48,7 @@ class BoosterViewDrop(wx.DropTarget): class BoosterView(d.Display): + DEFAULT_COLS = [ "State", "attr:boosterness", @@ -162,8 +163,8 @@ class BoosterView(d.Display): fitID = self.mainFrame.getActiveFit() if booster in self.original: position = self.original.index(booster) - self.mainFrame.command.Submit(cmd.GuiRemoveBoosterCommand( - fitID=fitID, position=position)) + self.mainFrame.command.Submit(cmd.GuiRemoveBoostersCommand( + fitID=fitID, positions=[position])) def click(self, event): event.Skip() diff --git a/gui/builtinAdditionPanes/implantView.py b/gui/builtinAdditionPanes/implantView.py index 28e88fb38..139a7b2f4 100644 --- a/gui/builtinAdditionPanes/implantView.py +++ b/gui/builtinAdditionPanes/implantView.py @@ -226,35 +226,33 @@ class ImplantDisplay(d.Display): def click(self, event): fitID = self.mainFrame.getActiveFit() fit = Fit.getInstance().getFit(fitID) - if fit.implantLocation != ImplantLocation.FIT: - event.Skip() - return - mainRow, _ = self.HitTest(event.Position) - if mainRow != -1: - col = self.getColumn(event.Position) - if col == self.getColIndex(State): - fitID = self.mainFrame.getActiveFit() - try: - mainImplant = self.implants[mainRow] - except IndexError: - return - if mainImplant in self.original: - mainPosition = self.original.index(mainImplant) - positions = [] - for row in self.getSelectedRows(): - try: - implant = self.implants[row] - except IndexError: - continue - if implant in self.original: - positions.append(self.original.index(implant)) - if mainPosition not in positions: - positions = [mainPosition] - self.mainFrame.command.Submit(cmd.GuiToggleImplantStatesCommand( - fitID=fitID, - mainPosition=mainPosition, - positions=positions)) - return + if fit.implantLocation == ImplantLocation.FIT: + mainRow, _ = self.HitTest(event.Position) + if mainRow != -1: + col = self.getColumn(event.Position) + if col == self.getColIndex(State): + fitID = self.mainFrame.getActiveFit() + try: + mainImplant = self.implants[mainRow] + except IndexError: + return + if mainImplant in self.original: + mainPosition = self.original.index(mainImplant) + positions = [] + for row in self.getSelectedRows(): + try: + implant = self.implants[row] + except IndexError: + continue + if implant in self.original: + positions.append(self.original.index(implant)) + if mainPosition not in positions: + positions = [mainPosition] + self.mainFrame.command.Submit(cmd.GuiToggleImplantStatesCommand( + fitID=fitID, + mainPosition=mainPosition, + positions=positions)) + return event.Skip() def spawnMenu(self, event): diff --git a/gui/builtinContextMenus/itemRemove.py b/gui/builtinContextMenus/itemRemove.py index aa7c3a5be..0140990c3 100644 --- a/gui/builtinContextMenus/itemRemove.py +++ b/gui/builtinContextMenus/itemRemove.py @@ -108,7 +108,7 @@ class RemoveItem(ContextMenuCombined): fit = Fit.getInstance().getFit(fitID) if mainItem in fit.boosters: position = fit.boosters.index(mainItem) - self.mainFrame.command.Submit(cmd.GuiRemoveBoosterCommand( + self.mainFrame.command.Submit(cmd.GuiRemoveBoostersCommand( fitID=fitID, position=position)) def __handleCargo(self, mainItem, selection): diff --git a/gui/fitCommands/__init__.py b/gui/fitCommands/__init__.py index c55f3ba9c..6411ef240 100644 --- a/gui/fitCommands/__init__.py +++ b/gui/fitCommands/__init__.py @@ -1,6 +1,6 @@ from .gui.booster.add import GuiAddBoosterCommand from .gui.booster.changeMeta import GuiChangeBoosterMetaCommand -from .gui.booster.remove import GuiRemoveBoosterCommand +from .gui.booster.remove import GuiRemoveBoostersCommand from .gui.booster.sideEffectToggleState import GuiToggleBoosterSideEffectStateCommand from .gui.booster.toggleState import GuiToggleBoosterStateCommand from .gui.cargo.add import GuiAddCargoCommand diff --git a/gui/fitCommands/calc/booster/add.py b/gui/fitCommands/calc/booster/add.py index 2a32c9ad8..2b1b5eca4 100644 --- a/gui/fitCommands/calc/booster/add.py +++ b/gui/fitCommands/calc/booster/add.py @@ -11,11 +11,12 @@ pyfalog = Logger(__name__) class CalcAddBoosterCommand(wx.Command): - def __init__(self, fitID, boosterInfo, position=None): + def __init__(self, fitID, boosterInfo, position=None, commit=True): wx.Command.__init__(self, True, 'Add Booster') self.fitID = fitID self.newBoosterInfo = boosterInfo self.newPosition = position + self.commit = commit self.oldBoosterInfo = None self.oldPosition = None @@ -38,7 +39,11 @@ class CalcAddBoosterCommand(wx.Command): fit.boosters.insert(self.newPosition, newBooster) except HandledListActionError: pyfalog.warning('Failed to insert to list') - cmd = CalcAddBoosterCommand(fitID=self.fitID, boosterInfo=self.oldBoosterInfo, position=self.oldPosition) + cmd = CalcAddBoosterCommand( + fitID=self.fitID, + boosterInfo=self.oldBoosterInfo, + position=self.oldPosition, + commit=self.commit) cmd.Do() return False else: @@ -46,19 +51,24 @@ class CalcAddBoosterCommand(wx.Command): fit.boosters.append(newBooster) except HandledListActionError: pyfalog.warning('Failed to append to list') - cmd = CalcAddBoosterCommand(fitID=self.fitID, boosterInfo=self.oldBoosterInfo, position=self.oldPosition) + cmd = CalcAddBoosterCommand( + fitID=self.fitID, + boosterInfo=self.oldBoosterInfo, + position=self.oldPosition, + commit=self.commit) cmd.Do() return False self.newPosition = fit.boosters.index(newBooster) - eos.db.commit() + if self.commit: + eos.db.commit() return True def Undo(self): pyfalog.debug('Undo addition of booster {} to fit {}'.format(self.newBoosterInfo, self.fitID)) if self.oldBoosterInfo is not None and self.oldPosition is not None: - cmd = CalcAddBoosterCommand(fitID=self.fitID, boosterInfo=self.oldBoosterInfo, position=self.oldPosition) + cmd = CalcAddBoosterCommand(fitID=self.fitID, boosterInfo=self.oldBoosterInfo, position=self.oldPosition, commit=self.commit) return cmd.Do() from .remove import CalcRemoveBoosterCommand - cmd = CalcRemoveBoosterCommand(fitID=self.fitID, position=self.newPosition) + cmd = CalcRemoveBoosterCommand(fitID=self.fitID, position=self.newPosition, commit=self.commit) return cmd.Do() diff --git a/gui/fitCommands/calc/booster/remove.py b/gui/fitCommands/calc/booster/remove.py index 49ce8c149..d05db275c 100644 --- a/gui/fitCommands/calc/booster/remove.py +++ b/gui/fitCommands/calc/booster/remove.py @@ -11,10 +11,11 @@ pyfalog = Logger(__name__) class CalcRemoveBoosterCommand(wx.Command): - def __init__(self, fitID, position): + def __init__(self, fitID, position, commit=True): wx.Command.__init__(self, True, 'Remove Booster') self.fitID = fitID self.position = position + self.commit = commit self.savedBoosterInfo = None def Do(self): @@ -23,11 +24,16 @@ class CalcRemoveBoosterCommand(wx.Command): booster = fit.boosters[self.position] self.savedBoosterInfo = BoosterInfo.fromBooster(booster) fit.boosters.remove(booster) - eos.db.commit() + if self.commit: + eos.db.commit() return True def Undo(self): pyfalog.debug('Undoing removal of booster {} on fit {}'.format(self.savedBoosterInfo, self.fitID)) from .add import CalcAddBoosterCommand - cmd = CalcAddBoosterCommand(fitID=self.fitID, boosterInfo=self.savedBoosterInfo, position=self.position) + cmd = CalcAddBoosterCommand( + fitID=self.fitID, + boosterInfo=self.savedBoosterInfo, + position=self.position, + commit=self.commit) return cmd.Do() diff --git a/gui/fitCommands/gui/booster/remove.py b/gui/fitCommands/gui/booster/remove.py index 7868addf8..fdd40a27d 100644 --- a/gui/fitCommands/gui/booster/remove.py +++ b/gui/fitCommands/gui/booster/remove.py @@ -1,5 +1,6 @@ import wx +import eos.db import gui.mainFrame from gui import globalEvents as GE from gui.fitCommands.calc.booster.remove import CalcRemoveBoosterCommand @@ -7,23 +8,28 @@ from gui.fitCommands.helpers import InternalCommandHistory from service.fit import Fit -class GuiRemoveBoosterCommand(wx.Command): +class GuiRemoveBoostersCommand(wx.Command): - def __init__(self, fitID, position): - wx.Command.__init__(self, True, 'Remove Booster') + def __init__(self, fitID, positions): + wx.Command.__init__(self, True, 'Remove Boosters') self.internalHistory = InternalCommandHistory() self.fitID = fitID - self.position = position + self.positions = positions def Do(self): - cmd = CalcRemoveBoosterCommand(fitID=self.fitID, position=self.position) - success = self.internalHistory.submit(cmd) + results = [] + for position in sorted(self.positions, reverse=True): + cmd = CalcRemoveBoosterCommand(fitID=self.fitID, position=position, commit=False) + results.append(self.internalHistory.submit(cmd)) + success = any(results) + eos.db.commit() Fit.getInstance().recalc(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success def Undo(self): success = self.internalHistory.undoAll() + eos.db.commit() Fit.getInstance().recalc(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success