static void format_context_menu (StfDialogData *pagedata, GdkEventButton *event_button, int col) { enum { COLUMN_POPUP_ITEM_IGNORE, COLUMN_POPUP_ITEM_NOT_FIRST, COLUMN_POPUP_ITEM_NOT_LAST, COLUMN_POPUP_ITEM_ANY }; static const struct { const char *text; void (*function) (GtkWidget *widget, gpointer data); int flags; } actions[] = { { N_("Ignore all columns on right"), &cb_popup_menu_uncheck_right, COLUMN_POPUP_ITEM_NOT_LAST}, { N_("Ignore all columns on left"), &cb_popup_menu_uncheck_left, COLUMN_POPUP_ITEM_NOT_FIRST}, { N_("Import all columns on right"), &cb_popup_menu_check_right, COLUMN_POPUP_ITEM_NOT_LAST}, { N_("Import all columns on left"), &cb_popup_menu_check_left, COLUMN_POPUP_ITEM_NOT_FIRST}, { N_("Copy format to right"), &cb_popup_menu_extend_format, COLUMN_POPUP_ITEM_NOT_LAST} }; GtkWidget *menu = gtk_menu_new (); unsigned i; for (i = 0; i < G_N_ELEMENTS (actions); i++) { int flags = actions[i].flags; GtkWidget *item = gtk_menu_item_new_with_label (_(actions[i].text)); switch (flags) { case COLUMN_POPUP_ITEM_IGNORE: gtk_widget_set_sensitive (item, FALSE); break; case COLUMN_POPUP_ITEM_NOT_FIRST: gtk_widget_set_sensitive (item, col > 0); break; case COLUMN_POPUP_ITEM_NOT_LAST: gtk_widget_set_sensitive (item, col < pagedata->format.renderdata->colcount - 1); break; case COLUMN_POPUP_ITEM_ANY: default: break; } gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show (item); g_signal_connect (G_OBJECT (item), "activate", G_CALLBACK (actions[i].function), pagedata); } gnumeric_popup_menu (GTK_MENU (menu), event_button); }
static gint cb_treeview_button_press(GtkWidget *w, GdkEvent *event, SortFlowState *state) { if ((event->type == GDK_BUTTON_PRESS) && (event->button.button == 3)) { gnumeric_popup_menu (build_sort_field_base_menu(state), &(event->button)); return TRUE; } return FALSE; }
static void gnumeric_create_popup_menu_list (GSList *elements, GnumericPopupMenuHandler handler, gpointer user_data, int display_filter, int sensitive_filter, GdkEventButton *event) { GtkWidget *menu, *item; char const *trans; menu = gtk_menu_new (); for (; elements != NULL ; elements = elements->next) { GnumericPopupMenuElement const *element = elements->data; char const * const name = element->name; char const * const pix_name = element->pixmap; item = NULL; if (element->display_filter != 0 && !(element->display_filter & display_filter)) continue; if (name != NULL && *name != '\0') { trans = _(name); item = gtk_image_menu_item_new_with_mnemonic (trans); if (element->sensitive_filter != 0 && (element->sensitive_filter & sensitive_filter)) gtk_widget_set_sensitive (GTK_WIDGET (item), FALSE); if (pix_name != NULL) { GtkWidget *image = gtk_image_new_from_stock (pix_name, GTK_ICON_SIZE_MENU); gtk_widget_show (image); gtk_image_menu_item_set_image ( GTK_IMAGE_MENU_ITEM (item), image); } } else { /* separator */ item = gtk_menu_item_new (); gtk_widget_set_sensitive (item, FALSE); } if (element->index != 0) { g_signal_connect (G_OBJECT (item), "activate", G_CALLBACK (&popup_item_activate), user_data); g_object_set_data ( G_OBJECT (item), "descriptor", (gpointer)(element)); g_object_set_data ( G_OBJECT (item), "handler", (gpointer)handler); } gtk_widget_show (item); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); } gnumeric_popup_menu (GTK_MENU (menu), event); }
static void show_add_menu (SortFlowState *state) { gnumeric_popup_menu (build_sort_field_base_menu(state), NULL); }