mirror of
https://github.com/olikraus/u8g2.git
synced 2025-05-08 15:56:09 +08:00
issue #2316
This commit is contained in:
parent
6de64e3992
commit
49161a4e12
235
csrc/mui_u8g2.c
235
csrc/mui_u8g2.c
@ -891,6 +891,7 @@ uint8_t mui_u8g2_btn_exit_wm_fi(mui_t *ui, uint8_t msg)
|
||||
|
||||
|
||||
/*===============================================================================*/
|
||||
/* u8 min max */
|
||||
|
||||
static void mui_u8g2_u8_vmm_draw_wm_pi(mui_t *ui) MUI_NOINLINE;
|
||||
static void mui_u8g2_u8_vmm_draw_wm_pi(mui_t *ui)
|
||||
@ -918,7 +919,6 @@ static void mui_u8g2_u8_vmm_draw_wm_pi(mui_t *ui)
|
||||
s++;
|
||||
cnt--;
|
||||
}
|
||||
//mui_u8g2_draw_button_utf(ui, mui_u8g2_get_pi_flags(ui), u8g2_GetStrWidth(u8g2, s)+1, 1, MUI_U8G2_V_PADDING, u8x8_u8toa(*value, cnt));
|
||||
mui_u8g2_draw_button_pi(ui, u8g2_GetStrWidth(u8g2, s)+1, 1, u8x8_u8toa(*value, cnt));
|
||||
}
|
||||
|
||||
@ -1132,6 +1132,239 @@ uint8_t mui_u8g2_u8_min_max_wm_mud_pf(mui_t *ui, uint8_t msg)
|
||||
|
||||
|
||||
/*===============================================================================*/
|
||||
/* s8 min max */
|
||||
|
||||
static void mui_u8g2_s8_vmm_draw_wm_pi(mui_t *ui) MUI_NOINLINE;
|
||||
static void mui_u8g2_s8_vmm_draw_wm_pi(mui_t *ui)
|
||||
{
|
||||
u8g2_t *u8g2 = mui_get_U8g2(ui);
|
||||
mui_u8g2_s8_min_max_t *vmm= (mui_u8g2_s8_min_max_t *)muif_get_data(ui->uif);
|
||||
char buf[6] = "+999";
|
||||
int8_t *value = mui_u8g2_s8mm_get_valptr(vmm);
|
||||
int8_t min = mui_u8g2_s8mm_get_min(vmm);
|
||||
int8_t max = mui_u8g2_s8mm_get_max(vmm);
|
||||
uint8_t cnt = 1; // number of digits
|
||||
|
||||
if ( *value > max )
|
||||
*value = max;
|
||||
if ( *value <= min )
|
||||
*value = min;
|
||||
if ( max >= 10 || max <= -10 || min >= 10 || min <= -10 )
|
||||
cnt = 2;
|
||||
if ( max >= 100 || max <= -100 || min >= 100 || min <= -100 )
|
||||
cnt = 3;
|
||||
buf[cnt+1] = '\0';
|
||||
mui_u8g2_draw_button_pi(ui, u8g2_GetStrWidth(u8g2, buf)+1, 1, u8x8_s8toa(*value, cnt));
|
||||
}
|
||||
|
||||
|
||||
uint8_t mui_u8g2_s8_min_max_wm_mse_pi(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
mui_u8g2_s8_min_max_t *vmm= (mui_u8g2_s8_min_max_t *)muif_get_data(ui->uif);
|
||||
int8_t *value = mui_u8g2_s8mm_get_valptr(vmm);
|
||||
int8_t min = mui_u8g2_s8mm_get_min(vmm);
|
||||
int8_t max = mui_u8g2_s8mm_get_max(vmm);
|
||||
switch(msg)
|
||||
{
|
||||
case MUIF_MSG_DRAW:
|
||||
mui_u8g2_s8_vmm_draw_wm_pi(ui);
|
||||
break;
|
||||
case MUIF_MSG_FORM_START:
|
||||
break;
|
||||
case MUIF_MSG_FORM_END:
|
||||
break;
|
||||
case MUIF_MSG_CURSOR_ENTER:
|
||||
break;
|
||||
case MUIF_MSG_CURSOR_SELECT:
|
||||
case MUIF_MSG_VALUE_INCREMENT:
|
||||
(*value)++;
|
||||
if ( *value > max ) *value = min;
|
||||
break;
|
||||
case MUIF_MSG_VALUE_DECREMENT:
|
||||
if ( *value > min ) (*value)--; else *value = max;
|
||||
break;
|
||||
case MUIF_MSG_CURSOR_LEAVE:
|
||||
break;
|
||||
case MUIF_MSG_TOUCH_DOWN:
|
||||
break;
|
||||
case MUIF_MSG_TOUCH_UP:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t mui_u8g2_s8_min_max_wm_mud_pi(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
mui_u8g2_s8_min_max_t *vmm= (mui_u8g2_s8_min_max_t *)muif_get_data(ui->uif);
|
||||
int8_t *value = mui_u8g2_s8mm_get_valptr(vmm);
|
||||
int8_t min = mui_u8g2_s8mm_get_min(vmm);
|
||||
int8_t max = mui_u8g2_s8mm_get_max(vmm);
|
||||
switch(msg)
|
||||
{
|
||||
case MUIF_MSG_DRAW:
|
||||
mui_u8g2_s8_vmm_draw_wm_pi(ui);
|
||||
break;
|
||||
case MUIF_MSG_FORM_START:
|
||||
break;
|
||||
case MUIF_MSG_FORM_END:
|
||||
break;
|
||||
case MUIF_MSG_CURSOR_ENTER:
|
||||
break;
|
||||
case MUIF_MSG_CURSOR_SELECT:
|
||||
case MUIF_MSG_VALUE_INCREMENT:
|
||||
case MUIF_MSG_VALUE_DECREMENT:
|
||||
/* toggle between normal mode and capture next/prev mode */
|
||||
ui->is_mud = !ui->is_mud;
|
||||
break;
|
||||
case MUIF_MSG_CURSOR_LEAVE:
|
||||
break;
|
||||
case MUIF_MSG_TOUCH_DOWN:
|
||||
break;
|
||||
case MUIF_MSG_TOUCH_UP:
|
||||
break;
|
||||
case MUIF_MSG_EVENT_NEXT:
|
||||
if ( ui->is_mud )
|
||||
{
|
||||
(*value)++;
|
||||
if ( *value > max )
|
||||
*value = min;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
case MUIF_MSG_EVENT_PREV:
|
||||
if ( ui->is_mud )
|
||||
{
|
||||
if ( *value <= min )
|
||||
*value = max;
|
||||
else
|
||||
(*value)--;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void mui_u8g2_s8_vmm_draw_wm_pf(mui_t *ui) MUI_NOINLINE;
|
||||
static void mui_u8g2_s8_vmm_draw_wm_pf(mui_t *ui)
|
||||
{
|
||||
u8g2_t *u8g2 = mui_get_U8g2(ui);
|
||||
mui_u8g2_s8_min_max_t *vmm= (mui_u8g2_s8_min_max_t *)muif_get_data(ui->uif);
|
||||
char buf[4] = "999";
|
||||
char *s = buf;
|
||||
int8_t *value = mui_u8g2_s8mm_get_valptr(vmm);
|
||||
int8_t min = mui_u8g2_s8mm_get_min(vmm);
|
||||
int8_t max = mui_u8g2_s8mm_get_max(vmm);
|
||||
uint8_t cnt = 1; // number of digits
|
||||
|
||||
if ( *value > max )
|
||||
*value = max;
|
||||
if ( *value <= min )
|
||||
*value = min;
|
||||
if ( max >= 10 || max <= -10 || min >= 10 || min <= -10 )
|
||||
cnt = 2;
|
||||
if ( max >= 100 || max <= -100 || min >= 100 || min <= -100 )
|
||||
cnt = 3;
|
||||
buf[cnt+1] = '\0';
|
||||
mui_u8g2_draw_button_pf(ui, u8g2_GetStrWidth(u8g2, buf)+1, 1, u8x8_s8toa(*value, cnt));
|
||||
}
|
||||
|
||||
|
||||
uint8_t mui_u8g2_s8_min_max_wm_mse_pf(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
mui_u8g2_s8_min_max_t *vmm= (mui_u8g2_s8_min_max_t *)muif_get_data(ui->uif);
|
||||
int8_t *value = mui_u8g2_s8mm_get_valptr(vmm);
|
||||
int8_t min = mui_u8g2_s8mm_get_min(vmm);
|
||||
int8_t max = mui_u8g2_s8mm_get_max(vmm);
|
||||
switch(msg)
|
||||
{
|
||||
case MUIF_MSG_DRAW:
|
||||
mui_u8g2_s8_vmm_draw_wm_pf(ui);
|
||||
break;
|
||||
case MUIF_MSG_FORM_START:
|
||||
break;
|
||||
case MUIF_MSG_FORM_END:
|
||||
break;
|
||||
case MUIF_MSG_CURSOR_ENTER:
|
||||
break;
|
||||
case MUIF_MSG_CURSOR_SELECT:
|
||||
case MUIF_MSG_VALUE_INCREMENT:
|
||||
(*value)++;
|
||||
if ( *value > max ) *value = min;
|
||||
break;
|
||||
case MUIF_MSG_VALUE_DECREMENT:
|
||||
if ( *value > min ) (*value)--; else *value = max;
|
||||
break;
|
||||
case MUIF_MSG_CURSOR_LEAVE:
|
||||
break;
|
||||
case MUIF_MSG_TOUCH_DOWN:
|
||||
break;
|
||||
case MUIF_MSG_TOUCH_UP:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t mui_u8g2_s8_min_max_wm_mud_pf(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
mui_u8g2_s8_min_max_t *vmm= (mui_u8g2_s8_min_max_t *)muif_get_data(ui->uif);
|
||||
int8_t *value = mui_u8g2_s8mm_get_valptr(vmm);
|
||||
int8_t min = mui_u8g2_s8mm_get_min(vmm);
|
||||
int8_t max = mui_u8g2_s8mm_get_max(vmm);
|
||||
switch(msg)
|
||||
{
|
||||
case MUIF_MSG_DRAW:
|
||||
mui_u8g2_s8_vmm_draw_wm_pf(ui);
|
||||
break;
|
||||
case MUIF_MSG_FORM_START:
|
||||
break;
|
||||
case MUIF_MSG_FORM_END:
|
||||
break;
|
||||
case MUIF_MSG_CURSOR_ENTER:
|
||||
break;
|
||||
case MUIF_MSG_CURSOR_SELECT:
|
||||
case MUIF_MSG_VALUE_INCREMENT:
|
||||
case MUIF_MSG_VALUE_DECREMENT:
|
||||
/* toggle between normal mode and capture next/prev mode */
|
||||
ui->is_mud = !ui->is_mud;
|
||||
break;
|
||||
case MUIF_MSG_CURSOR_LEAVE:
|
||||
break;
|
||||
case MUIF_MSG_TOUCH_DOWN:
|
||||
break;
|
||||
case MUIF_MSG_TOUCH_UP:
|
||||
break;
|
||||
case MUIF_MSG_EVENT_NEXT:
|
||||
if ( ui->is_mud )
|
||||
{
|
||||
(*value)++;
|
||||
if ( *value > max )
|
||||
*value = min;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
case MUIF_MSG_EVENT_PREV:
|
||||
if ( ui->is_mud )
|
||||
{
|
||||
if ( *value <= min )
|
||||
*value = max;
|
||||
else
|
||||
(*value)--;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*===============================================================================*/
|
||||
/* u8 bar graph */
|
||||
|
||||
static uint8_t mui_u8g2_u8_bar_mse_msg_handler(mui_t *ui, uint8_t msg) MUI_NOINLINE;
|
||||
static uint8_t mui_u8g2_u8_bar_mse_msg_handler(mui_t *ui, uint8_t msg)
|
||||
|
@ -123,6 +123,26 @@ typedef const struct mui_u8g2_u8_min_max_struct mui_u8g2_u8_min_max_t;
|
||||
# define mui_u8g2_u8mm_get_valptr(u8mm) ((u8mm)->value)
|
||||
#endif
|
||||
|
||||
struct mui_u8g2_s8_min_max_struct
|
||||
{
|
||||
int8_t *value;
|
||||
int8_t min;
|
||||
int8_t max;
|
||||
} MUI_PROGMEM;
|
||||
|
||||
typedef const struct mui_u8g2_s8_min_max_struct mui_u8g2_s8_min_max_t;
|
||||
|
||||
#if defined(__GNUC__) && defined(__AVR__)
|
||||
# define mui_u8g2_s8mm_get_min(u8mm) ((int8_t)mui_pgm_read(&((u8mm)->min)))
|
||||
# define mui_u8g2_s8mm_get_max(u8mm) ((int8_t)mui_pgm_read(&((u8mm)->max)))
|
||||
# define mui_u8g2_s8mm_get_valptr(u8mm) ((int8_t *)mui_pgm_wread(&((u8mm)->value)))
|
||||
#else
|
||||
# define mui_u8g2_s8mm_get_min(u8mm) ((u8mm)->min)
|
||||
# define mui_u8g2_s8mm_get_max(u8mm) ((u8mm)->max)
|
||||
# define mui_u8g2_s8mm_get_valptr(u8mm) ((u8mm)->value)
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
struct mui_u8g2_u8_min_max_step_struct
|
||||
{
|
||||
@ -260,10 +280,20 @@ uint8_t mui_u8g2_set_font_style_function(mui_t *ui, uint8_t msg);
|
||||
|
||||
uint8_t mui_u8g2_u8_min_max_wm_mse_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G2_U8_MIN_MAX, MUI_XY */
|
||||
uint8_t mui_u8g2_u8_min_max_wm_mud_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G2_U8_MIN_MAX, MUI_XY */
|
||||
|
||||
uint8_t mui_u8g2_u8_min_max_wm_mse_pf(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G2_U8_MIN_MAX, MUI_XY */
|
||||
uint8_t mui_u8g2_u8_min_max_wm_mud_pf(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G2_U8_MIN_MAX, MUI_XY */
|
||||
|
||||
#define MUIF_U8G2_S8_MIN_MAX(id, valptr, min, max, muif) \
|
||||
MUIF(id, MUIF_CFLAG_IS_CURSOR_SELECTABLE, \
|
||||
(void *)((mui_u8g2_s8_min_max_t [] ) {{ (valptr) MUI_U8G2_COMMA (min) MUI_U8G2_COMMA (max)}}), \
|
||||
(muif))
|
||||
|
||||
uint8_t mui_u8g2_s8_min_max_wm_mse_pi(mui_t *ui, uint8_t msg);
|
||||
uint8_t mui_u8g2_s8_min_max_wm_mud_pi(mui_t *ui, uint8_t msg);
|
||||
uint8_t mui_u8g2_s8_min_max_wm_mse_pf(mui_t *ui, uint8_t msg);
|
||||
uint8_t mui_u8g2_s8_min_max_wm_mud_pf(mui_t *ui, uint8_t msg);
|
||||
|
||||
|
||||
/*===== data = mui_u8g2_u8_min_max_step_t* =====*/
|
||||
|
||||
/* gcc note: the macro uses array compound literals to extend the lifetime in C++, see last section in https://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html */
|
||||
|
@ -1074,6 +1074,7 @@ uint8_t u8x8_GetUTF8Len(u8x8_t *u8x8, const char *s);
|
||||
/*==========================================*/
|
||||
/* itoa procedures */
|
||||
const char *u8x8_u8toa(uint8_t v, uint8_t d);
|
||||
const char *u8x8_s8toa(int8_t v, uint8_t d);
|
||||
const char *u8x8_u16toa(uint16_t v, uint8_t d);
|
||||
const char *u8x8_utoa(uint16_t v);
|
||||
|
||||
|
@ -65,3 +65,29 @@ const char *u8x8_u8toa(uint8_t v, uint8_t d)
|
||||
return u8x8_u8toap(buf, v) + d;
|
||||
}
|
||||
|
||||
const char *u8x8_s8toa(int8_t v, uint8_t d)
|
||||
{
|
||||
static char buf[5];
|
||||
uint16_t u = v;
|
||||
buf[0] = '+';
|
||||
if ( v < 0 )
|
||||
{
|
||||
buf[0] = '-';
|
||||
u = -v;
|
||||
}
|
||||
u8x8_u8toap(buf+1, (uint8_t)u);
|
||||
if ( d == 1 )
|
||||
{
|
||||
buf[1] = buf[3];
|
||||
buf[2] = '\0';
|
||||
}
|
||||
else if ( d == 2 )
|
||||
{
|
||||
buf[1] = buf[2];
|
||||
buf[2] = buf[3];
|
||||
buf[3] = '\0';
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
|
@ -18,6 +18,8 @@ mui_t ui;
|
||||
*/
|
||||
uint8_t number_input9 = 2; // variable where the user can input a number between 0 and 9
|
||||
uint8_t number_input99 = 95; // variable where the user can input a number between 0 and 99
|
||||
int8_t snumber_input9 = 2; // variable where the user can input a number between 0 and 9
|
||||
int8_t snumber_input99 = 95; // variable where the user can input a number between 0 and 99
|
||||
uint8_t chkbox1_input = 0;
|
||||
uint8_t chkbox2_input = 0;
|
||||
uint8_t radio_input = 0;
|
||||
@ -329,6 +331,12 @@ muif_t muif_list[] MUI_PROGMEM = {
|
||||
MUIF_U8G2_U16_LIST("AP", &list_selection_3, NULL, animals_get_str, animals_get_cnt, mui_u8g2_u16_list_parent_wm_pi),
|
||||
MUIF_U8G2_U16_LIST("AC", &list_selection_3, NULL, animals_get_str, animals_get_cnt, mui_u8g2_u16_list_child_w1_pi),
|
||||
|
||||
/* Form 90 */
|
||||
MUIF_U8G2_S8_MIN_MAX("M0", &snumber_input9, -9, 9, mui_u8g2_s8_min_max_wm_mse_pi),
|
||||
MUIF_U8G2_S8_MIN_MAX("M1", &snumber_input99, -99, 99, mui_u8g2_s8_min_max_wm_mud_pi),
|
||||
MUIF_U8G2_S8_MIN_MAX("M2", &snumber_input9, -9, 9, mui_u8g2_s8_min_max_wm_mse_pf),
|
||||
MUIF_U8G2_S8_MIN_MAX("M3", &snumber_input99, -99, 99, mui_u8g2_s8_min_max_wm_mud_pf),
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -342,6 +350,7 @@ MUI_STYLE(0)
|
||||
MUI_DATA("GP",
|
||||
MUI_10 "Goto Buttons|"
|
||||
MUI_20 "uint8 Number|"
|
||||
MUI_90 "int8 Number|"
|
||||
MUI_30 "uint8 Checkbox|"
|
||||
MUI_40 "uint8 Cycle Options|"
|
||||
MUI_50 "uint8 ParentChild Select|"
|
||||
@ -479,6 +488,77 @@ MUI_XYT("BK", 64, 59, " Ok ")
|
||||
|
||||
|
||||
|
||||
MUI_FORM(90)
|
||||
MUI_STYLE(1)
|
||||
MUI_LABEL(5,10, "int8 Number")
|
||||
MUI_XY("HR", 0,13)
|
||||
MUI_STYLE(0)
|
||||
MUI_DATA("GP",
|
||||
MUI_91 "s8_min_max_wm_mse_pi|"
|
||||
MUI_92 "s8_min_max_wm_mud_pi|"
|
||||
MUI_93 "s8_min_max_wm_mse_pf|"
|
||||
MUI_94 "s8_min_max_wm_mud_pf|"
|
||||
MUI_1 "Back to Main Menu" )
|
||||
MUI_XYA("GC", 5, 25, 0)
|
||||
MUI_XYA("GC", 5, 37, 1)
|
||||
MUI_XYA("GC", 5, 49, 2)
|
||||
MUI_XYA("GC", 5, 61, 3)
|
||||
|
||||
MUI_FORM(91)
|
||||
MUI_STYLE(2)
|
||||
MUI_LABEL(1,5, "mui_u8g2_s8_min_max_wm_mse_pi")
|
||||
MUI_LABEL(1,12, "MUIF_U8G2_S8_MIN_MAX")
|
||||
MUI_LABEL(1,19, "MUI_XY")
|
||||
MUI_LABEL(1,25, "Input for int8_t number")
|
||||
MUI_XY("HR", 0,26)
|
||||
MUI_STYLE(0)
|
||||
MUI_LABEL(1,40, "Number: ")
|
||||
MUI_XY("M0",70, 40)
|
||||
//MUI_GOTO(64, 59, 20, " Ok ")
|
||||
MUI_XYT("BK", 64, 59, " Ok ")
|
||||
|
||||
MUI_FORM(92)
|
||||
MUI_STYLE(2)
|
||||
MUI_LABEL(1,5, "mui_u8g2_s8_min_max_wm_mud_pi")
|
||||
MUI_LABEL(1,12, "MUIF_U8G2_S8_MIN_MAX")
|
||||
MUI_LABEL(1,19, "MUI_XY")
|
||||
MUI_LABEL(1,25, "Input for int8_t number")
|
||||
MUI_XY("HR", 0,26)
|
||||
MUI_STYLE(0)
|
||||
MUI_LABEL(1,40, "Number: ")
|
||||
MUI_XY("M1",70, 40)
|
||||
//MUI_GOTO(64, 59, 20, " Ok ")
|
||||
MUI_XYT("BK", 64, 59, " Ok ")
|
||||
|
||||
MUI_FORM(93)
|
||||
MUI_STYLE(2)
|
||||
MUI_LABEL(1,5, "mui_u8g2_s8_min_max_wm_mse_pf")
|
||||
MUI_LABEL(1,12, "MUIF_U8G2_S8_MIN_MAX")
|
||||
MUI_LABEL(1,19, "MUI_XY")
|
||||
MUI_LABEL(1,25, "Input for int8_t number")
|
||||
MUI_XY("HR", 0,26)
|
||||
MUI_STYLE(0)
|
||||
MUI_LABEL(1,40, "Number: ")
|
||||
MUI_XY("M2",70, 40)
|
||||
//MUI_GOTO(64, 59, 20, " Ok ")
|
||||
MUI_XYT("BK", 64, 59, " Ok ")
|
||||
|
||||
MUI_FORM(94)
|
||||
MUI_STYLE(2)
|
||||
MUI_LABEL(1,5, "mui_u8g2_s8_min_max_wm_mud_pf")
|
||||
MUI_LABEL(1,12, "MUIF_U8G2_S8_MIN_MAX")
|
||||
MUI_LABEL(1,19, "MUI_XY")
|
||||
MUI_LABEL(1,25, "Input for int8_t number")
|
||||
MUI_XY("HR", 0,26)
|
||||
MUI_STYLE(0)
|
||||
MUI_LABEL(1,40, "Number: ")
|
||||
MUI_XY("M3",70, 40)
|
||||
//MUI_GOTO(64, 59, 20, " Ok ")
|
||||
MUI_XYT("BK", 64, 59, " Ok ")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
MUI_FORM(30)
|
||||
MUI_STYLE(1)
|
||||
|
Loading…
x
Reference in New Issue
Block a user