1 //! Gridline
2 
3 use crate::{Axis, Default, Display, Grid, Script};
4 
5 /// Gridline properties
6 #[derive(Clone, Copy)]
7 pub struct Properties {
8     hidden: bool,
9 }
10 
11 impl Default for Properties {
default() -> Properties12     fn default() -> Properties {
13         Properties { hidden: true }
14     }
15 }
16 
17 // TODO Lots of configuration pending: linetype, linewidth, etc
18 impl Properties {
19     /// Hides the gridlines
20     ///
21     /// **Note** Both `Major` and `Minor` gridlines are hidden by default
hide(&mut self) -> &mut Properties22     pub fn hide(&mut self) -> &mut Properties {
23         self.hidden = true;
24         self
25     }
26 
27     /// Shows the gridlines
show(&mut self) -> &mut Properties28     pub fn show(&mut self) -> &mut Properties {
29         self.hidden = false;
30         self
31     }
32 }
33 
34 impl<'a> Script for (Axis, Grid, &'a Properties) {
script(&self) -> String35     fn script(&self) -> String {
36         let &(axis, grid, properties) = self;
37         let axis = axis.display();
38         let grid = grid.display();
39 
40         if properties.hidden {
41             String::new()
42         } else {
43             format!("set grid {}{}tics\n", grid, axis)
44         }
45     }
46 }
47