Files
pyfa/gui/fitCommands/calc/commandFit/toggleStates.py

72 lines
2.7 KiB
Python

import wx
from logbook import Logger
from service.fit import Fit
pyfalog = Logger(__name__)
class CalcToggleCommandFitStatesCommand(wx.Command):
def __init__(self, fitID, mainCommandFitID, commandFitIDs, forceStates=None):
wx.Command.__init__(self, True, 'Toggle Command Fit States')
self.fitID = fitID
self.mainCommandFitID = mainCommandFitID
self.commandFitIDs = commandFitIDs
self.forceStates = forceStates
self.savedStates = None
def Do(self):
pyfalog.debug('Doing toggling of command fit {}/{} state for fit {}'.format(self.mainCommandFitID, self.commandFitIDs, self.fitID))
sFit = Fit.getInstance()
commandFitIDs = self.commandFitIDs[:]
if self.mainCommandFitID not in commandFitIDs:
commandFitIDs.append(self.mainCommandFitID)
commandInfos = {}
for commandFitID in commandFitIDs:
commandFit = sFit.getFit(commandFitID)
# Command fit could have been deleted if we are redoing
if commandFit is None:
pyfalog.debug('Command fit is not available')
continue
commandInfo = commandFit.getCommandInfo(self.fitID)
if commandInfo is None:
pyfalog.warning('Fit command info is not available')
continue
commandInfos[commandFitID] = commandInfo
if len(commandInfos) == 0:
return False
self.savedStates = {cfid: ci.active for cfid, ci in commandInfos.items()}
mainCommandInfo = commandInfos.get(self.mainCommandFitID)
if self.forceStates is not None:
for commandFitID, state in self.forceStates.items():
commandInfo = commandInfos.get(commandFitID)
if commandInfo is None:
continue
commandInfo.active = state
elif mainCommandInfo is not None and mainCommandInfo.active:
for commandInfo in commandInfos.values():
commandInfo.active = False
elif mainCommandInfo is not None and not mainCommandInfo.active:
for commandInfo in commandInfos.values():
commandInfo.active = True
# Bail if we cannot calculate which state to take
else:
return False
return True
def Undo(self):
pyfalog.debug('Undoing toggling of command fit {}/{} state for fit {}'.format(self.mainCommandFitID, self.commandFitIDs, self.fitID))
cmd = CalcToggleCommandFitStatesCommand(
fitID=self.fitID,
mainCommandFitID=self.mainCommandFitID,
commandFitIDs=self.commandFitIDs,
forceStates=self.savedStates)
return cmd.Do()