public CopypastaController(IClipboard clipboard, IClipboardHistoryManager clipboardHistoryManager,
                                   IClipboardBindingManager clipboardBindingManager, IHotkey ctrlVHotkey, IHotkey ctrlCHotkey, IHotkey escHotkey,
                                   IKeyTracker keyTracker, IInputSimulator inputSimulator, INotificationDispatcher notificationDispatcher)
        {
            _clipboard = clipboard;
            _clipboardHistoryManager = clipboardHistoryManager;
            _clipboardBindingManager = clipboardBindingManager;
            _ctrlVHotkey             = ctrlVHotkey;
            _ctrlCHotkey             = ctrlCHotkey;
            _escHotkey              = escHotkey;
            _keyTracker             = keyTracker;
            _inputSimulator         = inputSimulator;
            _notificationDispatcher = notificationDispatcher;
            _copypastaStateMachine  = new StateMachine <CopypastaState, CopypastaTrigger>(CopypastaState.Idle);
            _keyPressedTrigger      = _copypastaStateMachine.SetTriggerParameters <Key>(CopypastaTrigger.KeyPressed);

            ConfigureCopypastaStateMachine();
            ConfigureEventTriggers();
        }
        public HistoryMenuViewModel(IClipboardHistoryManager clipboardHistoryManager)
        {
            _clipboardHistoryManager  = clipboardHistoryManager;
            _modelToViewModelMappings = new Dictionary <IHistoryRecordModel, IHistoryRecordViewModel>(_clipboardHistoryManager.RecordCount);
            _historyList = new List <IHistoryRecordViewModel>(_clipboardHistoryManager.RecordCount);

            _clipboardHistoryManager.Subscribe(notification =>
            {
                if (notification.WasRecordRemoved)
                {
                    var removedRecord = _modelToViewModelMappings[notification.RemovedRecord];
                    _modelToViewModelMappings.Remove(notification.RemovedRecord);
                    _historyList.Remove(removedRecord);
                }

                var addedRecord = new HistoryRecordViewModel(notification.AddedRecord);
                _modelToViewModelMappings[notification.AddedRecord] = addedRecord;
                _historyList.Add(addedRecord);

                OnPropertyChanged(nameof(HistoryList));
            });
        }