Change booster removal commands to support multi-selection
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user