Rework setting mode and fix command which changes fit name

It was just broken before
This commit is contained in:
DarkPhoenix
2019-04-14 03:18:25 +03:00
parent c721869dfa
commit 9a6255cb29
10 changed files with 72 additions and 31 deletions

View File

@@ -61,7 +61,7 @@ class TacticalMode(ContextMenu):
return return
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
self.mainFrame.command.Submit(cmd.GuiSetModeCommand(fitID, self.modeIds[event.Id])) self.mainFrame.command.Submit(cmd.GuiSetModeCommand(fitID, self.modeIds[event.Id].item.ID))
TacticalMode.register() TacticalMode.register()

View File

@@ -14,6 +14,7 @@ import gui.utils.color as colorUtils
import gui.utils.draw as drawUtils import gui.utils.draw as drawUtils
import gui.utils.fonts as fonts import gui.utils.fonts as fonts
from gui.bitmap_loader import BitmapLoader from gui.bitmap_loader import BitmapLoader
from gui.builtinShipBrowser.events import EVT_FIT_RENAMED
from gui.builtinShipBrowser.pfBitmapFrame import PFBitmapFrame from gui.builtinShipBrowser.pfBitmapFrame import PFBitmapFrame
from service.fit import Fit from service.fit import Fit
from .events import BoosterListUpdated, FitRemoved, FitSelected, ImportSelected, SearchSelected, Stage3Selected from .events import BoosterListUpdated, FitRemoved, FitSelected, ImportSelected, SearchSelected, Stage3Selected
@@ -121,6 +122,7 @@ class FitItem(SFItem.SFBrowserItem):
self.tcFitName.Bind(wx.EVT_KILL_FOCUS, self.editLostFocus) self.tcFitName.Bind(wx.EVT_KILL_FOCUS, self.editLostFocus)
self.tcFitName.Bind(wx.EVT_KEY_DOWN, self.editCheckEsc) self.tcFitName.Bind(wx.EVT_KEY_DOWN, self.editCheckEsc)
self.Bind(wx.EVT_MOUSE_CAPTURE_LOST, self.OnMouseCaptureLost) self.Bind(wx.EVT_MOUSE_CAPTURE_LOST, self.OnMouseCaptureLost)
self.mainFrame.Bind(EVT_FIT_RENAMED, self.OnFitRename)
self.animTimerId = wx.NewId() self.animTimerId = wx.NewId()
self.animTimer = wx.Timer(self, self.animTimerId) self.animTimer = wx.Timer(self, self.animTimerId)
@@ -325,11 +327,17 @@ class FitItem(SFItem.SFBrowserItem):
self.editWasShown = 0 self.editWasShown = 0
fitName = self.tcFitName.GetValue() fitName = self.tcFitName.GetValue()
if fitName: if fitName:
self.fitName = fitName self.mainFrame.command.Submit(cmd.GuiFitRenameCommand(self.fitID, fitName))
self.mainFrame.command.Submit(cmd.GuiFitRenameCommand(self.fitID, self.fitName))
else: else:
self.tcFitName.SetValue(self.fitName) self.tcFitName.SetValue(self.fitName)
def OnFitRename(self, event):
if event.fitID == self.fitID:
fit = Fit.getInstance().getFit(self.fitID)
self.fitName = fit.name
self.Refresh()
event.Skip()
def deleteBtnCB(self): def deleteBtnCB(self):
if self.tcFitName.IsShown(): if self.tcFitName.IsShown():
self.RestoreEditButton() self.RestoreEditButton()

View File

@@ -28,6 +28,8 @@ class FitChangeProjectedDroneAmountCommand(wx.Command):
pyfalog.warning('Cannot find projected drone') pyfalog.warning('Cannot find projected drone')
return False return False
self.savedDroneInfo = DroneInfo.fromDrone(drone) self.savedDroneInfo = DroneInfo.fromDrone(drone)
if self.amount == self.savedDroneInfo.amount:
return False
drone.amount = self.amount drone.amount = self.amount
if drone.amountActive > 0: if drone.amountActive > 0:
difference = self.amount - self.savedDroneInfo.amount difference = self.amount - self.savedDroneInfo.amount

