-
Notifications
You must be signed in to change notification settings - Fork 761
/
gnc-html.h
183 lines (155 loc) · 8.67 KB
/
gnc-html.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
/********************************************************************
* 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 *
* 59 Temple Place - Suite 330 Fax: +1-617-542-2652 *
* Boston, MA 02111-1307, USA gnu@gnu.org *
\********************************************************************/
#ifndef GNC_HTML_H
#define GNC_HTML_H
#include <glib.h>
#include <gtkhtml/gtkhtml.h>
#include <gdk/gdk.h>
#include <gtk/gtk.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_ACTION "action" /* for special SUBMIT actions */
#define URL_TYPE_PRICE "price" /* for price editor popups */
#define URL_TYPE_OTHER "other"
#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 int (* 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(void);
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. */
void gnc_html_register_object_handler(const char * classid,
GncHTMLObjectCB hand);
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