You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gnucash/src/gnome-utils/gnc-html.h

184 lines
8.6 KiB

/********************************************************************
* gnc-html.h -- display html with gnc special tags *
* 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_H
#define GNC_HTML_H
#include <gtkhtml/gtkhtml.h>
typedef char * URLType;
#define URL_TYPE_FILE "file"
#define URL_TYPE_JUMP "jump"
#define URL_TYPE_HTTP "http"
#define URL_TYPE_FTP "ftp"
#define URL_TYPE_SECURE "secure"
#define URL_TYPE_REGISTER "register" /* for gnucash register popups */
#define URL_TYPE_ACCTTREE "accttree" /* for account tree windows */
#define URL_TYPE_REPORT "report" /* for gnucash report popups */
#define URL_TYPE_OPTIONS "options" /* for editing report options */
#define URL_TYPE_SCHEME "scheme" /* for scheme code evaluation */
#define URL_TYPE_HELP "help" /* for a gnucash help window */
#define URL_TYPE_XMLDATA "xmldata" /* links to gnucash XML data files */
#define URL_TYPE_PRICE "price" /* for price editor popups */
#define URL_TYPE_OTHER "other"
#define URL_TYPE_BUDGET "budget"
#include "gnc-html-history.h"
typedef struct gnc_html_struct gnc_html;
/* The result structure of url handlers. Strings should be g_malloc'd
* by the handler and will be freed by gnc_html. */
typedef struct
{
/* The following members are used if the handler succeeds (returns TRUE). */
gboolean load_to_stream; /* If TRUE, the url should be loaded from
* a stream using the rest of the data in
* the struct into the original gnc_html
* object. If FALSE, the handler will
* perform all needed actions itself. */
URLType url_type; /* Defaults to original */
char * location; /* If NULL, use original (NULL is default) */
char * label; /* If NULL, use original (NULL is default) */
URLType base_type;
char * base_location;
/* The following members are used if the handler fails (returns FALSE). */
char * error_message;
} GNCURLResult;
typedef int (* GncHTMLUrltypeCB)(URLType ut);
typedef void (* GncHTMLFlyoverCB)(gnc_html * html, const char * url,
gpointer data);
typedef void (* GncHTMLLoadCB)(gnc_html * html, URLType type,
const char * location, const char * label,
gpointer data);
typedef int (* GncHTMLButtonCB)(gnc_html * html, GdkEventButton * event,
gpointer data);
typedef gboolean (* GncHTMLObjectCB)(gnc_html * html, GtkHTMLEmbedded * eb,
gpointer data);
typedef int (* GncHTMLActionCB)(gnc_html * html, const char * method,
const char * action, GHashTable * form_data);
typedef gboolean (* GncHTMLStreamCB)(const char *location, char **data, int *datalen);
typedef gboolean (* GncHTMLUrlCB)(const char *location, const char *label,
gboolean new_window, GNCURLResult * result);
gnc_html * gnc_html_new(GtkWindow *parent);
void gnc_html_destroy(gnc_html * html);
void gnc_html_show_url(gnc_html * html,
URLType type,
const char * location,
const char * label,
gboolean new_window_hint);
void gnc_html_show_data(gnc_html * html,
const char * data, int datalen);
void gnc_html_reload(gnc_html * html);
gboolean gnc_html_export(gnc_html * html, const char *file);
void gnc_html_print(gnc_html * html);
void gnc_html_cancel(gnc_html * html);
char * gnc_build_url (URLType type, const gchar * location,
const gchar * label);
/* Register a new URLType.
* returns TRUE if succesful, FALSE if type already exists.
*
* protocol should be an empty string if there is no corresponding protocol.
* if protocol is NULL, this function returns FALSE.
*/
gboolean gnc_html_register_urltype (URLType type, const char *protocol);
/* object handlers deal with <object classid="foo"> objects in HTML.
* the handlers are looked up at object load time. */
//#if 0
void gnc_html_register_object_handler(const char * classid,
GncHTMLObjectCB hand);
//#endif
void gnc_html_unregister_object_handler(const char * classid);
/* action handlers deal with submitting forms of the type
* <FORM action="gnc-action:action?args">. Normal get/post http:
* forms are handled as would be expected, with no callback. */
void gnc_html_register_action_handler(const char * action,
GncHTMLActionCB hand);
void gnc_html_unregister_action_handler(const char * action);
/* stream handlers load data for particular URLTypes. */
void gnc_html_register_stream_handler(URLType url_type,
GncHTMLStreamCB hand);
void gnc_html_unregister_stream_handler(URLType url_type);
/* handlers for particular URLTypes. */
void gnc_html_register_url_handler(URLType url_type,
GncHTMLUrlCB hand);
void gnc_html_unregister_url_handler(URLType url_type);
/* default action handlers for GET and POST methods. 'generic_post'
* is the trivial application/x-www-form-urlencoded submit,
* multipart-post is a multipart/form-data submit. */
void gnc_html_generic_get_submit(gnc_html * html, const char * act,
GHashTable * form_data);
void gnc_html_generic_post_submit(gnc_html * html, const char * act,
GHashTable * form_data);
void gnc_html_multipart_post_submit(gnc_html * html, const char * a,
GHashTable * form_data);
URLType gnc_html_parse_url(gnc_html * html, const gchar * url,
char ** url_location, char ** url_label);
/* some string coding/decoding routines */
char * gnc_html_encode_string(const char * in);
char * gnc_html_decode_string(const char * in);
char * gnc_html_escape_newlines(const char * in);
char * gnc_html_unescape_newlines(const char * in);
/* utilities for dealing with encoded argument strings for forms */
char * gnc_html_pack_form_data(GHashTable * form_data);
GHashTable * gnc_html_unpack_form_data(const char * encoding);
void gnc_html_merge_form_data(GHashTable * fdata, const char * enc);
void gnc_html_free_form_data(GHashTable * fdata);
gnc_html_history * gnc_html_get_history(gnc_html * html);
GtkWidget * gnc_html_get_widget(gnc_html * html);
/* setting callbacks */
void gnc_html_set_urltype_cb(gnc_html * html, GncHTMLUrltypeCB urltype_cb);
void gnc_html_set_load_cb(gnc_html * html, GncHTMLLoadCB load_cb,
gpointer data);
void gnc_html_set_flyover_cb(gnc_html * html, GncHTMLFlyoverCB newwin_cb,
gpointer data);
void gnc_html_set_button_cb(gnc_html * html, GncHTMLButtonCB button_cb,
gpointer data);
GtkWidget * gnc_html_get_container_widget(gnc_html * html);
GtkWidget * gnc_html_get_html_widget(gnc_html * html);
/* Initialize the html subsystem */
void gnc_html_initialize (void);
#endif