Skip to content

Commit 47dd6ac

Browse files
committed
Show basic keycodes in picker in ANSI layout
1 parent 49d968a commit 47dd6ac

File tree

11 files changed

+167
-88
lines changed

11 files changed

+167
-88
lines changed

layouts/keysym/base.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
"PGUP": "PgUp",
3232
"PGDN": "PgDn",
3333
"END": "End",
34-
"RESET": "Reset",
34+
"RESET": "Reset Firmware",
3535
"ROLL_OVER": "Reuse",
3636
"NONE": "None",
3737
"MUTE": "Mute",

layouts/keysym/en_us.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
"APP": "Menu",
5353
"ESC": "Esc",
5454
"PRINT_SCREEN": "PrtSc\nSysrq",
55-
"INSERT": "Ins",
55+
"INSERT": "Insert",
5656
"SCROLL_LOCK": "Scroll Lock",
5757
"PAUSE": "Pause\nBreak",
5858
"NUM_LOCK": "Num Lock",

src/picker/group_box/basics.rs

Lines changed: 14 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,28 @@
1-
use super::{PickerBasicGroup, PickerGroup, PickerGroupBox, PickerKey};
1+
use super::{PickerAnsiGroup, PickerBasicGroup, PickerGroupBox};
22

33
impl PickerGroupBox {
44
pub fn basics() -> Self {
55
Self::new(vec![
6+
Box::new(PickerAnsiGroup::new()),
67
Box::new(PickerBasicGroup::new(
7-
"Alphabet keys".to_string(),
8-
9,
9-
1,
10-
&[
11-
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P",
12-
"Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
13-
],
14-
)),
15-
Box::new(PickerBasicGroup::new(
16-
"Number keys".to_string(),
8+
"Other Actions".to_string(),
179
4,
18-
1,
19-
&["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"],
20-
)),
21-
Box::new(PickerBasicGroup::new(
22-
"Modifier keys".to_string(),
23-
4,
24-
1,
10+
1.5,
2511
&[
26-
"LEFT_ALT",
27-
"LEFT_CTRL",
28-
"LEFT_SHIFT",
29-
"LEFT_SUPER",
30-
"RIGHT_ALT",
31-
"RIGHT_CTRL",
32-
"RIGHT_SHIFT",
33-
"RIGHT_SUPER",
34-
],
35-
)),
36-
Box::new(PickerBasicGroup::new(
37-
"Actions".to_string(),
38-
4,
39-
1,
40-
&[
41-
"ENTER",
42-
"BKSP",
43-
"DEL",
44-
"TAB",
45-
"SPACE",
46-
"CAPS",
47-
"APP",
48-
"ESC",
49-
"PRINT_SCREEN",
5012
"INSERT",
13+
"PRINT_SCREEN",
5114
"SCROLL_LOCK",
5215
"PAUSE",
5316
"RESET",
5417
"ROLL_OVER",
5518
"NONE",
5619
],
5720
)),
58-
Box::new(PickerBasicGroup::new(
59-
"Function keys".to_string(),
60-
4,
61-
1,
62-
&[
63-
"F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12",
64-
],
65-
)),
21+
// TODO numpad
6622
Box::new(PickerBasicGroup::new(
6723
"Numpad".to_string(),
6824
6,
69-
1,
25+
1.0,
7026
&[
7127
"NUM_LOCK",
7228
"NUM_7",
@@ -90,33 +46,19 @@ impl PickerGroupBox {
9046
Box::new(PickerBasicGroup::new(
9147
"Symbols".to_string(),
9248
6,
93-
1,
94-
&[
95-
"TICK",
96-
"QUOTE",
97-
"SEMICOLON",
98-
"MINUS",
99-
"EQUALS",
100-
"SLASH",
101-
"COMMA",
102-
"PERIOD",
103-
"BACKSLASH",
104-
"BRACE_OPEN",
105-
"BRACE_CLOSE",
106-
"NONUS_HASH",
107-
"NONUS_BSLASH",
108-
],
49+
1.0,
50+
&["NONUS_HASH", "NONUS_BSLASH"],
10951
)),
11052
Box::new(PickerBasicGroup::new(
11153
"Navigation".to_string(),
11254
4,
113-
1,
55+
1.0,
11456
&["LEFT", "UP", "DOWN", "RIGHT", "HOME", "PGUP", "PGDN", "END"],
11557
)),
11658
Box::new(PickerBasicGroup::new(
11759
"Media".to_string(),
11860
3,
119-
1,
61+
1.0,
12062
&[
12163
"MUTE",
12264
"VOLUME_UP",
@@ -129,7 +71,7 @@ impl PickerGroupBox {
12971
Box::new(PickerBasicGroup::new(
13072
"Controls".to_string(),
13173
4,
132-
2,
74+
2.0,
13375
&[
13476
"FAN_TOGGLE",
13577
"DISPLAY_TOGGLE",
@@ -146,13 +88,13 @@ impl PickerGroupBox {
14688
Box::new(PickerBasicGroup::new(
14789
"LED controls".to_string(),
14890
4,
149-
1,
91+
1.0,
15092
&["KBD_TOGGLE", "KBD_UP", "KBD_DOWN", "KBD_BKL", "KBD_COLOR"],
15193
)),
15294
Box::new(PickerBasicGroup::new(
15395
"Layer keys".to_string(),
15496
4,
155-
2,
97+
2.0,
15698
&[
15799
"LAYER_ACCESS_1",
158100
"FN",

src/picker/group_box/extras.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
use super::{PickerBasicGroup, PickerGroup, PickerGroupBox, PickerInternationalGroup, PickerKey};
1+
use super::{PickerBasicGroup, PickerGroupBox, PickerInternationalGroup};
22

33
impl PickerGroupBox {
44
pub fn extras() -> Self {
55
Self::new(vec![
66
Box::new(PickerBasicGroup::new(
77
"Additional Function Keys".to_string(),
88
6,
9-
1,
9+
1.0,
1010
&[
1111
"F13", "F14", "F15", "F16", "F17", "F18", "F19", "F20", "F21", "F22", "F23",
1212
"F24",
@@ -15,7 +15,7 @@ impl PickerGroupBox {
1515
Box::new(PickerBasicGroup::new(
1616
"Mouse Actions".to_string(),
1717
5,
18-
2,
18+
2.0,
1919
&[
2020
"MS_UP",
2121
"MS_DOWN",

src/picker/group_box/group/ansi.rs

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
use gtk::prelude::*;
2+
3+
use super::{PickerGroup, PickerKey};
4+
5+
static KEY_WIDTHS: &[(f64, &[&str])] = &[
6+
(
7+
1.5,
8+
&[
9+
"DEL",
10+
"BKSP",
11+
"TAB",
12+
"CAPS",
13+
"LEFT_CTRL",
14+
"LEFT_ALT",
15+
"LEFT_SUPER",
16+
"RIGHT_SUPER",
17+
"RIGHT_CTRL",
18+
],
19+
),
20+
(2.0, &["LEFT_SHIFT", "RIGHT_SHIFT", "ENTER"]),
21+
(4.5, &["SPACE"]),
22+
];
23+
24+
// TODO complete; widths?
25+
static ROWS: &[&[&str]] = &[
26+
&[
27+
"ESC", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "DEL",
28+
],
29+
&[
30+
"TICK", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "MINUS", "EQUALS", "BKSP",
31+
],
32+
&[
33+
"TAB",
34+
"Q",
35+
"W",
36+
"E",
37+
"R",
38+
"T",
39+
"Y",
40+
"U",
41+
"I",
42+
"O",
43+
"P",
44+
"BRACE_OPEN",
45+
"BRACE_CLOSE",
46+
"BACKSLASH",
47+
],
48+
&[
49+
"CAPS",
50+
"A",
51+
"S",
52+
"D",
53+
"F",
54+
"G",
55+
"H",
56+
"J",
57+
"K",
58+
"L",
59+
"SEMICOLON",
60+
"QUOTE",
61+
"ENTER",
62+
],
63+
&[
64+
"LEFT_SHIFT",
65+
"Z",
66+
"X",
67+
"C",
68+
"V",
69+
"B",
70+
"N",
71+
"M",
72+
"COMMA",
73+
"PERIOD",
74+
"SLASH",
75+
"RIGHT_SHIFT",
76+
],
77+
&[
78+
"LEFT_CTRL",
79+
"LEFT_ALT",
80+
"LEFT_SUPER",
81+
"SPACE",
82+
"RIGHT_SUPER",
83+
"RIGHT_ALT",
84+
"APP",
85+
"RIGHT_CTRL",
86+
],
87+
];
88+
89+
pub struct PickerAnsiGroup {
90+
keys: Vec<PickerKey>,
91+
widget: gtk::Fixed,
92+
}
93+
94+
impl PickerAnsiGroup {
95+
pub fn new() -> Self {
96+
let mut keys = Vec::new();
97+
let box_ = gtk::Box::new(gtk::Orientation::Vertical, 0);
98+
99+
let fixed = gtk::Fixed::new();
100+
101+
let mut y = 0;
102+
for row in ROWS {
103+
let mut x = 0;
104+
for name in *row {
105+
let width = KEY_WIDTHS
106+
.iter()
107+
.find_map(|(width, keys)| {
108+
if keys.contains(name) {
109+
Some(*width)
110+
} else {
111+
None
112+
}
113+
})
114+
.unwrap_or(1.0);
115+
let key = PickerKey::new(name, width);
116+
fixed.put(&key, x, y);
117+
keys.push(key);
118+
x += (48.0 * width) as i32
119+
}
120+
y += 48;
121+
}
122+
123+
PickerAnsiGroup {
124+
keys,
125+
widget: fixed,
126+
}
127+
}
128+
}
129+
130+
impl PickerGroup for PickerAnsiGroup {
131+
fn keys(&self) -> &[PickerKey] {
132+
&self.keys
133+
}
134+
135+
fn widget(&self) -> &gtk::Widget {
136+
self.widget.upcast_ref()
137+
}
138+
}

src/picker/group_box/group/basic_group.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ pub struct PickerBasicGroup {
1515
}
1616

1717
impl PickerBasicGroup {
18-
pub fn new(name: String, cols: u32, width: i32, key_names: &[&str]) -> Self {
18+
pub fn new(name: String, cols: u32, width: f64, key_names: &[&str]) -> Self {
1919
let label = cascade! {
2020
gtk::Label::new(Some(&name));
2121
..set_attributes(Some(&cascade! {

src/picker/group_box/group/international.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ pub struct PickerInternationalGroup {
3535
}
3636

3737
fn row(keys: &mut Vec<PickerKey>, keycode: &str, description: &str) -> gtk::Box {
38-
let key = PickerKey::new(keycode, 1);
38+
let key = PickerKey::new(keycode, 1.0);
3939
keys.push(key.clone());
4040
cascade! {
4141
gtk::Box::new(gtk::Orientation::Horizontal, 0);

src/picker/group_box/group/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
use super::super::PickerKey;
22

3+
mod ansi;
4+
pub use ansi::PickerAnsiGroup;
35
mod basic_group;
46
pub use basic_group::PickerBasicGroup;
57
mod international;

src/picker/group_box/mod.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use cascade::cascade;
21
use gtk::{
32
gdk,
43
glib::{self, clone, subclass::Signal, SignalHandlerId},
@@ -15,7 +14,7 @@ use super::picker_key::PickerKey;
1514
mod basics;
1615
mod extras;
1716
mod group;
18-
use group::{PickerBasicGroup, PickerGroup, PickerInternationalGroup};
17+
use group::*;
1918

2019
const DEFAULT_COLS: usize = 3;
2120
const HSPACING: i32 = 64;

src/picker/picker_key.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,13 @@ glib::wrapper! {
5656
}
5757

5858
impl PickerKey {
59-
pub fn new(name: &str, width: i32) -> Self {
59+
pub fn new(name: &str, width: f64) -> Self {
6060
let keysym_label = super::SCANCODE_LABELS.get(name).unwrap();
6161

6262
let widget: Self = glib::Object::new(&[]).unwrap();
6363
widget.inner().name.set(name.to_string());
6464
widget.inner().label.set_label(&keysym_label);
65-
widget.set_size_request(48 * width, 48);
65+
widget.set_size_request((48.0 * width) as i32, 48);
6666
widget
6767
}
6868

0 commit comments

Comments
 (0)