Exemple #1
0
    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);
        }
Exemple #3
0
    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);
        }
    }
Exemple #4
0
 public ClipboardHistoryNotification(HistoryRecordModel addedRecord, bool wasRecordRemoved, HistoryRecordModel removedRecord)
 {
     AddedRecord      = addedRecord;
     WasRecordRemoved = wasRecordRemoved;
     RemovedRecord    = removedRecord;
 }
Exemple #5
0
 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}");
            });
        }