public void AddDetail(String time, String description, Int32 point) { XmlDocument doc = m_pNode.OwnerDocument; XmlElement node = doc.CreateElement("record"); XmlAttribute attr; attr = doc.CreateAttribute("time"); attr.Value = time; node.Attributes.Append(attr); attr = doc.CreateAttribute("description"); attr.Value = description; node.Attributes.Append(attr); if (point != 0) { attr = doc.CreateAttribute("point"); attr.Value = point.ToString(); node.Attributes.Append(attr); } Lock(); HistoryRecordModel item = new HistoryRecordModel(node, m_pDB); m_pDetails.Add(item); m_pNode.AppendChild(node); m_pDB.SaveDbToFile(); Unlock(); }
public HistoryRecordModel AddHistoryRecord(Key key, ClipboardDataModel clipboardData) { bool wasItemRemoved; var removedRecord = default(HistoryRecordModel); if (wasItemRemoved = _history.Count == RecordCount) { removedRecord = _history.First(); _history.Remove(removedRecord); } var addedRecord = new HistoryRecordModel(key, clipboardData); _history.Add(addedRecord); // Notify observers and log notification var notification = new ClipboardHistoryNotification(addedRecord, wasItemRemoved, removedRecord); _subscription.Broadcast(notification); if (_notifications.Count == RecordCount) { _notifications.Remove(_notifications.First()); } _notifications.Add(notification); return(addedRecord); }
public HistoryRecordsModel(XmlNode node, Database db) : base(node, db) { m_pDetails = new List <HistoryRecordModel>(); XmlNodeList list = m_pNode.SelectNodes(@"record"); foreach (XmlNode tmp in list) { HistoryRecordModel item = new HistoryRecordModel(tmp, m_pDB); m_pDetails.Add(item); } }
public ClipboardHistoryNotification(HistoryRecordModel addedRecord, bool wasRecordRemoved, HistoryRecordModel removedRecord) { AddedRecord = addedRecord; WasRecordRemoved = wasRecordRemoved; RemovedRecord = removedRecord; }
public DetailController(HistoryRecordModel model) { m_pModel = model; }
private void ConfigureCopypastaStateMachine() { _copypastaStateMachine.Configure(CopypastaState.Idle) .Permit(CopypastaTrigger.ClipboardUpdated, CopypastaState.Copying) .Ignore(CopypastaTrigger.CtrlCPressed) .Permit(CopypastaTrigger.CtrlVPressed, CopypastaState.Pasting) .Ignore(CopypastaTrigger.EscPressed) .Ignore(CopypastaTrigger.KeyPressed) .Ignore(CopypastaTrigger.ModifierPressed) .Ignore(CopypastaTrigger.Timeout) .OnEntry(transition => { _ctrlCHandled = false; _ctrlVHandled = true; _escPressHandled = false; _keyPressHandled = false; _modifierPressHandled = false; _notificationDispatcher.CloseNotification(); Console.WriteLine($"State={_copypastaStateMachine.State}"); }); _copypastaStateMachine.Configure(CopypastaState.Copying) .PermitReentry(CopypastaTrigger.ClipboardUpdated) .Permit(CopypastaTrigger.CtrlCPressed, CopypastaState.Idle) .Permit(CopypastaTrigger.CtrlVPressed, CopypastaState.Pasting) .Permit(CopypastaTrigger.EscPressed, CopypastaState.Idle) .Permit(CopypastaTrigger.KeyPressed, CopypastaState.BindingClipboardToKey) .Ignore(CopypastaTrigger.ModifierPressed) .Permit(CopypastaTrigger.Timeout, CopypastaState.Idle) .OnEntry(() => { _ctrlCHandled = true; _ctrlVHandled = true; _escPressHandled = true; _keyPressHandled = true; _modifierPressHandled = false; // Update clipboard history var clipboardData = _clipboard.ClipboardData; _historyRecordSwap = _clipboardHistoryManager.AddHistoryRecord(Key.None, clipboardData); _notificationDispatcher.ShowNotification(new CopyingNotificationModel()); Console.WriteLine($"State={_copypastaStateMachine.State}"); }); _copypastaStateMachine.Configure(CopypastaState.BindingClipboardToKey) .Permit(CopypastaTrigger.ClipboardUpdated, CopypastaState.Copying) .Ignore(CopypastaTrigger.CtrlCPressed) .Permit(CopypastaTrigger.CtrlVPressed, CopypastaState.Pasting) .Ignore(CopypastaTrigger.EscPressed) .Ignore(CopypastaTrigger.KeyPressed) .Ignore(CopypastaTrigger.ModifierPressed) .Ignore(CopypastaTrigger.Timeout) .Permit(CopypastaTrigger.ClipboardBound, CopypastaState.ShowingClipboardBinding) .OnEntryFrom(_keyPressedTrigger, key => { _ctrlCHandled = false; _ctrlVHandled = true; _escPressHandled = false; _keyPressHandled = false; _modifierPressHandled = false; // Bind clipboard to key _clipboardBindingManager.AddBinding(key, _historyRecordSwap.ClipboardData); // Update clipboard history _historyRecordSwap.Key = key; Console.WriteLine($"State={_copypastaStateMachine.State}"); }); _copypastaStateMachine.Configure(CopypastaState.ShowingClipboardBinding) .Permit(CopypastaTrigger.ClipboardUpdated, CopypastaState.Copying) .Ignore(CopypastaTrigger.CtrlCPressed) .Permit(CopypastaTrigger.CtrlVPressed, CopypastaState.Pasting) .Permit(CopypastaTrigger.EscPressed, CopypastaState.Idle) .Ignore(CopypastaTrigger.KeyPressed) .Ignore(CopypastaTrigger.ModifierPressed) .Permit(CopypastaTrigger.Timeout, CopypastaState.Idle) .OnEntry(() => { _ctrlCHandled = false; _ctrlVHandled = true; _escPressHandled = false; _keyPressHandled = false; _modifierPressHandled = false; _notificationDispatcher.ShowNotification(new BoundNotificationModel { Key = _historyRecordSwap.Key, ClipboardData = _historyRecordSwap.ClipboardData }); Console.WriteLine($"State={_copypastaStateMachine.State}"); }); _copypastaStateMachine.Configure(CopypastaState.Pasting) .Permit(CopypastaTrigger.ClipboardUpdated, CopypastaState.Copying) .Ignore(CopypastaTrigger.CtrlCPressed) .Permit(CopypastaTrigger.CtrlVPressed, CopypastaState.Idle) .Permit(CopypastaTrigger.EscPressed, CopypastaState.Idle) .Permit(CopypastaTrigger.KeyPressed, CopypastaState.MovingDataToClipboard) .Ignore(CopypastaTrigger.ModifierPressed) .Permit(CopypastaTrigger.Timeout, CopypastaState.Idle) .OnEntry(() => { _ctrlCHandled = false; _ctrlVHandled = false; _escPressHandled = true; _keyPressHandled = true; _modifierPressHandled = false; _notificationDispatcher.ShowNotification(new PastingNotificationModel()); Console.WriteLine($"State={_copypastaStateMachine.State}"); }); _copypastaStateMachine.Configure(CopypastaState.MovingDataToClipboard) .Permit(CopypastaTrigger.ClipboardUpdated, CopypastaState.SimulatingCtrlV) .Ignore(CopypastaTrigger.CtrlCPressed) .Ignore(CopypastaTrigger.CtrlVPressed) .Ignore(CopypastaTrigger.EscPressed) .Ignore(CopypastaTrigger.KeyPressed) .Ignore(CopypastaTrigger.ModifierPressed) .Ignore(CopypastaTrigger.Timeout) .Permit(CopypastaTrigger.NoDataOnKey, CopypastaState.Idle) .OnEntryFrom(_keyPressedTrigger, key => { _ctrlCHandled = true; _ctrlVHandled = true; _escPressHandled = false; _keyPressHandled = false; _modifierPressHandled = false; var clipboardItem = _clipboardBindingManager.GetBindingData(key); if (clipboardItem == null) { _copypastaStateMachine.Fire(CopypastaTrigger.NoDataOnKey); return; } // Save clipboard to swap - to restore previous data _clipboardSwap = _clipboard.ClipboardData; // Write to clipboard _clipboard.ClipboardData = clipboardItem; Console.WriteLine($"State={_copypastaStateMachine.State}"); }); _copypastaStateMachine.Configure(CopypastaState.SimulatingCtrlV) .Ignore(CopypastaTrigger.ClipboardUpdated) .Ignore(CopypastaTrigger.CtrlCPressed) .Permit(CopypastaTrigger.CtrlVPressed, CopypastaState.RestoringClipboard) .Ignore(CopypastaTrigger.EscPressed) .Ignore(CopypastaTrigger.KeyPressed) .Ignore(CopypastaTrigger.ModifierPressed) .Ignore(CopypastaTrigger.Timeout) .OnEntry(() => { _ctrlCHandled = true; _ctrlVHandled = false; _escPressHandled = false; _keyPressHandled = false; _modifierPressHandled = false; // Simulate key up for V key. This prevents interfering with simulated Ctrl+V when pasting from V key. _inputSimulator.Keyboard.KeyUp(VirtualKeyCode.VK_V); // Simulate Ctrl+V _inputSimulator.Keyboard.ModifiedKeyStroke(VirtualKeyCode.CONTROL, VirtualKeyCode.VK_V); // TODO: This can be removed once support for delayed clipboard rendering is added // Wait for programs to paste data once Ctrl+V is pressed Thread.Sleep(100); Console.WriteLine($"State={_copypastaStateMachine.State}"); }); _copypastaStateMachine.Configure(CopypastaState.RestoringClipboard) .Permit(CopypastaTrigger.ClipboardUpdated, CopypastaState.Idle) .Ignore(CopypastaTrigger.CtrlCPressed) .Permit(CopypastaTrigger.CtrlVPressed, CopypastaState.Pasting) .Ignore(CopypastaTrigger.EscPressed) .Ignore(CopypastaTrigger.KeyPressed) .Ignore(CopypastaTrigger.ModifierPressed) .Ignore(CopypastaTrigger.Timeout) .OnEntry(() => { _ctrlCHandled = false; _ctrlVHandled = true; _escPressHandled = false; _keyPressHandled = false; _modifierPressHandled = false; // Restore previous data _clipboard.ClipboardData = _clipboardSwap; Console.WriteLine($"State={_copypastaStateMachine.State}"); }); }