uint8_t m2_eh_2bd(m2_p ep, uint8_t msg, uint8_t arg) { m2_nav_p nav = m2_get_nav(ep); switch(msg) { case M2_EP_MSG_SELECT: /* if this is data entry mode, switch back */ if ( nav->is_data_entry_active != 0 ) { nav->is_data_entry_active = 0; return 1; } /* data entry mode not active; if we could enter data entry mode, then activate it */ if ( m2_nav_is_data_entry(nav) ) { nav->is_data_entry_active = 1; return 1; } /* go down: do not use m2_nav_down, instead use m2_nav_user_down to skip design elements */ return m2_nav_user_down(nav, 1); case M2_EP_MSG_NEXT: if ( nav->is_data_entry_active != 0 ) return m2_nav_data_up(m2_get_nav(ep)); return m2_nav_user_next(m2_get_nav(ep)); } return 0; }
uint8_t m2_eh_4bs(m2_p ep, uint8_t msg, uint8_t arg) { m2_nav_p nav = m2_get_nav(ep); switch(msg) { case M2_EP_MSG_SELECT: /* if the field has data entry, than increment the data */ if ( m2_nav_is_data_entry(nav) ) return m2_nav_data_up(m2_get_nav(ep)); /* else go down: do not use m2_nav_down, instead use m2_nav_user_down to skip design elements */ return m2_nav_user_down(nav, 1); case M2_EP_MSG_EXIT: return m2_nav_user_up(m2_get_nav(ep)); case M2_EP_MSG_NEXT: return m2_nav_user_next(m2_get_nav(ep)); case M2_EP_MSG_PREV: return m2_nav_user_prev(m2_get_nav(ep)); } return 0; }
/* element: the root element es: event source handler, can be NULL eh: event handler to process the source events gh: graphics handler */ void m2_InitM2(m2_p m2, m2_rom_void_p element, m2_es_fnptr es, m2_eh_fnptr eh, m2_gfx_fnptr gh) { m2->arg1 = 0; m2->arg2 = 0; m2->is_frame_draw_at_end = 0; m2->key_queue_len = 0; m2->key_queue_pos = 0; m2->is_last_key_touch_screen_press = 0; m2->element_focus = NULL; m2->eh = eh; m2->gh = gh; m2->root_change_callback = m2_root_change_default_cb; /* called in m2navinit.c */ m2_gfx_init(gh); m2->is_frame_draw_at_end = m2_gfx_is_frame_draw_at_end(); //m2->forced_key = M2_KEY_REFRESH; m2->debounce_state = M2_DEBOUNCE_STATE_WAIT_FOR_KEY_PRESS; m2->home = element; m2->home2 = element; /* m2_SetHomeM2(m2, element); */ m2_nav_init(m2_get_nav(m2), element); if ( m2_GetRootM2(m2) != &m2_null_element ) /* only refresh screen for none empty menues, issue 97 */ m2_PutKeyIntoQueue(m2, M2_KEY_REFRESH); m2_get_nav(m2)->root_change_value = 0; m2_SetEventSourceHandlerM2(m2, es); }
void m2_DrawM2(m2_p ep) { m2_is_frame_draw_at_end = ep->is_frame_draw_at_end; m2_gfx_start(ep->gh); m2_nav_draw(m2_get_nav(ep)); m2_gfx_end(); }
uint8_t m2_eh_6bks(m2_p ep, uint8_t msg, uint8_t arg1, uint8_t arg2) { if ( msg >= M2_EL_MSG_SPACE ) { m2_nav_p nav = m2_get_nav(ep); m2_nav_prepare_fn_arg_current_element(nav); m2_fn_arg_call(msg); // assign the char return m2_nav_user_next(nav); // go to next position } return m2_eh_6bs(ep, msg, arg1, arg2); }
static uint8_t m2_check_and_assign_new_root(m2_p m2) { m2_nav_p nav = m2_get_nav(m2); m2_rom_void_p old_element = nav->element_list[0]; m2_rom_void_p new_element = nav->new_root_element; if ( m2_nav_check_and_assign_new_root(nav) != 0 ) /* m2navroot.c */ { m2->root_change_callback(new_element, old_element, nav->root_change_value); nav->root_change_value = 0; return 1; /* break and let redraw */ } return 0; }
uint8_t m2_eh_6bs(m2_p ep, uint8_t msg, uint8_t arg1, uint8_t arg2) { (void)arg1; (void)arg2; m2_nav_p nav = m2_get_nav(ep); switch(msg) { case M2_EP_MSG_SELECT: /* if the field has data entry, than increment the data */ if ( m2_nav_is_data_entry(nav) ) return m2_nav_data_up(m2_get_nav(ep)); /* else go down: do not use m2_nav_down, instead use m2_nav_user_down to skip design elements */ return m2_nav_user_down(nav, 1); case M2_EP_MSG_EXIT: return m2_nav_user_up(m2_get_nav(ep)); case M2_EP_MSG_NEXT: return m2_nav_user_next(m2_get_nav(ep)); case M2_EP_MSG_PREV: return m2_nav_user_prev(m2_get_nav(ep)); case M2_EP_MSG_DATA_DOWN: if ( m2_nav_data_down(nav) == 0 ) return m2_nav_user_next(nav); return 1; case M2_EP_MSG_DATA_UP: if ( m2_nav_data_up(nav) == 0 ) return m2_nav_user_prev(nav); return 1; } if ( msg >= M2_KEY_Q1 && msg <= M2_KEY_LOOP_END ) { if ( m2_nav_quick_key(nav, msg - M2_KEY_Q1 + 1) != 0 ) { if ( m2_nav_is_data_entry(nav) ) return m2_nav_data_up(m2_get_nav(ep)); return m2_nav_user_down(nav, 1); } } return 0; }
m2_rom_void_p m2_GetRootM2(m2_p m2) { return m2_get_nav(m2)->element_list[0]; }
void m2_SetRootM2(m2_p m2, m2_rom_void_p element, uint8_t next_cnt, uint8_t change_value) { m2_nav_set_root(m2_get_nav(m2), element, next_cnt, change_value); }
m2_rom_void_p m2_FindByXYM2(m2_p ep, uint8_t x, uint8_t y, uint8_t is_change_focus, uint8_t is_send_select) { m2_draw_p = ep; return m2_nav_find_by_xy(m2_get_nav(ep), x, y, is_change_focus, is_send_select); }