@@ -11,7 +11,7 @@ using Irihi.Avalonia.Shared.Helpers;
|
|||||||
namespace Ursa.Controls;
|
namespace Ursa.Controls;
|
||||||
|
|
||||||
[TemplatePart(PART_ItemsControl, typeof(ItemsControl))]
|
[TemplatePart(PART_ItemsControl, typeof(ItemsControl))]
|
||||||
public class PinCode: TemplatedControl
|
public class PinCode : TemplatedControl
|
||||||
{
|
{
|
||||||
public const string PART_ItemsControl = "PART_ItemsControl";
|
public const string PART_ItemsControl = "PART_ItemsControl";
|
||||||
private ItemsControl? _itemsControl;
|
private ItemsControl? _itemsControl;
|
||||||
@@ -79,7 +79,7 @@ public class PinCode: TemplatedControl
|
|||||||
{
|
{
|
||||||
CountProperty.Changed.AddClassHandler<PinCode, int>((code, args) => code.OnCountOfDigitChanged(args));
|
CountProperty.Changed.AddClassHandler<PinCode, int>((code, args) => code.OnCountOfDigitChanged(args));
|
||||||
FocusableProperty.OverrideDefaultValue<PinCode>(true);
|
FocusableProperty.OverrideDefaultValue<PinCode>(true);
|
||||||
KeyDownEvent.AddClassHandler<PinCode>((o,e)=>o.OnPreviewKeyDown(e), RoutingStrategies.Tunnel);
|
KeyDownEvent.AddClassHandler<PinCode>((o, e) => o.OnPreviewKeyDown(e), RoutingStrategies.Tunnel);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PinCode()
|
public PinCode()
|
||||||
@@ -181,6 +181,11 @@ public class PinCode: TemplatedControl
|
|||||||
presenter.Text = newText[i].ToString();
|
presenter.Text = newText[i].ToString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (newText.Length == Count)
|
||||||
|
{
|
||||||
|
CompleteCommand?.Execute(Digits);
|
||||||
|
RaiseEvent(new PinCodeCompleteEventArgs(Digits, CompleteEvent));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -210,7 +215,7 @@ public class PinCode: TemplatedControl
|
|||||||
_currentIndex = MathHelpers.SafeClamp(_currentIndex, 0, Count - 1);
|
_currentIndex = MathHelpers.SafeClamp(_currentIndex, 0, Count - 1);
|
||||||
_itemsControl?.ContainerFromIndex(_currentIndex)?.Focus();
|
_itemsControl?.ContainerFromIndex(_currentIndex)?.Focus();
|
||||||
}
|
}
|
||||||
else if(e.Key is Key.Right or Key.FnRightArrow)
|
else if (e.Key is Key.Right or Key.FnRightArrow)
|
||||||
{
|
{
|
||||||
_currentIndex++;
|
_currentIndex++;
|
||||||
_currentIndex = MathHelpers.SafeClamp(_currentIndex, 0, Count - 1);
|
_currentIndex = MathHelpers.SafeClamp(_currentIndex, 0, Count - 1);
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using Avalonia.Headless;
|
|||||||
using Avalonia.Headless.XUnit;
|
using Avalonia.Headless.XUnit;
|
||||||
using Avalonia.Input;
|
using Avalonia.Input;
|
||||||
using Avalonia.Threading;
|
using Avalonia.Threading;
|
||||||
|
using CommunityToolkit.Mvvm.Input;
|
||||||
using Ursa.Controls;
|
using Ursa.Controls;
|
||||||
|
|
||||||
namespace HeadlessTest.Ursa.Controls.PinCodeTests;
|
namespace HeadlessTest.Ursa.Controls.PinCodeTests;
|
||||||
@@ -13,9 +14,11 @@ public class PasteTest
|
|||||||
public async void Paste_Should_Insert_Text()
|
public async void Paste_Should_Insert_Text()
|
||||||
{
|
{
|
||||||
var window = new Window();
|
var window = new Window();
|
||||||
|
bool commandInvoked = false;
|
||||||
var pinCode = new PinCode()
|
var pinCode = new PinCode()
|
||||||
{
|
{
|
||||||
Count = 4,
|
Count = 4,
|
||||||
|
CompleteCommand = new RelayCommand(() => commandInvoked = true),
|
||||||
};
|
};
|
||||||
window.Content = pinCode;
|
window.Content = pinCode;
|
||||||
window.Show();
|
window.Show();
|
||||||
@@ -27,15 +30,18 @@ public class PasteTest
|
|||||||
// add await for clipboard processing.
|
// add await for clipboard processing.
|
||||||
await Task.Delay(1);
|
await Task.Delay(1);
|
||||||
Assert.Equal("abcd", string.Join("", pinCode.Digits));
|
Assert.Equal("abcd", string.Join("", pinCode.Digits));
|
||||||
|
Assert.True(commandInvoked);
|
||||||
}
|
}
|
||||||
|
|
||||||
[AvaloniaFact]
|
[AvaloniaFact]
|
||||||
public async void Paste_Should_Insert_Text_When_Text_Is_Shorter()
|
public async void Paste_Should_Insert_Text_When_Text_Is_Shorter()
|
||||||
{
|
{
|
||||||
var window = new Window();
|
var window = new Window();
|
||||||
|
bool commandInvoked = false;
|
||||||
var pinCode = new PinCode()
|
var pinCode = new PinCode()
|
||||||
{
|
{
|
||||||
Count = 4,
|
Count = 4,
|
||||||
|
CompleteCommand = new RelayCommand(() => commandInvoked = true),
|
||||||
};
|
};
|
||||||
window.Content = pinCode;
|
window.Content = pinCode;
|
||||||
window.Show();
|
window.Show();
|
||||||
@@ -46,15 +52,18 @@ public class PasteTest
|
|||||||
window.KeyPressQwerty(PhysicalKey.V, RawInputModifiers.Control);
|
window.KeyPressQwerty(PhysicalKey.V, RawInputModifiers.Control);
|
||||||
await Task.Delay(1);
|
await Task.Delay(1);
|
||||||
Assert.Equal("abc", string.Join("", pinCode.Digits));
|
Assert.Equal("abc", string.Join("", pinCode.Digits));
|
||||||
|
Assert.False(commandInvoked);
|
||||||
}
|
}
|
||||||
|
|
||||||
[AvaloniaFact]
|
[AvaloniaFact]
|
||||||
public async void Paste_Should_Insert_Text_When_Text_Is_Longer()
|
public async void Paste_Should_Insert_Text_When_Text_Is_Longer()
|
||||||
{
|
{
|
||||||
var window = new Window();
|
var window = new Window();
|
||||||
|
bool commandInvoked = false;
|
||||||
var pinCode = new PinCode()
|
var pinCode = new PinCode()
|
||||||
{
|
{
|
||||||
Count = 4,
|
Count = 4,
|
||||||
|
CompleteCommand = new RelayCommand(() => commandInvoked = true),
|
||||||
};
|
};
|
||||||
window.Content = pinCode;
|
window.Content = pinCode;
|
||||||
window.Show();
|
window.Show();
|
||||||
@@ -65,16 +74,19 @@ public class PasteTest
|
|||||||
window.KeyPressQwerty(PhysicalKey.V, RawInputModifiers.Control);
|
window.KeyPressQwerty(PhysicalKey.V, RawInputModifiers.Control);
|
||||||
await Task.Delay(1);
|
await Task.Delay(1);
|
||||||
Assert.Equal("abcd", string.Join("", pinCode.Digits));
|
Assert.Equal("abcd", string.Join("", pinCode.Digits));
|
||||||
|
Assert.True(commandInvoked);
|
||||||
}
|
}
|
||||||
|
|
||||||
[AvaloniaFact]
|
[AvaloniaFact]
|
||||||
public async void Paste_Should_Not_Insert_Text_When_Text_Is_In_Invalid_Mode()
|
public async void Paste_Should_Not_Insert_Text_When_Text_Is_In_Invalid_Mode()
|
||||||
{
|
{
|
||||||
var window = new Window();
|
var window = new Window();
|
||||||
|
var commandInvoked = false;
|
||||||
var pinCode = new PinCode()
|
var pinCode = new PinCode()
|
||||||
{
|
{
|
||||||
Count = 4,
|
Count = 4,
|
||||||
Mode = PinCodeMode.Digit,
|
Mode = PinCodeMode.Digit,
|
||||||
|
CompleteCommand = new RelayCommand(() => commandInvoked = true),
|
||||||
};
|
};
|
||||||
window.Content = pinCode;
|
window.Content = pinCode;
|
||||||
window.Show();
|
window.Show();
|
||||||
@@ -85,5 +97,6 @@ public class PasteTest
|
|||||||
window.KeyPressQwerty(PhysicalKey.V, RawInputModifiers.Control);
|
window.KeyPressQwerty(PhysicalKey.V, RawInputModifiers.Control);
|
||||||
await Task.Delay(1);
|
await Task.Delay(1);
|
||||||
Assert.Equal("", string.Join("", pinCode.Digits));
|
Assert.Equal("", string.Join("", pinCode.Digits));
|
||||||
|
Assert.False(commandInvoked);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user