Slider update

master
erikkaashoek 5 years ago
parent bca0f83a46
commit edb87de448

@ -1011,6 +1011,15 @@ typedef struct ui_button {
char text[32];
} ui_button_t;
typedef struct ui_slider {
uint8_t keypad;
uint8_t has_steps;
uint16_t slider_position;
uint16_t slider_step;
float min_value;
float max_value;
} ui_slider_t;
extern uistat_t uistat;
void ui_init(void);
void ui_show(void);

46
ui.c

@ -1865,6 +1865,12 @@ static int prev_touch_button = -1;
enum { SL_UNKNOWN, SL_SPAN, SL_MOVE};
void set_keypad_value(int v)
{
keypad_mode = v;
set_numeric_value();
}
static void
menu_select_touch(int i)
{
@ -1872,26 +1878,14 @@ menu_select_touch(int i)
draw_menu();
#if 1 // drag values
const menuitem_t *menu = menu_stack[menu_current_level];
int keypad = menu[i].data;
prev_touch_time = chVTGetSystemTimeX();
if (menu_is_form(menu) && MT_MASK(menu[i].type) == MT_KEYPAD && menu[i].data == KM_CENTER){
if (menu_is_form(menu) && MT_MASK(menu[i].type) == MT_KEYPAD && keypad == KM_CENTER){
int touch_x, touch_y, prev_touch_x;
touch_position(&touch_x, &touch_y);
int v = menu[i].data;
// int old_keypad_mode = keypad_mode;
#if 0
keypad_mode = v;
fetch_numeric_target();
float old_value;
old_value = uistat.value - slider_position * slider_delta; // Center value;
if (old_value < minFreq)
old_value = minFreq;
if (old_value > maxFreq)
old_value = maxFreq;
#endif
// keypad_mode = old_keypad_mode;
systime_t dt = 0;
int moving = SL_UNKNOWN;
int mode = SL_UNKNOWN;
while (touch_check() != EVT_TOUCH_NONE) {
prev_touch_x = touch_x;
touch_position(&touch_x, &touch_y);
@ -1901,21 +1895,21 @@ menu_select_touch(int i)
if (dt > BUTTON_DOWN_LONG_TICKS) {
int old_keypad_mode = keypad_mode;
keypad_mode = v;
keypad_mode = keypad;
fetch_numeric_target();
#define TOUCH_DEAD_ZONE 20
int new_slider = touch_x - LCD_WIDTH/2;
#if 1
float saved_value;
if (moving == SL_UNKNOWN ) {
if (mode == SL_UNKNOWN ) {
if (slider_position - TOUCH_DEAD_ZONE < new_slider && new_slider < slider_position + TOUCH_DEAD_ZONE) { // Pick up slider
moving = SL_MOVE;
mode = SL_MOVE;
} else {
moving = SL_SPAN;
mode = SL_SPAN;
goto first_span;
}
}
if (moving == SL_MOVE ) {
if (mode == SL_MOVE ) {
#endif
if (touch_x != prev_touch_x /* - 1 || prev_touch_x + 1 < touch_x */ ) {
uistat.value = uistat.value - slider_position * slider_delta + new_slider * slider_delta;
@ -1924,13 +1918,12 @@ menu_select_touch(int i)
if (uistat.value > maxFreq)
uistat.value = maxFreq;
slider_position = new_slider;
keypad_mode = v;
set_numeric_value();
set_keypad_value(keypad);
perform(false, 0, (uint32_t)uistat.value, false);
draw_menu();
}
#if 1
} else if (moving == SL_SPAN ){
} else if (mode == SL_SPAN ){
if (touch_x != prev_touch_x) {
first_span:
saved_value = uistat.value;
@ -1942,14 +1935,12 @@ menu_select_touch(int i)
uint32_t old_minFreq = minFreq;
minFreq = 0;
uistat.value = slider_delta;
keypad_mode = v;
set_numeric_value();
set_keypad_value(keypad);
draw_menu(); // Show slider span
slider_position = 0; // reset slider
minFreq = old_minFreq;
uistat.value = saved_value;
keypad_mode = v;
set_numeric_value();
set_keypad_value(keypad);
}
}
#else
@ -1959,7 +1950,6 @@ menu_select_touch(int i)
slider_delta *=10;
#endif
keypad_mode = old_keypad_mode;
// return;
}
}
if (dt > BUTTON_DOWN_LONG_TICKS) {

@ -447,6 +447,14 @@ static const struct {
{keypads_positive , "ATTACK"}, // KM_ATTACK
};
#if 0 // Not used
ui_slider_t ui_sliders [] =
{
{ KM_CENTER, true, 0, 1000000, 0, 350000000, M_GENLOW},
{ KM_CENTER, true, 0, 1000000, 240000000, 960000000, M_GENHIGH},
{ KM_LOWOUTLEVEL, false,0, 1, -76, -6, M_GENLOW},
};
#endif
// ===[MENU CALLBACKS]=========================================================
static const menuitem_t menu_lowoutputmode[];

Loading…
Cancel
Save

Powered by TurnKey Linux.