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);
}
Exemple #2
0
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);
}
Exemple #3
0
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;
}