1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
use crate::button::*;
use ron::de::from_reader;
use ron::ser::{to_string_pretty, PrettyConfig};
use serde::{Deserialize, Serialize};
use std::fs::File;
use std::io::{self, Write};
use std::path::Path;
#[derive(Deserialize, Serialize)]
pub struct Config {
pub tool_activation_keys: ToolActivationKeys,
pub tool_general_keys: ToolGeneralKeys,
pub icon_keys: IconToolKeys,
}
#[derive(Deserialize, Serialize)]
pub struct ToolActivationKeys {
pub deletion: Button,
pub icon: Button,
pub polygon_room: Button,
pub rect_room: Button,
pub wall: Button,
}
#[derive(Deserialize, Serialize)]
pub struct ToolGeneralKeys {
pub place_single: Button,
pub finish: Button,
pub abort: Button,
}
#[derive(Clone, Serialize, Deserialize)]
pub struct IconToolKeys {
pub next: Button,
pub previous: Button,
pub rotate_clockwise: Button,
pub rotate_counterclockwise: Button,
}
impl Config {
pub fn from_file<P: AsRef<Path>>(path: P) -> io::Result<Config> {
let file = File::open(&path)?;
match from_reader(file) {
Ok(data) => Ok(data),
Err(err) => Err(io::Error::new(io::ErrorKind::InvalidData, err)),
}
}
pub fn write_file<P: AsRef<Path>>(&self, path: P) -> io::Result<()> {
let mut file = File::create(&path)?;
let pretty_conf = PrettyConfig::new()
.with_depth_limit(4)
.with_decimal_floats(true)
.with_separate_tuple_members(true)
.with_indentor("\t".to_owned());
let string = match to_string_pretty(&self, pretty_conf) {
Ok(string) => string,
Err(err) => {
return Err(io::Error::new(io::ErrorKind::InvalidInput, err));
}
};
file.write_all(&string.as_bytes())
}
}
impl Default for Config {
fn default() -> Self {
Config {
tool_activation_keys: ToolActivationKeys {
deletion: Button::Keyboard(KeyboardKey::D),
icon: Button::Keyboard(KeyboardKey::I),
polygon_room: Button::Keyboard(KeyboardKey::P),
rect_room: Button::Keyboard(KeyboardKey::R),
wall: Button::Keyboard(KeyboardKey::W),
},
tool_general_keys: ToolGeneralKeys {
place_single: Button::Mouse(MouseButton::Left),
finish: Button::Keyboard(KeyboardKey::Enter),
abort: Button::Mouse(MouseButton::Right),
},
icon_keys: IconToolKeys {
next: Button::Keyboard(KeyboardKey::I),
previous: Button::Keyboard(KeyboardKey::J),
rotate_clockwise: Button::Mouse(MouseButton::Right),
rotate_counterclockwise: Button::Keyboard(KeyboardKey::Minus),
},
}
}
}
|