Browse Source

Added WholeWordTextActionModifiers

pull/1965/head
Nikita Tsukanov 8 years ago
parent
commit
4d2407192c
  1. 33
      src/Avalonia.Controls/TextBox.cs
  2. 6
      src/Avalonia.Input/Platform/PlatformHotkeyConfiguration.cs

33
src/Avalonia.Controls/TextBox.cs

@ -495,34 +495,36 @@ namespace Avalonia.Controls
handled = true; handled = true;
} }
else else
{
bool hasWholeWordModifiers = modifiers.HasFlag(keymap.WholeWordTextActionModifiers);
switch (e.Key) switch (e.Key)
{ {
case Key.Left: case Key.Left:
MoveHorizontal(-1, modifiers); MoveHorizontal(-1, hasWholeWordModifiers);
movement = true; movement = true;
selection = DetectSelection(); selection = DetectSelection();
break; break;
case Key.Right: case Key.Right:
MoveHorizontal(1, modifiers); MoveHorizontal(1, hasWholeWordModifiers);
movement = true; movement = true;
selection = DetectSelection(); selection = DetectSelection();
break; break;
case Key.Up: case Key.Up:
movement = MoveVertical(-1, modifiers); movement = MoveVertical(-1);
selection = DetectSelection(); selection = DetectSelection();
break; break;
case Key.Down: case Key.Down:
movement = MoveVertical(1, modifiers); movement = MoveVertical(1);
selection = DetectSelection(); selection = DetectSelection();
break; break;
case Key.Back: case Key.Back:
if (modifiers == keymap.CommandModifiers && SelectionStart == SelectionEnd) if (hasWholeWordModifiers && SelectionStart == SelectionEnd)
{ {
SetSelectionForControlBackspace(modifiers); SetSelectionForControlBackspace();
} }
if (!DeleteSelection() && CaretIndex > 0) if (!DeleteSelection() && CaretIndex > 0)
@ -548,9 +550,9 @@ namespace Avalonia.Controls
break; break;
case Key.Delete: case Key.Delete:
if (modifiers == keymap.CommandModifiers && SelectionStart == SelectionEnd) if (hasWholeWordModifiers && SelectionStart == SelectionEnd)
{ {
SetSelectionForControlDelete(modifiers); SetSelectionForControlDelete();
} }
if (!DeleteSelection() && caretIndex < text.Length) if (!DeleteSelection() && caretIndex < text.Length)
@ -599,6 +601,7 @@ namespace Avalonia.Controls
handled = false; handled = false;
break; break;
} }
}
if (movement && selection) if (movement && selection)
{ {
@ -719,12 +722,12 @@ namespace Avalonia.Controls
return result; return result;
} }
private void MoveHorizontal(int direction, InputModifiers modifiers) private void MoveHorizontal(int direction, bool wholeWord)
{ {
var text = Text ?? string.Empty; var text = Text ?? string.Empty;
var caretIndex = CaretIndex; var caretIndex = CaretIndex;
if ((modifiers & InputModifiers.Control) == 0) if (!wholeWord)
{ {
var index = caretIndex + direction; var index = caretIndex + direction;
@ -762,7 +765,7 @@ namespace Avalonia.Controls
} }
} }
private bool MoveVertical(int count, InputModifiers modifiers) private bool MoveVertical(int count)
{ {
var formattedText = _presenter.FormattedText; var formattedText = _presenter.FormattedText;
var lines = formattedText.GetLines().ToList(); var lines = formattedText.GetLines().ToList();
@ -935,17 +938,17 @@ namespace Avalonia.Controls
} }
} }
private void SetSelectionForControlBackspace(InputModifiers modifiers) private void SetSelectionForControlBackspace()
{ {
SelectionStart = CaretIndex; SelectionStart = CaretIndex;
MoveHorizontal(-1, modifiers); MoveHorizontal(-1, true);
SelectionEnd = CaretIndex; SelectionEnd = CaretIndex;
} }
private void SetSelectionForControlDelete(InputModifiers modifiers) private void SetSelectionForControlDelete()
{ {
SelectionStart = CaretIndex; SelectionStart = CaretIndex;
MoveHorizontal(1, modifiers); MoveHorizontal(1, true);
SelectionEnd = CaretIndex; SelectionEnd = CaretIndex;
} }

6
src/Avalonia.Input/Platform/PlatformHotkeyConfiguration.cs

@ -9,10 +9,13 @@ namespace Avalonia.Input.Platform
} }
public PlatformHotkeyConfiguration(InputModifiers commandModifiers, InputModifiers selectionModifiers = InputModifiers.Shift) public PlatformHotkeyConfiguration(InputModifiers commandModifiers,
InputModifiers selectionModifiers = InputModifiers.Shift,
InputModifiers wholeWordTextActionModifiers = InputModifiers.Control)
{ {
CommandModifiers = commandModifiers; CommandModifiers = commandModifiers;
SelectionModifiers = selectionModifiers; SelectionModifiers = selectionModifiers;
WholeWordTextActionModifiers = wholeWordTextActionModifiers;
Copy = new List<KeyGesture> Copy = new List<KeyGesture>
{ {
new KeyGesture(Key.C, commandModifiers) new KeyGesture(Key.C, commandModifiers)
@ -73,6 +76,7 @@ namespace Avalonia.Input.Platform
} }
public InputModifiers CommandModifiers { get; set; } public InputModifiers CommandModifiers { get; set; }
public InputModifiers WholeWordTextActionModifiers { get; set; }
public InputModifiers SelectionModifiers { get; set; } public InputModifiers SelectionModifiers { get; set; }
public List<KeyGesture> Copy { get; set; } public List<KeyGesture> Copy { get; set; }
public List<KeyGesture> Cut { get; set; } public List<KeyGesture> Cut { get; set; }

Loading…
Cancel
Save