From 94b788a5ef775560db1979526ab41fd71136af37 Mon Sep 17 00:00:00 2001 From: rabbitism Date: Sun, 23 Jun 2024 13:39:46 +0800 Subject: [PATCH] feat: remove useless code. --- .../DateTimePicker/CalendarMonthView.cs | 232 ------------------ .../DateTimePicker/CalendarYearView.cs | 121 --------- .../DateTimePicker/DatePickerState.cs | 11 - 3 files changed, 364 deletions(-) delete mode 100644 src/Ursa/Controls/DateTimePicker/CalendarMonthView.cs delete mode 100644 src/Ursa/Controls/DateTimePicker/CalendarYearView.cs delete mode 100644 src/Ursa/Controls/DateTimePicker/DatePickerState.cs diff --git a/src/Ursa/Controls/DateTimePicker/CalendarMonthView.cs b/src/Ursa/Controls/DateTimePicker/CalendarMonthView.cs deleted file mode 100644 index b8b1235..0000000 --- a/src/Ursa/Controls/DateTimePicker/CalendarMonthView.cs +++ /dev/null @@ -1,232 +0,0 @@ -using System.Globalization; -using Avalonia; -using Avalonia.Controls; -using Avalonia.Controls.Metadata; -using Avalonia.Controls.Primitives; -using Avalonia.Input; -using Avalonia.Layout; - -namespace Ursa.Controls; - -/* -/// -/// Show days in a month. CalendarMonthView itself doesn't handle any date range selection logic. -/// it provides a method to mark preview range and selection range. The range limit may out of current displayed month. -/// -[TemplatePart(PART_Grid, typeof(Grid))] -public class CalendarMonthView : TemplatedControl -{ - public const string PART_Grid = "PART_Grid"; - private const string ShortestDayName = "ShortestDayName"; - - public static readonly StyledProperty FirstDayOfWeekProperty = - DatePickerBase.FirstDayOfWeekProperty.AddOwner(); - - private readonly System.Globalization.Calendar _calendar = new GregorianCalendar(); - - private DateTime _contextDate = DateTime.Today; - - private Grid? _grid; - - static CalendarMonthView() - { - FirstDayOfWeekProperty.Changed.AddClassHandler((view, args) => - view.OnDayOfWeekChanged(args)); - } - - internal CalendarView? Owner { get; set; } - - /// - /// The DateTime used to generate the month view. This date will be within the month. - /// - public DateTime ContextDate - { - get => _contextDate; - set => _contextDate = value; - // GenerateGridElements(); - } - - public DayOfWeek FirstDayOfWeek - { - get => GetValue(FirstDayOfWeekProperty); - set => SetValue(FirstDayOfWeekProperty, value); - } - - protected override void OnApplyTemplate(TemplateAppliedEventArgs e) - { - base.OnApplyTemplate(e); - _grid = e.NameScope.Find(PART_Grid); - GenerateGridElements(); - SetDayButtons(ContextDate); - } - - private void OnDayOfWeekChanged(AvaloniaPropertyChangedEventArgs args) - { - // throw new NotImplementedException(); - UpdateGridElements(); - SetDayButtons(ContextDate); - } - - - private void GenerateGridElements() - { - // Generate Day titles (Sun, Mon, Tue, Wed, Thu, Fri, Sat) based on FirstDayOfWeek and culture. - var count = 7 + 7 * 7; - var children = new List(count); - var dayOfWeek = (int)FirstDayOfWeek; - var info = DateTimeHelper.GetCurrentDateTimeFormatInfo(); - for (var i = 0; i < 7; i++) - { - var d = (dayOfWeek + i) % DateTimeHelper.NumberOfDaysPerWeek; - var cell = new TextBlock { Text = info.ShortestDayNames[d], Tag = ShortestDayName }; - cell.SetValue(HorizontalAlignmentProperty, HorizontalAlignment.Center); - cell.SetValue(Grid.RowProperty, 0); - cell.SetValue(Grid.ColumnProperty, i); - children.Add(cell); - } - - // Generate day buttons. - for (var i = 2; i < DateTimeHelper.NumberOfWeeksPerMonth + 2; i++) - for (var j = 0; j < DateTimeHelper.NumberOfDaysPerWeek; j++) - { - var cell = new CalendarDayButton(); - cell.SetValue(Grid.RowProperty, i); - cell.SetValue(Grid.ColumnProperty, j); - cell.AddHandler(CalendarDayButton.DateSelectedEvent, OnCellDateSelected); - cell.AddHandler(CalendarDayButton.DatePreviewedEvent, OnCellDatePreviewed); - children.Add(cell); - } - - _grid?.Children.AddRange(children); - } - - private void UpdateGridElements() - { - var count = 7 + 7 * 7; - // var children = new List(count); - var dayOfWeek = (int)FirstDayOfWeek; - var info = DateTimeHelper.GetCurrentDateTimeFormatInfo(); - var textblocks = _grid?.Children.Where(a => a is TextBlock { Tag: ShortestDayName }).ToList(); - if (textblocks is not null) - { - for (var i = 0; i < 7; i++) - { - var d = (dayOfWeek + i) % DateTimeHelper.NumberOfDaysPerWeek; - textblocks[i].SetValue(TextBlock.TextProperty, info.ShortestDayNames[d]); - textblocks[i].SetValue(HorizontalAlignmentProperty, HorizontalAlignment.Center); - textblocks[i].SetValue(Grid.RowProperty, 0); - textblocks[i].SetValue(Grid.ColumnProperty, i); - } - } - SetDayButtons(ContextDate); - } - - private void OnCellDatePreviewed(object sender, CalendarDayButtonEventArgs e) - { - OnDatePreviewed?.Invoke(sender, e); - } - - private void OnCellDateSelected(object sender, CalendarDayButtonEventArgs e) - { - OnDateSelected?.Invoke(sender, e); - } - - - /// - /// Set day buttons according to context date. - /// - /// - private void SetDayButtons(DateTime date) - { - if (_grid is null) return; - var children = _grid.Children; - var info = DateTimeHelper.GetCurrentDateTimeFormatInfo(); - var dayBefore = PreviousMonthDays(date); - var dateToSet = date.GetFirstDayOfMonth().AddDays(-dayBefore); - for (var i = 8; i < children.Count; i++) - { - var day = dateToSet; - var cell = children[i] as CalendarDayButton; - if (cell is null) continue; - cell.DataContext = day; - cell.IsToday = day == DateTime.Today; - cell.Content = day.Day.ToString(info); - dateToSet = dateToSet.AddDays(1); - } - - FadeOutDayButtons(); - } - - private int PreviousMonthDays(DateTime date) - { - var firstDay = date.GetFirstDayOfMonth(); - var dayOfWeek = _calendar.GetDayOfWeek(firstDay); - var firstDayOfWeek = FirstDayOfWeek; - var i = (dayOfWeek - firstDayOfWeek + DateTimeHelper.NumberOfDaysPerWeek) % DateTimeHelper.NumberOfDaysPerWeek; - return i == 0 ? DateTimeHelper.NumberOfDaysPerWeek : i; - } - - /// - /// Make days out of current month fade out. These buttons are not disabled. They are just visually faded out. - /// - private void FadeOutDayButtons() - { - if (_grid is null) return; - var children = _grid.Children; - for (var i = 8; i < children.Count; i++) - if (children[i] is CalendarDayButton { DataContext: DateTime d } button && d.Month != _contextDate.Month) - button.IsNotCurrentMonth = true; - } - - public event EventHandler? OnDateSelected; - public event EventHandler? OnDatePreviewed; - - public void MarkDates(DateTime? startDate = null, DateTime? endDate = null, DateTime? previewStartDate = null, DateTime? previewEndDate = null) - { - if (_grid?.Children is null) return; - DateTime start = startDate ?? DateTime.MaxValue; - DateTime end = endDate ?? DateTime.MinValue; - DateTime previewStart = previewStartDate ?? DateTime.MaxValue; - DateTime previewEnd = previewEndDate ?? DateTime.MinValue; - DateTime rangeStart = DateTimeHelper.Min(start, previewStart); - DateTime rangeEnd = DateTimeHelper.Max(end, previewEnd); - foreach (var child in _grid.Children) - { - if (child is not CalendarDayButton { DataContext: DateTime d } button) continue; - if(d.Month != _contextDate.Month) continue; - button.ResetSelection(); - if (d < rangeEnd && d > rangeStart) button.IsInRange = true; - if (d == previewStart) button.IsPreviewStartDate = true; - if (d == previewEnd) button.IsPreviewEndDate = true; - if (d == startDate) button.IsStartDate = true; - if (d == endDate) button.IsEndDate = true; - if (d == startDate && d == endDate) button.IsSelected = true; - } - } - - public void ClearSelection() - { - if (_grid?.Children is null) return; - foreach (var child in _grid.Children) - { - if (child is not CalendarDayButton button) continue; - button.IsStartDate = false; - button.IsEndDate = false; - button.IsInRange = false; - } - } - - public void ClearPreview() - { - if (_grid?.Children is null) return; - foreach (var child in _grid.Children) - { - if (child is not CalendarDayButton button) continue; - button.IsPreviewStartDate = false; - button.IsPreviewEndDate = false; - button.IsInRange = false; - } - } -} - -*/ \ No newline at end of file diff --git a/src/Ursa/Controls/DateTimePicker/CalendarYearView.cs b/src/Ursa/Controls/DateTimePicker/CalendarYearView.cs deleted file mode 100644 index e2f0689..0000000 --- a/src/Ursa/Controls/DateTimePicker/CalendarYearView.cs +++ /dev/null @@ -1,121 +0,0 @@ -using Avalonia.Controls; -using Avalonia.Controls.Documents; -using Avalonia.Controls.Metadata; -using Avalonia.Controls.Primitives; -using Irihi.Avalonia.Shared.Helpers; - -namespace Ursa.Controls; - -/* -/// -/// Three modes: -/// 1. show 12 months in a year -/// 2. show 12 years, one year per button (but only 10 buttons clickable) -/// 3. show 120 years, ten year per button (but only 10 buttons clickable) -/// -[TemplatePart(PART_Grid, typeof(Grid))] -public class CalendarYearView: TemplatedControl -{ - public const string PART_Grid = "PART_Grid"; - private readonly CalendarYearButton[] _buttons = new CalendarYearButton[12]; - - public event EventHandler? OnMonthSelected; - - internal CalendarViewMode Mode { get; set; } = CalendarViewMode.Month; - internal DateTime ContextDate { get; set; } = DateTime.Today; - - private Grid? _grid; - protected override void OnApplyTemplate(TemplateAppliedEventArgs e) - { - ContextDate = DateTime.Today; - base.OnApplyTemplate(e); - _grid = e.NameScope.Find(PART_Grid); - GenerateGridElements(); - RefreshButtons(); - } - - public void GenerateGridElements() - { - if (_grid is null) - { - return; - } - _grid.Children.Clear(); - for (var i = 0; i < 12; i++) - { - var button = new CalendarYearButton(); - Grid.SetRow(button, i / 3); - Grid.SetColumn(button, i % 3); - button.AddHandler(CalendarYearButton.ItemSelectedEvent, OnItemSelected); - _grid.Children.Add(button); - _buttons[i] = button; - } - } - - private void OnItemSelected(object sender, CalendarYearButtonEventArgs e) - { - if (_grid is null) return; - var buttons = _grid.Children.OfType().ToList(); - if (e.Mode == CalendarViewMode.Month) - { - if (e.Month is null) return; - var day = MathHelpers.SafeClamp(e.Month.Value, 0, DateTime.DaysInMonth(ContextDate.Year, e.Month.Value+1)); - ContextDate = new DateTime(ContextDate.Year, e.Month.Value+1, day+1); - OnMonthSelected?.Invoke(this, e); - } - else if (e.Mode == CalendarViewMode.Year) - { - // Set CalendarYearView to Month mode - for (var i = 0; i < 12; i++) - { - buttons[i].SetValues(CalendarViewMode.Month, month: i); - } - ContextDate = new DateTime(e.Year!.Value, ContextDate.Month, 1); - Mode = CalendarViewMode.Month; - } - else if (e.Mode == CalendarViewMode.Decade) - { - // Set CalendarYearView to Year mode - for (var i = 0; i < 12; i++) - { - if (e.StartYear is null || e.EndYear is null) continue; - var year = e.StartYear.Value - 1 + i; - buttons[i].SetValues(CalendarViewMode.Year, year: year); - } - Mode = CalendarViewMode.Year; - } - } - - private void RefreshButtons() - { - if (_grid is null) return; - var mode = Mode; - var contextDate = ContextDate; - for (var i = 0; i < 12; i++) - { - var child = _grid.Children[i] as CalendarYearButton; - if (child is null) continue; - switch (mode) - { - case CalendarViewMode.Month: - child.SetValues(CalendarViewMode.Month, month: i); - break; - case CalendarViewMode.Year: - child.SetValues(CalendarViewMode.Year, year: ContextDate.Year / 10 * 10 + i - 1); - break; - case CalendarViewMode.Decade: - var startYear = (ContextDate.Year / 10 + i - 1) * 10; - var endYear = (ContextDate.Year / 10 + i - 1) * 10 + 10; - child.SetValues(CalendarViewMode.Decade, startYear: startYear, endYear: endYear); - break; - } - } - } - - internal void UpdateMode(CalendarViewMode mode) - { - Mode = mode; - RefreshButtons(); - } -} -*/ \ No newline at end of file diff --git a/src/Ursa/Controls/DateTimePicker/DatePickerState.cs b/src/Ursa/Controls/DateTimePicker/DatePickerState.cs deleted file mode 100644 index fec187f..0000000 --- a/src/Ursa/Controls/DateTimePicker/DatePickerState.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Ursa.Controls; - -public enum DatePickerState -{ - None, - SelectSingle, - SelectStart, - SelectEnd, - PreviewStart, - PreviewEnd, -} \ No newline at end of file