@@ -24,13 +24,13 @@ use super::page::Page;
24
24
use super :: picker:: Picker ;
25
25
26
26
pub struct Keyboard {
27
- pub ( crate ) daemon : Rc < dyn Daemon > ,
28
- pub ( crate ) daemon_board : usize ,
29
- pub ( crate ) keymap : HashMap < String , u16 > ,
30
- pub ( crate ) keys : RefCell < Vec < Key > > ,
27
+ daemon : Rc < dyn Daemon > ,
28
+ daemon_board : usize ,
29
+ keymap : HashMap < String , u16 > ,
30
+ keys : RefCell < Vec < Key > > ,
31
31
page : Cell < Page > ,
32
32
picker : RefCell < WeakRef < Picker > > ,
33
- pub ( crate ) selected : Cell < Option < usize > > ,
33
+ selected : Cell < Option < usize > > ,
34
34
}
35
35
36
36
impl Keyboard {
@@ -101,6 +101,45 @@ impl Keyboard {
101
101
}
102
102
}
103
103
104
+ pub fn selected ( & self ) -> Option < usize > {
105
+ self . selected . get ( )
106
+ }
107
+
108
+ pub fn has_scancode ( & self , scancode_name : & str ) -> bool {
109
+ self . keymap . contains_key ( scancode_name)
110
+ }
111
+
112
+ pub fn keymap_set ( & self , picker : & Picker , key_index : usize , layer : usize , scancode_name : & str ) {
113
+ // XXX avoid reference to Picker
114
+ let mut keys = self . keys . borrow_mut ( ) ;
115
+ let k = & mut keys[ key_index] ;
116
+ let mut found = false ;
117
+ if let Some ( scancode) = self . keymap . get ( scancode_name) {
118
+ k. deselect ( & picker, layer) ;
119
+ k. scancodes [ layer] = ( * scancode, scancode_name. to_string ( ) ) ;
120
+ k. refresh ( & picker) ;
121
+ k. select ( & picker, layer) ;
122
+ found = true ;
123
+ }
124
+ if !found {
125
+ return ;
126
+ }
127
+ println ! (
128
+ " set {}, {}, {} to {:04X}" ,
129
+ layer, k. electrical. 0 , k. electrical. 1 , k. scancodes[ layer] . 0
130
+ ) ;
131
+ if let Err ( err) = self . daemon . keymap_set (
132
+ self . daemon_board ,
133
+ layer as u8 ,
134
+ k. electrical . 0 ,
135
+ k. electrical . 1 ,
136
+ k. scancodes [ layer] . 0 ,
137
+ ) {
138
+ eprintln ! ( "Failed to set keymap: {:?}" , err) ;
139
+ }
140
+
141
+ }
142
+
104
143
pub fn gtk ( self : Rc < Self > ) -> gtk:: Box {
105
144
let stack = cascade ! {
106
145
gtk:: Stack :: new( ) ;
0 commit comments