Slider update

master
erikkaashoek 5 years ago
parent bca0f83a46
commit edb87de448

@ -1011,6 +1011,15 @@ typedef struct ui_button {
char text[32]; char text[32];
} ui_button_t; } 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; extern uistat_t uistat;
void ui_init(void); void ui_init(void);
void ui_show(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}; enum { SL_UNKNOWN, SL_SPAN, SL_MOVE};
void set_keypad_value(int v)
{
keypad_mode = v;
set_numeric_value();
}
static void static void
menu_select_touch(int i) menu_select_touch(int i)
{ {
@ -1872,26 +1878,14 @@ menu_select_touch(int i)
draw_menu(); draw_menu();
#if 1 // drag values #if 1 // drag values
const menuitem_t *menu = menu_stack[menu_current_level]; const menuitem_t *menu = menu_stack[menu_current_level];
int keypad = menu[i].data;
prev_touch_time = chVTGetSystemTimeX(); 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; int touch_x, touch_y, prev_touch_x;
touch_position(&touch_x, &touch_y); 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; systime_t dt = 0;
int moving = SL_UNKNOWN; int mode = SL_UNKNOWN;
while (touch_check() != EVT_TOUCH_NONE) { while (touch_check() != EVT_TOUCH_NONE) {
prev_touch_x = touch_x; prev_touch_x = touch_x;
touch_position(&touch_x, &touch_y); touch_position(&touch_x, &touch_y);
@ -1901,21 +1895,21 @@ menu_select_touch(int i)
if (dt > BUTTON_DOWN_LONG_TICKS) { if (dt > BUTTON_DOWN_LONG_TICKS) {
int old_keypad_mode = keypad_mode; int old_keypad_mode = keypad_mode;
keypad_mode = v; keypad_mode = keypad;
fetch_numeric_target(); fetch_numeric_target();
#define TOUCH_DEAD_ZONE 20 #define TOUCH_DEAD_ZONE 20
int new_slider = touch_x - LCD_WIDTH/2; int new_slider = touch_x - LCD_WIDTH/2;
#if 1 #if 1
float saved_value; 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 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 { } else {
moving = SL_SPAN; mode = SL_SPAN;
goto first_span; goto first_span;
} }
} }
if (moving == SL_MOVE ) { if (mode == SL_MOVE ) {
#endif #endif
if (touch_x != prev_touch_x /* - 1 || prev_touch_x + 1 < touch_x */ ) { 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; 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) if (uistat.value > maxFreq)
uistat.value = maxFreq; uistat.value = maxFreq;
slider_position = new_slider; slider_position = new_slider;
keypad_mode = v; set_keypad_value(keypad);
set_numeric_value();
perform(false, 0, (uint32_t)uistat.value, false); perform(false, 0, (uint32_t)uistat.value, false);
draw_menu(); draw_menu();
} }
#if 1 #if 1
} else if (moving == SL_SPAN ){ } else if (mode == SL_SPAN ){
if (touch_x != prev_touch_x) { if (touch_x != prev_touch_x) {
first_span: first_span:
saved_value = uistat.value; saved_value = uistat.value;
@ -1942,14 +1935,12 @@ menu_select_touch(int i)
uint32_t old_minFreq = minFreq; uint32_t old_minFreq = minFreq;
minFreq = 0; minFreq = 0;
uistat.value = slider_delta; uistat.value = slider_delta;
keypad_mode = v; set_keypad_value(keypad);
set_numeric_value();
draw_menu(); // Show slider span draw_menu(); // Show slider span
slider_position = 0; // reset slider slider_position = 0; // reset slider
minFreq = old_minFreq; minFreq = old_minFreq;
uistat.value = saved_value; uistat.value = saved_value;
keypad_mode = v; set_keypad_value(keypad);
set_numeric_value();
} }
} }
#else #else
@ -1959,7 +1950,6 @@ menu_select_touch(int i)
slider_delta *=10; slider_delta *=10;
#endif #endif
keypad_mode = old_keypad_mode; keypad_mode = old_keypad_mode;
// return;
} }
} }
if (dt > BUTTON_DOWN_LONG_TICKS) { if (dt > BUTTON_DOWN_LONG_TICKS) {

@ -447,6 +447,14 @@ static const struct {
{keypads_positive , "ATTACK"}, // KM_ATTACK {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]========================================================= // ===[MENU CALLBACKS]=========================================================
static const menuitem_t menu_lowoutputmode[]; static const menuitem_t menu_lowoutputmode[];

Loading…
Cancel
Save

Powered by TurnKey Linux.