Exemple #1
0
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;
}
Exemple #2
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;
}
Exemple #3
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);
}
Exemple #4
0
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();
}
Exemple #5
0
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);
}
Exemple #6
0
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;
}
Exemple #7
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;
}
Exemple #8
0
m2_rom_void_p m2_GetRootM2(m2_p m2)
{
  return m2_get_nav(m2)->element_list[0];
}
Exemple #9
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);
}
Exemple #10
0
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);
}