Remove all remaining references to guppi.

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@12070 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
David Hampton 2005-11-30 01:58:05 +00:00
parent 262346cb85
commit 5b906bd598
11 changed files with 14 additions and 1094 deletions

View File

@ -1,5 +1,15 @@
2005-11-29 David Hampton <hampton@employees.org>
* src/gnome-utils/gnc-gnome-utils.c:
* src/gnome-utils/gnc-html-guppi.[ch]:
* src/gnome-utils/Makefile.am:
* src/gnome-utils/gnc-html.c:
* src/gnome/Makefile.am:
* lib/Makefile.am:
* lib/README:
* lib/guppi-legend.patch:
* configure.in: Remove all remaining references to guppi.
* rpm/gnucash.spec.in: Quick update for 2.0 requirements. Needs
to actually be tested.

View File

@ -1014,12 +1014,6 @@ then
AC_SUBST(GNOME_PRINT_CFLAGS)
AC_SUBST(GNOME_PRINT_LIBS)
# There is no libguppi. Just substitute empty stuff
LIBGUPPI_CFLAGS=
LIBGUPPI_LIBS=
AC_SUBST(LIBGUPPI_CFLAGS)
AC_SUBST(LIBGUPPI_LIBS)
PKG_CHECK_MODULES(GLADE, libglade-2.0 >= 2.4)
AS_SCRUB_INCLUDE(GLADE_CFLAGS)
AC_SUBST(GLADE_CFLAGS)
@ -1138,8 +1132,8 @@ GNUCASH_NETWORK_UTILS_LIBS="${GHTTP_LIBS} ${GNOME_LIBDIR} ${GNOME_LIBS} ${GNOMEU
AC_SUBST(GNUCASH_NETWORK_UTILS_CFLAGS)
AC_SUBST(GNUCASH_NETWORK_UTILS_LIBS)
GNUCASH_GNOME_UTILS_CFLAGS="${GNUCASH_APP_UTILS_CFLAGS} ${GNUCASH_NETWORK_UTILS_CFLAGS} ${GNOME_PRINT_CFLAGS} ${GNOME_INCLUDEDIR} ${GUPPI_CFLAGS} ${GDK_PIXBUF_CFLAGS}"
GNUCASH_GNOME_UTILS_LIBS="${GNUCASH_APP_UTILS_LIBS} ${GNUCASH_NETWORK_UTILS_LIBS} ${GNOME_LIBDIR} ${GNOMEUI_LIBS} ${GNOME_PRINT_LIBS} ${GTKHTML_LIBS} ${GLADE_LIBS} ${GUPPI_LIBS} ${GDK_PIXBUF_LIBS} -lgncmod-gnome-utils"
GNUCASH_GNOME_UTILS_CFLAGS="${GNUCASH_APP_UTILS_CFLAGS} ${GNUCASH_NETWORK_UTILS_CFLAGS} ${GNOME_PRINT_CFLAGS} ${GNOME_INCLUDEDIR} ${GDK_PIXBUF_CFLAGS}"
GNUCASH_GNOME_UTILS_LIBS="${GNUCASH_APP_UTILS_LIBS} ${GNUCASH_NETWORK_UTILS_LIBS} ${GNOME_LIBDIR} ${GNOMEUI_LIBS} ${GNOME_PRINT_LIBS} ${GTKHTML_LIBS} ${GLADE_LIBS} ${GDK_PIXBUF_LIBS} -lgncmod-gnome-utils"
AC_SUBST(GNUCASH_GNOME_UTILS_CFLAGS)
AC_SUBST(GNUCASH_GNOME_UTILS_LIBS)

View File

@ -12,5 +12,5 @@ else
SUBDIRS +=
endif
EXTRA_DIST = README guppi-legend.patch
EXTRA_DIST = README

View File

@ -9,10 +9,3 @@ Finance::Quote
Available from http://finance-quote.sourceforge.net.
------------------------------------------------
guppi-legend.patch: Apply this patch to the Guppi 0.40.3 package (and
compile and install the patched version) in order
to fix the reversed legend problem with stacked
barcharts.
------------------------------------------------

View File

