perspective_viewer/config/
number_column_style.rs1use std::str::FromStr;
14
15use serde::{Deserialize, Serialize};
16use strum::{Display, EnumIter};
17use ts_rs::TS;
18
19#[derive(
20 Clone, Copy, Debug, Default, Deserialize, Display, EnumIter, Eq, PartialEq, Serialize, TS,
21)]
22pub enum NumberForegroundMode {
23 #[serde(rename = "disabled")]
24 Disabled,
25
26 #[default]
27 #[serde(rename = "color")]
28 Color,
29
30 #[serde(rename = "bar")]
31 Bar,
32
33 #[serde(rename = "label-bar")]
34 LabelBar,
35}
36
37impl FromStr for NumberForegroundMode {
38 type Err = String;
39
40 fn from_str(s: &str) -> Result<Self, Self::Err> {
41 match s {
42 "color" => Ok(Self::Color),
43 "bar" => Ok(Self::Bar),
44 "label-bar" => Ok(Self::LabelBar),
45 x => Err(format!("Unknown NumberForegroundMode::{x}")),
46 }
47 }
48}
49
50impl NumberForegroundMode {
51 fn is_color(&self) -> bool {
52 *self == Self::Color
53 }
54
55 pub fn is_enabled(&self) -> bool {
56 *self != Self::Disabled
57 }
58
59 pub fn needs_gradient(&self) -> bool {
60 *self == Self::Bar || *self == Self::LabelBar
61 }
62}
63
64#[derive(
65 Clone, Copy, Debug, Default, Deserialize, Display, EnumIter, Eq, PartialEq, Serialize, TS,
66)]
67pub enum NumberBackgroundMode {
68 #[default]
69 #[serde(rename = "disabled")]
70 Disabled,
71
72 #[serde(rename = "color")]
73 Color,
74
75 #[serde(rename = "gradient")]
76 Gradient,
77
78 #[serde(rename = "pulse")]
79 Pulse,
80}
81
82impl NumberBackgroundMode {
83 pub fn is_disabled(&self) -> bool {
84 *self == Self::Disabled
85 }
86
87 pub fn needs_gradient(&self) -> bool {
88 *self == Self::Gradient
89 }
90}
91
92#[derive(Serialize, Deserialize, Clone, Default, Debug, PartialEq, TS)]
93pub struct NumberColumnStyleConfig {
94 #[serde(default = "NumberForegroundMode::default")]
95 #[serde(skip_serializing_if = "NumberForegroundMode::is_color")]
96 pub number_fg_mode: NumberForegroundMode,
97
98 #[serde(default = "NumberBackgroundMode::default")]
99 #[serde(skip_serializing_if = "NumberBackgroundMode::is_disabled")]
100 pub number_bg_mode: NumberBackgroundMode,
101
102 #[serde(skip_serializing_if = "Option::is_none")]
103 pub pos_fg_color: Option<String>,
104
105 #[serde(skip_serializing_if = "Option::is_none")]
106 pub neg_fg_color: Option<String>,
107
108 #[serde(skip_serializing_if = "Option::is_none")]
109 pub pos_bg_color: Option<String>,
110
111 #[serde(skip_serializing_if = "Option::is_none")]
112 pub neg_bg_color: Option<String>,
113
114 #[serde(skip_serializing_if = "Option::is_none")]
115 pub fg_gradient: Option<f64>,
116
117 #[serde(skip_serializing_if = "Option::is_none")]
118 pub bg_gradient: Option<f64>,
119}
120
121#[derive(Serialize, Deserialize, Clone, Default, Debug, PartialEq)]
127pub struct NumberColumnStyleDefaultConfig {
128 pub fg_gradient: f64,
129 pub bg_gradient: f64,
130 pub pos_fg_color: String,
131 pub neg_fg_color: String,
132 pub pos_bg_color: String,
133 pub neg_bg_color: String,
134 pub number_fg_mode: NumberForegroundMode,
135 pub number_bg_mode: NumberBackgroundMode,
136}