72 lines
2.7 KiB
Python
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()
|