private SmState Transition(IKeyboardToolTip tool, ToolTip tooltip, SmEvent @event) => (_currentState, @event) switch { (SmState.Hidden, SmEvent.FocusedTool) => SetupInitShowTimer(tool, tooltip), (SmState.Hidden, SmEvent.LeftTool) => _currentState, // OK (SmState.ReadyForInitShow, SmEvent.FocusedTool) => _currentState, // unlikely: focus without leave (SmState.ReadyForInitShow, SmEvent.LeftTool) => FullFsmReset(), (SmState.ReadyForInitShow, SmEvent.InitialDelayTimerExpired) => ShowToolTip(tool, tooltip), (SmState.Shown, SmEvent.FocusedTool) => _currentState, // unlikely: focus without leave (SmState.Shown, SmEvent.LeftTool) => HideAndStartWaitingForRefocus(tool, tooltip), (SmState.Shown, SmEvent.AutoPopupDelayTimerExpired) => FullFsmReset(), (SmState.WaitForRefocus, SmEvent.FocusedTool) => SetupReshowTimer(tool, tooltip), (SmState.WaitForRefocus, SmEvent.LeftTool) => _currentState, // OK (SmState.WaitForRefocus, SmEvent.RefocusWaitDelayExpired) => FullFsmReset(), (SmState.ReadyForReshow, SmEvent.FocusedTool) => _currentState, // unlikely: focus without leave (SmState.ReadyForReshow, SmEvent.LeftTool) => StartWaitingForRefocus(tool), (SmState.ReadyForReshow, SmEvent.ReshowDelayTimerExpired) => ShowToolTip(tool, tooltip), // This is what we would have thrown historically (_, _) => throw new KeyNotFoundException() };
public SmTransition(SmState currentState, SmEvent @event) { this.currentState = currentState; this.@event = @event; }