This commit is contained in:
olikraus 2024-08-27 18:01:15 +02:00
parent 6de64e3992
commit 49161a4e12
5 changed files with 372 additions and 2 deletions

View File

@ -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)

View File

@ -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 */

View File

@ -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);

View File

@ -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;
}

View File

@ -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)