View File

@@ -30,7 +30,10 @@ class FitChangeProjectedFitAmountCommand(wx.Command):
return False return False
self.savedAmount = projectionInfo.amount self.savedAmount = projectionInfo.amount
# Limit to [1, 20] # Limit to [1, 20]
projectionInfo.amount = min(20, max(1, self.amount)) confinedAmount = min(20, max(1, self.amount))
if confinedAmount == self.savedAmount:
return False
projectionInfo.amount = confinedAmount
eos.db.commit() eos.db.commit()
return True return True

View File

@@ -18,7 +18,7 @@ class FitRenameCommand(wx.Command):
def Do(self): def Do(self):
pyfalog.debug('Doing renaming of fit {} to {}'.format(self.fitID, self.name)) pyfalog.debug('Doing renaming of fit {} to {}'.format(self.fitID, self.name))
fit = eos.db.getFit(self.fitID) fit = Fit.getInstance().getFit(self.fitID)
self.savedName = fit.name self.savedName = fit.name
fit.name = self.name fit.name = self.name
eos.db.commit() eos.db.commit()

View File

@@ -26,6 +26,8 @@ class FitReplaceModuleCommand(wx.Command):
oldMod = fit.modules[self.position] oldMod = fit.modules[self.position]
if not oldMod.isEmpty: if not oldMod.isEmpty:
self.oldModInfo = ModuleInfo.fromModule(oldMod) self.oldModInfo = ModuleInfo.fromModule(oldMod)
if self.newModInfo == self.oldModInfo:
return False
newMod = self.newModInfo.toModule(fallbackState=stateLimit(self.newModInfo.itemID)) newMod = self.newModInfo.toModule(fallbackState=stateLimit(self.newModInfo.itemID))
if newMod is None: if newMod is None:
return False return False

View File

@@ -1,28 +1,33 @@
import wx import wx
import eos.db
from logbook import Logger from logbook import Logger
import eos.db
from eos.saveddata.mode import Mode
from service.fit import Fit
from service.market import Market
pyfalog = Logger(__name__) pyfalog = Logger(__name__)
class FitSetModeCommand(wx.Command): class FitSetModeCommand(wx.Command):
""""
from sFit.setMode def __init__(self, fitID, itemID):
""" wx.Command.__init__(self, True, 'Set Mode')
def __init__(self, fitID, mode):
wx.Command.__init__(self, True, "Cargo add")
self.fitID = fitID self.fitID = fitID
self.mode = mode self.itemID = itemID
self.old_mode = None self.savedItemID = None
def Do(self): def Do(self):
pyfalog.debug("Set mode for fit ID: {0}", self.fitID) pyfalog.debug('Doing setting mode {} for fit {}'.format(self.itemID, self.fitID))
fit = eos.db.getFit(self.fitID) fit = Fit.getInstance().getFit(self.fitID)
self.old_mode = fit.mode self.savedItemID = fit.modeID
fit.mode = self.mode item = Market.getInstance().getItem(self.itemID)
mode = Mode(item)
fit.mode = mode
eos.db.commit() eos.db.commit()
return True return True
def Undo(self): def Undo(self):
cmd = FitSetModeCommand(self.fitID, self.old_mode) cmd = FitSetModeCommand(self.fitID, self.savedItemID)
cmd.Do() return cmd.Do()
return True

View File

