Added Remove Row Opcode to the KLM

* Removed blank row from Sixty percent (Mini) keyboards
* Resolves #3404
This commit is contained in:
Chris M
2023-06-07 19:12:46 +10:00
parent 70ba6a2133
commit 3d0582d7be
3 changed files with 54 additions and 2 deletions

View File

@@ -778,8 +778,7 @@ keyboard_keymap_overlay_values razer_huntsman_mini_layout
| Edit Keys |
| Zone, Row, Column, Value, Key, OpCode, |
\*---------------------------------------------------------------------------------------------------------*/
{ 0, 0, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap out Backtick
{ 0, 0, 1, 0, KEY_EN_ESCAPE, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Escape and shift row 0
{ 0, 0, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Shift row 0
{ 0, 1, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Shift row 1
{ 0, 2, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Shift row 2
{ 0, 3, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Shift row 3

View File

@@ -372,10 +372,18 @@ KeyboardLayoutManager::KeyboardLayoutManager(KEYBOARD_LAYOUT layout, KEYBOARD_SI
SwapKeys(values.regional_overlay.find(layout)->second);
}
/*---------------------------------------------------------------------*\
| Size specific fixes |
\*---------------------------------------------------------------------*/
switch(size)
{
case KEYBOARD_SIZE::KEYBOARD_SIZE_SIXTY:
/*-------------------------------------------------------------*\
| Remove the empty Function row and swap in the Escape key |
\*-------------------------------------------------------------*/
name = KEYBOARD_NAME_SIXTY;
RemoveRow(0);
SwapKey(keyboard_zone_fn_row[0]);
break;
case KEYBOARD_SIZE::KEYBOARD_SIZE_SEVENTY_FIVE:
@@ -443,6 +451,10 @@ void KeyboardLayoutManager::OpCodeSwitch(key_set change_keys)
//SwapKey(change_keys[chg_key_idx]);
break;
case KEYBOARD_OPCODE_REMOVE_ROW:
RemoveRow(change_keys[chg_key_idx].row);
break;
default:
LOG_DEBUG(LOG_MSG_MISSING_OPCODE, KLM_CLASS_NAME, change_keys[chg_key_idx].opcode,
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)
}
}
void KeyboardLayoutManager::RemoveRow(uint8_t rmv_row)
{
/*---------------------------------------------------------------------*\
| Check row is valid to remove |
\*---------------------------------------------------------------------*/
if(rmv_row >= rows)
{
LOG_DEBUG("[%s] Removing row %d failed as rows currently = %d", KLM_CLASS_NAME, rmv_row, rows);
return;
}
/*---------------------------------------------------------------------*\
| Loop through and remove any keys in the row |
\*---------------------------------------------------------------------*/
unsigned int key_idx = 0;
for(/*key_idx*/; key_idx < keymap.size() && rmv_row > keymap[key_idx].row; key_idx++)
{
if(rmv_row == keymap[key_idx].row)
{
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);
keymap.erase(keymap.begin() + key_idx);
}
}
/*---------------------------------------------------------------------*\
| Loop through the remaining rows and adjust row number |
\*---------------------------------------------------------------------*/
if(rmv_row < keymap[key_idx].row)
{
for(/*key_idx*/; key_idx < keymap.size(); key_idx++)
{
keymap[key_idx].row--;
}
LOG_DEBUG("[%s] Remove row %d successful", KLM_CLASS_NAME, rmv_row);
}
}
std::string KeyboardLayoutManager::GetName()
{

View File

@@ -60,6 +60,7 @@ enum KEYBOARD_OPCODE
KEYBOARD_OPCODE_SWAP_ONLY = 1,
KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT = 2,
KEYBOARD_OPCODE_INS_SHFT_ADJACENT = 3,
KEYBOARD_OPCODE_REMOVE_ROW = 4,
};
typedef struct
@@ -132,6 +133,7 @@ private:
void SwapKey(keyboard_led keys);
void SwapKeys(std::vector<keyboard_led> keys);
void RemoveKey(keyboard_led keys);
void RemoveRow(uint8_t row);
KEYBOARD_LAYOUT layout;
KEYBOARD_SIZE physical_size;