1 /* 2 * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client 3 * Copyright (C) 1999-2015 Hiroyuki Yamamoto and the Claws Mail team 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 3 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program. If not, see <http://www.gnu.org/licenses/>. 17 */ 18 19 #ifndef __TEXTVIEW_H__ 20 #define __TEXTVIEW_H__ 21 22 #ifdef HAVE_CONFIG_H 23 #include "claws-features.h" 24 #endif 25 26 #include <glib.h> 27 #include <gtk/gtk.h> 28 29 typedef struct _ClickableText ClickableText; 30 struct _ClickableText 31 { 32 gchar *uri; 33 34 gchar *filename; 35 36 gpointer data; 37 gint data_len; 38 39 guint start; 40 guint end; 41 42 gboolean is_quote; 43 gint quote_level; 44 gboolean q_expanded; 45 gchar *fg_color; 46 }; 47 48 49 #include "viewtypes.h" 50 #include "procmime.h" 51 52 struct _TextView 53 { 54 GtkWidget *vbox; 55 GtkWidget *scrolledwin; 56 GtkWidget *text; 57 58 GtkUIManager *ui_manager; 59 GtkActionGroup *link_action_group; 60 GtkWidget *link_popup_menu; 61 GtkActionGroup *mail_action_group; 62 GtkWidget *mail_popup_menu; 63 GtkActionGroup *file_action_group; 64 GtkWidget *file_popup_menu; 65 66 gboolean default_text; 67 gboolean is_in_signature; 68 gboolean is_diff; 69 gboolean is_attachment; 70 gboolean is_in_git_patch; 71 72 GSList *uri_list; 73 gint body_pos; 74 75 MessageView *messageview; 76 gint last_buttonpress; 77 78 ClickableText *uri_hover; 79 GtkTextIter uri_hover_start_iter; 80 GtkTextIter uri_hover_end_iter; 81 GtkWidget *image; 82 gint avatar_type; 83 gboolean loading; 84 gboolean stop_loading; 85 gint prev_quote_level; 86 }; 87 88 TextView *textview_create (void); 89 void textview_init (TextView *textview); 90 void textview_reflect_prefs (TextView *textview); 91 92 void textview_show_part (TextView *textview, 93 MimeInfo *mimeinfo, 94 FILE *fp); 95 void textview_show_error (TextView *textview); 96 void textview_show_info (TextView *textview, 97 const gchar *info_str); 98 void textview_show_mime_part (TextView *textview, 99 MimeInfo *partinfo); 100 void textview_clear (TextView *textview); 101 void textview_destroy (TextView *textview); 102 void textview_set_font (TextView *textview, 103 const gchar *codeset); 104 void textview_set_text (TextView *textview, 105 const gchar *text); 106 void textview_set_position (TextView *textview, 107 gint pos); 108 void textview_scroll_one_line (TextView *textview, 109 gboolean up); 110 gboolean textview_scroll_page (TextView *textview, 111 gboolean up); 112 void textview_scroll_max (TextView *textview, 113 gboolean up); 114 115 gboolean textview_search_string (TextView *textview, 116 const gchar *str, 117 gboolean case_sens); 118 gboolean textview_search_string_backward (TextView *textview, 119 const gchar *str, 120 gboolean case_sens); 121 void textview_cursor_wait(TextView *textview); 122 void textview_cursor_normal(TextView *textview); 123 void textview_show_icon(TextView *textview, const gchar *stock_id); 124 void textview_get_selection_offsets (TextView *textview, 125 gint *sel_start, 126 gint *sel_end); 127 gboolean textview_uri_security_check (TextView *textview, 128 ClickableText *uri); 129 gchar *textview_get_visible_uri (TextView *textview, 130 ClickableText *uri); 131 132 #define TEXTVIEW_INSERT(str) \ 133 gtk_text_buffer_insert_with_tags_by_name \ 134 (buffer, &iter, str, -1,\ 135 "header", NULL) 136 137 #define TEXTVIEW_INSERT_BOLD(str) \ 138 gtk_text_buffer_insert_with_tags_by_name \ 139 (buffer, &iter, str, -1,\ 140 "header", "header_title", NULL) 141 142 #define TEXTVIEW_INSERT_LINK(str, fname, udata) { \ 143 ClickableText *uri; \ 144 uri = g_new0(ClickableText, 1); \ 145 uri->uri = g_strdup(""); \ 146 uri->start = gtk_text_iter_get_offset(&iter); \ 147 gtk_text_buffer_insert_with_tags_by_name \ 148 (buffer, &iter, str, -1, \ 149 "link", "header_title", "header", \ 150 NULL); \ 151 uri->end = gtk_text_iter_get_offset(&iter); \ 152 uri->filename = fname?g_strdup(fname):NULL; \ 153 uri->data = udata; \ 154 textview->uri_list = \ 155 g_slist_prepend(textview->uri_list, uri); \ 156 } 157 158 #endif /* __TEXTVIEW_H__ */ 159