@ -1,101 +0,0 @@
--- Guppi-0.40.3/libguppitank/guppi-object-barchart.c 2003-05-30 21:21:16.000000000 +0200
+++ Guppi-0.40.4/libguppitank/guppi-object-barchart.c 2003-05-30 21:21:26.000000000 +0200
@@ -1,5 +1,5 @@
/* This is -*- C -*- */
-/* $Id$ */
+/* $Id$ */
/*
* guppi-object-barchart.c
@@ -410,6 +410,7 @@
GuppiElementState *left_axis_state = NULL;
GuppiElementState *frame_state = NULL;
GuppiColorPalette *color_palette = NULL;
+ GuppiColorPalette *color_palette_legend = NULL;
GuppiDataTable *data_table;
GnomeFont *font;
@@ -446,11 +447,13 @@
/* FIXME: check for construction of legends. */
if (obar->legend_view && obar->col_labels) {
- add_col_labels (obar, data_table, obar->data_cols, obar->col_labels, FALSE);
+ add_col_labels (obar, data_table, obar->data_cols, obar->col_labels,
+ obar->legend_reversed);
}
if (obar->col_colors) {
color_palette = build_bar_colors (obar, FALSE);
+ color_palette_legend = build_bar_colors (obar, obar->legend_reversed);
}
guppi_element_state_set (barchart_state,
@@ -497,7 +500,7 @@
guppi_element_state_set (legend_state,
"labels", data_table,
- "swatch_colors", color_palette,
+ "swatch_colors", color_palette_legend,
"label_font", font,
NULL);
}
@@ -505,6 +508,8 @@
/* clean up */
+ guppi_unref (color_palette);
+ guppi_unref (color_palette_legend);
guppi_unref (barchart_state);
guppi_unref (legend_state);
guppi_unref (bottom_axis_state);
@@ -525,6 +530,7 @@
GuppiDataTable *data_table;
GuppiColorPalette *color_palette = NULL;
+ GuppiColorPalette *color_palette_legend = NULL;
GuppiElementState *barchart_state;
GuppiElementState *legend_state = NULL;
@@ -560,7 +566,8 @@
}
if (obar->col_labels) {
- add_col_labels (obar, data_table, obar->data_cols, obar->col_labels, FALSE);
+ add_col_labels (obar, data_table, obar->data_cols, obar->col_labels,
+ obar->legend_reversed);
}
@@ -568,6 +575,7 @@
if (obar->col_colors) {
color_palette = build_bar_colors (obar, FALSE);
+ color_palette_legend = build_bar_colors (obar, obar->legend_reversed);
}
barchart_state = guppi_element_state_new ("barchart",
@@ -620,7 +628,8 @@
legend_state = guppi_element_state_new ("legend",
"labels", data_table,
- "swatch_colors", color_palette,
+ "swatch_colors",
+ color_palette_legend,
"label_font", font,
NULL);
@@ -669,6 +678,8 @@
/* Clean up after ourselves... */
guppi_unref (data_table);
+ guppi_unref (color_palette);
+ guppi_unref (color_palette_legend);
guppi_unref (barchart_state);
guppi_unref (bottom_axis_state);
@@ -864,4 +875,4 @@
-/* $Id$ */
+/* $Id$ */

View File

@ -18,7 +18,6 @@ AM_CFLAGS = \
-I${top_srcdir}/src/app-utils \
-I${top_srcdir}/src \
-I${top_srcdir}/lib/glib26 \
${LIBGUPPI_CFLAGS} \
${GLIB_CFLAGS} \
${GLADE_CFLAGS} \
${GNOME_PRINT_CFLAGS} \
@ -46,7 +45,6 @@ AM_CFLAGS = \
-I${top_srcdir}/lib/goffice/split \
-I${top_srcdir}/lib/glib26 \
-I${top_srcdir}/lib \
${LIBGUPPI_CFLAGS} \
${GNOME_CFLAGS} \
${GTKHTML_CFLAGS} \
${GLIB_CFLAGS} \
@ -93,7 +91,6 @@ libgncmod_gnome_utils_la_SOURCES = \
gnc-gnome-utils.c \
gnc-gui-query.c \
gnc-html-graph-gog.c \
gnc-html-guppi.c \
gnc-html-history.c \
gnc-html.c \
gnc-icons.c \
@ -157,7 +154,6 @@ gncinclude_HEADERS = \
gnc-gnome-utils.h \
gnc-gui-query.h \
gnc-html-graph-gog.h \
gnc-html-guppi.h \
gnc-html-history.h \
gnc-html.h \
gnc-icons.h \
@ -208,7 +204,6 @@ libgncmod_gnome_utils_la_LIBADD = \
${top_builddir}/src/network-utils/libgncmod-network-utils.la \
${top_builddir}/src/app-utils/libgncmod-app-utils.la \
${top_builddir}/lib/glib26/libgncglib.la \
${LIBGUPPI_LIBS} \
${GNOME_LIBS} \
${GNOME_PRINT_LIBS} \
${GTKHTML_LIBS} \
@ -232,7 +227,6 @@ libgncmod_gnome_utils_la_LIBADD = \
${top_builddir}/src/app-utils/libgncmod-app-utils.la \
${top_builddir}/lib/goffice/libgoffice.la \
${top_builddir}/lib/glib26/libgncglib.la \
${LIBGUPPI_LIBS} \
${GNOME_LIBS} \
${GNOME_PRINT_LIBS} \
${GTKHTML_LIBS} \

View File

@ -27,10 +27,6 @@
#include <libguile.h>
#include <gconf/gconf.h>
#ifdef USE_GUPPI
#include "gnc-html-guppi.h"
#endif
#include "gnc-html-graph-gog.h"
#include "argv-list-converters.h"
@ -192,11 +188,6 @@ gnc_gnome_init (const char * arg0,
}
}
#ifdef USE_GUPPI
/* initialize guppi handling in gnc-html */
gnc_html_guppi_init ();
#endif
druid_gconf_install_check_schemas();
return ret;
@ -205,9 +196,6 @@ gnc_gnome_init (const char * arg0,
void
gnc_gnome_shutdown (void)
{
#ifdef USE_GUPPI
gnc_html_guppi_shutdown();
#endif
}
void

View File

@ -1,915 +0,0 @@
/********************************************************************
* gnc-html-guppi.c -- embed guppi objects in the html stream. *
* Copyright (C) 2000 Bill Gribble <grib@billgribble.com> *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
* published by the Free Software Foundation; either version 2 of *
* the License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License*
* along with this program; if not, contact: *
* *
* Free Software Foundation Voice: +1-617-542-5942 *
* 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
* Boston, MA 02110-1301, USA gnu@gnu.org *
********************************************************************/
#include "config.h"
#ifdef USE_GUPPI
#include <gnome.h>
#include <glib.h>
#include <libguile.h>
#include <gtkhtml/gtkhtml.h>
#include <gtkhtml/gtkhtml-embedded.h>
#include <libguppi/guppi-version.h>
#include <libguppitank/guppi-tank.h>
#include "qof.h"
#include "gnc-html.h"
#include "gnc-html-guppi.h"
#include "gnc-ui-util.h"
static int handle_piechart(gnc_html * html, GtkHTMLEmbedded * eb, gpointer d);
static int handle_barchart(gnc_html * html, GtkHTMLEmbedded * eb, gpointer d);
static int handle_scatter(gnc_html * html, GtkHTMLEmbedded * eb, gpointer d);
/********************************************************************
* gnc_html_guppi_init
* add object handlers for guppi objects
********************************************************************/
void
gnc_html_guppi_init(void) {
guppi_tank_init();
gnc_html_register_object_handler("gnc-guppi-pie", handle_piechart);
gnc_html_register_object_handler("gnc-guppi-bar", handle_barchart);
gnc_html_register_object_handler("gnc-guppi-scatter", handle_scatter);
}
void
gnc_html_guppi_shutdown(void) {
guppi_tank_shutdown();
}
static void
gnc_html_guppi_print_cb(GtkHTMLEmbedded * eb, GnomePrintContext * pc,
gpointer data) {
GtkWidget * w = data;
GuppiObject * o = gtk_object_get_user_data(GTK_OBJECT(w));
guppi_object_print(o, pc);
}
/* the handlers for pie. bar, and scatter charts */
static int
handle_piechart(gnc_html * html, GtkHTMLEmbedded * eb, gpointer data) {
GtkWidget * widg = NULL;
int retval;
widg = gnc_html_embedded_piechart(html, eb->width, eb->height,
eb->params);
if(widg) {
if(gtk_signal_lookup("draw_print", gtk_html_embedded_get_type())) {
gtk_signal_connect(GTK_OBJECT(eb), "draw_print", gnc_html_guppi_print_cb,
widg);
}
gtk_widget_show_all(widg);
gtk_container_add(GTK_CONTAINER(eb), widg);
gtk_widget_set_usize(GTK_WIDGET(eb), eb->width, eb->height);
retval = TRUE;
}
else {
retval = FALSE;
}
return retval;
}
static int
handle_barchart(gnc_html * html, GtkHTMLEmbedded * eb, gpointer data) {
GtkWidget * widg = NULL;
int retval;
widg = gnc_html_embedded_barchart(html, eb->width, eb->height,
eb->params);
if(widg) {
if(gtk_signal_lookup("draw_print", gtk_html_embedded_get_type())) {
gtk_signal_connect(GTK_OBJECT(eb), "draw_print", gnc_html_guppi_print_cb,
widg);
}
gtk_widget_show_all(widg);
gtk_container_add(GTK_CONTAINER(eb), widg);
gtk_widget_set_usize(GTK_WIDGET(eb), eb->width, eb->height);
retval = TRUE;
}
else {
retval = FALSE;
}
return retval;
}
static int
handle_scatter(gnc_html * html, GtkHTMLEmbedded * eb, gpointer data) {
GtkWidget * widg = NULL;
int retval;
widg = gnc_html_embedded_scatter(html, eb->width, eb->height,
eb->params);
if(widg) {
if(gtk_signal_lookup("draw_print", gtk_html_embedded_get_type())) {
gtk_signal_connect(GTK_OBJECT(eb), "draw_print", gnc_html_guppi_print_cb,
widg);
}
gtk_widget_show_all(widg);
gtk_container_add(GTK_CONTAINER(eb), widg);
gtk_widget_set_usize(GTK_WIDGET(eb), eb->width, eb->height);
retval = TRUE;
}
else {
retval = FALSE;
}
return retval;
}
/********************************************************************
* now we start the actual embedded object creation routines. well,
* after some utilities.
********************************************************************/
static double *
read_doubles(const char * string, int nvalues) {
int n;
int choffset=0;
int accum = 0;
double * retval = g_new0(double, nvalues);
gnc_push_locale ("C");
for(n=0; n<nvalues; n++) {
sscanf(string+accum, "%le%n", &retval[n], &choffset);
accum += choffset;
}
gnc_pop_locale ();
return retval;
}
static char **
read_strings(const char * string, int nvalues) {
int n;
int choffset=0;
int accum = 0;
char ** retval = g_new0(char *, nvalues);
char thischar;
const char * inptr = string;
int escaped = FALSE;
for(n=0; n < nvalues; n++) {
retval[n] = g_new0(char, strlen(string+accum)+1);
retval[n][0] = 0;
choffset = 0;
while((thischar = *inptr) != 0) {
if(thischar == '\\') {
escaped = TRUE;
inptr++;
}
else if((thischar != ' ') || escaped) {
retval[n][choffset] = thischar;
retval[n][choffset+1] = 0;
choffset++;
escaped = FALSE;
inptr++;
}
else {
/* an unescaped space */
escaped = FALSE;
inptr++;
break;
}
}
accum += choffset;
/* printf("retval[%d] = '%s'\n", n, retval[n]); */
}
return retval;
}
static void
free_strings(char ** strings, int nstrings) {
int count;
if(!strings) return;
for(count=0; count < nstrings; count++) {
g_free(strings[count]);
strings[count] = NULL;
}
g_free(strings);
}
struct guppi_chart_data {
GtkWidget * widget;
GuppiObject * guppiobject;
gnc_html * parent;
GPtrArray * data_1_callbacks;
GPtrArray * data_2_callbacks;
GPtrArray * data_3_callbacks;
GPtrArray * legend_1_callbacks;
GPtrArray * legend_2_callbacks;
GPtrArray * legend_3_callbacks;
};
static struct guppi_chart_data *
gnc_guppi_chart_data_new(void) {
struct guppi_chart_data * rv = g_new0(struct guppi_chart_data, 1);
rv->widget = NULL;
rv->guppiobject = NULL;
return rv;
}
static void
gnc_guppi_chart_data_destroy(struct guppi_chart_data * d) {
g_free(d);
}
/* callbacks for button double-click on a pie slice, barchart bar, or
* legend element. generic_callback is used by all of them. */
static void
guppi_generic_callback(gnc_html * html, GPtrArray * array, gint index) {
URLType type;
char * location = NULL;
char * label = NULL;
char * url = g_ptr_array_index(array, index);
if(!url) return;
if(url[0] == '\0') return;
type = gnc_html_parse_url(html, url, &location, &label);
gnc_html_show_url(html, type, location, label, 0);
g_free(location);
g_free(label);
}
static void
guppi_slice_1_callback(gint slice, gpointer user_data) {
struct guppi_chart_data * chart = user_data;
guppi_generic_callback(chart->parent,
chart->data_1_callbacks,
slice);
}
static void
guppi_slice_2_callback(gint slice, gpointer user_data) {
struct guppi_chart_data * chart = user_data;
guppi_generic_callback(chart->parent,
chart->data_2_callbacks,
slice);
}
static void
guppi_slice_3_callback(gint slice, gpointer user_data) {
struct guppi_chart_data * chart = user_data;
guppi_generic_callback(chart->parent,
chart->data_3_callbacks,
slice);
}
static void
guppi_legend_1_callback(gint item, gpointer user_data) {
struct guppi_chart_data * chart = user_data;
guppi_generic_callback(chart->parent,
chart->legend_1_callbacks,
item);
}
static void
guppi_legend_2_callback(gint item, gpointer user_data) {
struct guppi_chart_data * chart = user_data;
guppi_generic_callback(chart->parent,
chart->legend_2_callbacks,
item);
}
static void
guppi_legend_3_callback(gint item, gpointer user_data) {
struct guppi_chart_data * chart = user_data;
guppi_generic_callback(chart->parent,
chart->legend_3_callbacks,
item);
}
static void
guppi_bar_1_callback(gint row, gint col, gpointer user_data) {
struct guppi_chart_data * chart = user_data;
guppi_generic_callback(chart->parent,
chart->data_1_callbacks,
/* (chart->cols * row)+ FIXME: would require
to store col number.*/
col);
}
#if UNNEEDED_OPTIONS
static void
guppi_bar_2_callback(gint row, gint col, gpointer user_data) {
struct guppi_chart_data * chart = user_data;
guppi_generic_callback(chart->parent,
chart->data_1_callbacks,
/* (chart->cols * row)+ FIXME: see above*/
col);
}
static void
guppi_bar_3_callback(gint row, gint col, gpointer user_data) {
struct guppi_chart_data * chart = user_data;
guppi_generic_callback(chart->parent,
chart->data_1_callbacks,
/* (chart->cols * row)+ FIXME: see above*/
col);
}
#endif
static GPtrArray *
convert_string_array(char ** strings, int nstrings) {
GPtrArray * retval = g_ptr_array_new();
int i;
/* g_ptr_array_set_size(retval, nstrings); */
for(i=0; i < nstrings; i++) {
g_ptr_array_add(retval, strings[i]);
}
return retval;
}
static gboolean
gnc_has_guppi_version(int major, int minor, int micro)
{
if (guppi_version_major () > major)
return TRUE;
if (guppi_version_major () < major)
return FALSE;
if (guppi_version_minor () > minor)
return TRUE;
if (guppi_version_minor () < minor)
return FALSE;
return (guppi_version_micro () >= micro);
}
/********************************************************************
* gnc_html_embedded_piechart
* create a Guppi piechart from an HTML <object> block
********************************************************************/
GtkWidget *
gnc_html_embedded_piechart(gnc_html * parent, int w, int h,
GHashTable * params) {
struct guppi_chart_data * chart = gnc_guppi_chart_data_new();
GuppiObject * piechart = NULL;
GuppiObject * title = NULL;
GtkArg arglist[17];
int argind=0;
char * param;
int datasize;
double * data=NULL;
char ** labels=NULL;
char ** colors=NULL;
char ** callbacks=NULL;
char * gtitle;
chart->parent = parent;
if((param = g_hash_table_lookup(params, "datasize")) != NULL) {
sscanf(param, "%d", &datasize);
arglist[argind].name = "data_size";
arglist[argind].type = GTK_TYPE_INT;
GTK_VALUE_INT(arglist[argind]) = datasize;
argind++;
}
if((param = g_hash_table_lookup(params, "data")) != NULL) {
data = read_doubles(param, datasize);
arglist[argind].name = "data";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = data;
argind++;
}
if((param = g_hash_table_lookup(params, "labels")) != NULL) {
labels = read_strings(param, datasize);
arglist[argind].name = "labels";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = labels;
argind++;
}
if((param = g_hash_table_lookup(params, "colors")) != NULL) {
colors = read_strings(param, datasize);
arglist[argind].name = "colors";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = colors;
argind++;
}
if((param = g_hash_table_lookup(params, "slice_urls_1")) != NULL) {
arglist[argind].name = "slice_callback1";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = &guppi_slice_1_callback;
argind++;
arglist[argind].name = "slice_callback1_data";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = chart;
argind++;
callbacks = read_strings(param, datasize);
chart->data_1_callbacks = convert_string_array(callbacks, datasize);
g_free(callbacks);
}
if((param = g_hash_table_lookup(params, "slice_urls_2")) != NULL) {
arglist[argind].name = "slice_callback2";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = &guppi_slice_2_callback;
argind++;
arglist[argind].name = "slice_callback2_data";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = chart;
argind++;
callbacks = read_strings(param, datasize);
chart->data_2_callbacks = convert_string_array(callbacks, datasize);
g_free(callbacks);
}
if((param = g_hash_table_lookup(params, "slice_urls_3")) != NULL) {
arglist[argind].name = "slice_callback3";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = &guppi_slice_3_callback;
argind++;
arglist[argind].name = "slice_callback3_data";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = chart;
argind++;
callbacks = read_strings(param, datasize);
chart->data_3_callbacks = convert_string_array(callbacks, datasize);
g_free(callbacks);
}
if((param = g_hash_table_lookup(params, "legend_urls_1")) != NULL) {
arglist[argind].name = "legend_callback1";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = &guppi_legend_1_callback;
argind++;
arglist[argind].name = "legend_callback1_data";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = chart;
argind++;
callbacks = read_strings(param, datasize);
chart->legend_1_callbacks = convert_string_array(callbacks, datasize);
g_free(callbacks);
}
if((param = g_hash_table_lookup(params, "legend_urls_2")) != NULL) {
arglist[argind].name = "legend_callback2";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = &guppi_legend_2_callback;
argind++;
arglist[argind].name = "legend_callback2_data";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = chart;
argind++;
callbacks = read_strings(param, datasize);
chart->legend_2_callbacks = convert_string_array(callbacks, datasize);
g_free(callbacks);
}
if((param = g_hash_table_lookup(params, "legend_urls_3")) != NULL) {
arglist[argind].name = "legend_callback3";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = &guppi_legend_3_callback;
argind++;
arglist[argind].name = "legend_callback3_data";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = chart;
argind++;
callbacks = read_strings(param, datasize);
chart->legend_3_callbacks = convert_string_array(callbacks, datasize);
g_free(callbacks);
}
piechart = guppi_object_newv ("pie", w, h, argind, arglist);
if(piechart) {
if((gtitle = g_hash_table_lookup(params, "title")) != NULL) {
title = guppi_object_new("title", w, h,
"title", gtitle,
"subtitle", g_hash_table_lookup(params,
"subtitle"),
"subobject", piechart,
"on_top", TRUE, NULL);
chart->widget = guppi_object_build_widget(title);
chart->guppiobject = title;
}
else {
chart->widget = guppi_object_build_widget(piechart);
chart->guppiobject = piechart;
}
}
else {
gnc_guppi_chart_data_destroy(chart);
chart = NULL;
}
g_free(data);
free_strings(labels, datasize);
free_strings(colors, datasize);
if(chart) {
gtk_object_set_user_data(GTK_OBJECT(chart->widget), chart->guppiobject);
return chart->widget;
}
else
return NULL;
}
/********************************************************************
* gnc_html_embedded_barchart
* create a Guppi barchart from an HTML <object> block
********************************************************************/
GtkWidget *
gnc_html_embedded_barchart(gnc_html * parent,
int w, int h, GHashTable * params) {
struct guppi_chart_data * chart = gnc_guppi_chart_data_new();
GuppiObject * barchart = NULL;
GuppiObject * title = NULL;
GtkArg arglist[21];
int argind=0;
char * param;
int datarows=0;
int datacols=0;
#if UNNEEDED_OPTIONS
int legend_reversed=0;
#endif
int rotate=0;
int stacked=0;
#if UNNEEDED_OPTIONS
int normalize_stacks=0;
#endif
double * data=NULL;
char ** col_labels=NULL;
char ** row_labels=NULL;
char ** col_colors=NULL;
char ** callbacks=NULL;
char * gtitle = NULL;
chart->parent = parent;
/* FIXME: Temporary workaround for allocation (?) problems with the
g_hash_table (segfault at too many subsequent g_hash_table_lookup
calls)*/
#define UNNEEDED_OPTIONS 0
if((param = g_hash_table_lookup(params, "data_rows")) != NULL) {
sscanf(param, "%d", &datarows);
arglist[argind].name = "data_rows";
arglist[argind].type = GTK_TYPE_INT;
GTK_VALUE_INT(arglist[argind]) = datarows;
argind++;
}
if((param = g_hash_table_lookup(params, "data_cols")) != NULL) {
sscanf(param, "%d", &datacols);
arglist[argind].name = "data_columns";
arglist[argind].type = GTK_TYPE_INT;
GTK_VALUE_INT(arglist[argind]) = datacols;
argind++;
}
if((param = g_hash_table_lookup(params, "data")) != NULL) {
data = read_doubles(param, datarows*datacols);
arglist[argind].name = "data";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = data;
argind++;
}
if(gnc_has_guppi_version(0,35,6) &&
(param = g_hash_table_lookup(params, "x_axis_label")) != NULL) {
arglist[argind].name = "x_axis_label";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = param;
argind++;
}
if(gnc_has_guppi_version(0,35,6) &&
(param = g_hash_table_lookup(params, "y_axis_label")) != NULL) {
arglist[argind].name = "y_axis_label";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = param;
argind++;
}
if((param = g_hash_table_lookup(params, "col_labels")) != NULL) {
col_labels = read_strings(param, datacols);
arglist[argind].name = "column_labels";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = col_labels;
argind++;
}
if((param = g_hash_table_lookup(params, "row_labels")) != NULL) {
row_labels = read_strings(param, datarows);
arglist[argind].name = "row_labels";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = row_labels;
argind++;
}
if((param = g_hash_table_lookup(params, "col_colors")) != NULL) {
col_colors = read_strings(param, datacols);
arglist[argind].name = "column_colors";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = col_colors;
argind++;
}
if((param = g_hash_table_lookup(params, "rotate_row_labels")) != NULL) {
sscanf(param, "%d", &rotate);
arglist[argind].name = "rotate_x_axis_labels";
arglist[argind].type = GTK_TYPE_BOOL;
GTK_VALUE_BOOL(arglist[argind]) = rotate;
argind++;
}
if((param = g_hash_table_lookup(params, "bar_urls_1")) != NULL) {
arglist[argind].name = "bar_callback1";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = &guppi_bar_1_callback;
argind++;
arglist[argind].name = "bar_callback1_data";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = chart;
argind++;
callbacks = read_strings(param, datarows*datacols);
chart->data_1_callbacks = convert_string_array(callbacks,
datarows*datacols);
g_free(callbacks);
}
#if UNNEEDED_OPTIONS
if((param = g_hash_table_lookup(params, "bar_urls_2")) != NULL) {
arglist[argind].name = "bar_callback2";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = &guppi_bar_2_callback;
argind++;
arglist[argind].name = "bar_callback2_data";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = chart;
argind++;
callbacks = read_strings(param, datarows*datacols);
chart->data_2_callbacks = convert_string_array(callbacks,
datarows*datacols);
g_free(callbacks);
}
if((param = g_hash_table_lookup(params, "bar_urls_3")) != NULL) {
arglist[argind].name = "bar_callback3";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = &guppi_bar_3_callback;
argind++;
arglist[argind].name = "bar_callback3_data";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = chart;
argind++;
callbacks = read_strings(param, datarows*datacols);
chart->data_3_callbacks = convert_string_array(callbacks,
datarows*datacols);
g_free(callbacks);
}
#endif
if((param = g_hash_table_lookup(params, "legend_urls_1")) != NULL) {
arglist[argind].name = "legend_callback1";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = &guppi_legend_1_callback;
argind++;
arglist[argind].name = "legend_callback1_data";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = chart;
argind++;
callbacks = read_strings(param, datarows*datacols);
chart->legend_1_callbacks = convert_string_array(callbacks,
datarows*datacols);
g_free(callbacks);
}
#if UNNEEDED_OPTIONS
if((param = g_hash_table_lookup(params, "legend_urls_2")) != NULL) {
arglist[argind].name = "legend_callback2";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = &guppi_legend_2_callback;
argind++;
arglist[argind].name = "legend_callback2_data";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = chart;
argind++;
callbacks = read_strings(param, datarows*datacols);
chart->legend_2_callbacks = convert_string_array(callbacks,
datarows*datacols);
g_free(callbacks);
}
if((param = g_hash_table_lookup(params, "legend_urls_3")) != NULL) {
arglist[argind].name = "legend_callback3";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = &guppi_legend_3_callback;
argind++;
arglist[argind].name = "legend_callback3_data";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = chart;
argind++;
callbacks = read_strings(param, datarows*datacols);
chart->legend_3_callbacks = convert_string_array(callbacks,
datarows*datacols);
g_free(callbacks);
}
#endif
if(gnc_has_guppi_version(0,35,4) &&
(param = g_hash_table_lookup(params, "legend_reversed")) != NULL) {
sscanf(param, "%d", &rotate);
arglist[argind].name = "legend_reversed";
arglist[argind].type = GTK_TYPE_BOOL;
GTK_VALUE_BOOL(arglist[argind]) = rotate;
argind++;
}
if(gnc_has_guppi_version(0,35,4) &&
(param = g_hash_table_lookup(params, "stacked")) != NULL) {
sscanf(param, "%d", &stacked);
arglist[argind].name = "stacked";
arglist[argind].type = GTK_TYPE_BOOL;
GTK_VALUE_BOOL(arglist[argind]) = stacked;
argind++;
}
#if UNNEEDED_OPTIONS
if(gnc_has_guppi_version(0,35,4) &&
(param = g_hash_table_lookup(params, "normalize_stacks")) != NULL) {
sscanf(param, "%d", &normalize_stacks);
arglist[argind].name = "normalize_stacks";
arglist[argind].type = GTK_TYPE_BOOL;
GTK_VALUE_BOOL(arglist[argind]) = normalize_stacks;
argind++;
}
#endif
barchart = guppi_object_newv("barchart", w, h,
argind, arglist);
if(barchart) {
if((gtitle = g_hash_table_lookup(params, "title")) != NULL) {
title = guppi_object_new("title", w, h,
"title", gtitle,
"subtitle", g_hash_table_lookup(params,
"subtitle"),
"subobject", barchart,
"on_top", TRUE, NULL);
chart->widget = guppi_object_build_widget(title);
chart->guppiobject = title;
}
else {
chart->widget = guppi_object_build_widget(barchart);
chart->guppiobject = barchart;
}
}
else {
gnc_guppi_chart_data_destroy(chart);
chart = NULL;
}
g_free(data);
free_strings(col_labels, datacols);
free_strings(row_labels, datarows);
free_strings(col_colors, datacols);
if(chart) {
gtk_object_set_user_data(GTK_OBJECT(chart->widget), chart->guppiobject);
return chart->widget;
}
else
return NULL;
}
/********************************************************************
* gnc_html_embedded_scatter
* create a Guppi scatter plot from an HTML <object> block
********************************************************************/
GtkWidget *
gnc_html_embedded_scatter(gnc_html * parent,
int w, int h, GHashTable * params) {
struct guppi_chart_data * chart = gnc_guppi_chart_data_new();
GuppiObject * scatter = NULL;
GuppiObject * title = NULL;
GtkArg arglist[8];
int argind=0;
char * param;
int datasize;
unsigned int color;
double * x_data=NULL;
double * y_data=NULL;
char * gtitle = NULL;
chart->parent = parent;
if((param = g_hash_table_lookup(params, "datasize")) != NULL) {
sscanf(param, "%d", &datasize);
arglist[argind].name = "data_size";
arglist[argind].type = GTK_TYPE_INT;
GTK_VALUE_INT(arglist[argind]) = datasize;
argind++;
}
if((param = g_hash_table_lookup(params, "color")) != NULL) {
sscanf(param, "%x", &color);
arglist[argind].name = "color_rgba";
arglist[argind].type = GTK_TYPE_UINT;
GTK_VALUE_UINT(arglist[argind]) = color;
argind++;
}
if((param = g_hash_table_lookup(params, "x_data")) != NULL) {
x_data = read_doubles(param, datasize);
arglist[argind].name = "x_data";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = x_data;
argind++;
}
if((param = g_hash_table_lookup(params, "y_data")) != NULL) {
y_data = read_doubles(param, datasize);
arglist[argind].name = "y_data";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = y_data;
argind++;
}
if((param = g_hash_table_lookup(params, "x_axis_label")) != NULL) {
arglist[argind].name = "x_axis_label";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = param;
argind++;
}
if((param = g_hash_table_lookup(params, "y_axis_label")) != NULL) {
arglist[argind].name = "y_axis_label";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = param;
argind++;
}
if((param = g_hash_table_lookup(params, "marker")) != NULL) {
arglist[argind].name = "marker";
arglist[argind].type = GTK_TYPE_POINTER;
GTK_VALUE_POINTER(arglist[argind]) = param;
argind++;
}
scatter = guppi_object_newv("scatter", w, h,
argind, arglist);
if(scatter) {
if((gtitle = g_hash_table_lookup(params, "title")) != NULL) {
title = guppi_object_new("title", w, h,
"title", gtitle,
"subtitle", g_hash_table_lookup(params,
"subtitle"),
"subobject", scatter,
"on_top", TRUE, NULL);
chart->widget = guppi_object_build_widget(title);
chart->guppiobject = title;
}
else {
chart->widget = guppi_object_build_widget(scatter);
chart->guppiobject = scatter;
}
}
else {
gnc_guppi_chart_data_destroy(chart);
chart = NULL;
}
g_free(x_data);
g_free(y_data);
if(chart) {
gtk_object_set_user_data(GTK_OBJECT(chart->widget), chart->guppiobject);
return chart->widget;
}
else
return NULL;
}
#endif

View File

@ -1,39 +0,0 @@
/********************************************************************
* gnc-html-guppi.h -- embed objects in the html stream *
* Copyright (C) 2000 Bill Gribble <grib@billgribble.com> *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
* published by the Free Software Foundation; either version 2 of *
* the License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License*
* along with this program; if not, contact: *
* *
* Free Software Foundation Voice: +1-617-542-5942 *
* 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
* Boston, MA 02110-1301, USA gnu@gnu.org *
\********************************************************************/
#ifndef GNC_HTML_GUPPI_H
#define GNC_HTML_GUPPI_H
#include "gnc-html.h"
void gnc_html_guppi_init(void);
void gnc_html_guppi_shutdown(void);
GtkWidget * gnc_html_embedded_piechart(gnc_html * parent,
gint w, gint h, GHashTable * params);
GtkWidget * gnc_html_embedded_barchart(gnc_html * parent,
gint w, gint h, GHashTable * params);
GtkWidget * gnc_html_embedded_scatter(gnc_html * parent,
gint w, gint h, GHashTable * params);
GtkWidget * gnc_html_embedded_account_tree(gnc_html * parent,
gint w, gint h, GHashTable * prms);
#endif

View File

@ -38,9 +38,6 @@
#include <gtkhtml/gtkhtml.h>
#include <gtkhtml/gtkhtml-embedded.h>
#ifdef USE_GUPPI
#include <libguppitank/guppi-tank.h>
#endif
#include "Account.h"
#include "Group.h"

View File

@ -151,8 +151,7 @@ AM_CFLAGS = \
${GDK_PIXBUF_CFLAGS} \
${GTKHTML_CFLAGS} \
${GLADE_CFLAGS} \
${QOF_CFLAGS} \
${GUPPI_CFLAGS}
${QOF_CFLAGS}
# We build this in an earlier directory.