fix: fix various nullable reference issue.
This commit is contained in:
@@ -5,11 +5,9 @@ using Avalonia.Controls.Presenters;
|
|||||||
using Avalonia.Controls.Primitives;
|
using Avalonia.Controls.Primitives;
|
||||||
using Avalonia.Data;
|
using Avalonia.Data;
|
||||||
using Avalonia.Input;
|
using Avalonia.Input;
|
||||||
using Avalonia.Input.Raw;
|
|
||||||
using Avalonia.Interactivity;
|
using Avalonia.Interactivity;
|
||||||
using Avalonia.Media;
|
using Avalonia.Media;
|
||||||
using Avalonia.Media.TextFormatting;
|
using Avalonia.Media.TextFormatting;
|
||||||
using Avalonia.Metadata;
|
|
||||||
using Irihi.Avalonia.Shared.Helpers;
|
using Irihi.Avalonia.Shared.Helpers;
|
||||||
|
|
||||||
namespace Ursa.Controls;
|
namespace Ursa.Controls;
|
||||||
@@ -70,11 +68,11 @@ public class TimeBox : TemplatedControl
|
|||||||
private readonly Border[] _borders = new Border[4];
|
private readonly Border[] _borders = new Border[4];
|
||||||
private readonly Panel[] _dragPanels = new Panel[4];
|
private readonly Panel[] _dragPanels = new Panel[4];
|
||||||
private readonly int[] _limits = new[] { 24, 60, 60, 100 };
|
private readonly int[] _limits = new[] { 24, 60, 60, 100 };
|
||||||
private int[] _values = new[] { 0, 0, 0, 0 };
|
private readonly int[] _values = new[] { 0, 0, 0, 0 };
|
||||||
private bool[] _isShowedCaret = new[] { false, false, false, false };
|
private readonly bool[] _isShowedCaret = new[] { false, false, false, false };
|
||||||
private int? _currentActiveSectionIndex;
|
private int? _currentActiveSectionIndex;
|
||||||
private bool _isAlreadyDrag = false;
|
private bool _isAlreadyDrag;
|
||||||
private Point _pressedPosition = new Point();
|
private Point _pressedPosition;
|
||||||
private Point? _lastDragPoint;
|
private Point? _lastDragPoint;
|
||||||
|
|
||||||
public static readonly StyledProperty<TimeSpan?> TimeProperty = AvaloniaProperty.Register<TimeBox, TimeSpan?>(
|
public static readonly StyledProperty<TimeSpan?> TimeProperty = AvaloniaProperty.Register<TimeBox, TimeSpan?>(
|
||||||
@@ -172,7 +170,7 @@ public class TimeBox : TemplatedControl
|
|||||||
{
|
{
|
||||||
ShowLeadingZeroProperty.Changed.AddClassHandler<TimeBox>((o, e) => o.OnFormatChange(e));
|
ShowLeadingZeroProperty.Changed.AddClassHandler<TimeBox>((o, e) => o.OnFormatChange(e));
|
||||||
TimeProperty.Changed.AddClassHandler<TimeBox>((o, e) => o.OnTimeChanged(e));
|
TimeProperty.Changed.AddClassHandler<TimeBox>((o, e) => o.OnTimeChanged(e));
|
||||||
AllowDragProperty.Changed.AddClassHandler<TimeBox, bool>((o, e) => o.OnAllowDragChange(e));
|
AllowDragProperty.Changed.AddClassHandler<TimeBox, bool>((o, e) => o.OnAllowDragChanged(e));
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Overrides
|
#region Overrides
|
||||||
@@ -205,7 +203,7 @@ public class TimeBox : TemplatedControl
|
|||||||
_dragPanels[1] = _minuteDragPanel;
|
_dragPanels[1] = _minuteDragPanel;
|
||||||
_dragPanels[2] = _secondDragPanel;
|
_dragPanels[2] = _secondDragPanel;
|
||||||
_dragPanels[3] = _milliSecondDragPanel;
|
_dragPanels[3] = _milliSecondDragPanel;
|
||||||
IsVisibleProperty.SetValue(AllowDrag, _dragPanels);
|
IsVisibleProperty.SetValue(AllowDrag, _dragPanels[0], _dragPanels[1], _dragPanels[2], _dragPanels[3]);
|
||||||
|
|
||||||
_hourText.Text = Time != null ? Time.Value.Hours.ToString() : "0";
|
_hourText.Text = Time != null ? Time.Value.Hours.ToString() : "0";
|
||||||
_minuteText.Text = Time != null ? Time.Value.Minutes.ToString() : "0";
|
_minuteText.Text = Time != null ? Time.Value.Minutes.ToString() : "0";
|
||||||
@@ -213,7 +211,7 @@ public class TimeBox : TemplatedControl
|
|||||||
_milliSecondText.Text = Time != null ? ClampMilliSecond(Time.Value.Milliseconds).ToString() : "0";
|
_milliSecondText.Text = Time != null ? ClampMilliSecond(Time.Value.Milliseconds).ToString() : "0";
|
||||||
ParseTimeSpan(ShowLeadingZero);
|
ParseTimeSpan(ShowLeadingZero);
|
||||||
|
|
||||||
PointerMovedEvent.AddHandler(OnDragPanelPointerMoved, _dragPanels);
|
PointerMovedEvent.AddHandler(OnDragPanelPointerMoved, _dragPanels[0], _dragPanels[1], _dragPanels[2], _dragPanels[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnKeyDown(KeyEventArgs e)
|
protected override void OnKeyDown(KeyEventArgs e)
|
||||||
@@ -267,7 +265,7 @@ public class TimeBox : TemplatedControl
|
|||||||
if (_currentActiveSectionIndex is null) return;
|
if (_currentActiveSectionIndex is null) return;
|
||||||
|
|
||||||
int caretIndex = Math.Min(_presenters[_currentActiveSectionIndex.Value].CaretIndex
|
int caretIndex = Math.Min(_presenters[_currentActiveSectionIndex.Value].CaretIndex
|
||||||
, _presenters[_currentActiveSectionIndex.Value].Text.Length);
|
, _presenters[_currentActiveSectionIndex.Value].Text?.Length ?? 0);
|
||||||
|
|
||||||
if (_presenters[_currentActiveSectionIndex.Value].Text is null)
|
if (_presenters[_currentActiveSectionIndex.Value].Text is null)
|
||||||
{
|
{
|
||||||
@@ -278,7 +276,7 @@ public class TimeBox : TemplatedControl
|
|||||||
{
|
{
|
||||||
_presenters[_currentActiveSectionIndex.Value].DeleteSelection();
|
_presenters[_currentActiveSectionIndex.Value].DeleteSelection();
|
||||||
_presenters[_currentActiveSectionIndex.Value].ClearSelection();
|
_presenters[_currentActiveSectionIndex.Value].ClearSelection();
|
||||||
string oldText = _presenters[_currentActiveSectionIndex.Value].Text;
|
string oldText = _presenters[_currentActiveSectionIndex.Value].Text ?? string.Empty;
|
||||||
string newText = oldText.Length == 0
|
string newText = oldText.Length == 0
|
||||||
? s
|
? s
|
||||||
: oldText.Substring(0, caretIndex) + s + oldText.Substring(Math.Min(caretIndex, oldText.Length));
|
: oldText.Substring(0, caretIndex) + s + oldText.Substring(Math.Min(caretIndex, oldText.Length));
|
||||||
@@ -354,9 +352,9 @@ public class TimeBox : TemplatedControl
|
|||||||
ParseTimeSpan(showLeadingZero);
|
ParseTimeSpan(showLeadingZero);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnAllowDragChange(AvaloniaPropertyChangedEventArgs<bool> args)
|
private void OnAllowDragChanged(AvaloniaPropertyChangedEventArgs<bool> args)
|
||||||
{
|
{
|
||||||
IsVisibleProperty.SetValue(args.NewValue.Value, _dragPanels);
|
IsVisibleProperty.SetValue(args.NewValue.Value, _dragPanels[0], _dragPanels[1], _dragPanels[2], _dragPanels[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnTimeChanged(AvaloniaPropertyChangedEventArgs arg)
|
private void OnTimeChanged(AvaloniaPropertyChangedEventArgs arg)
|
||||||
@@ -390,18 +388,18 @@ public class TimeBox : TemplatedControl
|
|||||||
|
|
||||||
if (!skipParseFromText)
|
if (!skipParseFromText)
|
||||||
{
|
{
|
||||||
_values[0] = int.TryParse(_hourText.Text, out int hour) ? hour : 0;
|
_values[0] = int.TryParse(_hourText?.Text, out int hour) ? hour : 0;
|
||||||
_values[1] = int.TryParse(_minuteText.Text, out int minute) ? minute : 0;
|
_values[1] = int.TryParse(_minuteText?.Text, out int minute) ? minute : 0;
|
||||||
_values[2] = int.TryParse(_secondText.Text, out int second) ? second : 0;
|
_values[2] = int.TryParse(_secondText?.Text, out int second) ? second : 0;
|
||||||
_values[3] = int.TryParse(_milliSecondText.Text, out int millisecond) ? millisecond : 0;
|
_values[3] = int.TryParse(_milliSecondText?.Text, out int millisecond) ? millisecond : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
VerifyTimeValue();
|
VerifyTimeValue();
|
||||||
|
|
||||||
_hourText.Text = _values[0].ToString(format);
|
_hourText?.SetValue(TextPresenter.TextProperty,_values[0].ToString(format));
|
||||||
_minuteText.Text = _values[1].ToString(format);
|
_minuteText?.SetValue(TextPresenter.TextProperty,_values[1].ToString(format));
|
||||||
_secondText.Text = _values[2].ToString(format);
|
_secondText?.SetValue(TextPresenter.TextProperty,_values[2].ToString(format));
|
||||||
_milliSecondText.Text = _values[3].ToString(format);
|
_milliSecondText?.SetValue(TextPresenter.TextProperty,_values[3].ToString(format));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDragPanelPointerMoved(object sender, PointerEventArgs e)
|
private void OnDragPanelPointerMoved(object sender, PointerEventArgs e)
|
||||||
@@ -454,7 +452,7 @@ public class TimeBox : TemplatedControl
|
|||||||
if(index < 0 || index > 3) return;
|
if(index < 0 || index > 3) return;
|
||||||
if (!_isShowedCaret[index])
|
if (!_isShowedCaret[index])
|
||||||
{
|
{
|
||||||
if (AllowDrag && _dragPanels[index] != null)
|
if (AllowDrag)
|
||||||
_dragPanels[index].IsVisible = false;
|
_dragPanels[index].IsVisible = false;
|
||||||
_presenters[index].ShowCaret();
|
_presenters[index].ShowCaret();
|
||||||
_isShowedCaret[index] = true;
|
_isShowedCaret[index] = true;
|
||||||
@@ -479,7 +477,7 @@ public class TimeBox : TemplatedControl
|
|||||||
_isShowedCaret[index] = false;
|
_isShowedCaret[index] = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (AllowDrag && _dragPanels[index] != null)
|
if (AllowDrag)
|
||||||
_dragPanels[index].IsVisible = true;
|
_dragPanels[index].IsVisible = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user