@@ -7,16 +7,16 @@ from .calc.fitSetMode import FitSetModeCommand
class GuiSetModeCommand(wx.Command): class GuiSetModeCommand(wx.Command):
def __init__(self, fitID, mode): def __init__(self, fitID, itemID):
wx.Command.__init__(self, True, "Mode Set") wx.Command.__init__(self, True, "Mode Set")
self.mainFrame = gui.mainFrame.MainFrame.getInstance() self.mainFrame = gui.mainFrame.MainFrame.getInstance()
self.sFit = Fit.getInstance() self.sFit = Fit.getInstance()
self.internal_history = wx.CommandProcessor() self.internal_history = wx.CommandProcessor()
self.fitID = fitID self.fitID = fitID
self.mode = mode self.itemID = itemID
def Do(self): def Do(self):
if self.internal_history.Submit(FitSetModeCommand(self.fitID, self.mode)): if self.internal_history.Submit(FitSetModeCommand(self.fitID, self.itemID)):
self.sFit.recalc(self.fitID) self.sFit.recalc(self.fitID)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.fitID))
return True return True

View File

@@ -85,6 +85,19 @@ class ModuleInfo:
return mod return mod
def __eq__(self, other):
if not isinstance(other, ModuleInfo):
return False
return all((
self.itemID == other.itemID,
self.baseItemID == other.baseItemID,
self.mutaplasmidID == other.mutaplasmidID,
self.mutations == other.mutations,
self.chargeID == other.chargeID,
self.state == other.state,
self.spoolType == other.spoolType,
self.spoolAmount == other.spoolAmount))
def __repr__(self): def __repr__(self):
return makeReprStr(self, [ return makeReprStr(self, [
'itemID', 'baseItemID', 'mutaplasmidID', 'mutations', 'itemID', 'baseItemID', 'mutaplasmidID', 'mutations',

View File

@@ -26,6 +26,7 @@ from service.fit import Fit
import gui.graphFrame import gui.graphFrame
import gui.globalEvents as GE import gui.globalEvents as GE
from gui.bitmap_loader import BitmapLoader from gui.bitmap_loader import BitmapLoader
from gui.builtinShipBrowser.events import EVT_FIT_RENAMED
from logbook import Logger from logbook import Logger
@@ -171,6 +172,7 @@ class MainMenuBar(wx.MenuBar):
helpMenu.Append(self.devToolsId, "Open &Dev Tools", "Dev Tools") helpMenu.Append(self.devToolsId, "Open &Dev Tools", "Dev Tools")
self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged) self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged)
self.mainFrame.Bind(EVT_FIT_RENAMED, self.fitRenamed)
def fitChanged(self, event): def fitChanged(self, event):
enable = event.fitID is not None enable = event.fitID is not None
@@ -178,14 +180,7 @@ class MainMenuBar(wx.MenuBar):
self.Enable(wx.ID_COPY, enable) self.Enable(wx.ID_COPY, enable)
self.Enable(self.exportSkillsNeededId, enable) self.Enable(self.exportSkillsNeededId, enable)
command = self.mainFrame.command self.refreshUndo()
self.Enable(wx.ID_UNDO, False)
self.Enable(wx.ID_REDO, False)
if command.CanUndo():
self.Enable(wx.ID_UNDO, True)
if command.CanRedo():
self.Enable(wx.ID_REDO, True)
sChar = Character.getInstance() sChar = Character.getInstance()
charID = self.mainFrame.charSelection.getActiveCharacter() charID = self.mainFrame.charSelection.getActiveCharacter()
@@ -208,3 +203,16 @@ class MainMenuBar(wx.MenuBar):
self.ignoreRestrictionItem.SetItemLabel("Disable Fitting Re&strictions") self.ignoreRestrictionItem.SetItemLabel("Disable Fitting Re&strictions")
event.Skip() event.Skip()
def fitRenamed(self, event):
self.refreshUndo()
event.Skip()
def refreshUndo(self):
command = self.mainFrame.command
self.Enable(wx.ID_UNDO, False)
self.Enable(wx.ID_REDO, False)
if command.CanUndo():
self.Enable(wx.ID_UNDO, True)
if command.CanRedo():
self.Enable(wx.ID_REDO, True)