static void help_clicked_cb(GtkToolButton *button, gpointer user_data) { beep(); GcomprisBoard *board = gc_board_get_current(); gc_help_start(board); }
/* * Display or not the exit button */ static void update_exit_button() { if (gc_board_get_current() && gc_board_get_current()->previous_board == NULL) { /* We are in the upper menu: show it */ current_flags |= GC_BAR_EXIT; current_flags &= ~GC_BAR_HOME; } else { current_flags &= ~GC_BAR_EXIT; current_flags |= GC_BAR_HOME; } }
static void config_clicked_cb(GtkToolButton *button, gpointer user_data) { beep(); GcomprisBoard *board = gc_board_get_current(); if(board && board->plugin->config_start != NULL) board->plugin->config_start(board, gc_profile_get_current()); }
static void refresh_clicked_cb(GtkToolButton *button, gpointer user_data) { beep(); GcomprisBoard *board = gc_board_get_current(); if(board && board->plugin->repeat != NULL) board->plugin->repeat(); }
void gc_confirm_box_stop () { GcomprisBoard *gcomprisBoard = gc_board_get_current(); // Destroy the box if(rootitem!=NULL) goo_canvas_item_remove(rootitem); rootitem = NULL; if(gcomprisBoard!=NULL && confirm_displayed) gc_board_pause(FALSE); gc_bar_hide(FALSE); confirm_displayed = FALSE; }
/* * Remove the displayed images_selector. * Do nothing if none is currently being dislayed */ void gc_selector_images_stop () { GcomprisBoard *gcomprisBoard = gc_board_get_current(); if(gcomprisBoard != NULL && images_selector_displayed) { gc_board_pause(FALSE); } // Destroy the image_selector box if(rootitem!=NULL) goo_canvas_item_remove(rootitem); rootitem = NULL; current_root_set = NULL; gc_bar_hide(FALSE); images_selector_displayed = FALSE; }
/* * Remove the displayed file_selector. * Do nothing if none is currently being dislayed */ void gc_selector_file_stop () { GcomprisBoard *gcomprisBoard = gc_board_get_current(); if(gcomprisBoard!=NULL && file_selector_displayed) gc_board_pause(FALSE); // Destroy the file_selector box if(rootitem!=NULL) goo_canvas_item_remove(rootitem); rootitem = NULL; /* No need to destroy it since it's in rootitem but just clear it */ file_root_item = NULL; gc_bar_hide(FALSE); file_selector_displayed = FALSE; // if (current_extension) // g_free(current_extension); current_extension = NULL; }
static void bar_set_flags(const GComprisBarFlags flags) { GcomprisBoard *board = gc_board_get_current(); set_button(BUTTON_HELP, flags & GC_BAR_HELP || gc_help_has_board(board)); set_button(BUTTON_ABOUT, flags & GC_BAR_ABOUT); set_button(BUTTON_PREV, flags & GC_BAR_LEVEL); set_button(BUTTON_LEVEL, flags & GC_BAR_LEVEL); set_button(BUTTON_NEXT, flags & GC_BAR_LEVEL); set_button(BUTTON_REFRESH, flags & (GC_BAR_REPEAT | GC_BAR_REPEAT_ICON)); set_button(BUTTON_CONFIG, flags & GC_BAR_CONFIG); set_button(BUTTON_EXPANDER_1, TRUE); set_button(BUTTON_SCORE, max_score); set_button(BUTTON_EXPANDER_2, TRUE); set_button(BUTTON_ZOOM, TRUE); set_button(BUTTON_SEPARATOR, TRUE); set_button(BUTTON_BACK, board && board->previous_board); set_button(BUTTON_STOP, TRUE); }
static void level_clicked_cb(GtkToolButton *button, gpointer user_data) { beep(); GcomprisBoard *board = gc_board_get_current(); if (board == NULL) return; gint delta = GPOINTER_TO_INT(user_data); current_level += delta; if (current_level > board->maxlevel) current_level = 1; else if (current_level < 1) current_level = board->maxlevel; update_level(); if (board->plugin->set_level != NULL) board->plugin->set_level(current_level); gc_bar_play_level_voice(current_level); }
/* Callback for the bar operations */ static gboolean item_event_bar (GooCanvasItem *item, GooCanvasItem *target, GdkEventButton *event, GComprisBarFlags flag) { GcomprisBoard *gcomprisBoard = gc_board_get_current(); if(_hidden) return(FALSE); bar_reset_sound_id(); gc_sound_play_ogg ("sounds/bleep.wav", NULL); switch (flag) { case GC_BAR_LEVEL: { current_level++; if(gcomprisBoard && current_level > gcomprisBoard->maxlevel) current_level=1; /* Set the level */ if(gcomprisBoard && gcomprisBoard->plugin->set_level != NULL) gcomprisBoard->plugin->set_level(current_level); gc_bar_play_level_voice(current_level); } break; case GC_BAR_LEVEL_DOWN: { /* Decrease the level */ current_level--; if(current_level < 1) current_level = gcomprisBoard->maxlevel; /* Set the level */ if(gcomprisBoard && gcomprisBoard->plugin->set_level != NULL) gcomprisBoard->plugin->set_level(current_level); gc_bar_play_level_voice(current_level); } break; case GC_BAR_HOME: { bar_hide (TRUE); gc_board_stop(); } break; case GC_BAR_HELP: { gc_help_start(gcomprisBoard); } break; case GC_BAR_REPEAT_ICON: case GC_BAR_REPEAT: { if(gcomprisBoard && gcomprisBoard->plugin->repeat != NULL) { gcomprisBoard->plugin->repeat(); } } break; case GC_BAR_CONFIG: { if(gcomprisBoard && gcomprisBoard->plugin->config_start != NULL) { gcomprisBoard->plugin->config_start(gcomprisBoard, gc_profile_get_current()); } } break; case GC_BAR_ABOUT: { gc_about_start(); } break; case GC_BAR_EXIT: { GcomprisProperties *properties = gc_prop_get(); if(strlen(properties->root_menu) == 1) gc_confirm_box( _("GCompris confirmation"), _("Are you sure you want to quit?"), _("Yes, I am sure!"), _("No, I want to keep going"), (ConfirmCallBack) confirm_quit); else confirm_quit(TRUE); } break; default: break; } return TRUE; }
/* Setting list of available icons in the control bar */ static void bar_set (const GComprisBarFlags flags) { // Always reset the zoom factor or the calculation // will be wrong goo_canvas_item_set_transform(rootitem, NULL); _hidden = FALSE; goo_canvas_item_raise(rootitem, NULL); /* Non yet initialized : Something Wrong */ if(get_item(GC_BAR_LEVEL) == NULL) { g_message("in bar_set_level, level_item uninitialized : should not happen\n"); return; } current_flags = flags; if(gc_help_has_board(gc_board_get_current())) current_flags |= GC_BAR_HELP; if(flags&GC_BAR_ABOUT) current_flags |= GC_BAR_ABOUT; if(flags&GC_BAR_CONFIG) current_flags |= GC_BAR_CONFIG; if(flags&GC_BAR_REPEAT_ICON) current_flags |= GC_BAR_REPEAT_ICON; if(flags&GC_BAR_REPEAT) current_flags |= GC_BAR_REPEAT; update_exit_button(); GSList *list; double x = 0; for (list = buttons; list != NULL; list = list->next) { GooCanvasItem *item = (GooCanvasItem *)list->data; GComprisBarFlags flag = GPOINTER_TO_UINT(g_object_get_data(G_OBJECT (item), "flag")); if (flag & current_flags) { GooCanvasBounds bounds; SET_ITEM_LOCATION(item, x, -20); goo_canvas_item_get_bounds(item, &bounds); gc_item_focus_init(item, NULL); x += bounds.x2 - bounds.x1 + BAR_GAP; g_object_set (item, "visibility", GOO_CANVAS_ITEM_VISIBLE, NULL); } else g_object_set (item, "visibility", GOO_CANVAS_ITEM_INVISIBLE, NULL); } /* Scale the bar back to fit the buttons, no more */ SET_ITEM_LOCATION(bar_item, 0, 0); GooCanvasBounds bounds; goo_canvas_item_get_bounds(bar_item, &bounds); goo_canvas_item_scale(bar_item, x / (bounds.x2 - bounds.x1), 1); // Always center the bar with its new bounds //SET_ITEM_LOCATION(rootitem, 0, _default_y); bar_location (-1, -1, -1); }