Skip to main content

vn_settings/
layout.rs

1use super::{Resettable, Settings};
2
3#[derive(Clone)]
4pub struct BoxLayoutSettings<T> {
5    pub hor: T,
6    pub ver: T,
7    pub width: T,
8    pub height: T,
9    pub corner: T,
10    pub line: T,
11    pub text_size: T,
12    pub name_size: T,
13}
14
15#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
16pub enum BoxLayoutParameter {
17    Hor,
18    Ver,
19    Width,
20    Height,
21    Corner,
22    Line,
23    TextSize,
24    NameSize,
25}
26
27impl BoxLayoutParameter {
28    pub fn main(self) -> LayoutParameter {
29        LayoutParameter::Main(self)
30    }
31
32    pub fn list(self) -> LayoutParameter {
33        LayoutParameter::List(self)
34    }
35}
36
37impl<T> Settings<BoxLayoutParameter> for BoxLayoutSettings<T> {
38    type Value = T;
39
40    fn get_mut(&mut self, parameter: &BoxLayoutParameter) -> &mut T {
41        use BoxLayoutParameter::*;
42        match parameter {
43            Hor => &mut self.hor,
44            Ver => &mut self.ver,
45            Width => &mut self.width,
46            Height => &mut self.height,
47            Corner => &mut self.corner,
48            Line => &mut self.line,
49            TextSize => &mut self.text_size,
50            NameSize => &mut self.name_size,
51        }
52    }
53}
54
55impl<T: Resettable> Resettable for BoxLayoutSettings<T> {
56    fn reset(&mut self) {
57        self.hor.reset();
58        self.ver.reset();
59        self.width.reset();
60        self.height.reset();
61        self.corner.reset();
62        self.line.reset();
63        self.text_size.reset();
64        self.name_size.reset();
65    }
66
67    fn reset_aspects(&mut self) {
68        self.hor.reset_aspects();
69        self.ver.reset_aspects();
70        self.width.reset_aspects();
71        self.height.reset_aspects();
72        self.corner.reset_aspects();
73        self.line.reset_aspects();
74        self.text_size.reset_aspects();
75        self.name_size.reset_aspects();
76    }
77}
78
79#[derive(Clone)]
80pub struct ViewLayoutSettings<T> {
81    pub hor: T,
82    pub ver: T,
83    pub zoom: T,
84}
85
86#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
87pub enum ViewLayoutParameter {
88    Hor,
89    Ver,
90    Zoom,
91}
92
93impl<T> Settings<ViewLayoutParameter> for ViewLayoutSettings<T> {
94    type Value = T;
95
96    fn get_mut(&mut self, parameter: &ViewLayoutParameter) -> &mut T {
97        use ViewLayoutParameter::*;
98        match parameter {
99            Hor => &mut self.hor,
100            Ver => &mut self.ver,
101            Zoom => &mut self.zoom,
102        }
103    }
104}
105
106impl<T: Resettable> Resettable for ViewLayoutSettings<T> {
107    fn reset(&mut self) {
108        self.hor.reset();
109        self.ver.reset();
110        self.zoom.reset();
111    }
112
113    fn reset_aspects(&mut self) {
114        self.hor.reset_aspects();
115        self.ver.reset_aspects();
116        self.zoom.reset_aspects();
117    }
118}
119
120#[derive(Clone)]
121pub struct LayoutSettings<T> {
122    pub main: BoxLayoutSettings<T>,
123    pub list: BoxLayoutSettings<T>,
124    pub view: ViewLayoutSettings<T>,
125}
126
127impl<T: From<f32>> LayoutSettings<T> {
128    pub fn common() -> Self {
129        Self {
130            main: BoxLayoutSettings {
131                hor: 0.0.into(),
132                ver: 3.0.into(),
133                width: 12.0.into(),
134                height: 2.0.into(),
135                corner: 0.25.into(),
136                line: (1.0 / 0x40 as f32).into(),
137                text_size: (1.0 / 3.0).into(),
138                name_size: (1.0 / 6.0).into(),
139            },
140            list: BoxLayoutSettings {
141                hor: 0.0.into(),
142                ver: (-4.0).into(),
143                width: 8.0.into(),
144                height: 0.5.into(),
145                corner: 0.25.into(),
146                line: (1.0 / 0x40 as f32).into(),
147                text_size: (1.0 / 4.0).into(),
148                name_size: (1.0 / 6.0).into(),
149            },
150            view: ViewLayoutSettings {
151                hor: 0.0.into(),
152                ver: 0.0.into(),
153                zoom: 1.0.into(),
154            },
155        }
156    }
157}
158
159#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
160pub enum LayoutParameter {
161    Main(BoxLayoutParameter),
162    List(BoxLayoutParameter),
163    View(ViewLayoutParameter),
164}
165
166impl<T> Settings<LayoutParameter> for LayoutSettings<T> {
167    type Value = T;
168
169    fn get_mut(&mut self, parameter: &LayoutParameter) -> &mut T {
170        use LayoutParameter::*;
171        match parameter {
172            Main(parameter) => self.main.get_mut(parameter),
173            List(parameter) => self.list.get_mut(parameter),
174            View(parameter) => self.view.get_mut(parameter),
175        }
176    }
177}
178
179impl<T: Resettable> Resettable for LayoutSettings<T> {
180    fn reset(&mut self) {
181        self.main.reset();
182        self.list.reset();
183    }
184
185    fn reset_aspects(&mut self) {
186        self.main.reset_aspects();
187        self.list.reset_aspects();
188    }
189}