Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
olikraus committed Jan 7, 2022
1 parent 20cff60 commit 27bc978
Show file tree
Hide file tree
Showing 7 changed files with 375 additions and 32 deletions.
4 changes: 2 additions & 2 deletions cppsrc/MUIU8g2.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ class MUIU8G2

uint8_t getCurrentCursorFocusPosition(void) { return mui_GetCurrentCursorFocusPosition(&mui); }
void draw(void) { mui_Draw(&mui); }
void getSelectableFieldTextOption(uint8_t form_id, uint8_t cursor_position, uint8_t nth_token)
{ mui_GetSelectableFieldTextOption(&mui, form_id, cursor_position, nth_token); }
//void getSelectableFieldTextOption(fds_t *fds, uint8_t nth_token)
// { mui_GetSelectableFieldTextOption(&mui, fds, nth_token); }
void enterForm(fds_t *fds, uint8_t initial_cursor_position) { mui_EnterForm(&mui, fds, initial_cursor_position); }
void leaveForm(void) { mui_LeaveForm(&mui); }
uint8_t gotoForm(uint8_t form_id, uint8_t initial_cursor_position) { return mui_GotoForm(&mui, form_id, initial_cursor_position); }
Expand Down
228 changes: 227 additions & 1 deletion csrc/mui_u8g2.c
Original file line number Diff line number Diff line change
Expand Up @@ -596,7 +596,6 @@ uint8_t mui_u8g2_btn_goto_w1_fi(mui_t *ui, uint8_t msg)

/*===============================================================================*/


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)
{
Expand Down Expand Up @@ -822,6 +821,233 @@ uint8_t mui_u8g2_u8_min_max_wm_mud_pf(mui_t *ui, uint8_t msg)
}


/*===============================================================================*/

static void mui_u8g2_u8_bar_draw_wm(mui_t *ui, uint8_t flags) MUI_NOINLINE;
static void mui_u8g2_u8_bar_draw_wm(mui_t *ui, uint8_t flags)
{
u8g2_t *u8g2 = mui_get_U8g2(ui);
mui_u8g2_u8_min_max_step_t *vmms= (mui_u8g2_u8_min_max_step_t *)muif_get_data(ui->uif);
char *s = "999";
uint8_t *value = mui_u8g2_u8mms_get_valptr(vmms);
uint8_t min = mui_u8g2_u8mms_get_min(vmms);
uint8_t max = mui_u8g2_u8mms_get_max(vmms);
uint8_t scale = 0;
//uint8_t step = mui_u8g2_u8mms_get_step(vmms);
uint8_t mms_flags = mui_u8g2_u8mms_get_flags(vmms);
uint8_t cnt = 3;
uint8_t height = u8g2_GetAscent(u8g2);
int8_t backup_descent;
u8g2_uint_t x = mui_get_x(ui);
u8g2_uint_t w = 0;

if ( mms_flags & MUI_MMS_2X_BAR )
scale |= 1;
if ( mms_flags & MUI_MMS_4X_BAR )
scale |= 2;

if ( *value > max )
*value = max;
if ( *value <= min )
*value = min;
if ( max < 100 )
{
s++;
cnt--;
}
if ( max < 10 )
{
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));

w += (max<<scale)+2;
u8g2_DrawFrame( u8g2, x, mui_get_y(ui)-height, w, height);
u8g2_DrawBox( u8g2, x+1, mui_get_y(ui)-height+1, (*value)<<scale, height-2);
if ( mms_flags & MUI_MMS_SHOW_VALUE )
{
w += 2;
u8g2_DrawStr(u8g2, x+w, mui_get_y(ui), u8x8_u8toa(*value, cnt) );
w += u8g2_GetStrWidth(u8g2, s);
w += 1;
}
backup_descent = u8g2->font_ref_descent;
u8g2->font_ref_descent = 0; /* hmm... that's a low level hack so that DrawButtonFrame ignores the descent value of the font */
u8g2_DrawButtonFrame(u8g2, x, mui_get_y(ui), flags, w, 1, 1);
u8g2->font_ref_descent = backup_descent;

}


