mirror of
https://github.com/Stone-Red-Code/DesktopMagic.git
synced 2026-09-04 08:56:15 +02:00
Add customizable date format options
This commit is contained in:
@@ -4,13 +4,28 @@ using DesktopMagic.Api.Settings;
|
|||||||
using System;
|
using System;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Drawing.Text;
|
using System.Drawing.Text;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
namespace DesktopMagic.BuiltInPlugins;
|
namespace DesktopMagic.BuiltInPlugins;
|
||||||
|
|
||||||
internal class DatePlugin : Plugin
|
internal partial class DatePlugin : Plugin
|
||||||
{
|
{
|
||||||
[Setting("short-date", "Short date")]
|
[Setting("week-day-style", "Week Day Style")]
|
||||||
private readonly CheckBox shortDateCheckBox = new CheckBox(true);
|
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 DateTime oldDateTime = DateTime.MinValue;
|
||||||
private bool themeChanged = false;
|
private bool themeChanged = false;
|
||||||
@@ -27,7 +42,64 @@ internal class DatePlugin : Plugin
|
|||||||
oldDateTime = DateTime.Now;
|
oldDateTime = DateTime.Now;
|
||||||
themeChanged = false;
|
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);
|
using Font font = new Font(Application.Theme.Font, 200);
|
||||||
|
|
||||||
@@ -59,4 +131,27 @@ internal class DatePlugin : Plugin
|
|||||||
{
|
{
|
||||||
themeChanged = true;
|
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