From d433c16314d84847f03ae024177ed027a16166ec Mon Sep 17 00:00:00 2001 From: rabbitism Date: Fri, 24 Feb 2023 18:56:54 +0800 Subject: [PATCH] feat: remove port from ip box. --- demo/Ursa.Demo/Pages/IPv4BoxDemo.axaml | 5 +- src/Ursa.Themes.Semi/Controls/IPv4Box.axaml | 35 +++++-------- src/Ursa/Controls/IPv4Box.cs | 54 ++++++--------------- 3 files changed, 29 insertions(+), 65 deletions(-) diff --git a/demo/Ursa.Demo/Pages/IPv4BoxDemo.axaml b/demo/Ursa.Demo/Pages/IPv4BoxDemo.axaml index 51f44ff..c227749 100644 --- a/demo/Ursa.Demo/Pages/IPv4BoxDemo.axaml +++ b/demo/Ursa.Demo/Pages/IPv4BoxDemo.axaml @@ -9,9 +9,8 @@ d:DesignWidth="800" mc:Ignorable="d"> - - - + + diff --git a/src/Ursa.Themes.Semi/Controls/IPv4Box.axaml b/src/Ursa.Themes.Semi/Controls/IPv4Box.axaml index 4f75b04..90e1687 100644 --- a/src/Ursa.Themes.Semi/Controls/IPv4Box.axaml +++ b/src/Ursa.Themes.Semi/Controls/IPv4Box.axaml @@ -21,11 +21,11 @@ BorderBrush="Black" BorderThickness="1" CornerRadius="3"> - + + Text="123" + TextAlignment="Center" /> + SelectionForegroundBrush="White" + TextAlignment="Center" /> - - + SelectionForegroundBrush="White" + TextAlignment="Center" /> diff --git a/src/Ursa/Controls/IPv4Box.cs b/src/Ursa/Controls/IPv4Box.cs index 9153b50..a14b3a9 100644 --- a/src/Ursa/Controls/IPv4Box.cs +++ b/src/Ursa/Controls/IPv4Box.cs @@ -15,37 +15,24 @@ namespace Ursa.Controls; [TemplatePart(PART_SecondTextPresenter, typeof(TextPresenter))] [TemplatePart(PART_ThirdTextPresenter, typeof(TextPresenter))] [TemplatePart(PART_FourthTextPresenter, typeof(TextPresenter))] -[TemplatePart(PART_PortTextPresenter, typeof(TextPresenter))] public class IPv4Box: TemplatedControl { public const string PART_FirstTextPresenter = "PART_FirstTextPresenter"; public const string PART_SecondTextPresenter = "PART_SecondTextPresenter"; public const string PART_ThirdTextPresenter = "PART_ThirdTextPresenter"; public const string PART_FourthTextPresenter = "PART_FourthTextPresenter"; - public const string PART_PortTextPresenter = "PART_PortTextPresenter"; private TextPresenter? _firstText; private TextPresenter? _secondText; private TextPresenter? _thirdText; private TextPresenter? _fourthText; - private TextPresenter? _portText; private byte _firstByte; private byte _secondByte; private byte _thirdByte; private byte _fourthByte; - private int _port; - private TextPresenter?[] _presenters = new TextPresenter?[5]; + private readonly TextPresenter?[] _presenters = new TextPresenter?[4]; private byte[] _bytes = new byte[4]; private TextPresenter? _currentActivePresenter; - public static readonly StyledProperty ShowPortProperty = AvaloniaProperty.Register( - nameof(ShowPort)); - - public bool ShowPort - { - get => GetValue(ShowPortProperty); - set => SetValue(ShowPortProperty, value); - } - public static readonly StyledProperty IPAddressProperty = AvaloniaProperty.Register( nameof(IPAddress)); @@ -54,15 +41,6 @@ public class IPv4Box: TemplatedControl get => GetValue(IPAddressProperty); set => SetValue(IPAddressProperty, value); } - - public static readonly StyledProperty PortProperty = AvaloniaProperty.Register( - nameof(Port)); - - public int Port - { - get => GetValue(PortProperty); - set => SetValue(PortProperty, value); - } protected override void OnApplyTemplate(TemplateAppliedEventArgs e) { @@ -71,12 +49,10 @@ public class IPv4Box: TemplatedControl _secondText = e.NameScope.Find(PART_SecondTextPresenter); _thirdText = e.NameScope.Find(PART_ThirdTextPresenter); _fourthText = e.NameScope.Find(PART_FourthTextPresenter); - _portText = e.NameScope.Find(PART_PortTextPresenter); - _presenters[0] = _portText; - _presenters[1] = _firstText; - _presenters[2] = _secondText; - _presenters[3] = _thirdText; - _presenters[4] = _fourthText; + _presenters[0] = _firstText; + _presenters[1] = _secondText; + _presenters[2] = _thirdText; + _presenters[3] = _fourthText; } protected override void OnKeyDown(KeyEventArgs e) @@ -238,6 +214,10 @@ public class IPv4Box: TemplatedControl ClearSelection(pre); } _currentActivePresenter = null; + _firstByte = byte.TryParse(_firstText?.Text, out byte b1) ? b1 : (byte)0; + _secondByte = byte.TryParse(_secondText?.Text, out byte b2) ? b2 : (byte)0; + _thirdByte = byte.TryParse(_thirdText?.Text, out byte b3) ? b3 : (byte)0; + _fourthByte = byte.TryParse(_fourthText?.Text, out byte b4) ? b4 : (byte)0; SetIPAddress(); } @@ -254,13 +234,6 @@ public class IPv4Box: TemplatedControl if (Equals(presenter, _firstText)) _currentActivePresenter = _secondText; else if (Equals(presenter, _secondText)) _currentActivePresenter = _thirdText; else if (Equals(presenter, _thirdText)) _currentActivePresenter = _fourthText; - else if (Equals(presenter, _fourthText)) - { - if (ShowPort) - { - _currentActivePresenter = _portText; - } - } if(selectAllAfterMove) SelectAll(_currentActivePresenter); } @@ -268,8 +241,7 @@ public class IPv4Box: TemplatedControl { if (presenter is null) return false; if (Equals(presenter, _firstText)) return false; - if (Equals(presenter, _portText)) _currentActivePresenter = _fourthText; - else if (Equals(presenter, _fourthText)) _currentActivePresenter = _thirdText; + if (Equals(presenter, _fourthText)) _currentActivePresenter = _thirdText; else if (Equals(presenter, _thirdText)) _currentActivePresenter = _secondText; else if (Equals(presenter, _secondText)) _currentActivePresenter = _firstText; return true; @@ -300,7 +272,13 @@ public class IPv4Box: TemplatedControl var oldText = presenter.Text; if (string.IsNullOrWhiteSpace(oldText)) { + presenter.HideCaret(); MoveToPreviousTextPresenter(presenter); + if (_currentActivePresenter != null) + { + _currentActivePresenter.ShowCaret(); + _currentActivePresenter.CaretIndex = _currentActivePresenter.Text?.Length ?? 0; + } return; } int index = presenter.CaretIndex;