static void graph_setup_chart (GogGraph *graph, CutRunContext *run_context) { GogChart *chart; GogPlot *pie; GOData *data; GogSeries *series; gchar **legends; double *values; gint n = 0; chart = GOG_CHART(gog_object_get_child_by_name(GOG_OBJECT(graph), "Chart")); pie = gog_plot_new_by_name("GogPiePlot"); gog_object_add_by_name(GOG_OBJECT(chart), "Plot", GOG_OBJECT(pie)); legends = g_new0(gchar *, CUT_TEST_RESULT_LAST); values = g_new0(double, CUT_TEST_RESULT_LAST); #define STATUS(status) (CUT_TEST_RESULT_ ## status) #define SET_DATA(status, n_statuses) G_STMT_START \ { \ const gchar *name; \ name = cut_test_result_status_to_signal_name(STATUS(status)); \ legends[STATUS(status)] = g_strdup(name); \ values[STATUS(status)] = \ cut_run_context_get_n_ ## n_statuses(run_context); \ n++; \ } G_STMT_END \ SET_DATA(SUCCESS, successes); SET_DATA(NOTIFICATION, notifications); SET_DATA(OMISSION, omissions); SET_DATA(PENDING, pendings); SET_DATA(FAILURE, failures); SET_DATA(ERROR, errors); #undef STATUS #undef SET_DATA series = gog_plot_new_series(pie); data = go_data_vector_str_new((const gchar * const *)legends, n, (GDestroyNotify)g_strfreev); gog_series_set_dim(series, 0, data, NULL); data = go_data_vector_val_new(values, n, g_free); gog_series_set_dim(series, 1, data, NULL); gog_object_add_by_name(GOG_OBJECT(chart), "Legend", NULL); }
static void insert_1_5d_data (GogPlot *plot) { GSList *list; GogSeries *series; GOData *data; GError *error; /* Create a series for the plot and populate it with some simple data */ list = (GSList *)gog_plot_get_series (plot); if (g_slist_length (list) == 1) series = g_slist_nth_data (list, 0); else series = gog_plot_new_series (plot); data = go_data_vector_str_new (legends, 6, NULL); gog_series_set_dim (series, 0, data, &error); data = go_data_vector_val_new (values, 6, NULL); gog_series_set_dim (series, 1, data, &error); }
int main (int argc, char *argv[]) { GtkWidget *window, *box, *w; GogChart *chart; GogGraph *graph; GogLabel *label; GogPlot *pie; GogSeries *series; GOStyle *style; GOData *data; GError *error; PangoFontDescription *desc; char const *title = "Some statistics"; char const * const legends[] = {"first", "second", "third", "fourth"}; double values[] = {10., 20., 30., 40.}; gtk_init (&argc, &argv); /* Initialize libgoffice */ libgoffice_init (); /* Initialize plugins manager */ go_plugins_init (NULL, NULL, NULL, NULL, TRUE, GO_TYPE_PLUGIN_LOADER_MODULE); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_resize (GTK_WINDOW (window), 300, 340); gtk_window_set_title (GTK_WINDOW (window), "pie demo"); g_signal_connect (window, "destroy", gtk_main_quit, NULL); box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); w = gtk_button_new_from_stock (GTK_STOCK_QUIT); g_signal_connect_swapped (w, "clicked", G_CALLBACK (on_quit), window); gtk_box_pack_end (GTK_BOX (box), w, FALSE, FALSE, 0); w = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL); gtk_box_pack_end (GTK_BOX (box), w, FALSE, FALSE, 2); /* Create a graph widget and add it to the GtkVBox */ w = go_graph_widget_new (NULL); gtk_box_pack_end (GTK_BOX (box), w, TRUE, TRUE, 0); /* Get the embedded graph */ graph = go_graph_widget_get_graph (GO_GRAPH_WIDGET (w)); /* Add a title */ label = (GogLabel *) g_object_new (GOG_TYPE_LABEL, NULL); data = go_data_scalar_str_new (title, FALSE); gog_dataset_set_dim (GOG_DATASET (label), 0, data, NULL); gog_object_add_by_name (GOG_OBJECT (graph), "Title", GOG_OBJECT (label)); /* Change the title font */ style = go_styled_object_get_style (GO_STYLED_OBJECT (label)); desc = pango_font_description_from_string ("Sans bold 16"); go_style_set_font_desc (style, desc); /* Get the chart created by the widget initialization */ chart = go_graph_widget_get_chart (GO_GRAPH_WIDGET (w)); /* Create a pie plot and add it to the chart */ pie = (GogPlot *) gog_plot_new_by_name ("GogPiePlot"); gog_object_add_by_name (GOG_OBJECT (chart), "Plot", GOG_OBJECT (pie)); /* Create a series for the plot and populate it with some simple data */ series = gog_plot_new_series (pie); data = go_data_vector_str_new (legends, 4, NULL); gog_series_set_dim (series, 0, data, &error); data = go_data_vector_val_new (values, 4, NULL); gog_series_set_dim (series, 1, data, &error); /* Add a legend to the chart */ gog_object_add_by_name (GOG_OBJECT (chart), "Legend", NULL); gtk_container_add (GTK_CONTAINER (window), box); gtk_widget_show_all (GTK_WIDGET (window)); w = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL); gtk_box_pack_start (GTK_BOX (box), w, FALSE, FALSE, 0); gtk_main (); /* Clean libgoffice stuff */ libgoffice_shutdown (); return 0; }