Graphs in Gnumeric, usable for Gnucash too?
Jody Goldberg
jody at gnome.org
Fri May 30 16:31:45 CDT 2003
On Fri, May 30, 2003 at 04:55:09PM +0200, Christian Stimming wrote:
>
> Ok. Now I have found the code. Do you also have a place where the
> sheet-object-graph is used, as an example?
The sheet-object-graph is currently gnumeric specific. Although I'd
like to move the sheet-object layer down into goffice it will take a
while. For now you want to use the lower level display in
goffice/graph/gog-control-foocanvas
That gives you a foocanvas item to display a GogView.
> From gnucash, we loved to use the libguppitank interface in guppi3.
> There, each barchart/ piechart/ scatter plot was defined by a number of
> arguments passed by a GtkArg list, which were defined in the
> guppi_object_pie_class, and all the putting together with axis, legends
> and lines was fully done inside libguppitank. I.e., in gnucash we didn't
> have to care about axes, legends, scaling etc. at all. This went very
> smoothly. I was wondering whether it is possible in principle to copy
> the code from guppi3/libguppitank into that new goffice/graph library...
> any spontaneous ideas on how difficult that would be?
The new library is a lot closer semantically to guppitank than guppi
in many ways. You'll need to do a bit of manual labour to create
the models, but its not too bad. For a simple graph with 1 chart
and 1 plot (see README for glossary) All you'd need would be
graph = g_object_new (GOG_GRAPH_TYPE, NULL);
chart = gog_object_add_by_name (graph, "Chart", NULL));
plot = gog_object_add_by_name (chart, "Plot",
gog_plot_new_by_name ("GogBarColPlot"));
g_object_set (plot,
"horizontal", FALSE,
"type", "stacked",
NULL);
GogSeries *series = gog_plot_new_series (GOG_PLOT (plot));
gog_series_set_dim (series, 1,
gnu_cash_data_new (.....), NULL);
That should be enough to generate a model with 1 stacked col plot
with some gnu_cash supplied data. You'd need to manually tack on a
legend
legend = gog_object_add_by_name (chart, "Legend", NULL));
but my goal is to autogenerate axis and gridlines. They would will
still be changeable by you, but at least the initial creation would
be handled automagicly. I can't really comment on axes yet because
that code is not quite ready.
To display it
foocanvasitem = foo_canvas_item_new (
foo_canvas_root (FOO_CANVAS (canvas)), GOG_CONTROL_FOOCANVAS_TYPE,
"model", graph,
"w", how big do you want it in pixels
"h",
"logical_width_pts", how big is it logically in points
"logical_height_pts",
NULL);
I've only written a foocanvas wrapper rather than a gnome-canvas,
but the amount of code is trivial. Its basicly just using the
libart renderer to generate a pixbuf. You could create so other
display mechanism if necessary. Printing and svg export are also
unwritten at present, they will required another rendering backend.
Again, the amount of code should hopefully be inconsequential.
Hope that answers more questions than it raises
Jody
More information about the gnucash-devel
mailing list