1use crate::api1::{cmd, AsVueszApi1ValueStr};
2use crate::CommandLineEmbeddingInterface;
3use std::io::Write;
4
5pub mod line;
6pub mod marker;
7pub mod plot;
8
9#[derive(Copy, Clone, PartialOrd, PartialEq)]
10pub enum ColorMap {
11 Blank,
12 Heat,
13 Spectrum2,
14 Spectrum2Step,
15 Spectrum,
16 Grey,
17 Blue,
18 Red,
19 Green,
20 BlueGreen,
21 TransBlack,
22 Royal,
23 Complement,
24 CoolWarm,
25 GreenMagenta,
26 BlueDarkred,
27 BlueDarkorange,
28 BrownBlue,
29 BlueOrange,
30 Seq,
31 HotDesaturated,
32 YellowGreen,
33 YellowGreenBlue,
34 YellowOrangeBrown,
35 YellowOrangeRed,
36 None,
37
38 CubeHelix,
40 BlueGreenStep,
41 ComplementStep,
42 GreyStep5,
43 GreyStep6,
44 RoyalStep,
45 SpectrumStep,
46 TransBlackStep5,
47 GreenMagentaStep16,
48 BlueDarkredStep12,
49 BlueDarkOrangeStep12,
50 BrownBlueStep12,
51 BlueOrangeStep12,
52 SeqStep25,
53}
54
55impl AsVueszApi1ValueStr for ColorMap {
56 fn as_veusz_api1_value_str(&self) -> &str {
57 match self {
58 ColorMap::Blank => "blank",
59 ColorMap::Heat => "heat",
60 ColorMap::Spectrum2 => "spectrum2",
61 ColorMap::Spectrum2Step => "spectrum2-step",
62 ColorMap::Spectrum => "spectrum",
63 ColorMap::Grey => "grey",
64 ColorMap::Blue => "blue",
65 ColorMap::Red => "red",
66 ColorMap::Green => "green",
67 ColorMap::BlueGreen => "bluegreen",
68 ColorMap::TransBlack => "transblack",
69 ColorMap::Royal => "royal",
70 ColorMap::Complement => "complement",
71 ColorMap::CoolWarm => "cool-warm",
72 ColorMap::GreenMagenta => "green-magenta",
73 ColorMap::BlueDarkred => "blue-darkred",
74 ColorMap::BlueDarkorange => "blue-darkorange",
75 ColorMap::BrownBlue => "brown-blue",
76 ColorMap::BlueOrange => "blue-orange",
77 ColorMap::Seq => "seq",
78 ColorMap::HotDesaturated => "hot_desaturated",
79 ColorMap::YellowGreen => "yellow-green",
80 ColorMap::YellowGreenBlue => "yellow-green-blue",
81 ColorMap::YellowOrangeBrown => "yellow-green-brown",
82 ColorMap::YellowOrangeRed => "yellow-orange-red",
83 ColorMap::None => "none",
84
85 ColorMap::CubeHelix => "cubehelix(0.5,-1.5,1,1)",
86 ColorMap::BlueGreenStep => "bluegreen-step",
87 ColorMap::ComplementStep => "complement-step",
88 ColorMap::GreyStep5 => "grey-step5",
89 ColorMap::GreyStep6 => "grey-step6",
90 ColorMap::RoyalStep => "royal-step",
91 ColorMap::SpectrumStep => "spectrum-step",
92 ColorMap::TransBlackStep5 => "transblack-step5",
93 ColorMap::GreenMagentaStep16 => "green-magenta-step16",
94 ColorMap::BlueDarkredStep12 => "blue-darkred-step12",
95 ColorMap::BlueDarkOrangeStep12 => "blue-darkorange-step12",
96 ColorMap::BrownBlueStep12 => "brown-blue-step12",
97 ColorMap::BlueOrangeStep12 => "blue-orange-step12",
98 ColorMap::SeqStep25 => "seq-step25",
99 }
100 }
101}
102
103#[derive(Copy, Clone, PartialOrd, PartialEq)]
105pub enum ColorName {
106 Auto,
107 Foreground,
108 Transparent,
109 White,
110 Black,
111 Red,
112 Green,
113 Blue,
114 Cyan,
115 Magenta,
116 Yellow,
117 Grey,
118 Darkred,
119 Darkgreen,
120 Darkblue,
121 Darkcyan,
122 Darkmagenta,
123}
124
125impl AsVueszApi1ValueStr for ColorName {
126 fn as_veusz_api1_value_str(&self) -> &str {
127 match self {
128 ColorName::Auto => "auto",
129 ColorName::Foreground => "foreground",
130 ColorName::Transparent => "transparent",
131 ColorName::White => "white",
132 ColorName::Black => "black",
133 ColorName::Red => "red",
134 ColorName::Green => "green",
135 ColorName::Blue => "blue",
136 ColorName::Cyan => "cyan",
137 ColorName::Magenta => "magenta",
138 ColorName::Yellow => "yellow",
139 ColorName::Grey => "grey",
140 ColorName::Darkred => "darkred",
141 ColorName::Darkgreen => "darkgreen",
142 ColorName::Darkblue => "darkblue",
143 ColorName::Darkcyan => "darkcyan",
144 ColorName::Darkmagenta => "darkmagenta",
145 }
146 }
147}
148
149pub struct Color {
150 points: String,
151 min: Option<f32>,
152 max: Option<f32>,
153}
154
155impl Color {
156 pub fn points(points: impl Into<String>) -> Self {
157 Self {
158 points: points.into(),
159 min: None,
160 max: None,
161 }
162 }
163
164 pub fn set_min(&mut self, min: f32) {
165 self.min = Some(min);
166 }
167
168 pub fn with_min(mut self, min: f32) -> Self {
169 self.set_min(min);
170 self
171 }
172
173 pub fn set_max(&mut self, max: f32) {
174 self.max = Some(max);
175 }
176
177 pub fn with_max(mut self, max: f32) -> Self {
178 self.set_max(max);
179 self
180 }
181}
182
183impl CommandLineEmbeddingInterface for Color {
184 fn write<W: Write>(&self, writer: &mut W) -> std::io::Result<()> {
185 cmd::Set("Color/points", &self.points).write(writer)?;
186
187 if let Some(min) = &self.min {
188 cmd::SetRaw("Color/min", min).write(writer)?;
189 }
190
191 if let Some(max) = &self.max {
192 cmd::SetRaw("Color/max", max).write(writer)?;
193 }
194
195 Ok(())
196 }
197}