#include "gui_list_commands.h"
#include "direction.h"
#include "gui.h"
#include "input.h"
#include "keyboard_const.h"
#include "rotation_const.h"
static void command_handler_gui_list_clicked(void *state, int amount) {
gui_list_command_state_t *click_state = (gui_list_command_state_t*)state;
if (amount > 1) {
click_state->clicked(click_state->container, click_state->state,
gui_list_get_selected_index(click_state->container));
}
}
static void command_handler_zoom_in(void *state,
int amount) {
gui_list_command_state_t *click_state = (gui_list_command_state_t *)state;
if (click_state->window == click_state->gui->active_window &&
click_state->font != NULL && amount != 0) {
click_state->font->size += amount > 0 ? 1 : -1;
gui_list_container_set_item_height(click_state->container,
click_state->font->size);
}
}
static void command_handler_zoom_out(void *state,
int amount) {
command_handler_zoom_in(state, -amount);
}
static void command_handler_move(void *state, direction_t direction, int amount) {
gui_list_command_state_t *click_state = (gui_list_command_state_t *)state;
if (click_state->window == click_state->gui->active_window) {
int32_t x = 0, y = 0;
direction_move_xy(direction, &x, &y, amount);
gui_list_scroll(click_state->container, (int16_t)x, (int16_t)y);
}
}
static void command_handler_move_left(void *state, int amount) {
command_handler_move(state, LEFT, amount);
}
static void command_handler_move_right(void *state, int amount) {
command_handler_move(state, RIGHT, amount);
}
static void command_handler_move_down(void *state, int amount) {
command_handler_move(state, DOWN, amount);
}
static void command_handler_move_up(void *state, int amount) {
command_handler_move(state, UP, amount);
}
void gui_list_commands_register(commands_t *commands, gui_list_command_state_t *state) {
commands_register(commands, IN_KEYBOARD, 13, command_handler_gui_list_clicked, state);
commands_register(commands, IN_KEYBOARD, 'v', command_handler_gui_list_clicked,
state);
commands_register(commands, IN_KEYBOARD, KEYBOARD_DOWN,
command_handler_move_down, state);
commands_register(commands, IN_KEYBOARD, KEYBOARD_UP, command_handler_move_up,
state);
commands_register(commands, IN_KEYBOARD, KEYBOARD_LEFT,
command_handler_move_left, state);
commands_register(commands, IN_KEYBOARD, KEYBOARD_RIGHT,
command_handler_move_right, state);
commands_register(commands, IN_ENCODER_ROTATE, ROTATION_ENCODER_HORIZONTAL,
command_handler_move_right, state);
commands_register(commands, IN_ENCODER_ROTATE, ROTATION_ENCODER_VERTICAL,
command_handler_move_down, state);
if (state->font != NULL) {
commands_register(commands, IN_KEYBOARD, KEYBOARD_ZOOM_IN,
command_handler_zoom_in, state);
commands_register(commands, IN_KEYBOARD, KEYBOARD_ZOOM_OUT,
command_handler_zoom_out, state);
commands_register(commands, IN_ENCODER_ROTATE, ROTATION_ENCODER_ZOOM,
command_handler_zoom_in, state);
}
}