Files
Ursa.Avalonia/src/Ursa/Controls/DateTimePicker/CalendarContext.cs
2024-06-25 23:45:32 +08:00

85 lines
2.1 KiB
C#

namespace Ursa.Controls;
public sealed class CalendarContext(int? year = null, int? month = null, int? startYear = null, int? endYear = null): IComparable<CalendarContext>
{
public int? Year { get; } = year;
public int? Month { get; } = month;
public int? StartYear { get; } = startYear;
public int? EndYear { get; } = endYear;
public CalendarContext Clone()
{
return new CalendarContext(Year, Month, StartYear, EndYear);
}
public static CalendarContext Today()
{
return new CalendarContext(DateTime.Today.Year, DateTime.Today.Month);
}
public CalendarContext With(int? year = null, int? month = null, int? startYear = null, int? endYear = null)
{
return new CalendarContext(year ?? Year, month ?? Month, startYear ?? StartYear, endYear ?? EndYear);
}
public CalendarContext NextMonth()
{
var year = Year;
var month = Month;
if (month == 12)
{
year++;
month = 1;
}
else
{
month++;
}
if (month is null)
{
month = 1;
}
return new CalendarContext(year, month, StartYear, EndYear);
}
public CalendarContext PreviousMonth()
{
var year = Year;
var month = Month;
if (month == 1)
{
year--;
month = 12;
}
else
{
month--;
}
if (month is null)
{
month = 1;
}
return new CalendarContext(year, month, StartYear, EndYear);
}
public CalendarContext NextYear()
{
return new CalendarContext(Year + 1, Month, StartYear, EndYear);
}
public CalendarContext PreviousYear()
{
return new CalendarContext(Year - 1, Month, StartYear, EndYear);
}
public int CompareTo(CalendarContext? other)
{
if (ReferenceEquals(this, other)) return 0;
if (ReferenceEquals(null, other)) return 1;
var yearComparison = Nullable.Compare(Year, other.Year);
if (yearComparison != 0) return yearComparison;
return Nullable.Compare(Month, other.Month);
}
}