mirror of
https://github.com/Stone-Red-Code/DesktopMagic.git
synced 2026-09-04 00:46:12 +02:00
Add customizable date format options
This commit is contained in:
@@ -4,13 +4,28 @@ using DesktopMagic.Api.Settings;
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Text;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace DesktopMagic.BuiltInPlugins;
|
||||
|
||||
internal class DatePlugin : Plugin
|
||||
internal partial class DatePlugin : Plugin
|
||||
{
|
||||
[Setting("short-date", "Short date")]
|
||||
private readonly CheckBox shortDateCheckBox = new CheckBox(true);
|
||||
[Setting("week-day-style", "Week Day Style")]
|
||||
public ComboBox weekDayStyleComboBox = new ComboBox([.. Enum.GetValues<WeekdayStyle>().Select(e => e.ToString())]);
|
||||
|
||||
[Setting("day-style", "Day Style")]
|
||||
public ComboBox dayStyleComboBox = new ComboBox([.. Enum.GetValues<DayStyle>().Select(e => e.ToString())]);
|
||||
|
||||
[Setting("month-style", "Month Style")]
|
||||
public ComboBox monthStyleComboBox = new ComboBox([.. Enum.GetValues<MonthStyle>().Select(e => e.ToString())]);
|
||||
|
||||
[Setting("year-style", "Year Style")]
|
||||
public ComboBox yearStyleComboBox = new ComboBox([.. Enum.GetValues<YearStyle>().Select(e => e.ToString())]);
|
||||
|
||||
[Setting("use-date-separators", "Use Date Separators")]
|
||||
public CheckBox useDateSeparators = new CheckBox(true);
|
||||
|
||||
private DateTime oldDateTime = DateTime.MinValue;
|
||||
private bool themeChanged = false;
|
||||
@@ -27,7 +42,64 @@ internal class DatePlugin : Plugin
|
||||
oldDateTime = DateTime.Now;
|
||||
themeChanged = false;
|
||||
|
||||
string date = shortDateCheckBox.Value ? DateTime.Now.ToShortDateString() : DateTime.Now.ToLongDateString();
|
||||
CultureInfo culture = CultureInfo.CurrentCulture;
|
||||
DateTime dateTime = DateTime.Now;
|
||||
|
||||
DateTimeFormatInfo dtf = culture.DateTimeFormat;
|
||||
|
||||
string pattern = dtf.LongDatePattern;
|
||||
|
||||
WeekdayStyle weekdayStyle = Enum.Parse<WeekdayStyle>(weekDayStyleComboBox.Value);
|
||||
DayStyle dayStyle = Enum.Parse<DayStyle>(dayStyleComboBox.Value);
|
||||
MonthStyle monthStyle = Enum.Parse<MonthStyle>(monthStyleComboBox.Value);
|
||||
YearStyle yearStyle = Enum.Parse<YearStyle>(yearStyleComboBox.Value);
|
||||
|
||||
// Weekday: ddd, dddd
|
||||
pattern = WeekdayRegex().Replace(pattern, weekdayStyle switch
|
||||
{
|
||||
WeekdayStyle.Long => "dddd",
|
||||
WeekdayStyle.Short => "ddd",
|
||||
_ => ""
|
||||
});
|
||||
|
||||
// Day: d, dd
|
||||
pattern = DayRegex().Replace(pattern, dayStyle switch
|
||||
{
|
||||
DayStyle.Numeric => "dd",
|
||||
_ => ""
|
||||
});
|
||||
|
||||
// Month: M, MM, MMM, MMMM
|
||||
pattern = MonthRegex().Replace(pattern, monthStyle switch
|
||||
{
|
||||
MonthStyle.Long => "MMMM",
|
||||
MonthStyle.Short => "MMM",
|
||||
MonthStyle.Numeric => "MM",
|
||||
_ => ""
|
||||
});
|
||||
|
||||
// Year: yy, yyyy
|
||||
pattern = YearRegex().Replace(pattern, yearStyle switch
|
||||
{
|
||||
YearStyle.FourDigit => "yyyy",
|
||||
YearStyle.TwoDigit => "yy",
|
||||
_ => ""
|
||||
});
|
||||
|
||||
// Clean up leftover punctuation/spacing
|
||||
pattern = CleanupRegex().Replace(pattern, " ").Trim();
|
||||
|
||||
if (string.IsNullOrWhiteSpace(pattern))
|
||||
{
|
||||
pattern = dtf.LongDatePattern;
|
||||
}
|
||||
|
||||
string date = dateTime.ToString(pattern, culture);
|
||||
|
||||
if (useDateSeparators.Value)
|
||||
{
|
||||
date = DateSeparatorsRegex().Replace(date, dtf.DateSeparator);
|
||||
}
|
||||
|
||||
using Font font = new Font(Application.Theme.Font, 200);
|
||||
|
||||
@@ -59,4 +131,27 @@ internal class DatePlugin : Plugin
|
||||
{
|
||||
themeChanged = true;
|
||||
}
|
||||
}
|
||||
|
||||
[GeneratedRegex(@"d{3,4}")]
|
||||
private static partial Regex WeekdayRegex();
|
||||
|
||||
[GeneratedRegex(@"\b(?<!d)d{1,2}\b")]
|
||||
private static partial Regex DayRegex();
|
||||
|
||||
[GeneratedRegex(@"M{1,4}")]
|
||||
private static partial Regex MonthRegex();
|
||||
|
||||
[GeneratedRegex(@"y{2,4}")]
|
||||
private static partial Regex YearRegex();
|
||||
|
||||
[GeneratedRegex(@"[\s,./\-]+")]
|
||||
private static partial Regex CleanupRegex();
|
||||
|
||||
[GeneratedRegex(@"(?<=\d)\s+(?=\d)")]
|
||||
private static partial Regex DateSeparatorsRegex();
|
||||
|
||||
public enum WeekdayStyle { None, Short, Long }
|
||||
public enum DayStyle { None, Numeric }
|
||||
public enum MonthStyle { None, Numeric, Short, Long }
|
||||
public enum YearStyle { None, TwoDigit, FourDigit }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user