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