1 /* 2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client 3 * Copyright (C) 1999-2012 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 20 #ifndef MIMEVIEW_H 21 #define MIMEVIEW_H 22 23 typedef struct _MimeViewerFactory MimeViewerFactory; 24 typedef struct _MimeViewer MimeViewer; 25 26 #include <glib.h> 27 #include <gdk/gdk.h> 28 #include <gtk/gtk.h> 29 #ifdef USE_PTHREAD 30 #include <pthread.h> 31 #endif 32 33 #include "textview.h" 34 #include "messageview.h" 35 #include "procmime.h" 36 #include "noticeview.h" 37 38 typedef enum 39 { 40 MIMEVIEW_TEXT, 41 MIMEVIEW_VIEWER 42 } MimeViewType; 43 44 #ifdef USE_PTHREAD 45 typedef struct _SigCheckData SigCheckData; 46 struct _SigCheckData 47 { 48 pthread_t th; 49 pthread_t cancel_th; 50 gboolean th_init; 51 gboolean cancel_th_init; 52 53 MimeInfo *siginfo; 54 gboolean free_after_use; 55 gboolean destroy_mimeview; 56 gboolean timeout; 57 }; 58 #endif 59 60 struct _MimeView 61 { 62 GtkWidget *hbox; 63 GtkWidget *paned; 64 GtkWidget *scrolledwin; 65 GtkWidget *ctree; 66 GtkWidget *mime_notebook; 67 GtkWidget *ctree_mainbox; 68 GtkWidget *icon_scroll; 69 GtkWidget *icon_vbox; 70 GtkWidget *icon_mainbox; 71 GtkWidget *mime_toggle; 72 GtkWidget *scrollbutton; 73 MimeViewType type; 74 gboolean ctree_mode; 75 76 GtkWidget *popupmenu; 77 78 GtkTreePath *opened; 79 80 TextView *textview; 81 MimeViewer *mimeviewer; 82 83 MessageView *messageview; 84 85 MimeInfo *mimeinfo; 86 87 gchar *file; 88 89 GSList *viewers; 90 91 GtkTargetList *target_list; /* DnD */ 92 93 gint icon_count; 94 MainWindow *mainwin; 95 96 NoticeView *siginfoview; 97 MimeInfo *siginfo; 98 MimeInfo *spec_part; 99 GtkUIManager *ui_manager; 100 GtkActionGroup *action_group; 101 gboolean signed_part; 102 103 #ifdef USE_PTHREAD 104 SigCheckData *check_data; 105 #endif 106 }; 107 108 struct _MimeViewerFactory 109 { 110 /** 111 * Array of supported content types. 112 * Must be NULL terminated and lower case 113 */ 114 gchar **content_types; 115 gint priority; 116 117 MimeViewer *(*create_viewer) (void); 118 }; 119 120 struct _MimeViewer 121 { 122 MimeViewerFactory *factory; 123 124 GtkWidget *(*get_widget) (MimeViewer *); 125 void (*show_mimepart) (MimeViewer *, const gchar *infile, MimeInfo *); 126 void (*clear_viewer) (MimeViewer *); 127 void (*destroy_viewer) (MimeViewer *); 128 gchar *(*get_selection) (MimeViewer *); 129 gboolean (*scroll_page) (MimeViewer *, gboolean up); 130 void (*scroll_one_line) (MimeViewer *, gboolean up); 131 gboolean (*text_search) (MimeViewer *, gboolean backward, 132 const gchar *str, 133 gboolean case_sensitive); 134 void (*print) (MimeViewer *); 135 MimeView *mimeview; 136 }; 137 138 #ifdef __cplusplus 139 extern "C" { 140 #endif /* __cplusplus */ 141 142 143 MimeView *mimeview_create (MainWindow *mainwin); 144 void mimeview_init (MimeView *mimeview); 145 void mimeview_show_message (MimeView *mimeview, 146 MimeInfo *mimeinfo, 147 const gchar *file); 148 gboolean mimeview_show_part (MimeView *mimeview, 149 MimeInfo *partinfo); 150 void mimeview_show_part_as_text (MimeView *mimeview, 151 MimeInfo *partinfo); 152 void mimeview_destroy (MimeView *mimeview); 153 void mimeview_update (MimeView *mimeview); 154 void mimeview_clear (MimeView *mimeview); 155 156 MimeInfo *mimeview_get_selected_part (MimeView *mimeview); 157 158 gboolean mimeview_pass_key_press_event (MimeView *mimeview, 159 GdkEventKey *event); 160 161 void mimeview_register_viewer_factory (MimeViewerFactory *factory); 162 void mimeview_unregister_viewer_factory (MimeViewerFactory *factory); 163 void mimeview_handle_cmd (MimeView *mimeview, 164 const gchar *cmd, 165 GdkEventButton *event, 166 gpointer data); 167 void mimeview_select_mimepart_icon (MimeView *mimeview, 168 MimeInfo *partinfo); 169 gboolean mimeview_scroll_page (MimeView *mimeview, 170 gboolean up); 171 void mimeview_scroll_one_line (MimeView *mimeview, 172 gboolean up); 173 gint mimeview_get_selected_part_num (MimeView *mimeview); 174 void mimeview_select_part_num (MimeView *mimeview, 175 gint i); 176 gboolean mimeview_has_viewer_for_content_type 177 (MimeView *mimeview, 178 const gchar *content_type); 179 gboolean mimeview_tree_is_empty (MimeView *mimeview); 180 void mimeview_save_as (MimeView *mimeview); 181 void mimeview_display_as_text (MimeView *mimeview); 182 void mimeview_launch (MimeView *mimeview, 183 MimeInfo *partinfo); 184 #ifndef G_OS_WIN32 185 void mimeview_open_with (MimeView *mimeview); 186 #endif 187 void mimeview_check_signature(MimeView *mimeview); 188 void mimeview_select_next_part(MimeView *mimeview); 189 void mimeview_select_prev_part(MimeView *mimeview); 190 191 192 #ifdef __cplusplus 193 } 194 #endif /* __cplusplus */ 195 196 #endif /* __MIMEVIEW_H__ */ 197