Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
key.rs - source
[go: Go Back, main page]

criterion_plot/
key.rs

1//! Key (or legend)
2
3use std::borrow::Cow;
4
5use crate::traits::Set;
6use crate::{Default, Display, Script, Title};
7
8/// Properties of the key
9#[derive(Clone)]
10pub struct Properties {
11    boxed: bool,
12    hidden: bool,
13    justification: Option<Justification>,
14    order: Option<Order>,
15    position: Option<Position>,
16    stacked: Option<Stacked>,
17    title: Option<Cow<'static, str>>,
18}
19
20impl Default for Properties {
21    fn default() -> Properties {
22        Properties {
23            boxed: false,
24            hidden: false,
25            justification: None,
26            order: None,
27            position: None,
28            stacked: None,
29            title: None,
30        }
31    }
32}
33
34impl Properties {
35    /// Hides the key
36    pub fn hide(&mut self) -> &mut Properties {
37        self.hidden = true;
38        self
39    }
40
41    /// Shows the key
42    ///
43    /// **Note** The key is shown by default
44    pub fn show(&mut self) -> &mut Properties {
45        self.hidden = false;
46        self
47    }
48}
49
50impl Script for Properties {
51    fn script(&self) -> String {
52        let mut script = if self.hidden {
53            return String::from("set key off\n");
54        } else {
55            String::from("set key on ")
56        };
57
58        match self.position {
59            None => {}
60            Some(Position::Inside(v, h)) => {
61                script.push_str(&format!("inside {} {} ", v.display(), h.display()))
62            }
63            Some(Position::Outside(v, h)) => {
64                script.push_str(&format!("outside {} {} ", v.display(), h.display()))
65            }
66        }
67
68        if let Some(stacked) = self.stacked {
69            script.push_str(stacked.display());
70            script.push(' ');
71        }
72
73        if let Some(justification) = self.justification {
74            script.push_str(justification.display());
75            script.push(' ');
76        }
77
78        if let Some(order) = self.order {
79            script.push_str(order.display());
80            script.push(' ');
81        }
82
83        if let Some(ref title) = self.title {
84            script.push_str(&format!("title '{}' ", title))
85        }
86
87        if self.boxed {
88            script.push_str("box ")
89        }
90
91        script.push('\n');
92        script
93    }
94}
95
96impl Set<Boxed> for Properties {
97    /// Select if the key will be surrounded with a box or not
98    ///
99    /// **Note** The key is not boxed by default
100    fn set(&mut self, boxed: Boxed) -> &mut Properties {
101        match boxed {
102            Boxed::No => self.boxed = false,
103            Boxed::Yes => self.boxed = true,
104        }
105
106        self
107    }
108}
109
110impl Set<Justification> for Properties {
111    /// Changes the justification of the text of each entry
112    ///
113    /// **Note** The text is `RightJustified` by default
114    fn set(&mut self, justification: Justification) -> &mut Properties {
115        self.justification = Some(justification);
116        self
117    }
118}
119
120impl Set<Order> for Properties {
121    /// How to order each entry
122    ///
123    /// **Note** The default order is `TextSample`
124    fn set(&mut self, order: Order) -> &mut Properties {
125        self.order = Some(order);
126        self
127    }
128}
129
130impl Set<Position> for Properties {
131    /// Selects where to place the key
132    ///
133    /// **Note** By default, the key is placed `Inside(Vertical::Top, Horizontal::Right)`
134    fn set(&mut self, position: Position) -> &mut Properties {
135        self.position = Some(position);
136        self
137    }
138}
139
140impl Set<Stacked> for Properties {
141    /// Changes how the entries of the key are stacked
142    fn set(&mut self, stacked: Stacked) -> &mut Properties {
143        self.stacked = Some(stacked);
144        self
145    }
146}
147
148impl Set<Title> for Properties {
149    fn set(&mut self, title: Title) -> &mut Properties {
150        self.title = Some(title.0);
151        self
152    }
153}
154
155/// Whether the key is surrounded by a box or not
156#[allow(missing_docs)]
157#[derive(Clone, Copy)]
158pub enum Boxed {
159    No,
160    Yes,
161}
162
163/// Horizontal position of the key
164#[derive(Clone, Copy)]
165pub enum Horizontal {
166    /// Center of the figure
167    Center,
168    /// Left border of the figure
169    Left,
170    /// Right border of the figure
171    Right,
172}
173
174/// Text justification of the key
175#[allow(missing_docs)]
176#[derive(Clone, Copy)]
177pub enum Justification {
178    Left,
179    Right,
180}
181
182/// Order of the elements of the key
183#[derive(Clone, Copy)]
184pub enum Order {
185    /// Sample first, then text
186    SampleText,
187    /// Text first, then sample
188    TextSample,
189}
190
191/// Position of the key
192// TODO XY position
193#[derive(Clone, Copy)]
194pub enum Position {
195    /// Inside the area surrounded by the four (Bottom X, Top X, Left Y and Right Y) axes
196    Inside(Vertical, Horizontal),
197    /// Outside of that area
198    Outside(Vertical, Horizontal),
199}
200
201/// How the entries of the key are stacked
202#[allow(missing_docs)]
203#[derive(Clone, Copy)]
204pub enum Stacked {
205    Horizontally,
206    Vertically,
207}
208
209/// Vertical position of the key
210#[derive(Clone, Copy)]
211pub enum Vertical {
212    /// Bottom border of the figure
213    Bottom,
214    /// Center of the figure
215    Center,
216    /// Top border of the figure
217    Top,
218}