// This function parses the keyboard layout specification // and creates the keyboard visualization using the above // declared helper functions. private void PopulateKeymap() { // Parse the source JSON try { String json = System.IO.File.ReadAllText(GetPath("keymap_default_tada68.json")); dynamic data = JsonConvert.DeserializeObject(json); KeyboardName = data.keyboard; Int32[] keysPerRow = GetKeysPerRow(KeyboardName); // Split into easy to understand layers var dlayers = data.layers; foreach (var dlayer in dlayers) { // Split the layers into rows List <List <String> > keys = new List <List <String> >(); List <String> row = new List <string>(); for (Int32 key = 0; key < dlayer.Count; ++key) { row.Add(dlayer[key].Value); if (row.Count >= keysPerRow[keys.Count]) { keys.Add(row); row = new List <string>(); } } if (keys.Count != keysPerRow.Length) { // TODO: Log warning here } keyboardLayer.Add(keys); keys = new List <List <String> >(); } } catch { // Fail silently for now return; } // Add buttons to toggle between layers for (Int32 l = 0; l < keyboardLayer.Count; ++l) { IndexedButton b = new IndexedButton(); b.Content = l.ToString(); b.Index = l; b.Click += SelectLayerButton_Click; b.Width = 35; LayoutList.Children.Add(b); } }
// ======================================================================== // Events // ======================================================================== // Handle a button press in the main window to select layer private void SelectLayerButton_Click(object sender, RoutedEventArgs e) { IndexedButton b = (IndexedButton)sender; SelectedLayer = b.Index; }