Exemplo n.º 1
0
        private bool HandleSingleClick(InputEventArgs e, ModifierKeys modifiers)
        {
            // Don't do anything if there is no history
            if (_history.VisualComponent.TextView.TextBuffer.CurrentSnapshot.Length == 0)
            {
                _lastSelectedLineNumber = null;
                return(true);
            }

            var point      = GetAdjustedPosition(e, _history.VisualComponent.TextView);
            var lineNumber = GetLineNumberUnderPoint(point);

            if (lineNumber == -1)
            {
                _lastSelectedLineNumber = null;
                return(false);
            }

            switch (modifiers)
            {
            case ModifierKeys.None:
                _history.ClearHistoryEntrySelection();
                _history.SelectHistoryEntry(lineNumber);
                _lastSelectedLineNumber = lineNumber;
                return(false);

            case ModifierKeys.Control:
                _history.VisualComponent.TextView.Selection.Clear();
                _history.ToggleHistoryEntrySelection(lineNumber);
                _lastSelectedLineNumber = lineNumber;
                return(true);

            case ModifierKeys.Shift:
                if (!_lastSelectedLineNumber.HasValue)
                {
                    _history.ClearHistoryEntrySelection();
                    _history.SelectHistoryEntry(lineNumber);
                    _lastSelectedLineNumber = lineNumber;
                    return(false);
                }

                if (_history.HasSelectedEntries)
                {
                    if (lineNumber > _lastSelectedLineNumber.Value)
                    {
                        _history.ClearHistoryEntrySelection();
                        _history.SelectHistoryEntries(Enumerable.Range(_lastSelectedLineNumber.Value, lineNumber - _lastSelectedLineNumber.Value + 1));
                    }
                    else if (lineNumber < _lastSelectedLineNumber.Value)
                    {
                        _history.ClearHistoryEntrySelection();
                        _history.SelectHistoryEntries(Enumerable.Range(lineNumber, _lastSelectedLineNumber.Value - lineNumber + 1));
                    }

                    return(true);
                }

                return(false);

            default:
                _lastSelectedLineNumber = null;
                return(false);
            }
        }