Add a UI option to disable expanding keys in the device view

This commit is contained in:
Adam Honse 2023-05-06 22:51:47 -05:00
parent a9fca21544
commit 94ca670cbe
4 changed files with 222 additions and 178 deletions

View file

@ -7,8 +7,10 @@
\*-----------------------------------------------------*/
#include "DeviceView.h"
#include "ResourceManager.h"
#include "RGBControllerKeyNames.h"
#include "RGBController.h"
#include "SettingsManager.h"
#include <QPainter>
#include <QResizeEvent>
#include <QStyleOption>
@ -251,6 +253,22 @@ void DeviceView::InitDeviceView()
unsigned int segment_count = 0;
float totalHeight = 0;
/*-----------------------------------------------------*\
| Get device view settings |
\*-----------------------------------------------------*/
SettingsManager* settings_manager = ResourceManager::get()->GetSettingsManager();
std::string ui_string = "UserInterface";
json ui_settings;
bool disable_expansion = false;
ui_settings = settings_manager->GetSettings(ui_string);
if(ui_settings.contains("disable_key_expansion"))
{
disable_expansion = ui_settings["disable_key_expansion"];
}
/*-----------------------------------------------------*\
| Determine the total height (in LEDs) of all zones |
\*-----------------------------------------------------*/
@ -342,60 +360,63 @@ void DeviceView::InitDeviceView()
led_pos[color_idx].matrix_w = (1 - (2 * PAD_LED));
led_pos[color_idx].matrix_h = (1 - (2 * PAD_LED));
/*-----------------------------------------------------*\
| Expand large keys to fill empty spaces in matrix, if |
| possible. Large keys can fill left, down, up, or wide|
| Fill Left: |
| Tab |
| Caps Lock |
| Left Shift |
| Right Shift |
| Backspace |
| Number Pad 0 |
| |
| Fill Up or Down: |
| Number Pad Enter |
| Number Pad + |
| |
| Fill Wide: |
| Space |
\*-----------------------------------------------------*/
if(led_x < map->width - 1 && map->map[map_idx + 1] == 0xFFFFFFFF)
if(!disable_expansion)
{
if( ( controller->leds[color_idx].name == KEY_EN_TAB )
|| ( controller->leds[color_idx].name == KEY_EN_CAPS_LOCK )
|| ( controller->leds[color_idx].name == KEY_EN_LEFT_SHIFT )
|| ( controller->leds[color_idx].name == KEY_EN_RIGHT_SHIFT)
|| ( controller->leds[color_idx].name == KEY_EN_BACKSPACE )
|| ( controller->leds[color_idx].name == KEY_EN_NUMPAD_0 ) )
/*-----------------------------------------------------*\
| Expand large keys to fill empty spaces in matrix, if |
| possible. Large keys can fill left, down, up, or wide|
| Fill Left: |
| Tab |
| Caps Lock |
| Left Shift |
| Right Shift |
| Backspace |
| Number Pad 0 |
| |
| Fill Up or Down: |
| Number Pad Enter |
| Number Pad + |
| |
| Fill Wide: |
| Space |
\*-----------------------------------------------------*/
if(led_x < map->width - 1 && map->map[map_idx + 1] == 0xFFFFFFFF)
{
led_pos[color_idx].matrix_w += 1;
if( ( controller->leds[color_idx].name == KEY_EN_TAB )
|| ( controller->leds[color_idx].name == KEY_EN_CAPS_LOCK )
|| ( controller->leds[color_idx].name == KEY_EN_LEFT_SHIFT )
|| ( controller->leds[color_idx].name == KEY_EN_RIGHT_SHIFT)
|| ( controller->leds[color_idx].name == KEY_EN_BACKSPACE )
|| ( controller->leds[color_idx].name == KEY_EN_NUMPAD_0 ) )
{
led_pos[color_idx].matrix_w += 1;
}
}
}
if( ( controller->leds[color_idx].name == KEY_EN_NUMPAD_ENTER )
|| ( controller->leds[color_idx].name == KEY_EN_NUMPAD_PLUS ) )
{
if(led_y < map->height - 1 && map->map[map_idx + map->width] == 0xFFFFFFFF)
if( ( controller->leds[color_idx].name == KEY_EN_NUMPAD_ENTER )
|| ( controller->leds[color_idx].name == KEY_EN_NUMPAD_PLUS ) )
{
led_pos[color_idx].matrix_h += 1;
if(led_y < map->height - 1 && map->map[map_idx + map->width] == 0xFFFFFFFF)
{
led_pos[color_idx].matrix_h += 1;
}
/* TODO: check if there isn't another widened key above */
else if(led_y > 0 && map->map[map_idx - map->width] == 0xFFFFFFFF)
{
led_pos[color_idx].matrix_y -= 1;
led_pos[color_idx].matrix_h += 1;
}
}
/* TODO: check if there isn't another widened key above */
else if(led_y > 0 && map->map[map_idx - map->width] == 0xFFFFFFFF)
else if(controller->leds[color_idx].name == KEY_EN_SPACE)
{
led_pos[color_idx].matrix_y -= 1;
led_pos[color_idx].matrix_h += 1;
}
}
else if(controller->leds[color_idx].name == KEY_EN_SPACE)
{
for(unsigned int map_idx2 = map_idx - 1; map_idx2 > led_y * map->width && map->map[map_idx2] == 0xFFFFFFFF; --map_idx2)
{
led_pos[color_idx].matrix_x -= 1;
led_pos[color_idx].matrix_w += 1;
}
for(unsigned int map_idx2 = map_idx + 1; map_idx2 < (led_y + 1) * map->width && map->map[map_idx2] == 0xFFFFFFFF; ++map_idx2)
{
led_pos[color_idx].matrix_w += 1;
for(unsigned int map_idx2 = map_idx - 1; map_idx2 > led_y * map->width && map->map[map_idx2] == 0xFFFFFFFF; --map_idx2)
{
led_pos[color_idx].matrix_x -= 1;
led_pos[color_idx].matrix_w += 1;
}
for(unsigned int map_idx2 = map_idx + 1; map_idx2 < (led_y + 1) * map->width && map->map[map_idx2] == 0xFFFFFFFF; ++map_idx2)
{
led_pos[color_idx].matrix_w += 1;
}
}
}
}