uint8_t mui_u8g2_u8_bar_wm_mse_pi(mui_t *ui, uint8_t msg)
{
mui_u8g2_u8_min_max_step_t *vmms= (mui_u8g2_u8_min_max_step_t *)muif_get_data(ui->uif);
uint8_t *value = mui_u8g2_u8mms_get_valptr(vmms);
uint8_t min = mui_u8g2_u8mms_get_min(vmms);
uint8_t max = mui_u8g2_u8mms_get_max(vmms);
uint8_t step = mui_u8g2_u8mms_get_step(vmms);
switch(msg)
{
case MUIF_MSG_DRAW:
mui_u8g2_u8_bar_draw_wm(ui, mui_u8g2_get_pi_flags(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:
(*value)+=step;
if ( *value > max ) *value = min;
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_u8_bar_wm_mud_pi(mui_t *ui, uint8_t msg)
{
mui_u8g2_u8_min_max_step_t *vmms= (mui_u8g2_u8_min_max_step_t *)muif_get_data(ui->uif);
uint8_t *value = mui_u8g2_u8mms_get_valptr(vmms);
uint8_t min = mui_u8g2_u8mms_get_min(vmms);
uint8_t max = mui_u8g2_u8mms_get_max(vmms);
uint8_t step = mui_u8g2_u8mms_get_step(vmms);
switch(msg)
{
case MUIF_MSG_DRAW:
mui_u8g2_u8_bar_draw_wm(ui, mui_u8g2_get_pi_flags(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:
/* 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)+=step;
if ( *value > max )
*value = min;
return 1;
}
break;
case MUIF_MSG_EVENT_PREV:
if ( ui->is_mud )
{
if ( *value <= min || *value > max)
*value = max;
else
(*value)-=step;
return 1;
}
break;
}
return 0;
}

uint8_t mui_u8g2_u8_bar_wm_mse_pf(mui_t *ui, uint8_t msg)
{
mui_u8g2_u8_min_max_step_t *vmms= (mui_u8g2_u8_min_max_step_t *)muif_get_data(ui->uif);
uint8_t *value = mui_u8g2_u8mms_get_valptr(vmms);
uint8_t min = mui_u8g2_u8mms_get_min(vmms);
uint8_t max = mui_u8g2_u8mms_get_max(vmms);
uint8_t step = mui_u8g2_u8mms_get_step(vmms);
switch(msg)
{
case MUIF_MSG_DRAW:
mui_u8g2_u8_bar_draw_wm(ui, mui_u8g2_get_pf_flags(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:
(*value)+=step;
if ( *value > max ) *value = min;
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_u8_bar_wm_mud_pf(mui_t *ui, uint8_t msg)
{
mui_u8g2_u8_min_max_step_t *vmms= (mui_u8g2_u8_min_max_step_t *)muif_get_data(ui->uif);
uint8_t *value = mui_u8g2_u8mms_get_valptr(vmms);
uint8_t min = mui_u8g2_u8mms_get_min(vmms);
uint8_t max = mui_u8g2_u8mms_get_max(vmms);
uint8_t step = mui_u8g2_u8mms_get_step(vmms);
switch(msg)
{
case MUIF_MSG_DRAW:
mui_u8g2_u8_bar_draw_wm(ui, mui_u8g2_get_pf_flags(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:
/* 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)+=step;
if ( *value > max )
*value = min;
return 1;
}
break;
case MUIF_MSG_EVENT_PREV:
if ( ui->is_mud )
{
if ( *value <= min || *value > max)
*value = max;
else
(*value)-=step;
return 1;
}
break;
}
return 0;
}

/*===============================================================================*/

static uint8_t mui_is_valid_char(uint8_t c) MUI_NOINLINE;
Expand Down
59 changes: 51 additions & 8 deletions csrc/mui_u8g2.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,32 @@ typedef const struct mui_u8g2_u8_min_max_struct mui_u8g2_u8_min_max_t;
#endif


struct mui_u8g2_u8_min_max_step_struct
{
uint8_t *value;
uint8_t min;
uint8_t max;
uint8_t step;
uint8_t flags;
} MUI_PROGMEM;

typedef const struct mui_u8g2_u8_min_max_step_struct mui_u8g2_u8_min_max_step_t;

#if defined(__GNUC__) && defined(__AVR__)
# define mui_u8g2_u8mms_get_step(u8mm) mui_pgm_read(&((u8mm)->step))
# define mui_u8g2_u8mms_get_flags(u8mm) mui_pgm_read(&((u8mm)->flags))
# define mui_u8g2_u8mms_get_min(u8mm) mui_pgm_read(&((u8mm)->min))
# define mui_u8g2_u8mms_get_max(u8mm) mui_pgm_read(&((u8mm)->max))
# define mui_u8g2_u8mms_get_valptr(u8mm) ((uint8_t *)mui_pgm_wread(&((u8mm)->value)))
#else
# define mui_u8g2_u8mms_get_step(u8mm) ((u8mm)->step)
# define mui_u8g2_u8mms_get_flags(u8mm) ((u8mm)->flags)
# define mui_u8g2_u8mms_get_min(u8mm) ((u8mm)->min)
# define mui_u8g2_u8mms_get_max(u8mm) ((u8mm)->max)
# define mui_u8g2_u8mms_get_valptr(u8mm) ((u8mm)->value)
#endif


/* helper functions */

u8g2_uint_t mui_get_x(mui_t *ui);
Expand Down Expand Up @@ -142,11 +168,11 @@ uint8_t mui_u8g2_u8_opt_child_wm_mse_pi(mui_t *ui, uint8_t msg);

//uint8_t mui_u8g2_goto_parent(mui_t *ui, uint8_t msg); /* MUIF_RO, MUI_DATA (WARNING: Must appear only once per form!!! */
// renamed to
uint8_t mui_u8g2_goto_data(mui_t *ui, uint8_t msg); /* MUIF_RO, MUI_DATA (WARNING: Must appear only once per form!!! */
uint8_t mui_u8g2_goto_data(mui_t *ui, uint8_t msg); /* REF, MUIF_RO, MUI_DATA (WARNING: Must appear only once per form!!! */
//uint8_t mui_u8g2_goto_child_w1_mse_pi(mui_t *ui, uint8_t msg); /* MUIF_BUTTON, MUI_XYA */
// renamed to
uint8_t mui_u8g2_goto_form_w1_mse_pi(mui_t *ui, uint8_t msg); /* MUIF_BUTTON, MUI_XYA */
uint8_t mui_u8g2_goto_form_w1_mse_pf(mui_t *ui, uint8_t msg); /* MUIF_BUTTON, MUI_XYA */
uint8_t mui_u8g2_goto_form_w1_mse_pi(mui_t *ui, uint8_t msg); /* REF, MUIF_BUTTON, MUI_XYA */
uint8_t mui_u8g2_goto_form_w1_mse_pf(mui_t *ui, uint8_t msg); /* REF, MUIF_BUTTON, MUI_XYA */


uint8_t mui_u8g2_u8_char_wm_mud_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_VARIABLE,MUI_XY, usually requires a monospaced font line profont12 */
Expand All @@ -166,6 +192,23 @@ uint8_t mui_u8g2_u8_min_max_wm_mud_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G
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 */

/*===== 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 */
#define MUIF_U8G2_U8_MIN_MAX_STEP(id, valptr, min, max, step, flags, muif) \
MUIF(id, MUIF_CFLAG_IS_CURSOR_SELECTABLE, \
(void *)((mui_u8g2_u8_min_max_step_t [] ) {{ (valptr) MUI_U8G2_COMMA (min) MUI_U8G2_COMMA (max) MUI_U8G2_COMMA (step) MUI_U8G2_COMMA (flags) }}), \
(muif))

#define MUI_MMS_2X_BAR 0x01
#define MUI_MMS_4X_BAR 0x02
#define MUI_MMS_SHOW_VALUE 0x04

uint8_t mui_u8g2_u8_bar_wm_mse_pi(mui_t *ui, uint8_t msg);
uint8_t mui_u8g2_u8_bar_wm_mud_pi(mui_t *ui, uint8_t msg);
uint8_t mui_u8g2_u8_bar_wm_mse_pf(mui_t *ui, uint8_t msg);
uint8_t mui_u8g2_u8_bar_wm_mud_pf(mui_t *ui, uint8_t msg);

/*===== data = mui_u8g2_list_t* =====*/
/* similar to mui_u8g2_u8_opt_line, but u16 and dynamic list */

Expand All @@ -175,14 +218,14 @@ uint8_t mui_u8g2_u8_min_max_wm_mud_pf(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G
(void *)((mui_u8g2_list_t [] ) {{ (valptr) MUI_U8G2_COMMA (dataptr) MUI_U8G2_COMMA (getcb) MUI_U8G2_COMMA (cntcb)}}), \
(muif))

uint8_t mui_u8g2_u16_list_line_wa_mse_pi(mui_t *ui, uint8_t msg); /* MUIF_U8G2_U16_LIST, MUI_XYA, arg=pixel fieldsize */
uint8_t mui_u8g2_u16_list_line_wa_mud_pi(mui_t *ui, uint8_t msg); /* MUIF_U8G2_U16_LIST, MUI_XYA, arg=pixel fieldsize */
uint8_t mui_u8g2_u16_list_line_wa_mse_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G2_U16_LIST, MUI_XYA, arg=pixel fieldsize */
uint8_t mui_u8g2_u16_list_line_wa_mud_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G2_U16_LIST, MUI_XYA, arg=pixel fieldsize */


uint8_t mui_u8g2_u16_list_parent_wm_mse_pi(mui_t *ui, uint8_t msg); /* MUIF_U8G2_U16_LIST, MUI_XYA, arg=subform */
uint8_t mui_u8g2_u16_list_child_w1_mse_pi(mui_t *ui, uint8_t msg); /* MUIF_U8G2_U16_LIST, MUI_XYA, arg=sub element number */
uint8_t mui_u8g2_u16_list_parent_wm_mse_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G2_U16_LIST, MUI_XYA, arg=subform */
uint8_t mui_u8g2_u16_list_child_w1_mse_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G2_U16_LIST, MUI_XYA, arg=sub element number */

uint8_t mui_u8g2_u16_list_goto_w1_mse_pi(mui_t *ui, uint8_t msg); /* MUIF_U8G2_U16_LIST first char of the string denotes the target form */
uint8_t mui_u8g2_u16_list_goto_w1_mse_pi(mui_t *ui, uint8_t msg); /* REF, MUIF_U8G2_U16_LIST first char of the string denotes the target form */


#ifdef __cplusplus
Expand Down
Loading

0 comments on commit 27bc978

Please sign in to comment.