@@ -372,10 +372,18 @@ KeyboardLayoutManager::KeyboardLayoutManager(KEYBOARD_LAYOUT layout, KEYBOARD_SI
372
372
SwapKeys (values.regional_overlay .find (layout)->second );
373
373
}
374
374
375
+ /* ---------------------------------------------------------------------*\
376
+ | Size specific fixes |
377
+ \*---------------------------------------------------------------------*/
375
378
switch (size)
376
379
{
377
380
case KEYBOARD_SIZE::KEYBOARD_SIZE_SIXTY:
381
+ /* -------------------------------------------------------------*\
382
+ | Remove the empty Function row and swap in the Escape key |
383
+ \*-------------------------------------------------------------*/
378
384
name = KEYBOARD_NAME_SIXTY;
385
+ RemoveRow (0 );
386
+ SwapKey (keyboard_zone_fn_row[0 ]);
379
387
break ;
380
388
381
389
case KEYBOARD_SIZE::KEYBOARD_SIZE_SEVENTY_FIVE:
@@ -443,6 +451,10 @@ void KeyboardLayoutManager::OpCodeSwitch(key_set change_keys)
443
451
// SwapKey(change_keys[chg_key_idx]);
444
452
break ;
445
453
454
+ case KEYBOARD_OPCODE_REMOVE_ROW:
455
+ RemoveRow (change_keys[chg_key_idx].row );
456
+ break ;
457
+
446
458
default :
447
459
LOG_DEBUG (LOG_MSG_MISSING_OPCODE, KLM_CLASS_NAME, change_keys[chg_key_idx].opcode ,
448
460
change_keys[chg_key_idx].name , change_keys[chg_key_idx].row , change_keys[chg_key_idx].col );
@@ -698,6 +710,45 @@ void KeyboardLayoutManager::RemoveKey(keyboard_led rmv_key)
698
710
}
699
711
}
700
712
713
+ void KeyboardLayoutManager::RemoveRow (uint8_t rmv_row)
714
+ {
715
+ /* ---------------------------------------------------------------------*\
716
+ | Check row is valid to remove |
717
+ \*---------------------------------------------------------------------*/
718
+ if (rmv_row >= rows)
719
+ {
720
+ LOG_DEBUG (" [%s] Removing row %d failed as rows currently = %d" , KLM_CLASS_NAME, rmv_row, rows);
721
+ return ;
722
+ }
723
+
724
+ /* ---------------------------------------------------------------------*\
725
+ | Loop through and remove any keys in the row |
726
+ \*---------------------------------------------------------------------*/
727
+ unsigned int key_idx = 0 ;
728
+
729
+ for (/* key_idx*/ ; key_idx < keymap.size () && rmv_row > keymap[key_idx].row ; key_idx++)
730
+ {
731
+ if (rmv_row == keymap[key_idx].row )
732
+ {
733
+ LOG_DEBUG (" [%s] Removing %s @ %02d, %02d from row %d" , KLM_CLASS_NAME, keymap[key_idx].name , keymap[key_idx].row , keymap[key_idx].col , rmv_row);
734
+ keymap.erase (keymap.begin () + key_idx);
735
+ }
736
+ }
737
+
738
+ /* ---------------------------------------------------------------------*\
739
+ | Loop through the remaining rows and adjust row number |
740
+ \*---------------------------------------------------------------------*/
741
+ if (rmv_row < keymap[key_idx].row )
742
+ {
743
+ for (/* key_idx*/ ; key_idx < keymap.size (); key_idx++)
744
+ {
745
+ keymap[key_idx].row --;
746
+ }
747
+
748
+ LOG_DEBUG (" [%s] Remove row %d successful" , KLM_CLASS_NAME, rmv_row);
749
+ }
750
+ }
751
+
701
752
std::string KeyboardLayoutManager::GetName ()
702
753
703
754
{
0 commit comments