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
34impl FromStr for NumberForegroundMode {
35 type Err = String;
36
37 fn from_str(s: &str) -> Result<Self, Self::Err> {
38 match s {
39 "color" => Ok(Self::Color),
40 "bar" => Ok(Self::Bar),
41 x => Err(format!("Unknown NumberForegroundMode::{x}")),
42 }
43 }
44}
45
46impl NumberForegroundMode {
47 fn is_color(&self) -> bool {
48 *self == Self::Color
49 }
50
51 pub fn is_enabled(&self) -> bool {
52 *self != Self::Disabled
53 }
54
55 pub fn needs_gradient(&self) -> bool {
56 *self == Self::Bar
57 }
58}
59
60#[derive(
61 Clone, Copy, Debug, Default, Deserialize, Display, EnumIter, Eq, PartialEq, Serialize, TS,
62)]
63pub enum NumberBackgroundMode {
64 #[default]
65 #[serde(rename = "disabled")]
66 Disabled,
67
68 #[serde(rename = "color")]
69 Color,
70
71 #[serde(rename = "gradient")]
72 Gradient,
73
74 #[serde(rename = "pulse")]
75 Pulse,
76}
77
78impl NumberBackgroundMode {
79 pub fn is_disabled(&self) -> bool {
80 *self == Self::Disabled
81 }
82
83 pub fn needs_gradient(&self) -> bool {
84 *self == Self::Gradient
85 }
86}
87
88#[derive(Serialize, Deserialize, Clone, Default, Debug, PartialEq, TS)]
89pub struct NumberColumnStyleConfig {
90 #[serde(default = "NumberForegroundMode::default")]
91 #[serde(skip_serializing_if = "NumberForegroundMode::is_color")]
92 pub number_fg_mode: NumberForegroundMode,
93
94 #[serde(default = "NumberBackgroundMode::default")]
95 #[serde(skip_serializing_if = "NumberBackgroundMode::is_disabled")]
96 pub number_bg_mode: NumberBackgroundMode,
97
98 #[serde(skip_serializing_if = "Option::is_none")]
99 pub pos_fg_color: Option<String>,
100
101 #[serde(skip_serializing_if = "Option::is_none")]
102 pub neg_fg_color: Option<String>,
103
104 #[serde(skip_serializing_if = "Option::is_none")]
105 pub pos_bg_color: Option<String>,
106
107 #[serde(skip_serializing_if = "Option::is_none")]
108 pub neg_bg_color: Option<String>,
109
110 #[serde(skip_serializing_if = "Option::is_none")]
111 pub fg_gradient: Option<f64>,
112
113 #[serde(skip_serializing_if = "Option::is_none")]
114 pub bg_gradient: Option<f64>,
115}
116
117#[derive(Serialize, Deserialize, Clone, Default, Debug, PartialEq)]
123pub struct NumberColumnStyleDefaultConfig {
124 pub fg_gradient: f64,
125 pub bg_gradient: f64,
126 pub pos_fg_color: String,
127 pub neg_fg_color: String,
128 pub pos_bg_color: String,
129 pub neg_bg_color: String,
130 pub number_fg_mode: NumberForegroundMode,
131 pub number_bg_mode: NumberBackgroundMode,
132}