diff --git a/src/Ursa/Controls/DateTimePicker/CalendarDisplayControl.cs b/src/Ursa/Controls/DateTimePicker/CalendarDisplayControl.cs index 61a0117..da45c49 100644 --- a/src/Ursa/Controls/DateTimePicker/CalendarDisplayControl.cs +++ b/src/Ursa/Controls/DateTimePicker/CalendarDisplayControl.cs @@ -31,11 +31,13 @@ public class CalendarDisplayControl: TemplatedControl private CalendarMonthView? _monthView; private CalendarYearView? _yearView; - private DatePickerState _state = DatePickerState.None; private Button? _yearButton; private Button? _monthButton; private Button? _headerButton; + public event EventHandler? OnDateSelected; + public event EventHandler? OnDatePreviewed; + public static readonly StyledProperty SelectedDateProperty = AvaloniaProperty.Register(nameof(SelectedDate), DateTime.Now); public DateTime SelectedDate @@ -164,53 +166,15 @@ public class CalendarDisplayControl: TemplatedControl _yearView?.ContextDate.Year + "-" + (_yearView?.ContextDate.Year + 10)); _yearView?.UpdateMode(CalendarYearViewMode.Year); SetCurrentValue(IsMonthModeProperty, false); - } - private void OnDatePreviewed(object sender, CalendarDayButtonEventArgs e) + private void OnMonthViewDatePreviewed(object sender, CalendarDayButtonEventArgs e) { - if(_monthView is null) - { - return; - } - var date = e.Date; - if (_state is DatePickerState.None) return; - if (_state == DatePickerState.PreviewStart) - { - _monthView.MarkPreview(date, EndDate); - } - else if (_state == DatePickerState.PreviewEnd) - { - _monthView.MarkPreview(StartDate, date); - } + OnDatePreviewed?.Invoke(sender, e); } - private void OnDateSelected(object sender, CalendarDayButtonEventArgs e) + private void OnMonthViewDateSelected(object sender, CalendarDayButtonEventArgs e) { - if(_monthView is null) - { - return; - } - var date = e.Date; - if (_state == DatePickerState.None) - { - _monthView.ClearSelection(); - _monthView.ClearPreview(); - _monthView.MarkSelection(date, null); - _state = DatePickerState.PreviewEnd; - StartDate = date; - } - else if (_state == DatePickerState.PreviewStart) - { - _monthView.MarkSelection(date, EndDate); - _state = DatePickerState.SelectStart; - StartDate = date; - } - else if (_state == DatePickerState.PreviewEnd) - { - _monthView.MarkSelection(StartDate, date); - _state = DatePickerState.None; - EndDate = date; - } + OnDateSelected?.Invoke(sender, e); } } diff --git a/src/Ursa/Controls/DateTimePicker/CalendarMonthView.cs b/src/Ursa/Controls/DateTimePicker/CalendarMonthView.cs index a10fb28..34439e0 100644 --- a/src/Ursa/Controls/DateTimePicker/CalendarMonthView.cs +++ b/src/Ursa/Controls/DateTimePicker/CalendarMonthView.cs @@ -179,43 +179,6 @@ public class CalendarMonthView : TemplatedControl if (d == startDate && d == endDate) button.IsSelected = true; } } - - [Obsolete] - public void MarkSelection(DateTime? start, DateTime? end) - { - if (_grid?.Children is null) return; - foreach (var child in _grid.Children) - if (child is CalendarDayButton { DataContext: DateTime d } button) - { - if (d.Month != _contextDate.Month) continue; - if (d == start) - { - button.IsStartDate = true; - button.IsPreviewStartDate = false; - button.IsEndDate = false; - button.IsInRange = false; - } - else if (d == end) - { - button.IsEndDate = true; - button.IsPreviewEndDate = false; - button.IsStartDate = false; - button.IsInRange = false; - } - else if (d > start && d < end) - { - button.IsInRange = true; - button.IsStartDate = false; - button.IsEndDate = false; - } - else - { - button.IsStartDate = false; - button.IsEndDate = false; - button.IsInRange = false; - } - } - } public void MarkPreview(DateTime? start, DateTime? end) { @@ -273,18 +236,4 @@ public class CalendarMonthView : TemplatedControl button.IsInRange = false; } } - - public void MarkSelection(DateTime date) - { - if (_grid?.Children is null) return; - foreach (var child in _grid.Children) - { - if (child is not CalendarDayButton { DataContext: DateTime d } button) continue; - button.IsStartDate = false; - button.IsEndDate = false; - button.IsInRange = false; - if (d.Month != _contextDate.Month) continue; - button.IsSelected = d == date; - } - } } \ No newline at end of file diff --git a/src/Ursa/Controls/DateTimePicker/DateRangePicker.cs b/src/Ursa/Controls/DateTimePicker/DateRangePicker.cs new file mode 100644 index 0000000..0564cdf --- /dev/null +++ b/src/Ursa/Controls/DateTimePicker/DateRangePicker.cs @@ -0,0 +1,8 @@ +using Avalonia.Controls.Primitives; + +namespace Ursa.Controls; + +public class DateRangePicker : TemplatedControl +{ + +} \ No newline at end of file