pc_keyboard/layouts/
mod.rs1mod dvorak_programmer104;
8pub use self::dvorak_programmer104::DVP104Key;
9
10mod dvorak104;
11pub use self::dvorak104::Dvorak104Key;
12
13mod us104;
14pub use self::us104::Us104Key;
15
16mod uk105;
17pub use self::uk105::Uk105Key;
18
19mod jis109;
20pub use self::jis109::Jis109Key;
21
22mod azerty;
23pub use self::azerty::Azerty;
24
25mod colemak;
26pub use self::colemak::Colemak;
27
28mod de105;
29pub use self::de105::De105Key;
30
31mod no105;
32pub use self::no105::No105Key;
33
34mod fi_se105;
35pub use self::fi_se105::FiSe105Key;
36
37pub enum AnyLayout {
39 DVP104Key(DVP104Key),
40 Dvorak104Key(Dvorak104Key),
41 Us104Key(Us104Key),
42 Uk105Key(Uk105Key),
43 Jis109Key(Jis109Key),
44 Azerty(Azerty),
45 Colemak(Colemak),
46 De105Key(De105Key),
47 No105Key(No105Key),
48 FiSe105Key(FiSe105Key),
49}
50
51impl super::KeyboardLayout for AnyLayout {
52 fn map_keycode(
53 &self,
54 keycode: super::KeyCode,
55 modifiers: &super::Modifiers,
56 handle_ctrl: super::HandleControl,
57 ) -> super::DecodedKey {
58 match self {
59 AnyLayout::DVP104Key(inner) => inner.map_keycode(keycode, modifiers, handle_ctrl),
60 AnyLayout::Dvorak104Key(inner) => inner.map_keycode(keycode, modifiers, handle_ctrl),
61 AnyLayout::Us104Key(inner) => inner.map_keycode(keycode, modifiers, handle_ctrl),
62 AnyLayout::Uk105Key(inner) => inner.map_keycode(keycode, modifiers, handle_ctrl),
63 AnyLayout::Jis109Key(inner) => inner.map_keycode(keycode, modifiers, handle_ctrl),
64 AnyLayout::Azerty(inner) => inner.map_keycode(keycode, modifiers, handle_ctrl),
65 AnyLayout::Colemak(inner) => inner.map_keycode(keycode, modifiers, handle_ctrl),
66 AnyLayout::De105Key(inner) => inner.map_keycode(keycode, modifiers, handle_ctrl),
67 AnyLayout::No105Key(inner) => inner.map_keycode(keycode, modifiers, handle_ctrl),
68 AnyLayout::FiSe105Key(inner) => inner.map_keycode(keycode, modifiers, handle_ctrl),
69 }
70 }
71}
72
73impl super::KeyboardLayout for &AnyLayout {
74 fn map_keycode(
75 &self,
76 keycode: super::KeyCode,
77 modifiers: &super::Modifiers,
78 handle_ctrl: super::HandleControl,
79 ) -> super::DecodedKey {
80 match self {
81 AnyLayout::DVP104Key(inner) => inner.map_keycode(keycode, modifiers, handle_ctrl),
82 AnyLayout::Dvorak104Key(inner) => inner.map_keycode(keycode, modifiers, handle_ctrl),
83 AnyLayout::Us104Key(inner) => inner.map_keycode(keycode, modifiers, handle_ctrl),
84 AnyLayout::Uk105Key(inner) => inner.map_keycode(keycode, modifiers, handle_ctrl),
85 AnyLayout::Jis109Key(inner) => inner.map_keycode(keycode, modifiers, handle_ctrl),
86 AnyLayout::Azerty(inner) => inner.map_keycode(keycode, modifiers, handle_ctrl),
87 AnyLayout::Colemak(inner) => inner.map_keycode(keycode, modifiers, handle_ctrl),
88 AnyLayout::De105Key(inner) => inner.map_keycode(keycode, modifiers, handle_ctrl),
89 AnyLayout::No105Key(inner) => inner.map_keycode(keycode, modifiers, handle_ctrl),
90 AnyLayout::FiSe105Key(inner) => inner.map_keycode(keycode, modifiers, handle_ctrl),
91 }
92 }
93}
94
95#[cfg(test)]
96mod test {
97 use super::*;
98 use crate::*;
99
100 #[test]
101 fn test_any() {
102 let mut decoder = EventDecoder::new(AnyLayout::Uk105Key(Uk105Key), HandleControl::Ignore);
103 let decoded = decoder.process_keyevent(KeyEvent {
105 code: KeyCode::Q,
106 state: KeyState::Down,
107 });
108 assert_eq!(decoded, Some(DecodedKey::Unicode('q')));
109 decoder.change_layout(AnyLayout::Azerty(Azerty));
111 let decoded = decoder.process_keyevent(KeyEvent {
113 code: KeyCode::Q,
114 state: KeyState::Down,
115 });
116 assert_eq!(decoded, Some(DecodedKey::Unicode('a')));
117 }
118}