UI: Add display settings

replace/195d1c7601b784f2e10933c6089f72cbd00e2131
Federico Amedeo Izzo 2021-01-26 22:04:19 +01:00
rodzic c9caff3b8d
commit 2533f35309
3 zmienionych plików z 88 dodań i 4 usunięć

Wyświetl plik

@ -50,6 +50,7 @@ enum uiScreen
MENU_SETTINGS,
SETTINGS_TIMEDATE,
SETTINGS_TIMEDATE_SET,
SETTINGS_DISPLAY,
LOW_BAT
};
@ -119,7 +120,8 @@ typedef struct ui_state_t
extern layout_t layout;
extern const char *menu_items[6];
extern const char *settings_items[1];
extern const char *settings_items[2];
extern const char *display_items[2];
extern const uint8_t menu_num;
extern const uint8_t settings_num;
extern const color_t color_black;

Wyświetl plik

@ -96,6 +96,7 @@ extern void _ui_drawMenuSettings(ui_state_t* ui_state);
extern void _ui_drawSettingsTimeDate(state_t* last_state);
extern void _ui_drawSettingsTimeDateSet(state_t* last_state, ui_state_t* ui_state);
#endif
extern void _ui_drawSettingsDisplay(state_t* last_state, ui_state_t* ui_state);
extern bool _ui_drawMacroMenu(state_t* last_state);
const char *menu_items[6] =
@ -108,11 +109,18 @@ const char *menu_items[6] =
"Settings"
};
const char *settings_items[1] =
const char *settings_items[2] =
{
#ifdef HAS_RTC
"Time & Date"
"Time & Date",
#endif
"Display"
};
const char *display_items[2] =
{
"Brightness",
"Contrast"
};
// Calculate number of main menu entries
@ -824,7 +832,21 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
break;
// Settings menu screen
case MENU_SETTINGS:
if(msg.keys & KEY_ENTER)
if(msg.keys & KEY_UP)
{
if(ui_state.menu_selected > 0)
ui_state.menu_selected -= 1;
else
ui_state.menu_selected = settings_num-1;
}
else if(msg.keys & KEY_DOWN)
{
if(ui_state.menu_selected < settings_num-1)
ui_state.menu_selected += 1;
else
ui_state.menu_selected = 0;
}
else if(msg.keys & KEY_ENTER)
{
// Open selected menu item
switch(ui_state.menu_selected)
@ -834,7 +856,12 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
case 0:
state.ui_screen = SETTINGS_TIMEDATE;
break;
case 1:
#else
case 0:
#endif
state.ui_screen = SETTINGS_DISPLAY;
break;
default:
state.ui_screen = MENU_TOP;
}
@ -895,6 +922,21 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
}
break;
#endif
case SETTINGS_DISPLAY:
if(msg.keys & KEY_LEFT)
{
}
else if(msg.keys & KEY_RIGHT)
{
}
else if(msg.keys & KEY_ESC)
{
// Return to settings menu
state.ui_screen = MENU_SETTINGS;
// Reset menu selection
ui_state.menu_selected = 0;
}
break;
}
}
}
@ -955,6 +997,9 @@ void ui_updateGUI(state_t last_state)
_ui_drawSettingsTimeDateSet(&last_state, &ui_state);
break;
#endif
case SETTINGS_DISPLAY:
_ui_drawSettingsDisplay(&last_state, &ui_state);
break;
// Low battery screen
case LOW_BAT:
_ui_drawLowBatteryScreen();

Wyświetl plik

@ -52,6 +52,33 @@ void _ui_drawMenuList(point_t pos, const char *entries[],
}
}
void _ui_drawSettingsDisplayList(point_t pos, const char *entries[],
uint8_t num_entries, uint8_t selected)
{
// Number of menu entries that fit in the screen height
uint8_t entries_in_screen = ((SCREEN_HEIGHT - pos.y) / layout.top_h) + 1;
uint8_t scroll = 0;
char entry_buf[MAX_ENTRY_LEN] = "";
for(int item=0; (item < num_entries) && (pos.y < SCREEN_HEIGHT); item++)
{
// If selection is off the screen, scroll screen
if(selected >= entries_in_screen)
scroll = selected - entries_in_screen + 1;
snprintf(entry_buf, sizeof(entry_buf), "%s", entries[item + scroll]);
if(item + scroll == selected)
{
// Draw rectangle under selected item, compensating for text height
point_t rect_pos = {0, pos.y - layout.top_h + (layout.text_v_offset*2)};
gfx_drawRect(rect_pos, SCREEN_WIDTH, layout.top_h, color_white, true);
gfx_print(pos, entry_buf, layout.top_font, TEXT_ALIGN_LEFT, color_black);
}
else
{
gfx_print(pos, entry_buf, layout.top_font, TEXT_ALIGN_LEFT, color_white);
}
pos.y += layout.top_h;
}
}
int _ui_getZoneName(char *buf, uint8_t max_len, uint8_t index)
{
zone_t zone;
@ -222,6 +249,16 @@ void _ui_drawSettingsTimeDateSet(state_t* last_state, ui_state_t* ui_state)
}
#endif
void _ui_drawSettingsDisplay(state_t* last_state, ui_state_t* ui_state)
{
gfx_clearScreen();
// Print "Display" on top bar
gfx_print(layout.top_left, "Display", layout.top_font,
TEXT_ALIGN_CENTER, color_white);
// Print menu entries
_ui_drawSettingsDisplayList(layout.line1_left, display_items, settings_num, ui_state->menu_selected);
}
bool _ui_drawMacroMenu(state_t* last_state) {
// Header
gfx_print(layout.top_left, "Macro Menu", layout.top_font, TEXT_ALIGN_CENTER,