static void roadmap_screen_obj_decode_action (RoadMapScreenObj object, int argc, const char **argv, int *argl) { char arg[255]; argc -= 1; if (argc < 1) { roadmap_log (ROADMAP_ERROR, "screen object:'%s' illegal action.", object->name); return; } roadmap_screen_obj_decode_arg (arg, sizeof(arg), argv[1], argl[1]); object->action = roadmap_start_find_action (arg); if (!object->action) { roadmap_log (ROADMAP_ERROR, "screen object:'%s' can't find action.", object->name); } if (argc == 1) return; roadmap_screen_obj_decode_arg (arg, sizeof(arg), argv[2], argl[2]); object->long_action = roadmap_start_find_action (arg); if (!object->long_action) { roadmap_log (ROADMAP_ERROR, "screen object:'%s' can't find action.", object->name); } }
void rim_on_menu_button(){ int i ; RoadMapAction * stop_navigate_action; RoadMapAction * nav_list_action; stop_navigate_action = roadmap_start_find_action("stop_navigate"); nav_list_action = roadmap_start_find_action("navigation_list"); if(!navigate_main_state()){ NOPH_FreemapMainScreen_addMenuItem(RimScreen, roadmap_lang_get(stop_navigate_action->label_long), 1, 1, (int)(void *)menu_wrapper, (int)(void *)stop_navigate_action->callback,1); NOPH_FreemapMainScreen_addMenuItem(RimScreen, roadmap_lang_get(nav_list_action->label_long), 1, 1, (int)(void *)menu_wrapper, (int)(void *)nav_list_action->callback,1); }else{ NOPH_FreemapMainScreen_removeMenuItemByLabel(RimScreen, roadmap_lang_get(stop_navigate_action->label_long)); NOPH_FreemapMainScreen_removeMenuItemByLabel(RimScreen, roadmap_lang_get(nav_list_action->label_long)); } for (i = 0 ; i < MAX_ACTIVE_MENU_BUTTON_CALLBACKS-1; i++){ // search for the last callback before we get Null callback if (RoadMapMenuButtonActiveCallbacks[i+1].callback==NULL) break; } if(RoadMapMenuButtonActiveCallbacks[i].callback==NULL){ return; // no callback registered } if(need_to_show_context_menu){ roadmap_main_context_menu_reset(FALSE); last_called_cb = RoadMapMenuButtonActiveCallbacks[i].callback; (*RoadMapMenuButtonActiveCallbacks[i].callback) (RoadMapMenuButtonActiveCallbacks[i].addr); } }
static void roadmap_bar_decode_action (BarObject *object, int argc, const char **argv, int *argl) { char arg[255]; argc -= 1; if (argc < 1) { roadmap_log (ROADMAP_ERROR, "roadmap bar:'%s' illegal action.", object->name); return; } roadmap_bar_decode_arg (arg, sizeof(arg), argv[1], argl[1]); object->action = roadmap_start_find_action (arg); if (!object->action) { roadmap_log (ROADMAP_ERROR, "roadmap bar:'%s' can't find action.", object->name); } }