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}