blob: 6c526b908d39b03468952653ef25a29e3ef84e7f (
plain)
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
|
using GLib;
namespace Caribou {
public class LevelModel : ScannableGroup, IKeyboardObject {
public signal void level_toggled (string new_level);
public string mode { get; private set; default = ""; }
private Gee.ArrayList<RowModel> rows;
public LevelModel (string mode) {
this.mode = mode;
rows = new Gee.ArrayList<RowModel> ();
}
internal void add_row (RowModel row) {
row.key_clicked.connect (on_key_clicked);
row.key_pressed.connect ((k) => { key_pressed (k); });
row.key_released.connect ((k) => { key_released (k); });
rows.add(row);
}
public RowModel[] get_rows () {
return (RowModel[]) rows.to_array ();
}
private void on_key_clicked (KeyModel key) {
if (key.toggle != "")
level_toggled (key.toggle);
else if (mode == "latched")
level_toggled ("default");
key_clicked (key);
}
public override IScannableItem[] get_scan_children () {
if (scan_grouping == ScanGrouping.LINEAR)
return (IScannableItem[]) get_keys ();
else
return (IScannableItem[]) rows.to_array ();
}
public IKeyboardObject[] get_children () {
return (IKeyboardObject[]) get_rows ();
}
}
}
|