use super::Theme;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub enum ThemePreset {
#[default]
Classic,
Dark,
Light,
Midnight,
HighContrast,
}
impl ThemePreset {
pub fn all() -> &'static [ThemePreset] {
&[
ThemePreset::Classic,
ThemePreset::Dark,
ThemePreset::Light,
ThemePreset::Midnight,
ThemePreset::HighContrast,
]
}
pub fn name(&self) -> &'static str {
match self {
ThemePreset::Classic => "classic",
ThemePreset::Dark => "dark",
ThemePreset::Light => "light",
ThemePreset::Midnight => "midnight",
ThemePreset::HighContrast => "high_contrast",
}
}
pub fn display_name(&self) -> &'static str {
match self {
ThemePreset::Classic => "Classic",
ThemePreset::Dark => "Dark",
ThemePreset::Light => "Light",
ThemePreset::Midnight => "Midnight",
ThemePreset::HighContrast => "High Contrast",
}
}
pub fn from_name(name: &str) -> Option<Self> {
match name.to_lowercase().as_str() {
"classic" => Some(ThemePreset::Classic),
"dark" => Some(ThemePreset::Dark),
"light" => Some(ThemePreset::Light),
"midnight" => Some(ThemePreset::Midnight),
"high_contrast" | "highcontrast" => Some(ThemePreset::HighContrast),
_ => None,
}
}
pub fn is_dark_ui(&self) -> bool {
matches!(
self,
ThemePreset::Dark | ThemePreset::Midnight | ThemePreset::HighContrast
)
}
pub fn is_dark_chart(&self) -> bool {
!matches!(self, ThemePreset::Light)
}
pub fn to_theme(self) -> Theme {
Theme::from_preset(self)
}
}