/*
* Copyright (C) 2000, 2001, 2002 Marco Pesenti Gritti
*
* 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, 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef EPHY_EMBED_H
#define EPHY_EMBED_H
#include "ephy-embed-types.h"
#include "ephy-embed-event.h"
#include <glib-object.h>
#include <glib.h>
#include <gtk/gtkwidget.h>
G_BEGIN_DECLS
typedef struct EphyEmbedClass EphyEmbedClass;
#define EPHY_EMBED_TYPE (ephy_embed_get_type ())
#define EPHY_EMBED(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EPHY_EMBED_TYPE, EphyEmbed))
#define EPHY_EMBED_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), EPHY_EMBED_TYPE, EphyEmbedClass))
#define IS_EPHY_EMBED(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EPHY_EMBED_TYPE))
#define IS_EPHY_EMBED_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), EPHY_EMBED_TYPE))
#define EPHY_EMBED_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EPHY_EMBED_TYPE, EphyEmbedClass))
typedef struct _EphyEmbed EphyEmbed;
typedef enum
{
EMBED_STATE_UNKNOWN = 0,
EMBED_STATE_START = 1 << 0,
EMBED_STATE_REDIRECTING = 1 << 1,
EMBED_STATE_TRANSFERRING = 1 << 2,
EMBED_STATE_NEGOTIATING = 1 << 3,
EMBED_STATE_STOP = 1 << 4,
EMBED_STATE_IS_REQUEST = 1 << 5,
EMBED_STATE_IS_DOCUMENT = 1 << 6,
EMBED_STATE_IS_NETWORK = 1 << 7,
EMBED_STATE_IS_WINDOW = 1 << 8
} EmbedState;
typedef enum
{
EMBED_CLIPBOARD_CAP = 1 << 0,
EMBED_COOKIES_CAP = 1 << 1,
EMBED_LINKS_CAP = 1 << 2,
EMBED_ZOOM_CAP = 1 << 3,
EMBED_PRINT_CAP = 1 << 6,
EMBED_FIND_CAP = 1 << 7,
EMBED_SCROLL_CAP = 1 << 8,
EMBED_SECURITY_CAP = 1 << 9,
EMBED_ENCODING_CAP = 1 << 10,
EMBED_SHISTORY_CAP = 1 << 11
} EmbedCapabilities;
typedef struct
{
char *modification_date;
/* lists of hashtables with gvalues */
GList *images; /* url, alt, title, width, height */
GList *forms; /* action, type */
GList *links; /* url, title, type */
GList *stylesheets; /* url, title */
} EmbedPageInfo;
typedef enum
{
EMBED_RELOAD_NORMAL = 1 << 1,
EMBED_RELOAD_BYPASSCACHE = 1 << 2,
EMBED_RELOAD_BYPASSPROXY = 1 << 3
} EmbedReloadFlags;
typedef enum
{
DISPLAY_AS_SOURCE = 1U,
DISPLAY_NORMAL = 2U
} EmbedDisplayType;
typedef struct
{
gchar *search_string;
gboolean backwards;
gboolean wrap;
gboolean entire_word;
gboolean match_case;
gboolean search_frames;
gboolean interactive;
} EmbedFindInfo;
typedef struct
{
gboolean print_to_file;
gchar *printer;
gchar *file;
gchar *paper;
gint top_margin;
gint bottom_margin;
gint left_margin;
gint right_margin;
gint pages;
gint from_page;
gint to_page;
gint frame_type;
gint orientation;
gboolean print_color;
/*
* &T - title
* &U - Document URL
* &D - Date/Time
* &P - Page Number
* &PT - Page Number with total Number of Pages (example: 1 of 34)
*
* So, if headerLeftStr = "&T" the title and the document URL
* will be printed out on the top left-hand side of each page.
*/
gchar *header_left_string;
gchar *header_center_string;
gchar *header_right_string;
gchar *footer_left_string;
gchar *footer_center_string;
gchar *footer_right_string;
gboolean preview;
}
EmbedPrintInfo;
typedef enum
{
PRINTPREVIEW_GOTO_PAGENUM = 0,
PRINTPREVIEW_PREV_PAGE = 1,
PRINTPREVIEW_NEXT_PAGE = 2,
PRINTPREVIEW_HOME = 3,
PRINTPREVIEW_END = 4
} EmbedPrintPreviewNavType;
typedef enum
{
STATE_IS_UNKNOWN,
STATE_IS_INSECURE,
STATE_IS_BROKEN,
STATE_IS_SECURE_MED,
STATE_IS_SECURE_LOW,
STATE_IS_SECURE_HIGH
} EmbedSecurityLevel;
struct EphyEmbedClass
{
GTypeInterface base_iface;
gint (* context_menu) (EphyEmbed *embed,
EphyEmbedEvent *event);
void (* favicon) (EphyEmbed *embed,
const char *location);
void (* link_message) (EphyEmbed *embed,
const char *link);
void (* js_status) (EphyEmbed *embed,
const char *status);
void (* location) (EphyEmbed *embed,
const char *location);
void (* title) (EphyEmbed *embed);
void (* progress) (EphyEmbed *embed,
const char *uri,
gint curprogress,
gint maxprogress);
void (* net_state) (EphyEmbed *embed,
const char *uri,
EmbedState state);
void (* new_window) (EphyEmbed *embed,
EphyEmbed **new_embed,
EmbedChromeMask chromemask);
void (* visibility) (EphyEmbed *embed,
gboolean visibility);
void (* destroy_brsr) (EphyEmbed *embed);
gint (* open_uri) (EphyEmbed *embed,
const char *uri);
void (* size_to) (EphyEmbed *embed,
gint width,
gint height);
gint (* dom_mouse_click) (EphyEmbed *embed,
EphyEmbedEvent *event);
void (* security_change) (EphyEmbed *embed,
EmbedSecurityLevel level);
void (* zoom_change) (EphyEmbed *embed,
guint new_zoom);
/* Methods */
void (* get_capabilities) (EphyEmbed *embed,
EmbedCapabilities *caps);
gresult (* load_url) (EphyEmbed *embed,
const char *url);
gresult (* stop_load) (EphyEmbed *embed);
gresult (* can_go_back) (EphyEmbed *embed);
gresult (* can_go_forward) (EphyEmbed *embed);
gresult (* can_go_up) (EphyEmbed *embed);
gresult (* get_go_up_list) (EphyEmbed *embed, GSList **l);
gresult (* go_back) (EphyEmbed *embed);
gresult (* go_forward) (EphyEmbed *embed);
gresult (* go_up) (EphyEmbed *embed);
gresult (* render_data) (EphyEmbed *embed,
const char *data,
guint32 len,
const char *base_uri,
const char *mime_type);
gresult (* open_stream) (EphyEmbed *embed,
const char *base_uri,
const char *mime_type);
gresult (* append_data) (EphyEmbed *embed,
const char *data,
guint32 len);
gresult (* close_stream) (EphyEmbed *embed);
gresult (* get_title) (EphyEmbed *embed,
char **title);
gresult (* get_location) (EphyEmbed *embed,
gboolean toplevel,
char **location);
gresult (* reload) (EphyEmbed *embed,
EmbedReloadFlags flags);
gresult (* copy_page) (EphyEmbed *dest,
EphyEmbed *source,
EmbedDisplayType display_type);
gresult (* zoom_set) (EphyEmbed *embed,
float zoom,
gboolean reflow);
gresult (* zoom_get) (EphyEmbed *embed,
float *zoom);
gresult (* selection_can_cut) (EphyEmbed *embed);
gresult (* selection_can_copy) (EphyEmbed *embed);
gresult (* can_paste) (EphyEmbed *embed);
gresult (* selection_cut) (EphyEmbed *embed);
gresult (* selection_copy) (EphyEmbed *embed);
gresult (* paste) (EphyEmbed *embed);
gresult (* select_all) (EphyEmbed *embed);
gresult (* shistory_count) (EphyEmbed *embed,
int *count);
gresult (* shistory_get_nth) (EphyEmbed *embed,
int nth,
gboolean is_relative,
char **url,
char **title);
gresult (* shistory_get_pos) (EphyEmbed *embed,
int *pos);
gresult (* shistory_go_nth) (EphyEmbed *embed,
int nth);
gboolean (* shistory_copy) (EphyEmbed *source,
EphyEmbed *dest);
gresult (* get_security_level) (EphyEmbed *embed,
EmbedSecurityLevel *level,
char **description);
gresult (* find) (EphyEmbed *embed,
EmbedFindInfo *find);
gresult (* print) (EphyEmbed *embed,
EmbedPrintInfo *info);
gresult (* print_preview_close) (EphyEmbed *embed);
gresult (* print_preview_num_pages) (EphyEmbed *embed,
gint *retNum);
gresult (* print_preview_navigate) (EphyEmbed *embed,
EmbedPrintPreviewNavType navType,
gint pageNum);
gresult (* set_encoding) (EphyEmbed *embed,
const char *encoding);
};
GType ephy_embed_get_type (void);
/* Base */
EphyEmbed *ephy_embed_new (GObject *single);
void ephy_embed_get_capabilities (EphyEmbed *embed,
EmbedCapabilities *caps);
gresult ephy_embed_load_url (EphyEmbed *embed,
const char *url);
gresult ephy_embed_stop_load (EphyEmbed *embed);
gresult ephy_embed_can_go_back (EphyEmbed *embed);
gresult ephy_embed_can_go_forward (EphyEmbed *embed);
gresult ephy_embed_can_go_up (EphyEmbed *embed);
gresult ephy_embed_get_go_up_list (EphyEmbed *embed,
GSList **l);
gresult ephy_embed_go_back (EphyEmbed *embed);
gresult ephy_embed_go_forward (EphyEmbed *embed);
gresult ephy_embed_go_up (EphyEmbed *embed);
gresult ephy_embed_render_data (EphyEmbed *embed,
const char *data,
guint32 len,
const char *base_uri,
const char *mime_type);
gresult ephy_embed_open_stream (EphyEmbed *embed,
const char *base_uri,
const char *mime_type);
gresult ephy_embed_append_data (EphyEmbed *embed,
const char *data,
guint32 len);
gresult ephy_embed_close_stream (EphyEmbed *embed);
gresult ephy_embed_get_title (EphyEmbed *embed,
char **title);
gresult ephy_embed_get_location (EphyEmbed *embed,
gboolean toplevel,
char **location);
gresult ephy_embed_reload (EphyEmbed *embed,
EmbedReloadFlags flags);
gresult ephy_embed_copy_page (EphyEmbed *dest,
EphyEmbed *source,
EmbedDisplayType display_type);
/* Zoom */
gresult ephy_embed_zoom_set (EphyEmbed *embed,
float zoom,
gboolean reflow);
gresult ephy_embed_zoom_get (EphyEmbed *embed,
float *zoom);
/* Clipboard */
gresult ephy_embed_selection_can_cut (EphyEmbed *embed);
gresult ephy_embed_selection_can_copy (EphyEmbed *embed);
gresult ephy_embed_can_paste (EphyEmbed *embed);
gresult ephy_embed_selection_cut (EphyEmbed *embed);
gresult ephy_embed_selection_copy (EphyEmbed *embed);
gresult ephy_embed_paste (EphyEmbed *embed);
gresult ephy_embed_select_all (EphyEmbed *embed);
/* Session history */
gresult ephy_embed_shistory_count (EphyEmbed *embed,
int *count);
gresult ephy_embed_shistory_get_nth (EphyEmbed *embed,
int nth,
gboolean is_relative,
char **url,
char **title);
gresult ephy_embed_shistory_get_pos (EphyEmbed *embed,
int *pos);
gresult ephy_embed_shistory_go_nth (EphyEmbed *embed,
int nth);
gboolean ephy_embed_shistory_copy (EphyEmbed *source,
EphyEmbed *dest);
/* Utils */
gresult ephy_embed_get_security_level (EphyEmbed *embed,
EmbedSecurityLevel *level,
char **description);
gresult ephy_embed_find (EphyEmbed *embed,
EmbedFindInfo *find);
gresult ephy_embed_set_encoding (EphyEmbed *embed,
const char *encoding);
/* Printing */
gresult ephy_embed_print (EphyEmbed *embed,
EmbedPrintInfo *info);
gresult ephy_embed_print_preview_close (EphyEmbed *embed);
gresult ephy_embed_print_preview_num_pages (EphyEmbed *embed,
gint *retNum);
gresult ephy_embed_print_preview_navigate (EphyEmbed *embed,
EmbedPrintPreviewNavType navType,
gint pageNum);
G_END_DECLS
#endif