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